Skip to content

Commit b9b5e2e

Browse files
[Infra] Add helper for managing test env vars (#3412)
1 parent 45209ac commit b9b5e2e

21 files changed

+329
-350
lines changed

opentelemetry-dotnet-contrib.sln

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{824BD1DE
5757
build\Common.props = build\Common.props
5858
build\Common.targets = build\Common.targets
5959
build\debug.snk = build\debug.snk
60+
build\docker-compose.net10.0.yml = build\docker-compose.net10.0.yml
6061
build\docker-compose.net8.0.yml = build\docker-compose.net8.0.yml
6162
build\docker-compose.net9.0.yml = build\docker-compose.net9.0.yml
62-
build\docker-compose.net10.0.yml = build\docker-compose.net10.0.yml
6363
build\opentelemetry-icon-color.png = build\opentelemetry-icon-color.png
6464
build\OpenTelemetryContrib.prod.ruleset = build\OpenTelemetryContrib.prod.ruleset
6565
build\OpenTelemetryContrib.test.ruleset = build\OpenTelemetryContrib.test.ruleset
@@ -367,6 +367,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{70CA77
367367
test\Shared\ConsoleCommand.cs = test\Shared\ConsoleCommand.cs
368368
test\Shared\CustomTextMapPropagator.cs = test\Shared\CustomTextMapPropagator.cs
369369
test\Shared\EnabledOnDockerPlatformTheoryAttribute.cs = test\Shared\EnabledOnDockerPlatformTheoryAttribute.cs
370+
test\Shared\EnvironmentVariableScope.cs = test\Shared\EnvironmentVariableScope.cs
370371
test\Shared\EventSourceTestHelper.cs = test\Shared\EventSourceTestHelper.cs
371372
test\Shared\InMemoryEventListener.cs = test\Shared\InMemoryEventListener.cs
372373
test\Shared\PerfTracepointListener.cs = test\Shared\PerfTracepointListener.cs

test/OpenTelemetry.Contrib.Shared.Tests/DatabaseSemanticConventionHelperTests.cs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,21 +52,15 @@ public void VerifyFlags()
5252
[MemberData(nameof(TestCases))]
5353
public void VerifyGetSemanticConventionOptIn_UsingEnvironmentVariable(string input, string expectedValue)
5454
{
55-
try
55+
using (EnvironmentVariableScope.Create(SemanticConventionOptInKeyName, input))
5656
{
57-
Environment.SetEnvironmentVariable(SemanticConventionOptInKeyName, input);
58-
5957
#if NET
6058
var expected = Enum.Parse<DatabaseSemanticConvention>(expectedValue);
6159
#else
6260
var expected = Enum.Parse(typeof(DatabaseSemanticConvention), expectedValue);
6361
#endif
6462
Assert.Equal(expected, GetSemanticConventionOptIn(new ConfigurationBuilder().AddEnvironmentVariables().Build()));
6563
}
66-
finally
67-
{
68-
Environment.SetEnvironmentVariable(SemanticConventionOptInKeyName, null);
69-
}
7064
}
7165

7266
[Theory]

test/OpenTelemetry.Contrib.Shared.Tests/OpenTelemetry.Contrib.Shared.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
<Compile Include="$(RepoRoot)\src\Shared\SqlParameterProcessor.cs" Link="Includes\SqlParameterProcessor.cs" />
2929
<Compile Include="$(RepoRoot)\src\Shared\SqlProcessor.cs" Link="Includes\SqlProcessor.cs" />
3030
<Compile Include="$(RepoRoot)\src\Shared\SqlStatementInfo.cs" Link="Includes\SqlStatementInfo.cs" />
31+
<Compile Include="$(RepoRoot)\test\Shared\EnvironmentVariableScope.cs" Link="Includes\EnvironmentVariableScope.cs" />
3132
</ItemGroup>
3233

3334
<ItemGroup>

test/OpenTelemetry.Contrib.Shared.Tests/RequestDataHelperTests.cs

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
namespace OpenTelemetry.Internal.Tests;
77

8-
public class RequestDataHelperTests : IDisposable
8+
public class RequestDataHelperTests
99
{
1010
public static IEnumerable<object[]> MappingVersionProtocolToVersionData =>
1111
[
@@ -50,19 +50,23 @@ public void MethodMappingWorksForKnownMethods(string method, string expected)
5050
[InlineData("invalid", "_OTHER")]
5151
public void MethodMappingWorksForEnvironmentVariables(string method, string expected)
5252
{
53-
Environment.SetEnvironmentVariable("OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS", "GET,POST");
54-
var requestHelper = new RequestDataHelper(configureByHttpKnownMethodsEnvironmentalVariable: true);
55-
var actual = requestHelper.GetNormalizedHttpMethod(method);
56-
Assert.Equal(expected, actual);
53+
using (EnvironmentVariableScope.Create("OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS", "GET,POST"))
54+
{
55+
var requestHelper = new RequestDataHelper(configureByHttpKnownMethodsEnvironmentalVariable: true);
56+
var actual = requestHelper.GetNormalizedHttpMethod(method);
57+
Assert.Equal(expected, actual);
58+
}
5759
}
5860

5961
[Fact]
6062
public void MethodMappingWorksIfEnvironmentalVariableConfigurationIsDisabled()
6163
{
62-
Environment.SetEnvironmentVariable("OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS", "GET,POST");
63-
var requestHelper = new RequestDataHelper(configureByHttpKnownMethodsEnvironmentalVariable: false);
64-
var actual = requestHelper.GetNormalizedHttpMethod("CONNECT");
65-
Assert.Equal("CONNECT", actual);
64+
using (EnvironmentVariableScope.Create("OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS", "GET,POST"))
65+
{
66+
var requestHelper = new RequestDataHelper(configureByHttpKnownMethodsEnvironmentalVariable: false);
67+
var actual = requestHelper.GetNormalizedHttpMethod("CONNECT");
68+
Assert.Equal("CONNECT", actual);
69+
}
6670
}
6771

6872
[Theory]
@@ -83,10 +87,4 @@ public void MappingVersionProtocolToVersion(Version protocolVersion, string expe
8387
var actual = RequestDataHelper.GetHttpProtocolVersion(protocolVersion);
8488
Assert.Equal(expected, actual);
8589
}
86-
87-
public void Dispose()
88-
{
89-
// Clean up after tests that set environment variables.
90-
Environment.SetEnvironmentVariable("OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS", null);
91-
}
9290
}

test/OpenTelemetry.Instrumentation.AWSLambda.Tests/AWSLambdaWrapperTests.cs

Lines changed: 53 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,25 @@ public class AWSLambdaWrapperTests : IDisposable
1717

1818
private readonly SampleHandlers sampleHandlers;
1919
private readonly SampleLambdaContext sampleLambdaContext;
20+
private readonly IDisposable environmentScope;
2021

2122
public AWSLambdaWrapperTests()
2223
{
2324
this.sampleHandlers = new SampleHandlers();
2425
this.sampleLambdaContext = new SampleLambdaContext();
25-
Environment.SetEnvironmentVariable("_X_AMZN_TRACE_ID", $"Root=1-5759e988-bd862e3fe1be46a994272793;Parent={XRayParentId};Sampled=1");
26-
Environment.SetEnvironmentVariable("AWS_REGION", "us-east-1");
27-
Environment.SetEnvironmentVariable("AWS_LAMBDA_FUNCTION_NAME", "testfunction");
28-
Environment.SetEnvironmentVariable("AWS_LAMBDA_FUNCTION_VERSION", "latest");
29-
Environment.SetEnvironmentVariable("AWS_LAMBDA_FUNCTION_MEMORY_SIZE", "128");
30-
Environment.SetEnvironmentVariable("AWS_LAMBDA_LOG_STREAM_NAME", "2025/07/21/[$LATEST]7b176c212e954e62adfb9b5451cb5374");
26+
this.environmentScope = EnvironmentVariableScope.Create(
27+
("_X_AMZN_TRACE_ID", $"Root=1-5759e988-bd862e3fe1be46a994272793;Parent={XRayParentId};Sampled=1"),
28+
("AWS_REGION", "us-east-1"),
29+
("AWS_LAMBDA_FUNCTION_NAME", "testfunction"),
30+
("AWS_LAMBDA_FUNCTION_VERSION", "latest"),
31+
("AWS_LAMBDA_FUNCTION_MEMORY_SIZE", "128"),
32+
("AWS_LAMBDA_LOG_STREAM_NAME", "2025/07/21/[$LATEST]7b176c212e954e62adfb9b5451cb5374"));
3133
}
3234

3335
public void Dispose()
3436
{
37+
this.environmentScope.Dispose();
38+
3539
// reset Semantic Convention to default
3640
Sdk.CreateTracerProviderBuilder()
3741
.AddAWSLambdaConfigurations();
@@ -187,59 +191,63 @@ public void TestLambdaHandlerException(bool setCustomParent)
187191
[Fact]
188192
public void TestLambdaHandlerNotSampled()
189193
{
190-
Environment.SetEnvironmentVariable("_X_AMZN_TRACE_ID", "Root=1-5759e988-bd862e3fe1be46a994272793;Parent=53995c3f42cd8ad8;Sampled=0");
194+
using (EnvironmentVariableScope.Create("_X_AMZN_TRACE_ID", "Root=1-5759e988-bd862e3fe1be46a994272793;Parent=53995c3f42cd8ad8;Sampled=0"))
195+
{
196+
var exportedItems = new List<Activity>();
191197

192-
var exportedItems = new List<Activity>();
198+
using (var tracerProvider = Sdk.CreateTracerProviderBuilder()
199+
.AddAWSLambdaConfigurations(opt =>
200+
{
201+
opt.SemanticConventionVersion = SemanticConventionVersion.Latest;
202+
})
203+
.AddInMemoryExporter(exportedItems)
204+
.Build()!)
205+
{
206+
AWSLambdaWrapper.Trace(tracerProvider, this.sampleHandlers.SampleHandlerSyncInputAndReturn, "TestStream", this.sampleLambdaContext);
207+
var resource = tracerProvider.GetResource();
208+
this.AssertResourceAttributes(resource);
209+
}
193210

194-
using (var tracerProvider = Sdk.CreateTracerProviderBuilder()
195-
.AddAWSLambdaConfigurations(opt =>
196-
{
197-
opt.SemanticConventionVersion = SemanticConventionVersion.Latest;
198-
})
199-
.AddInMemoryExporter(exportedItems)
200-
.Build()!)
201-
{
202-
var result = AWSLambdaWrapper.Trace(tracerProvider, this.sampleHandlers.SampleHandlerSyncInputAndReturn, "TestStream", this.sampleLambdaContext);
203-
var resource = tracerProvider.GetResource();
204-
this.AssertResourceAttributes(resource);
211+
Assert.Empty(exportedItems);
205212
}
206-
207-
Assert.Empty(exportedItems);
208213
}
209214

210215
[Fact]
211216
public void OnFunctionStart_NoParent_ActivityCreated()
212217
{
213-
Environment.SetEnvironmentVariable("_X_AMZN_TRACE_ID", null);
214-
215-
Activity? activity = null;
216-
using (var tracerProvider = Sdk.CreateTracerProviderBuilder()
217-
.AddAWSLambdaConfigurations(opt =>
218-
{
219-
opt.SemanticConventionVersion = SemanticConventionVersion.Latest;
220-
})
221-
.Build())
218+
using (EnvironmentVariableScope.Create("_X_AMZN_TRACE_ID", null))
222219
{
223-
activity = AWSLambdaWrapper.OnFunctionStart("test-input", new SampleLambdaContext());
224-
}
220+
Activity? activity = null;
221+
using (Sdk.CreateTracerProviderBuilder()
222+
.AddAWSLambdaConfigurations(opt =>
223+
{
224+
opt.SemanticConventionVersion = SemanticConventionVersion.Latest;
225+
})
226+
.Build())
227+
{
228+
activity = AWSLambdaWrapper.OnFunctionStart("test-input", new SampleLambdaContext());
229+
}
225230

226-
Assert.NotNull(activity);
231+
Assert.NotNull(activity);
232+
}
227233
}
228234

229235
[Fact]
230236
public void OnFunctionStart_NoSampledAndAwsXRayContextExtractionDisabled_ActivityCreated()
231237
{
232-
Environment.SetEnvironmentVariable("_X_AMZN_TRACE_ID", $"Root=1-5759e988-bd862e3fe1be46a994272793;Parent={XRayParentId};Sampled=0");
233-
Activity? activity = null;
234-
235-
using (var tracerProvider = Sdk.CreateTracerProviderBuilder()
236-
.AddAWSLambdaConfigurations(c => c.DisableAwsXRayContextExtraction = true)
237-
.Build())
238+
using (EnvironmentVariableScope.Create("_X_AMZN_TRACE_ID", $"Root=1-5759e988-bd862e3fe1be46a994272793;Parent={XRayParentId};Sampled=0"))
238239
{
239-
activity = AWSLambdaWrapper.OnFunctionStart("test-input", new SampleLambdaContext());
240-
}
240+
Activity? activity = null;
241241

242-
Assert.NotNull(activity);
242+
using (Sdk.CreateTracerProviderBuilder()
243+
.AddAWSLambdaConfigurations(c => c.DisableAwsXRayContextExtraction = true)
244+
.Build())
245+
{
246+
activity = AWSLambdaWrapper.OnFunctionStart("test-input", new SampleLambdaContext());
247+
}
248+
249+
Assert.NotNull(activity);
250+
}
243251
}
244252

245253
[Theory]
@@ -250,9 +258,9 @@ public void OnFunctionStart_ColdStart_ColdStartTagHasCorrectValue(int invocation
250258
AWSLambdaWrapper.ResetColdStart();
251259
Activity? activity = null;
252260

253-
using (var tracerProvider = Sdk.CreateTracerProviderBuilder()
254-
.AddAWSLambdaConfigurations(c => c.DisableAwsXRayContextExtraction = true)
255-
.Build())
261+
using (Sdk.CreateTracerProviderBuilder()
262+
.AddAWSLambdaConfigurations(c => c.DisableAwsXRayContextExtraction = true)
263+
.Build())
256264
{
257265
for (var i = 1; i <= invocationsCount; i++)
258266
{

test/OpenTelemetry.Instrumentation.AWSLambda.Tests/OpenTelemetry.Instrumentation.AWSLambda.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
<ItemGroup>
1717
<Compile Include="$(RepoRoot)\src\Shared\ActivityHelperExtensions.cs" Link="Includes\ActivityHelperExtensions.cs" />
18+
<Compile Include="$(RepoRoot)\test\Shared\EnvironmentVariableScope.cs" Link="Includes\EnvironmentVariableScope.cs" />
1819
</ItemGroup>
1920

2021
</Project>

test/OpenTelemetry.Instrumentation.AspNet.Tests/HttpInListenerTests.cs

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,8 @@ public void AspNetRequestsAreCollectedSuccessfully(
6767
bool recordException = false,
6868
string? expectedErrorType = null)
6969
{
70-
try
70+
using (EnvironmentVariableScope.Create("OTEL_DOTNET_EXPERIMENTAL_ASPNET_DISABLE_URL_QUERY_REDACTION", disableQueryRedaction == QueryRedactionDisableBehavior.DisableViaEnvVar ? "true" : null))
7171
{
72-
if (disableQueryRedaction == QueryRedactionDisableBehavior.DisableViaEnvVar)
73-
{
74-
Environment.SetEnvironmentVariable("OTEL_DOTNET_EXPERIMENTAL_ASPNET_DISABLE_URL_QUERY_REDACTION", "true");
75-
}
76-
7772
HttpContext.Current = RouteTestHelper.BuildHttpContext(url, routeType, routeTemplate, requestMethod);
7873

7974
typeof(HttpRequest).GetField("_wr", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(HttpContext.Current.Request, new TestHttpWorkerRequest());
@@ -228,10 +223,6 @@ public void AspNetRequestsAreCollectedSuccessfully(
228223
Assert.True(string.IsNullOrEmpty(span.StatusDescription));
229224
}
230225
}
231-
finally
232-
{
233-
Environment.SetEnvironmentVariable("OTEL_DOTNET_EXPERIMENTAL_ASPNET_DISABLE_URL_QUERY_REDACTION", null);
234-
}
235226
}
236227

237228
[Theory]

test/OpenTelemetry.Instrumentation.AspNet.Tests/OpenTelemetry.Instrumentation.AspNet.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
<ItemGroup>
2222
<Compile Include="$(RepoRoot)\src\Shared\ActivityHelperExtensions.cs" Link="Includes\ActivityHelperExtensions.cs" />
23+
<Compile Include="$(RepoRoot)\test\Shared\EnvironmentVariableScope.cs" Link="Includes\EnvironmentVariableScope.cs" />
2324
<Compile Include="$(RepoRoot)\test\Shared\EventSourceTestHelper.cs" Link="Includes\EventSourceTestHelper.cs" />
2425
<Compile Include="$(RepoRoot)\test\Shared\TestActivityProcessor.cs" Link="Includes\TestActivityProcessor.cs" />
2526
<Compile Include="$(RepoRoot)\test\Shared\TestEventListener.cs" Link="Includes\TestEventListener.cs" />

0 commit comments

Comments
 (0)