diff --git a/.github/workflows/codecoverage.yml b/.github/workflows/codecoverage.yml
index a4f1335..d8ceba2 100644
--- a/.github/workflows/codecoverage.yml
+++ b/.github/workflows/codecoverage.yml
@@ -25,20 +25,13 @@ jobs:
run: dotnet build SecurityService.slnx --configuration Release
- name: Run Unit Tests
+ working-directory: SecurityService.UnitTests
run: |
echo "ASPNETCORE_ENVIRONMENT are > ${ASPNETCORE_ENVIRONMENT}"
- dotnet test "SecurityService.UnitTests\SecurityService.UnitTests.csproj" /p:ExcludeByFile="\SecurityService\Views\**\*.cshtml" /p:CollectCoverage=true /p:Exclude="[xunit*]*" /p:ExcludeByAttribute="Obsolete" /p:ExcludeByAttribute="GeneratedCodeAttribute" /p:ExcludeByAttribute="CompilerGeneratedAttribute" /p:ExcludeByAttribute="ExcludeFromCodeCoverageAttribute" /p:CoverletOutput="../lcov1.info" /maxcpucount:1 /p:CoverletOutputFormat="lcov"
+ dotnet test "SecurityService.UnitTests.csproj" --configuration Release --verbosity normal --coverage --coverage-output-format cobertura --results-directory TestResults
- - name: Install LCOV merger
- run: npm install -g lcov-result-merger
-
- - name: Merge LCOV reports
- run: |
- mkdir -p coverage
- lcov-result-merger "*.info" > lcov.info
-
- - name: Upload merged coverage to Codacy
+ - name: Upload coverage to Codacy
uses: codacy/codacy-coverage-reporter-action@v1
with:
project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
- coverage-reports: ./lcov.info
+ coverage-reports: ./SecurityService.UnitTests/TestResults/*.cobertura.xml
diff --git a/.github/workflows/nightlybuild.yml b/.github/workflows/nightlybuild.yml
index deced09..a9bb789 100644
--- a/.github/workflows/nightlybuild.yml
+++ b/.github/workflows/nightlybuild.yml
@@ -54,9 +54,10 @@ jobs:
run: dotnet build SecurityService.slnx --configuration Release
- name: Run Unit Tests
+ working-directory: SecurityService.UnitTests
run: |
echo "ASPNETCORE_ENVIRONMENT are > ${ASPNETCORE_ENVIRONMENT}"
- dotnet test "SecurityService.UnitTests\SecurityService.UnitTests.csproj" /p:ExcludeByFile="\SecurityService\Views\**\*.cshtml" /p:CollectCoverage=true /p:Exclude="[xunit*]*" /p:ExcludeByAttribute="Obsolete" /p:ExcludeByAttribute="GeneratedCodeAttribute" /p:ExcludeByAttribute="CompilerGeneratedAttribute" /p:ExcludeByAttribute="ExcludeFromCodeCoverageAttribute" /p:CoverletOutput="../lcov1.info" /maxcpucount:1 /p:CoverletOutputFormat="lcov"
+ dotnet test "SecurityService.UnitTests.csproj" --configuration Release --no-build --verbosity normal
- name: Build Docker Images
run: |
@@ -204,9 +205,10 @@ jobs:
run: dotnet build SecurityService.slnx --configuration Release
- name: Run Unit Tests
+ working-directory: SecurityService.UnitTests
run: |
echo "ASPNETCORE_ENVIRONMENT are > ${ASPNETCORE_ENVIRONMENT}"
- dotnet test "SecurityService.UnitTests\SecurityService.UnitTests.csproj" /p:ExcludeByFile="\SecurityService\Views\**\*.cshtml" /p:CollectCoverage=true /p:Exclude="[xunit*]*" /p:ExcludeByAttribute="Obsolete" /p:ExcludeByAttribute="GeneratedCodeAttribute" /p:ExcludeByAttribute="CompilerGeneratedAttribute" /p:ExcludeByAttribute="ExcludeFromCodeCoverageAttribute" /p:CoverletOutput="../lcov1.info" /maxcpucount:1 /p:CoverletOutputFormat="lcov"
+ dotnet test "SecurityService.UnitTests.csproj" --configuration Release --no-build --verbosity normal
- name: Build Docker Images
run: |
diff --git a/.github/workflows/pullrequest.yml b/.github/workflows/pullrequest.yml
index 0204894..e352c4c 100644
--- a/.github/workflows/pullrequest.yml
+++ b/.github/workflows/pullrequest.yml
@@ -45,9 +45,10 @@ jobs:
run: dotnet build SecurityService.slnx --configuration Release
- name: Run Unit Tests
+ working-directory: SecurityService.UnitTests
run: |
echo "ASPNETCORE_ENVIRONMENT are > ${ASPNETCORE_ENVIRONMENT}"
- dotnet test "SecurityService.UnitTests\SecurityService.UnitTests.csproj" --configuration Release --no-build --verbosity normal --logger "trx;LogFileName=unit-test-results.trx"
+ dotnet test "SecurityService.UnitTests.csproj" --configuration Release --no-build --verbosity normal --report-trx --report-trx-filename unit-test-results.trx --results-directory TestResults
- name: Build Docker Images
@@ -123,7 +124,7 @@ jobs:
env:
Browser: Firefox
run: |
- dotnet test "SecurityService.OpenIdConnect.IntegrationTests\SecurityService.OpenIdConnect.IntegrationTests.csproj" --filter Category=PRTest --configuration Release --no-build --verbosity normal --logger "trx;LogFileName=firefoxui-test-results.trx"
+ dotnet test "SecurityService.OpenIdConnect.IntegrationTests\SecurityService.OpenIdConnect.IntegrationTests.csproj" --filter Category=PRTest --configuration Release --no-build --verbosity normal --logger "trx;LogFileName=firefoxui-test-results.trx"
- uses: actions/upload-artifact@v4
with:
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 4973e8e..2b302d6 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -1,56 +1,57 @@
- true
+ true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SecurityService.IntegrationTests/SecurityService.IntegrationTests.csproj b/SecurityService.IntegrationTests/SecurityService.IntegrationTests.csproj
index 2489cd7..c613ccc 100644
--- a/SecurityService.IntegrationTests/SecurityService.IntegrationTests.csproj
+++ b/SecurityService.IntegrationTests/SecurityService.IntegrationTests.csproj
@@ -15,6 +15,7 @@
+
diff --git a/SecurityService.OpenIdConnect.IntegrationTests/SecurityService.OpenIdConnect.IntegrationTests.csproj b/SecurityService.OpenIdConnect.IntegrationTests/SecurityService.OpenIdConnect.IntegrationTests.csproj
index dd8ef58..fcf7e2d 100644
--- a/SecurityService.OpenIdConnect.IntegrationTests/SecurityService.OpenIdConnect.IntegrationTests.csproj
+++ b/SecurityService.OpenIdConnect.IntegrationTests/SecurityService.OpenIdConnect.IntegrationTests.csproj
@@ -13,6 +13,7 @@
+
diff --git a/SecurityService.UnitTests/SecurityService.UnitTests.csproj b/SecurityService.UnitTests/SecurityService.UnitTests.csproj
index a742452..3a84388 100644
--- a/SecurityService.UnitTests/SecurityService.UnitTests.csproj
+++ b/SecurityService.UnitTests/SecurityService.UnitTests.csproj
@@ -4,14 +4,14 @@
enable
enable
false
+ true
+ true
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
+
diff --git a/SecurityService.UnitTests/global.json b/SecurityService.UnitTests/global.json
new file mode 100644
index 0000000..3140116
--- /dev/null
+++ b/SecurityService.UnitTests/global.json
@@ -0,0 +1,5 @@
+{
+ "test": {
+ "runner": "Microsoft.Testing.Platform"
+ }
+}
diff --git a/SecurityService/Program.cs b/SecurityService/Program.cs
index 34207f3..3d6ba58 100644
--- a/SecurityService/Program.cs
+++ b/SecurityService/Program.cs
@@ -23,6 +23,7 @@
using SecurityService.HealthChecks;
using SecurityService.HostedServices;
using Sentry.Extensibility;
+using Shared.EntityFramework;
using Shared.Extensions;
using Shared.General;
using Shared.Logger;
@@ -104,22 +105,54 @@
});
}
-builder.Services.AddDbContext(dbOptions =>
+if (options.UseInMemoryDatabase)
{
- if (options.UseInMemoryDatabase)
+ builder.Services.AddDbContext(builder => {
+ builder.UseInMemoryDatabase(options.InMemoryDatabaseName);
+ builder.UseOpenIddict();
+ });
+}
+else
+{
+ SqlServerRetryOptions retryOptions;
+ try
+ {
+ retryOptions = ConfigurationReader.GetSection("AppSettings:SqlServerRetry");
+ }
+ catch (KeyNotFoundException)
+ {
+ retryOptions = null;
+ }
+
+ if (retryOptions != null)
{
- dbOptions.UseInMemoryDatabase(options.InMemoryDatabaseName);
+ builder.Services.AddDbContext(options => {
+
+ options.UseSharedSqlServer(ConfigurationReader.GetConnectionString("AuthenticationDbContext"), retry => {
+ retry.AdditionalTransientErrorNumbers = retryOptions.AdditionalTransientErrorNumbers;
+ retry.MaxRetryCount = retryOptions.MaxRetryCount;
+ retry.MaxRetryDelay = retryOptions.MaxRetryDelay;
+ });
+ options.UseOpenIddict();
+ options.UseSqlServer(options => {
+ options.MigrationsAssembly("SecurityService.SqlServerMigrations");
+ });
+ });
}
else
{
- dbOptions.UseSqlServer(builder.Configuration.GetConnectionString("AuthenticationDbContext"), sqlServerOptions =>
- {
- sqlServerOptions.MigrationsAssembly("SecurityService.SqlServerMigrations");
+ builder.Services.AddDbContext(options => {
+ options.UseSqlServer(ConfigurationReader.GetConnectionString("AuthenticationDbContext"), retry => {
+ retry.EnableRetryOnFailure();
+ retry.MigrationsAssembly("SecurityService.SqlServerMigrations");
+ });
+ options.UseOpenIddict();
+
});
+
}
+}
- dbOptions.UseOpenIddict();
-});
builder.Services.AddSingleton();
builder.Services.AddSingleton();