From 43ca431e7bc116dda8dc156893e0af7f9af7581c Mon Sep 17 00:00:00 2001 From: tammy-baylis-swi Date: Thu, 11 Dec 2025 15:14:35 -0800 Subject: [PATCH 1/4] Rm unused param --- solarwinds_apm/apm_config.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/solarwinds_apm/apm_config.py b/solarwinds_apm/apm_config.py index 3f62cd807..37adbd5d4 100644 --- a/solarwinds_apm/apm_config.py +++ b/solarwinds_apm/apm_config.py @@ -185,7 +185,6 @@ def calculate_collector( @classmethod def calculate_metrics_enabled( cls, - is_legacy: bool = False, cnf_dict: dict = None, ) -> bool: """Return if export of instrumentor metrics telemetry enabled. @@ -197,7 +196,6 @@ def calculate_metrics_enabled( to get_cnf_dict() is made for a fresh read. Parameters: - is_legacy (bool): Legacy flag (currently unused). Defaults to False. cnf_dict (dict): Optional configuration dictionary. Defaults to None. Returns: From 2811aef6794b45b26aa45e181a0407838760ff38 Mon Sep 17 00:00:00 2001 From: tammy-baylis-swi Date: Thu, 11 Dec 2025 15:14:45 -0800 Subject: [PATCH 2/4] Rename test mocks to stop warnings --- tests/unit/test_oboe/test_oboe_sampler.py | 58 +++++++++++------------ tests/unit/test_oboe/test_sampler.py | 22 ++++----- 2 files changed, 40 insertions(+), 40 deletions(-) diff --git a/tests/unit/test_oboe/test_oboe_sampler.py b/tests/unit/test_oboe/test_oboe_sampler.py index 105fe0ff2..4d7d754fd 100644 --- a/tests/unit/test_oboe/test_oboe_sampler.py +++ b/tests/unit/test_oboe/test_oboe_sampler.py @@ -90,7 +90,7 @@ def check_counters(sampler, counter_names): assert counters == set() -class TestSamplerOptions: +class MockSamplerOptions: def __init__(self, settings: Settings | None = None, local_settings: LocalSettings | None = None, request_headers: RequestHeaders | None = None): self._settings = settings @@ -110,8 +110,8 @@ def request_headers(self) -> RequestHeaders | None: return self._request_headers -class TestSampler(OboeSampler): - def __init__(self, options: TestSamplerOptions): +class MockSampler(OboeSampler): + def __init__(self, options: MockSamplerOptions): self._metric_reader = InMemoryMetricReader() meter_provider = MeterProvider( metric_readers=[self._metric_reader], @@ -205,7 +205,7 @@ def __str__(self): class TestInvalidXTraceOptionsSignature: def test_rejects_missing_signature_key(self): - sampler = TestSampler(TestSamplerOptions( + sampler = MockSampler(MockSamplerOptions( settings=Settings( sample_rate=1_000_000, sample_source=SampleSource.REMOTE, @@ -229,7 +229,7 @@ def test_rejects_missing_signature_key(self): check_counters(sampler, ["trace.service.request_count"]) def test_rejects_bad_timestamp(self): - sampler = TestSampler(TestSamplerOptions( + sampler = MockSampler(MockSamplerOptions( settings=Settings( sample_rate=1_000_000, sample_source=SampleSource.REMOTE, @@ -254,7 +254,7 @@ def test_rejects_bad_timestamp(self): check_counters(sampler, ["trace.service.request_count"]) def test_rejects_bad_signature(self): - sampler = TestSampler(TestSamplerOptions( + sampler = MockSampler(MockSamplerOptions( settings=Settings( sample_rate=1_000_000, sample_source=SampleSource.REMOTE, @@ -281,7 +281,7 @@ def test_rejects_bad_signature(self): class TestMissingSettings: def test_does_not_sample(self): - sampler = TestSampler(TestSamplerOptions( + sampler = MockSampler(MockSamplerOptions( settings=None, local_settings=LocalSettings(trigger_mode=False, tracing_mode=None), request_headers=make_request_headers(MakeRequestHeaders()) @@ -293,7 +293,7 @@ def test_does_not_sample(self): check_counters(sampler, ["trace.service.request_count"]) def test_expires_after_ttl(self): - sampler = TestSampler(TestSamplerOptions( + sampler = MockSampler(MockSamplerOptions( settings=Settings( sample_rate=0, sample_source=SampleSource.LOCAL_DEFAULT, @@ -313,7 +313,7 @@ def test_expires_after_ttl(self): check_counters(sampler, ["trace.service.request_count"]) def test_respects_x_trace_options_keys_and_values(self): - sampler = TestSampler(TestSamplerOptions( + sampler = MockSampler(MockSamplerOptions( settings=None, local_settings=LocalSettings(trigger_mode=False, tracing_mode=None), request_headers=make_request_headers( @@ -325,7 +325,7 @@ def test_respects_x_trace_options_keys_and_values(self): assert "trigger-trace=not-requested" in sampler.response_headers.x_trace_options_response def test_ignores_trigger_trace(self): - sampler = TestSampler(TestSamplerOptions( + sampler = MockSampler(MockSamplerOptions( settings=None, local_settings=LocalSettings(trigger_mode=True, tracing_mode=None), request_headers=make_request_headers( @@ -339,7 +339,7 @@ def test_ignores_trigger_trace(self): class TestEntrySpan: def test_sw_w3c_tracestate_with_x_trace_options_response(self): - sampler = TestSampler(TestSamplerOptions( + sampler = MockSampler(MockSamplerOptions( settings=Settings( sample_rate=0, sample_source=SampleSource.LOCAL_DEFAULT, @@ -360,7 +360,7 @@ def test_sw_w3c_tracestate_with_x_trace_options_response(self): assert INTL_SWO_X_OPTIONS_RESPONSE_KEY not in sample.attributes.get(TRACESTATE_CAPTURE_ATTRIBUTE) def test_sw_w3c_tracestate_without_x_trace_options_response(self): - sampler = TestSampler(TestSamplerOptions( + sampler = MockSampler(MockSamplerOptions( settings=Settings( sample_rate=0, sample_source=SampleSource.LOCAL_DEFAULT, @@ -383,7 +383,7 @@ def test_sw_w3c_tracestate_without_x_trace_options_response(self): class TestEntrySpanWithValidSwContextXTraceOptions: def test_respects_keys_and_values(self): - sampler = TestSampler(TestSamplerOptions( + sampler = MockSampler(MockSamplerOptions( settings=Settings( sample_rate=0, sample_source=SampleSource.LOCAL_DEFAULT, @@ -405,7 +405,7 @@ def test_respects_keys_and_values(self): assert "trigger-trace=not-requested" in sampler.response_headers.x_trace_options_response def test_ignores_trigger_trace(self): - sampler = TestSampler(TestSamplerOptions( + sampler = MockSampler(MockSamplerOptions( settings=Settings( sample_rate=0, sample_source=SampleSource.LOCAL_DEFAULT, @@ -430,7 +430,7 @@ def test_ignores_trigger_trace(self): class TestEntrySpanWithValidSwContextSampleThroughAlwaysSet: @pytest.fixture() def sample_through_always_set(self): - return TestSampler(TestSamplerOptions( + return MockSampler(MockSamplerOptions( settings=Settings( sample_rate=0, sample_source=SampleSource.LOCAL_DEFAULT, @@ -489,7 +489,7 @@ def test_respects_sw_not_sampled_over_w3c_sampled(self, sample_through_always_se class TestEntrySpanWithValidSwContextSampleThroughAlwaysUnset: def test_records_but_does_not_sample_when_SAMPLE_START_set(self): - sampler = TestSampler(TestSamplerOptions( + sampler = MockSampler(MockSamplerOptions( settings=Settings( sample_rate=0, sample_source=SampleSource.LOCAL_DEFAULT, @@ -510,7 +510,7 @@ def test_records_but_does_not_sample_when_SAMPLE_START_set(self): check_counters(sampler, ["trace.service.request_count"]) def test_does_not_record_or_sample_when_SAMPLE_START_unset(self): - sampler = TestSampler(TestSamplerOptions( + sampler = MockSampler(MockSamplerOptions( settings=Settings( sample_rate=0, sample_source=SampleSource.LOCAL_DEFAULT, @@ -533,7 +533,7 @@ def test_does_not_record_or_sample_when_SAMPLE_START_unset(self): class TestTriggerTraceRequestedTriggeredTraceSetUnsigned: def test_records_and_samples_when_there_is_capacity(self): - sampler = TestSampler(TestSamplerOptions( + sampler = MockSampler(MockSamplerOptions( settings=Settings( sample_rate=0, sample_source=SampleSource.LOCAL_DEFAULT, @@ -564,7 +564,7 @@ def test_records_and_samples_when_there_is_capacity(self): "trace.service.triggered_trace_count"]) def test_records_but_does_not_sample_when_there_is_no_capacity(self): - sampler = TestSampler(TestSamplerOptions( + sampler = MockSampler(MockSamplerOptions( settings=Settings( sample_rate=0, sample_source=SampleSource.LOCAL_DEFAULT, @@ -596,7 +596,7 @@ def test_records_but_does_not_sample_when_there_is_no_capacity(self): class TestTriggerTraceRequestedTriggeredTraceSetSigned: def test_records_and_samples_when_there_is_capacity(self): - sampler = TestSampler(TestSamplerOptions( + sampler = MockSampler(MockSamplerOptions( settings=Settings( sample_rate=0, sample_source=SampleSource.LOCAL_DEFAULT, @@ -629,7 +629,7 @@ def test_records_and_samples_when_there_is_capacity(self): "trace.service.triggered_trace_count"]) def test_records_but_does_not_sample_when_there_is_no_capacity(self): - sampler = TestSampler(TestSamplerOptions( + sampler = MockSampler(MockSamplerOptions( settings=Settings( sample_rate=0, sample_source=SampleSource.LOCAL_DEFAULT, @@ -662,7 +662,7 @@ def test_records_but_does_not_sample_when_there_is_no_capacity(self): class TestTriggerTraceRequestedTriggeredTraceUnset: def test_record_but_does_not_sample_when_TRIGGERED_TRACE_unset(self): - sampler = TestSampler(TestSamplerOptions( + sampler = MockSampler(MockSamplerOptions( settings=Settings( sample_rate=0, sample_source=SampleSource.LOCAL_DEFAULT, @@ -689,7 +689,7 @@ def test_record_but_does_not_sample_when_TRIGGERED_TRACE_unset(self): class TestTriggerTraceRequestedDiceRoll: def test_respects_x_trace_options_keys_and_values(self): - sampler = TestSampler(TestSamplerOptions( + sampler = MockSampler(MockSamplerOptions( settings=Settings( sample_rate=0, sample_source=SampleSource.LOCAL_DEFAULT, @@ -711,7 +711,7 @@ def test_respects_x_trace_options_keys_and_values(self): assert "trigger-trace=not-requested" in sampler.response_headers.x_trace_options_response def test_records_and_samples_when_dice_success_and_sufficient_capacity(self): - sampler = TestSampler(TestSamplerOptions( + sampler = MockSampler(MockSamplerOptions( settings=Settings( sample_rate=1_000_000, sample_source=SampleSource.REMOTE, @@ -739,7 +739,7 @@ def test_records_and_samples_when_dice_success_and_sufficient_capacity(self): ["trace.service.request_count", "trace.service.samplecount", "trace.service.tracecount"]) def test_records_but_does_not_sample_when_dice_success_but_insufficient_capacity(self): - sampler = TestSampler(TestSamplerOptions( + sampler = MockSampler(MockSamplerOptions( settings=Settings( sample_rate=1_000_000, sample_source=SampleSource.REMOTE, @@ -767,7 +767,7 @@ def test_records_but_does_not_sample_when_dice_success_but_insufficient_capacity "trace.service.tokenbucket_exhaustion_count"]) def test_records_but_does_not_sample_when_dice_failure(self): - sampler = TestSampler(TestSamplerOptions( + sampler = MockSampler(MockSamplerOptions( settings=Settings( sample_rate=0, sample_source=SampleSource.LOCAL_DEFAULT, @@ -796,7 +796,7 @@ def test_records_but_does_not_sample_when_dice_failure(self): class TestTriggerTraceRequestedSampleStartUnset: def test_ignores_trigger_trace(self): - sampler = TestSampler(TestSamplerOptions( + sampler = MockSampler(MockSamplerOptions( settings=Settings( sample_rate=0, sample_source=SampleSource.LOCAL_DEFAULT, @@ -818,7 +818,7 @@ def test_ignores_trigger_trace(self): assert "ignored=invalid-key" in sampler.response_headers.x_trace_options_response def test_records_when_SAMPLE_THROUGH_ALWAYS_set(self): - sampler = TestSampler(TestSamplerOptions( + sampler = MockSampler(MockSamplerOptions( settings=Settings( sample_rate=0, sample_source=SampleSource.LOCAL_DEFAULT, @@ -839,7 +839,7 @@ def test_records_when_SAMPLE_THROUGH_ALWAYS_set(self): check_counters(sampler, ["trace.service.request_count"]) def test_does_not_record_when_SAMPLE_THROUGH_ALWAYS_unset(self): - sampler = TestSampler(TestSamplerOptions( + sampler = MockSampler(MockSamplerOptions( settings=Settings( sample_rate=0, sample_source=SampleSource.LOCAL_DEFAULT, diff --git a/tests/unit/test_oboe/test_sampler.py b/tests/unit/test_oboe/test_sampler.py index ee42ce409..ee71fdc23 100644 --- a/tests/unit/test_oboe/test_sampler.py +++ b/tests/unit/test_oboe/test_sampler.py @@ -28,7 +28,7 @@ from solarwinds_apm.oboe.settings import Settings, SampleSource, Flags, BucketType, BucketSettings -class TestSampler(Sampler): +class MockSampler(Sampler): def __init__(self, meter_provider: MeterProvider, config: Configuration, initial: Any): super().__init__(meter_provider=meter_provider, config=config, initial=initial) @@ -178,7 +178,7 @@ def test_respects_enabled_settings_when_no_config_or_transaction_settings(self): metric_readers=[InMemoryMetricReader()], exemplar_filter=AlwaysOnExemplarFilter() ) - sampler = TestSampler( + sampler = MockSampler( meter_provider=meter_provider, config=options(tracing=None, trigger_trace=False, transaction_settings=[]), initial=settings(enabled=True, signature_key=None) @@ -204,7 +204,7 @@ def test_respects_disabled_settings_when_no_config_or_transaction_settings(self) metric_readers=[InMemoryMetricReader()], exemplar_filter=AlwaysOnExemplarFilter() ) - sampler = TestSampler( + sampler = MockSampler( meter_provider=meter_provider, config=options(tracing=None, trigger_trace=True, transaction_settings=[]), initial=settings(enabled=False, signature_key=None) @@ -224,7 +224,7 @@ def test_respects_enabled_config_when_no_transaction_settings(self): metric_readers=[InMemoryMetricReader()], exemplar_filter=AlwaysOnExemplarFilter() ) - sampler = TestSampler( + sampler = MockSampler( meter_provider=meter_provider, config=options(tracing=True, trigger_trace=True, transaction_settings=[]), initial=settings(enabled=False, signature_key=None) @@ -250,7 +250,7 @@ def test_respects_disabled_config_when_no_transaction_settings(self): metric_readers=[InMemoryMetricReader()], exemplar_filter=AlwaysOnExemplarFilter() ) - sampler = TestSampler( + sampler = MockSampler( meter_provider=meter_provider, config=options(tracing=False, trigger_trace=False, transaction_settings=[]), initial=settings(enabled=True, signature_key=None) @@ -270,7 +270,7 @@ def test_respects_enabled_matching_transaction_setting(self): metric_readers=[InMemoryMetricReader()], exemplar_filter=AlwaysOnExemplarFilter() ) - sampler = TestSampler( + sampler = MockSampler( meter_provider=meter_provider, config=options(tracing=False, trigger_trace=False, transaction_settings=[TransactionSetting(tracing=True, matcher=lambda s: True)]), @@ -296,7 +296,7 @@ def test_respects_disabled_matching_transaction_setting(self): metric_readers=[InMemoryMetricReader()], exemplar_filter=AlwaysOnExemplarFilter() ) - sampler = TestSampler( + sampler = MockSampler( meter_provider=meter_provider, config=options(tracing=True, trigger_trace=True, transaction_settings=[TransactionSetting(tracing=False, matcher=lambda s: True)]), @@ -316,7 +316,7 @@ def test_respects_first_matching_transaction_setting(self): metric_readers=[InMemoryMetricReader()], exemplar_filter=AlwaysOnExemplarFilter() ) - sampler = TestSampler( + sampler = MockSampler( meter_provider=meter_provider, config=options(tracing=False, trigger_trace=False, transaction_settings=[ TransactionSetting(tracing=True, matcher=lambda s: True), @@ -344,7 +344,7 @@ def test_matches_non_http_spans(self): metric_readers=[InMemoryMetricReader()], exemplar_filter=AlwaysOnExemplarFilter() ) - sampler = TestSampler( + sampler = MockSampler( meter_provider=meter_provider, config=options(tracing=False, trigger_trace=False, transaction_settings=[ TransactionSetting(tracing=True, matcher=lambda s: s == "CLIENT:test"), @@ -371,7 +371,7 @@ def test_matches_http_spans(self): metric_readers=[InMemoryMetricReader()], exemplar_filter=AlwaysOnExemplarFilter() ) - sampler = TestSampler( + sampler = MockSampler( meter_provider=meter_provider, config=options(tracing=False, trigger_trace=False, transaction_settings=[ TransactionSetting(tracing=True, matcher=lambda s: s == "http://localhost/test"), @@ -401,7 +401,7 @@ def test_matches_deprecated_http_spans(self): metric_readers=[InMemoryMetricReader()], exemplar_filter=AlwaysOnExemplarFilter() ) - sampler = TestSampler( + sampler = MockSampler( meter_provider=meter_provider, config=options(tracing=False, trigger_trace=False, transaction_settings=[ TransactionSetting(tracing=True, matcher=lambda s: s == "http://localhost/test"), From dfeb951b5e6766de16bba62bbda2e22cbf750766 Mon Sep 17 00:00:00 2001 From: tammy-baylis-swi Date: Thu, 11 Dec 2025 15:35:34 -0800 Subject: [PATCH 3/4] Debug windows install test --- .../docker/install/windows/_helper_check_sdist.ps1 | 12 +++++++++++- .../docker/install/windows/_helper_check_wheel.ps1 | 14 ++++++++++++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/tests/docker/install/windows/_helper_check_sdist.ps1 b/tests/docker/install/windows/_helper_check_sdist.ps1 index 3bc60c650..433497b8b 100644 --- a/tests/docker/install/windows/_helper_check_sdist.ps1 +++ b/tests/docker/install/windows/_helper_check_sdist.ps1 @@ -31,7 +31,17 @@ function Get-Sdist { $version_file = Join-Path $env:APM_ROOT "solarwinds_apm\version.py" $version_content = Get-Content $version_file if ($version_content -match '__version__ = "(.*)"') { - $env:SOLARWINDS_APM_VERSION = $matches[1] + if ($matches -and $matches.Count -gt 1) { + $env:SOLARWINDS_APM_VERSION = $matches[1] + } + else { + Write-Error "FAILED: Version regex matched but did not capture expected group. Matches: $matches" + exit 1 + } + } + else { + Write-Error "FAILED: Could not extract version from $version_file. File content: $version_content" + exit 1 } Write-Host "No SOLARWINDS_APM_VERSION provided, thus testing source code version ($env:SOLARWINDS_APM_VERSION)" } diff --git a/tests/docker/install/windows/_helper_check_wheel.ps1 b/tests/docker/install/windows/_helper_check_wheel.ps1 index 2e7b51e5f..acfd00295 100644 --- a/tests/docker/install/windows/_helper_check_wheel.ps1 +++ b/tests/docker/install/windows/_helper_check_wheel.ps1 @@ -39,9 +39,19 @@ function Get-Wheel { $version_file = Join-Path $env:APM_ROOT "solarwinds_apm\version.py" $version_content = Get-Content $version_file if ($version_content -match '__version__ = "(.*)"') { - $env:SOLARWINDS_APM_VERSION = $matches[1] + if ($matches -and $matches.Count -gt 1) { + $env:SOLARWINDS_APM_VERSION = $matches[1] + } + else { + Write-Error "FAILED: Version regex matched but did not capture expected group. Matches: $matches" + exit 1 + } } - Write-Host "No SOLARWINDS_APM_VERSION provided, thus testing source code version" + else { + Write-Error "FAILED: Could not extract version from $version_file. File content: $version_content" + exit 1 + } + Write-Host "No SOLARWINDS_APM_VERSION provided, thus testing source code version ($env:SOLARWINDS_APM_VERSION)" } $tested_wheel = Get-ChildItem -Path "$env:APM_ROOT\dist" -Filter "solarwinds_apm-$env:SOLARWINDS_APM_VERSION-py3-none-any.whl" From 925fe5788d169a7b7d907b63ad7980a6a2376eb4 Mon Sep 17 00:00:00 2001 From: tammy-baylis-swi Date: Thu, 11 Dec 2025 15:38:00 -0800 Subject: [PATCH 4/4] Change Get-Content test call --- tests/docker/install/windows/_helper_check_sdist.ps1 | 12 +++--------- tests/docker/install/windows/_helper_check_wheel.ps1 | 12 +++--------- 2 files changed, 6 insertions(+), 18 deletions(-) diff --git a/tests/docker/install/windows/_helper_check_sdist.ps1 b/tests/docker/install/windows/_helper_check_sdist.ps1 index 433497b8b..5259600d1 100644 --- a/tests/docker/install/windows/_helper_check_sdist.ps1 +++ b/tests/docker/install/windows/_helper_check_sdist.ps1 @@ -29,15 +29,9 @@ function Get-Sdist { if (-not $env:SOLARWINDS_APM_VERSION) { # no SOLARWINDS_APM_VERSION provided, thus test version of current source code $version_file = Join-Path $env:APM_ROOT "solarwinds_apm\version.py" - $version_content = Get-Content $version_file - if ($version_content -match '__version__ = "(.*)"') { - if ($matches -and $matches.Count -gt 1) { - $env:SOLARWINDS_APM_VERSION = $matches[1] - } - else { - Write-Error "FAILED: Version regex matched but did not capture expected group. Matches: $matches" - exit 1 - } + $version_content = Get-Content $version_file -Raw + if ($version_content -match '__version__ = "([^"]+)"') { + $env:SOLARWINDS_APM_VERSION = $matches[1] } else { Write-Error "FAILED: Could not extract version from $version_file. File content: $version_content" diff --git a/tests/docker/install/windows/_helper_check_wheel.ps1 b/tests/docker/install/windows/_helper_check_wheel.ps1 index acfd00295..ccbf6ad25 100644 --- a/tests/docker/install/windows/_helper_check_wheel.ps1 +++ b/tests/docker/install/windows/_helper_check_wheel.ps1 @@ -37,15 +37,9 @@ function Get-Wheel { if (-not $env:SOLARWINDS_APM_VERSION) { # no SOLARWINDS_APM_VERSION provided, thus test version of current source code $version_file = Join-Path $env:APM_ROOT "solarwinds_apm\version.py" - $version_content = Get-Content $version_file - if ($version_content -match '__version__ = "(.*)"') { - if ($matches -and $matches.Count -gt 1) { - $env:SOLARWINDS_APM_VERSION = $matches[1] - } - else { - Write-Error "FAILED: Version regex matched but did not capture expected group. Matches: $matches" - exit 1 - } + $version_content = Get-Content $version_file -Raw + if ($version_content -match '__version__ = "([^"]+)"') { + $env:SOLARWINDS_APM_VERSION = $matches[1] } else { Write-Error "FAILED: Could not extract version from $version_file. File content: $version_content"