Skip to content

Commit 0f88519

Browse files
committed
refactor: change ParseAssemblyName method visibility to internal and improve unit tests for assembly name handling
1 parent 602efc2 commit 0f88519

File tree

2 files changed

+154
-8
lines changed

2 files changed

+154
-8
lines changed

libraries/src/AWS.Lambda.Powertools.Common/Core/PowertoolsEnvironment.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ public void SetExecutionEnvironment<T>(T type)
117117
/// </summary>
118118
/// <param name="assemblyName"></param>
119119
/// <returns></returns>
120-
private string ParseAssemblyName(string assemblyName)
120+
internal string ParseAssemblyName(string assemblyName)
121121
{
122122
// Use cache to avoid repeated string operations
123123
return ParsedAssemblyNameCache.GetOrAdd(assemblyName, name =>

libraries/tests/AWS.Lambda.Powertools.Common.Tests/Core/PowertoolsEnvironmentTest.cs

Lines changed: 153 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System;
2-
using System.Collections.Generic;
32
using System.IO;
43
using System.Linq;
54
using System.Xml.Linq;
@@ -92,16 +91,15 @@ public void SetExecutionEnvironment_Should_Format_Strings_Correctly_With_Mocked_
9291
{
9392
// Arrange
9493
var mockEnvironment = Substitute.For<IPowertoolsEnvironment>();
95-
var testType = this.GetType();
96-
94+
9795
// Mock the dependencies to return controlled values
9896
mockEnvironment.GetAssemblyName(Arg.Any<object>()).Returns("AWS.Lambda.Powertools.Common.Tests");
9997
mockEnvironment.GetAssemblyVersion(Arg.Any<object>()).Returns("1.2.3");
10098
mockEnvironment.GetEnvironmentVariable("AWS_EXECUTION_ENV").Returns((string)null);
10199

102100
// Setup the actual method call to use real implementation logic
103101
mockEnvironment.When(x => x.SetExecutionEnvironment(Arg.Any<object>()))
104-
.Do(callInfo =>
102+
.Do(_ =>
105103
{
106104
var assemblyName = "PT/Tests"; // Parsed name
107105
var assemblyVersion = "1.2.3";
@@ -131,7 +129,7 @@ public void SetExecutionEnvironment_Should_Append_To_Existing_Environment_With_M
131129

132130
// Setup the method call
133131
mockEnvironment.When(x => x.SetExecutionEnvironment(Arg.Any<object>()))
134-
.Do(callInfo =>
132+
.Do(_ =>
135133
{
136134
var currentEnv = "ExistingValue";
137135
var assemblyName = "PT/Logging";
@@ -162,7 +160,7 @@ public void SetExecutionEnvironment_Should_Not_Add_PTENV_Twice_With_Mocked_Value
162160

163161
// Setup the method call - should not add PTENV again
164162
mockEnvironment.When(x => x.SetExecutionEnvironment(Arg.Any<object>()))
165-
.Do(callInfo =>
163+
.Do(_ =>
166164
{
167165
var currentEnv = "PT/Metrics/1.0.0 PTENV/AWS_LAMBDA_DOTNET8";
168166
var assemblyName = "PT/Tracing";
@@ -180,10 +178,158 @@ public void SetExecutionEnvironment_Should_Not_Add_PTENV_Twice_With_Mocked_Value
180178
mockEnvironment.Received(1).SetEnvironmentVariable("AWS_EXECUTION_ENV", "PT/Metrics/1.0.0 PTENV/AWS_LAMBDA_DOTNET8 PT/Tracing/1.5.0");
181179
}
182180

181+
[Fact]
182+
public void GetAssemblyName_Should_Handle_Type_Object()
183+
{
184+
// Arrange
185+
var powertoolsEnv = new PowertoolsEnvironment();
186+
var typeObject = typeof(PowertoolsEnvironment);
187+
188+
// Act
189+
var result = powertoolsEnv.GetAssemblyName(typeObject);
190+
191+
// Assert
192+
Assert.Equal("AWS.Lambda.Powertools.Common", result);
193+
}
194+
195+
[Fact]
196+
public void GetAssemblyName_Should_Handle_Regular_Object()
197+
{
198+
// Arrange
199+
var powertoolsEnv = new PowertoolsEnvironment();
200+
201+
// Act
202+
var result = powertoolsEnv.GetAssemblyName(this);
203+
204+
// Assert
205+
Assert.Equal("AWS.Lambda.Powertools.Common.Tests", result);
206+
}
207+
208+
[Fact]
209+
public void GetAssemblyVersion_Should_Handle_Type_Object()
210+
{
211+
// Arrange
212+
var powertoolsEnv = new PowertoolsEnvironment();
213+
var typeObject = typeof(PowertoolsEnvironment);
214+
215+
// Act
216+
var result = powertoolsEnv.GetAssemblyVersion(typeObject);
217+
218+
// Assert
219+
Assert.Matches(@"\d+\.\d+\.\d+", result); // Should match version pattern like "1.0.0"
220+
}
221+
222+
[Fact]
223+
public void GetAssemblyVersion_Should_Handle_Regular_Object()
224+
{
225+
// Arrange
226+
var powertoolsEnv = new PowertoolsEnvironment();
227+
228+
// Act
229+
var result = powertoolsEnv.GetAssemblyVersion(this);
230+
231+
// Assert
232+
Assert.Matches(@"\d+\.\d+\.\d+", result); // Should match version pattern like "1.0.0"
233+
}
234+
235+
[Fact]
236+
public void ParseAssemblyName_Should_Handle_Assembly_Without_Dots()
237+
{
238+
// Arrange
239+
var powertoolsEnv = new PowertoolsEnvironment();
240+
241+
// Act
242+
var result = powertoolsEnv.ParseAssemblyName("SimpleAssemblyName");
243+
244+
// Assert
245+
Assert.Equal($"{Constants.FeatureContextIdentifier}/SimpleAssemblyName", result);
246+
}
247+
248+
[Fact]
249+
public void ParseAssemblyName_Should_Handle_Assembly_With_Dots()
250+
{
251+
// Arrange
252+
var powertoolsEnv = new PowertoolsEnvironment();
253+
254+
// Act
255+
var result = powertoolsEnv.ParseAssemblyName("AWS.Lambda.Powertools.Common");
256+
257+
// Assert
258+
Assert.Equal($"{Constants.FeatureContextIdentifier}/Common", result);
259+
}
260+
261+
[Fact]
262+
public void ParseAssemblyName_Should_Use_Cache_For_Same_Assembly_Name()
263+
{
264+
// Arrange
265+
var powertoolsEnv = new PowertoolsEnvironment();
266+
267+
// Act - Call twice with same assembly name
268+
var result1 = powertoolsEnv.ParseAssemblyName("AWS.Lambda.Powertools.Tests");
269+
var result2 = powertoolsEnv.ParseAssemblyName("AWS.Lambda.Powertools.Tests");
270+
271+
// Assert - Should return same result (cached)
272+
Assert.Equal(result1, result2);
273+
Assert.Equal($"{Constants.FeatureContextIdentifier}/Tests", result1);
274+
}
275+
276+
[Fact]
277+
public void SetExecutionEnvironment_Should_Handle_Empty_Current_Environment()
278+
{
279+
// Arrange
280+
var powertoolsEnv = new PowertoolsEnvironment();
281+
Environment.SetEnvironmentVariable("AWS_EXECUTION_ENV", "");
282+
283+
// Act
284+
powertoolsEnv.SetExecutionEnvironment(this);
285+
286+
// Assert
287+
var result = powertoolsEnv.GetEnvironmentVariable("AWS_EXECUTION_ENV");
288+
Assert.Contains($"{Constants.FeatureContextIdentifier}/Tests/", result);
289+
Assert.Contains("PTENV/AWS_LAMBDA_DOTNET", result);
290+
}
291+
292+
[Fact]
293+
public void SetExecutionEnvironment_Should_Add_PTENV_When_Not_Present()
294+
{
295+
// Arrange
296+
var powertoolsEnv = new PowertoolsEnvironment();
297+
powertoolsEnv.SetEnvironmentVariable("AWS_EXECUTION_ENV", "SomeExistingValue");
298+
299+
// Act
300+
powertoolsEnv.SetExecutionEnvironment(this);
301+
302+
// Assert
303+
var result = powertoolsEnv.GetEnvironmentVariable("AWS_EXECUTION_ENV");
304+
Assert.StartsWith("SomeExistingValue", result);
305+
Assert.Contains("PTENV/AWS_LAMBDA_DOTNET", result);
306+
}
307+
308+
[Fact]
309+
public void SetExecutionEnvironment_Should_Not_Add_PTENV_When_Already_Present()
310+
{
311+
// Arrange
312+
var powertoolsEnv = new PowertoolsEnvironment();
313+
var existingValue = $"ExistingValue PTENV/AWS_LAMBDA_DOTNET{Environment.Version.Major}";
314+
powertoolsEnv.SetEnvironmentVariable("AWS_EXECUTION_ENV", existingValue);
315+
316+
// Act
317+
powertoolsEnv.SetExecutionEnvironment(this);
318+
319+
// Assert
320+
var result = powertoolsEnv.GetEnvironmentVariable("AWS_EXECUTION_ENV");
321+
var ptenvCount = result.Split("PTENV/").Length - 1;
322+
Assert.Equal(1, ptenvCount); // Should only have one PTENV entry
323+
}
324+
183325
public void Dispose()
184326
{
185327
//Do cleanup actions here
186-
187328
Environment.SetEnvironmentVariable("AWS_EXECUTION_ENV", null);
329+
330+
// Clear the singleton instance to ensure fresh state for each test
331+
var instanceField = typeof(PowertoolsEnvironment).GetField("_instance",
332+
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
333+
instanceField?.SetValue(null, null);
188334
}
189335
}

0 commit comments

Comments
 (0)