From b31ac0dbc1e1b76a8113db4f37e36272fa452965 Mon Sep 17 00:00:00 2001 From: Shawn Vause <8197405+NapalmCodes@users.noreply.github.com> Date: Fri, 6 Sep 2024 21:43:32 -0400 Subject: [PATCH] Unit tests and fix documentation not being published on package. (#16) --- .github/workflows/cd.yml | 3 + .github/workflows/ci.yml | 3 + .gitignore | 4 ++ Aspire.Hosting.Krakend.sln | 8 ++- .../AddKrakendTests.cs | 60 +++++++++++++++++++ ...mCodes.Aspire.Hosting.Krakend.Tests.csproj | 30 ++++++++++ .../KrakendContainerImageTags.cs | 2 +- .../NapalmCodes.Aspire.Hosting.Krakend.csproj | 5 ++ 8 files changed, 113 insertions(+), 2 deletions(-) create mode 100644 NapalmCodes.Aspire.Hosting.Krakend.Tests/AddKrakendTests.cs create mode 100644 NapalmCodes.Aspire.Hosting.Krakend.Tests/NapalmCodes.Aspire.Hosting.Krakend.Tests.csproj diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 9f35e01..a305375 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -32,6 +32,9 @@ jobs: - name: Build run: dotnet build $SOLUTION --configuration $BUILD_CONFIG /p:ContinuousIntegrationBuild=true -p:Version=$BUILD_VERSION + + - name: Test + run: dotnet test --configuration $BUILD_CONFIG --no-restore --no-build --verbosity normal - name: Publish if: startsWith(github.ref, 'refs/heads/release') diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 725def6..841b8c1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,3 +27,6 @@ jobs: - name: Build run: dotnet build $SOLUTION --configuration $BUILD_CONFIG /p:ContinuousIntegrationBuild=true + + - name: Test + run: dotnet test --configuration $BUILD_CONFIG --no-restore --no-build --verbosity normal diff --git a/.gitignore b/.gitignore index 8a30d25..4b1616b 100644 --- a/.gitignore +++ b/.gitignore @@ -396,3 +396,7 @@ FodyWeavers.xsd # JetBrains Rider *.sln.iml + +# Custom +**/TestResults +**/coveragereport \ No newline at end of file diff --git a/Aspire.Hosting.Krakend.sln b/Aspire.Hosting.Krakend.sln index 55e916d..c4b2b7e 100644 --- a/Aspire.Hosting.Krakend.sln +++ b/Aspire.Hosting.Krakend.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.0.31903.59 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NapalmCodes.Aspire.Hosting.Krakend", "NapalmCodes.Aspire.Hosting.Krakend\NapalmCodes.Aspire.Hosting.Krakend.csproj", "{E8FEC82F-C934-4EA1-99DA-F50EA4287DA4}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NapalmCodes.Aspire.Hosting.Krakend", "NapalmCodes.Aspire.Hosting.Krakend\NapalmCodes.Aspire.Hosting.Krakend.csproj", "{E8FEC82F-C934-4EA1-99DA-F50EA4287DA4}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SolutionFolder", "SolutionFolder", "{77595ED8-3D80-4049-B593-D877BE38272F}" ProjectSection(SolutionItems) = preProject @@ -12,6 +12,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SolutionFolder", "SolutionF README.md = README.md EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NapalmCodes.Aspire.Hosting.Krakend.Tests", "NapalmCodes.Aspire.Hosting.Krakend.Tests\NapalmCodes.Aspire.Hosting.Krakend.Tests.csproj", "{40E4C6F6-4675-4929-AC59-168875D471E8}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -22,6 +24,10 @@ Global {E8FEC82F-C934-4EA1-99DA-F50EA4287DA4}.Debug|Any CPU.Build.0 = Debug|Any CPU {E8FEC82F-C934-4EA1-99DA-F50EA4287DA4}.Release|Any CPU.ActiveCfg = Release|Any CPU {E8FEC82F-C934-4EA1-99DA-F50EA4287DA4}.Release|Any CPU.Build.0 = Release|Any CPU + {40E4C6F6-4675-4929-AC59-168875D471E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {40E4C6F6-4675-4929-AC59-168875D471E8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {40E4C6F6-4675-4929-AC59-168875D471E8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {40E4C6F6-4675-4929-AC59-168875D471E8}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/NapalmCodes.Aspire.Hosting.Krakend.Tests/AddKrakendTests.cs b/NapalmCodes.Aspire.Hosting.Krakend.Tests/AddKrakendTests.cs new file mode 100644 index 0000000..2ed84be --- /dev/null +++ b/NapalmCodes.Aspire.Hosting.Krakend.Tests/AddKrakendTests.cs @@ -0,0 +1,60 @@ +using Aspire.Hosting; +using Aspire.Hosting.ApplicationModel; +using Microsoft.Extensions.DependencyInjection; +using System.Net.Sockets; + +namespace NapalmCodes.Aspire.Hosting.Krakend.Tests; + +public class AddKrakendTests +{ + [Fact] + public void AddKrakendContainerAddsAnnotationMetadata() + { + var appBuilder = DistributedApplication.CreateBuilder(); + + appBuilder.AddKrakend("krakend"); + + using var app = appBuilder.Build(); + + var appModel = app.Services.GetRequiredService(); + + var containerResource = Assert.Single(appModel.Resources.OfType()); + Assert.Equal("krakend", containerResource.Name); + + var endpoints = containerResource.Annotations.OfType(); + Assert.Single(endpoints); + + var primaryEndpoint = Assert.Single(endpoints, e => e.Name == "http"); + Assert.Equal(8080, primaryEndpoint.TargetPort); + Assert.False(primaryEndpoint.IsExternal); + Assert.Equal("http", primaryEndpoint.Name); + Assert.Null(primaryEndpoint.Port); + Assert.Equal(ProtocolType.Tcp, primaryEndpoint.Protocol); + Assert.Equal("http", primaryEndpoint.Transport); + Assert.Equal("http", primaryEndpoint.UriScheme); + + var containerAnnotation = Assert.Single(containerResource.Annotations.OfType()); + Assert.Equal(KrakendContainerImageTags.Tag, containerAnnotation.Tag); + Assert.Equal(KrakendContainerImageTags.Image, containerAnnotation.Image); + Assert.Equal(KrakendContainerImageTags.Registry, containerAnnotation.Registry); + } + + [Fact] + public async Task KrakendCreatesConnectionString() + { + var appBuilder = DistributedApplication.CreateBuilder(); + var krakend = appBuilder + .AddKrakend("krakend") + .WithEndpoint("http", e => e.AllocatedEndpoint = new AllocatedEndpoint(e, "localhost", 27000)); + + using var app = appBuilder.Build(); + + var appModel = app.Services.GetRequiredService(); + + var connectionStringResource = Assert.Single(appModel.Resources.OfType()) as IResourceWithConnectionString; + var connectionString = await connectionStringResource.GetConnectionStringAsync(); + + Assert.Equal($"http://localhost:27000", connectionString); + Assert.Equal("{krakend.bindings.http.url}", connectionStringResource.ConnectionStringExpression.ValueExpression); + } +} diff --git a/NapalmCodes.Aspire.Hosting.Krakend.Tests/NapalmCodes.Aspire.Hosting.Krakend.Tests.csproj b/NapalmCodes.Aspire.Hosting.Krakend.Tests/NapalmCodes.Aspire.Hosting.Krakend.Tests.csproj new file mode 100644 index 0000000..8f6ae0d --- /dev/null +++ b/NapalmCodes.Aspire.Hosting.Krakend.Tests/NapalmCodes.Aspire.Hosting.Krakend.Tests.csproj @@ -0,0 +1,30 @@ + + + + net8.0 + enable + enable + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + diff --git a/NapalmCodes.Aspire.Hosting.Krakend/KrakendContainerImageTags.cs b/NapalmCodes.Aspire.Hosting.Krakend/KrakendContainerImageTags.cs index 71a9f8d..d98ebcd 100644 --- a/NapalmCodes.Aspire.Hosting.Krakend/KrakendContainerImageTags.cs +++ b/NapalmCodes.Aspire.Hosting.Krakend/KrakendContainerImageTags.cs @@ -1,6 +1,6 @@ namespace NapalmCodes.Aspire.Hosting.Krakend; -internal class KrakendContainerImageTags +internal static class KrakendContainerImageTags { public const string Registry = "docker.io"; public const string Image = "devopsfaith/krakend"; diff --git a/NapalmCodes.Aspire.Hosting.Krakend/NapalmCodes.Aspire.Hosting.Krakend.csproj b/NapalmCodes.Aspire.Hosting.Krakend/NapalmCodes.Aspire.Hosting.Krakend.csproj index 4508021..e7ebf91 100644 --- a/NapalmCodes.Aspire.Hosting.Krakend/NapalmCodes.Aspire.Hosting.Krakend.csproj +++ b/NapalmCodes.Aspire.Hosting.Krakend/NapalmCodes.Aspire.Hosting.Krakend.csproj @@ -6,6 +6,7 @@ enable true true + true NapalmCodes.Aspire.Hosting.Krakend Shawn Vause Aspire hosting component for the high performance KrakenD (https://www.krakend.io/) API Gateway. @@ -42,4 +43,8 @@ + + + +