Skip to content

Commit e990c5b

Browse files
authored
Simple unit tests (#22)
* Simple unit tests * Bump insecure package
1 parent 5d03d7c commit e990c5b

9 files changed

+264
-2
lines changed

build.ps1

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ param(
1717

1818
Import-Module "$PSScriptRoot\pipelineUtilities.psm1" -Force
1919

20+
$SrcDirectory = "$PSScriptRoot\src"
21+
2022
if (!$NoBuild.IsPresent) {
2123

2224
$packageName = "AzureFunctions.PowerShell.OpenTelemetry.SDK"
@@ -91,6 +93,8 @@ if (!$NoBuild.IsPresent) {
9193
}
9294
#region Test ==================================================================================
9395
if ($Test.IsPresent) {
94-
Write-Log "There are no tests! Panic!"
96+
Set-Location $SrcDirectory
97+
dotnet test
98+
if ($LASTEXITCODE -ne 0) { throw "xunit tests failed." }
9599
}
96100
#endregion

src/AzureFunctions.PowerShell.OpenTelemetry.SDK/AzureFunctions.PowerShell.OpenTelemetry.SDK.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
</PropertyGroup>
99

1010
<ItemGroup>
11-
<PackageReference Include="Microsoft.PowerShell.SDK" Version="7.2.1" PrivateAssets="All" />
11+
<PackageReference Include="Microsoft.PowerShell.SDK" Version="7.2.24" PrivateAssets="All" />
1212
</ItemGroup>
1313

1414
<ItemGroup>
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
//
2+
// Copyright (c) Microsoft. All rights reserved.
3+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
4+
//
5+
6+
using OpenTelemetryEngine.Logging;
7+
using OpenTelemetryEngine.Traces;
8+
9+
namespace OpenTelemetryEngineTests
10+
{
11+
public class FullTraceFlowTests
12+
{
13+
[Fact]
14+
public void FullyTracedCode_ExecutesSuccessfully()
15+
{
16+
var _ = FunctionsTracerBuilder.BuildTracer(new List<string>());
17+
var loggerBuilderResponse = FunctionsLoggerBuilder.GetLogger();
18+
19+
string internalActivityId = Guid.NewGuid().ToString();
20+
21+
var internalActivity = FunctionsActivityBuilder.StartInternalActivity(internalActivityId, "", "");
22+
23+
var userActivity = FunctionsActivityBuilder.StartActivity("MyActivity");
24+
25+
loggerBuilderResponse.Log("A log item", "Information");
26+
27+
FunctionsActivityBuilder.StopActivity(userActivity);
28+
29+
FunctionsActivityBuilder.StopInternalActivity(internalActivityId);
30+
}
31+
}
32+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//
2+
// Copyright (c) Microsoft. All rights reserved.
3+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
4+
//
5+
6+
using OpenTelemetryEngine.Logging;
7+
8+
namespace OpenTelemetryEngineTests.Logging
9+
{
10+
public class FunctionsLoggerBuilderTests
11+
{
12+
[Fact]
13+
public void FunctionsLoggerBuilder_ReturnsValidLogger()
14+
{
15+
var logger = FunctionsLoggerBuilder.GetLogger();
16+
17+
Assert.NotNull(logger);
18+
}
19+
}
20+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
//
2+
// Copyright (c) Microsoft. All rights reserved.
3+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
4+
//
5+
6+
using OpenTelemetryEngine.Logging;
7+
8+
namespace OpenTelemetryEngineTests.Logging
9+
{
10+
public class FunctionsLoggerTests
11+
{
12+
[Fact]
13+
public void FunctionsLogger_CanLog()
14+
{
15+
var logger = FunctionsLoggerBuilder.GetLogger();
16+
17+
logger.Log("This is a debug log", "Debug");
18+
logger.Log("This is an information log", "Information");
19+
logger.Log("This is a warning log", "Warning");
20+
logger.Log("This is an error log", "Error");
21+
}
22+
23+
[Fact]
24+
public void FunctionsLogger_CanLogWithWorkerHandler()
25+
{
26+
var logger = FunctionsLoggerBuilder.GetLogger();
27+
28+
logger.WorkerLogHandler("Debug", "This is a debug log", null);
29+
logger.WorkerLogHandler("Information", "This is an information log", null);
30+
logger.WorkerLogHandler("Warning", "This is a warning log", null);
31+
logger.WorkerLogHandler("Error", "This is an error log", null);
32+
}
33+
34+
[Fact]
35+
public void FunctionsLogger_InvalidLogTypesThrow()
36+
{
37+
var logger = FunctionsLoggerBuilder.GetLogger();
38+
39+
Assert.Throws<System.ArgumentException>(() => logger.WorkerLogHandler("NotALogCategory", "This is an invalid log", null));
40+
Assert.Throws<System.ArgumentException>(() => logger.Log("This is an invalid log", "NotALogCategory"));
41+
}
42+
43+
[Fact]
44+
public void FunctionsLogger_NullLogMessageThrows()
45+
{
46+
var logger = FunctionsLoggerBuilder.GetLogger();
47+
48+
Assert.Throws<System.ArgumentException>(() => logger.WorkerLogHandler("Warning", null, null));
49+
Assert.Throws<System.ArgumentException>(() => logger.Log(null, "Warning"));
50+
}
51+
}
52+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net8.0</TargetFramework>
5+
<ImplicitUsings>enable</ImplicitUsings>
6+
<Nullable>enable</Nullable>
7+
8+
<IsPackable>false</IsPackable>
9+
<IsTestProject>true</IsTestProject>
10+
</PropertyGroup>
11+
12+
<ItemGroup>
13+
<PackageReference Include="coverlet.collector" Version="6.0.0" />
14+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
15+
<PackageReference Include="xunit" Version="2.5.3" />
16+
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.3" />
17+
</ItemGroup>
18+
19+
<ItemGroup>
20+
<Using Include="Xunit" />
21+
</ItemGroup>
22+
23+
<ItemGroup>
24+
<Folder Include="Resources\" />
25+
</ItemGroup>
26+
27+
<ItemGroup>
28+
<ProjectReference Include="..\OpenTelemetryEngine\OpenTelemetryEngine.csproj" />
29+
</ItemGroup>
30+
31+
</Project>
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
//
2+
// Copyright (c) Microsoft. All rights reserved.
3+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
4+
//
5+
6+
using OpenTelemetryEngine.Traces;
7+
8+
namespace OpenTelemetryEngineTests.Traces
9+
{
10+
public class FunctionsActivityBuilderTests
11+
{
12+
13+
public FunctionsActivityBuilderTests()
14+
{
15+
var _ = FunctionsTracerBuilder.BuildTracer(new List<string>());
16+
}
17+
18+
[Fact]
19+
public void StartInternalActivity_CreatesValidActivity()
20+
{
21+
string invocationId = Guid.NewGuid().ToString();
22+
23+
var startActivityResponse = FunctionsActivityBuilder.StartInternalActivity(invocationId, "", "");
24+
25+
Assert.NotNull(startActivityResponse);
26+
Assert.NotNull(startActivityResponse.activity);
27+
Assert.Equal(invocationId, startActivityResponse.activity.Tags.Where(x => x.Key == "invocationId").First().Value);
28+
}
29+
30+
[Fact]
31+
public void StartInternalActivity_DoesNotAllowDuplicates()
32+
{
33+
string invocationId = Guid.NewGuid().ToString();
34+
35+
var startActivityResponse = FunctionsActivityBuilder.StartInternalActivity(invocationId, "", "");
36+
var startActivityResponse2 = FunctionsActivityBuilder.StartInternalActivity(invocationId, "", "");
37+
38+
Assert.NotNull(startActivityResponse2);
39+
Assert.Null(startActivityResponse2.activity);
40+
41+
}
42+
43+
[Fact]
44+
public void StopInternalActivity_StopsActivity()
45+
{
46+
string invocationId = Guid.NewGuid().ToString();
47+
48+
var startActivityResponse = FunctionsActivityBuilder.StartInternalActivity(invocationId, "", "");
49+
50+
Assert.NotNull(startActivityResponse);
51+
Assert.NotNull(startActivityResponse.activity);
52+
Assert.False(startActivityResponse.activity.IsStopped);
53+
54+
FunctionsActivityBuilder.StopInternalActivity(invocationId);
55+
Assert.True(startActivityResponse.activity.IsStopped);
56+
}
57+
58+
[Fact]
59+
public void StartActivity_CreatesValidActivity()
60+
{
61+
string activityName = Guid.NewGuid().ToString();
62+
63+
var startActivityResponse = FunctionsActivityBuilder.StartActivity(activityName);
64+
65+
Assert.NotNull(startActivityResponse);
66+
Assert.NotNull(startActivityResponse.activity);
67+
Assert.Equal(activityName, startActivityResponse.activity.DisplayName);
68+
}
69+
70+
[Fact]
71+
public void StartActivity_DoesNotAllowDuplicates()
72+
{
73+
string activityName = Guid.NewGuid().ToString();
74+
75+
var startActivityResponse = FunctionsActivityBuilder.StartInternalActivity(activityName, "", "");
76+
var startActivityResponse2 = FunctionsActivityBuilder.StartInternalActivity(activityName, "", "");
77+
78+
Assert.NotNull(startActivityResponse2);
79+
Assert.Null(startActivityResponse2.activity);
80+
}
81+
82+
[Fact]
83+
public void StopActivity_StopsActivity()
84+
{
85+
string activityName = Guid.NewGuid().ToString();
86+
87+
var startActivityResponse = FunctionsActivityBuilder.StartActivity(activityName);
88+
89+
Assert.NotNull(startActivityResponse);
90+
Assert.NotNull(startActivityResponse.activity);
91+
Assert.False(startActivityResponse.activity.IsStopped);
92+
93+
FunctionsActivityBuilder.StopActivity(startActivityResponse);
94+
Assert.True(startActivityResponse.activity.IsStopped);
95+
}
96+
}
97+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//
2+
// Copyright (c) Microsoft. All rights reserved.
3+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
4+
//
5+
6+
using OpenTelemetryEngine.Traces;
7+
8+
namespace OpenTelemetryEngineTests.Traces
9+
{
10+
public class FunctionsTracerBuilderTests
11+
{
12+
[Fact]
13+
public void TestFunctionsTracerBuilder()
14+
{
15+
var tracerBuilderResponse = FunctionsTracerBuilder.BuildTracer(new List<string>() { "AnActivitySource" });
16+
17+
Assert.NotNull(tracerBuilderResponse);
18+
}
19+
}
20+
}

src/azure-functions-powershell-opentelemetry.sln

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AzureFunctions.PowerShell.O
77
EndProject
88
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenTelemetryEngine", "OpenTelemetryEngine\OpenTelemetryEngine.csproj", "{08741EE8-9B44-4B97-AF58-278027898F64}"
99
EndProject
10+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenTelemetryEngineTests", "OpenTelemetryEngineTests\OpenTelemetryEngineTests.csproj", "{E0545241-C0A9-4572-9B5F-FC8E0A644879}"
11+
EndProject
1012
Global
1113
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1214
Debug|Any CPU = Debug|Any CPU
@@ -21,6 +23,10 @@ Global
2123
{08741EE8-9B44-4B97-AF58-278027898F64}.Debug|Any CPU.Build.0 = Debug|Any CPU
2224
{08741EE8-9B44-4B97-AF58-278027898F64}.Release|Any CPU.ActiveCfg = Release|Any CPU
2325
{08741EE8-9B44-4B97-AF58-278027898F64}.Release|Any CPU.Build.0 = Release|Any CPU
26+
{E0545241-C0A9-4572-9B5F-FC8E0A644879}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
27+
{E0545241-C0A9-4572-9B5F-FC8E0A644879}.Debug|Any CPU.Build.0 = Debug|Any CPU
28+
{E0545241-C0A9-4572-9B5F-FC8E0A644879}.Release|Any CPU.ActiveCfg = Release|Any CPU
29+
{E0545241-C0A9-4572-9B5F-FC8E0A644879}.Release|Any CPU.Build.0 = Release|Any CPU
2430
EndGlobalSection
2531
GlobalSection(SolutionProperties) = preSolution
2632
HideSolutionNode = FALSE

0 commit comments

Comments
 (0)