diff --git a/tests/unit/test_configurator/conftest.py b/tests/unit/test_configurator/conftest.py index 10f719bd..68363108 100644 --- a/tests/unit/test_configurator/conftest.py +++ b/tests/unit/test_configurator/conftest.py @@ -251,6 +251,20 @@ def mock_apmconfig_enabled_reporter_settings(mocker): ) return mock_apmconfig + +@pytest.fixture(name="mock_apmconfig_experimental_otelcol_init") +def mock_apmconfig_experimental_otelcol_init(mocker): + mock_apmconfig = mocker.patch( + "solarwinds_apm.configurator.SolarWindsApmConfig" + ) + mock_apmconfig.return_value = { + "experimental": + { + "otel_collector": True + } + } + return mock_apmconfig + # ================================================================== # Configurator APM Python extension mocks # ================================================================== @@ -288,7 +302,7 @@ def mock_extension_status_code_invalid_protocol(mocker): return get_extension_mocks(mocker, 2) # ================================================================== -# Configurator APM Python other mocks +# Configurator APM Python configurator mocks # ================================================================== def add_fw_versions(input_dict): @@ -302,6 +316,90 @@ def mock_fw_versions(mocker): side_effect=add_fw_versions ) +@pytest.fixture(name="mock_config_inbound_processor") +def mock_config_inbound_processor(mocker): + return mocker.patch( + "solarwinds_apm.configurator.SolarWindsConfigurator._configure_inbound_metrics_span_processor" + ) + +@pytest.fixture(name="mock_config_otlp_processor") +def mock_config_otlp_processor(mocker): + return mocker.patch( + "solarwinds_apm.configurator.SolarWindsConfigurator._configure_otlp_metrics_span_processor" + ) + +@pytest.fixture(name="mock_config_traces_exp") +def mock_config_traces_exp(mocker): + return mocker.patch( + "solarwinds_apm.configurator.SolarWindsConfigurator._configure_traces_exporter" + ) + +@pytest.fixture(name="mock_config_metrics_exp") +def mock_config_metrics_exp(mocker): + return mocker.patch( + "solarwinds_apm.configurator.SolarWindsConfigurator._configure_metrics_exporter" + ) + +@pytest.fixture(name="mock_config_propagator") +def mock_config_propagator(mocker): + return mocker.patch( + "solarwinds_apm.configurator.SolarWindsConfigurator._configure_propagator" + ) + +@pytest.fixture(name="mock_config_response_propagator") +def mock_config_response_propagator(mocker): + return mocker.patch( + "solarwinds_apm.configurator.SolarWindsConfigurator._configure_response_propagator" + ) + +@pytest.fixture(name="mock_init_sw_reporter") +def mock_init_sw_reporter(mocker): + return mocker.patch( + "solarwinds_apm.configurator.SolarWindsConfigurator._initialize_solarwinds_reporter" + ) + +@pytest.fixture(name="mock_config_otel_components") +def mock_config_otel_components(mocker): + return mocker.patch( + "solarwinds_apm.configurator.SolarWindsConfigurator._configure_otel_components" + ) + +@pytest.fixture(name="mock_report_init") +def mock_report_init(mocker): + return mocker.patch( + "solarwinds_apm.configurator.SolarWindsConfigurator._report_init_event" + ) + + +@pytest.fixture(name="mock_txn_name_manager_init") +def mock_txn_name_manager_init(mocker): + return mocker.patch( + "solarwinds_apm.configurator.SolarWindsTxnNameManager" + ) + +@pytest.fixture(name="mock_fwkv_manager_init") +def mock_fwkv_manager_init(mocker): + return mocker.patch( + "solarwinds_apm.configurator.SolarWindsFrameworkKvManager" + ) + +@pytest.fixture(name="mock_meter_manager_init") +def mock_meter_manager_init(mocker): + return mocker.patch( + "solarwinds_apm.configurator.SolarWindsMeterManager" + ) + +@pytest.fixture(name="mock_noop_meter_manager_init") +def mock_noop_meter_manager_init(mocker): + return mocker.patch( + "solarwinds_apm.configurator.NoopMeterManager" + ) + + +# ================================================================== +# Configurator APM Python other mocks +# ================================================================== + @pytest.fixture(name="mock_apm_version") def mock_apm_version(mocker): return mocker.patch( diff --git a/tests/unit/test_configurator/test_configurator_configure.py b/tests/unit/test_configurator/test_configurator_configure.py new file mode 100644 index 00000000..4abbf857 --- /dev/null +++ b/tests/unit/test_configurator/test_configurator_configure.py @@ -0,0 +1,58 @@ +# © 2023 SolarWinds Worldwide, LLC. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at:http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +from solarwinds_apm import configurator + +class TestConfiguratorConfigure: + def test_configurator_configure( + mocker, + mock_txn_name_manager_init, + mock_fwkv_manager_init, + mock_apmconfig_enabled, + mock_meter_manager_init, + mock_noop_meter_manager_init, + mock_init_sw_reporter, + mock_config_otel_components, + mock_report_init, + ): + test_configurator = configurator.SolarWindsConfigurator() + test_configurator._configure() + + mock_txn_name_manager_init.assert_called_once() + mock_fwkv_manager_init.assert_called_once() + mock_apmconfig_enabled.assert_called_once() + + mock_noop_meter_manager_init.assert_called_once() + mock_meter_manager_init.assert_not_called() + + mock_init_sw_reporter.assert_called_once() + mock_config_otel_components.assert_called_once() + mock_report_init.assert_called_once() + + def test_configurator_configure_experimental( + mocker, + mock_txn_name_manager_init, + mock_fwkv_manager_init, + mock_apmconfig_experimental_otelcol_init, + mock_meter_manager_init, + mock_noop_meter_manager_init, + mock_init_sw_reporter, + mock_config_otel_components, + mock_report_init, + ): + test_configurator = configurator.SolarWindsConfigurator() + test_configurator._configure() + + mock_txn_name_manager_init.assert_called_once() + mock_fwkv_manager_init.assert_called_once() + mock_apmconfig_experimental_otelcol_init.assert_called_once() + + mock_meter_manager_init.assert_called_once() + mock_noop_meter_manager_init.assert_not_called() + + mock_init_sw_reporter.assert_called_once() + mock_config_otel_components.assert_called_once() + mock_report_init.assert_called_once() diff --git a/tests/unit/test_configurator/test_configurator_configure_otel.py b/tests/unit/test_configurator/test_configurator_configure_otel.py new file mode 100644 index 00000000..225c224a --- /dev/null +++ b/tests/unit/test_configurator/test_configurator_configure_otel.py @@ -0,0 +1,82 @@ +# © 2023 SolarWinds Worldwide, LLC. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at:http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + +from solarwinds_apm import configurator + +class TestConfiguratorConfigureOtelComponents: + def test_configure_otel_components_agent_enabled( + mocker, + mock_txn_name_manager, + mock_fwkv_manager, + mock_meter_manager, + mock_extension, + mock_apmconfig_enabled, + + mock_config_inbound_processor, + mock_config_otlp_processor, + mock_config_traces_exp, + mock_config_metrics_exp, + mock_config_propagator, + mock_config_response_propagator, + ): + test_configurator = configurator.SolarWindsConfigurator() + test_configurator._configure_otel_components( + mock_txn_name_manager, + mock_fwkv_manager, + mock_apmconfig_enabled, + mock_extension.Reporter, + mock_meter_manager, + ) + + mock_config_inbound_processor.assert_called_once_with( + mock_txn_name_manager, + mock_apmconfig_enabled, + ) + mock_config_otlp_processor.assert_called_once_with( + mock_txn_name_manager, + mock_apmconfig_enabled, + mock_meter_manager, + ) + mock_config_traces_exp.assert_called_once_with( + mock_extension.Reporter, + mock_txn_name_manager, + mock_fwkv_manager, + mock_apmconfig_enabled, + ) + mock_config_metrics_exp.assert_called_once_with(mock_apmconfig_enabled) + mock_config_propagator.assert_called_once() + mock_config_response_propagator.assert_called_once() + + def test_configure_otel_components_agent_disabled( + mocker, + mock_txn_name_manager, + mock_fwkv_manager, + mock_meter_manager, + mock_extension, + mock_apmconfig_disabled, + + mock_config_inbound_processor, + mock_config_otlp_processor, + mock_config_traces_exp, + mock_config_metrics_exp, + mock_config_propagator, + mock_config_response_propagator, + ): + test_configurator = configurator.SolarWindsConfigurator() + test_configurator._configure_otel_components( + mock_txn_name_manager, + mock_fwkv_manager, + mock_apmconfig_disabled, + mock_extension.Reporter, + mock_meter_manager, + ) + + mock_config_inbound_processor.assert_not_called() + mock_config_otlp_processor.assert_not_called() + mock_config_traces_exp.assert_not_called() + mock_config_metrics_exp.assert_not_called() + mock_config_propagator.assert_not_called() + mock_config_response_propagator.assert_not_called() \ No newline at end of file