diff --git a/.github/workflows/healthchecks_arangodb_ci.yml b/.github/workflows/healthchecks_arangodb_ci.yml index 0c1a1fdb90..2f9dcc2d2c 100644 --- a/.github/workflows/healthchecks_arangodb_ci.yml +++ b/.github/workflows/healthchecks_arangodb_ci.yml @@ -28,46 +28,8 @@ on: jobs: build: - runs-on: ubuntu-latest - services: - arangodb: - image: arangodb/arangodb:latest - ports: - - 8529:8529 - env: - ARANGO_ROOT_PASSWORD: strongArangoDbPassword - steps: - - uses: actions/checkout@v3 - - name: Setup .NET - uses: actions/setup-dotnet@v4 - with: - dotnet-version: | - 8.0.x - 9.0.x - - name: Restore - run: | - dotnet restore ./src/HealthChecks.ArangoDb/HealthChecks.ArangoDb.csproj && - dotnet restore ./test/HealthChecks.ArangoDb.Tests/HealthChecks.ArangoDb.Tests.csproj - - name: Check formatting - run: | - dotnet format --no-restore --verify-no-changes --severity warn ./src/HealthChecks.ArangoDb/HealthChecks.ArangoDb.csproj || (echo "Run 'dotnet format' to fix issues" && exit 1) && - dotnet format --no-restore --verify-no-changes --severity warn ./test/HealthChecks.ArangoDb.Tests/HealthChecks.ArangoDb.Tests.csproj || (echo "Run 'dotnet format' to fix issues" && exit 1) - - name: Build - run: | - dotnet build --no-restore ./src/HealthChecks.ArangoDb/HealthChecks.ArangoDb.csproj && - dotnet build --no-restore ./test/HealthChecks.ArangoDb.Tests/HealthChecks.ArangoDb.Tests.csproj - - name: Test - run: > - dotnet test - ./test/HealthChecks.ArangoDb.Tests/HealthChecks.ArangoDb.Tests.csproj - --no-restore - --no-build - --collect "XPlat Code Coverage" - --results-directory .coverage - -- - DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=opencover - - name: Upload Coverage - uses: codecov/codecov-action@v5 - with: - flags: ArangoDb - directory: .coverage + uses: ./.github/workflows/reusable_ci_workflow.yml + with: + PROJECT_PATH: ./src/HealthChecks.ArangoDb/HealthChecks.ArangoDb.csproj + TEST_PROJECT_PATH: ./test/HealthChecks.ArangoDb.Tests/HealthChecks.ArangoDb.Tests.csproj + CODECOV_FLAGS: ArangoDb diff --git a/Directory.Packages.props b/Directory.Packages.props index 2c2207765a..554fc0c0dc 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -103,6 +103,7 @@ + diff --git a/test/HealthChecks.ArangoDb.Tests/ArangoDbContainerFixture.cs b/test/HealthChecks.ArangoDb.Tests/ArangoDbContainerFixture.cs new file mode 100644 index 0000000000..7b0f6a43d8 --- /dev/null +++ b/test/HealthChecks.ArangoDb.Tests/ArangoDbContainerFixture.cs @@ -0,0 +1,46 @@ +using Testcontainers.ArangoDb; + +namespace HealthChecks.ArangoDb.Tests; + +public class ArangoDbContainerFixture : IAsyncLifetime +{ + private const string Registry = "docker.io"; + + private const string Image = "library/arangodb"; + + private const string Tag = "3.12.5.2"; + + public ArangoDbContainer? Container { get; private set; } + + public ArangoDbOptions GetConnectionOptions() + { + if (Container is null) + { + throw new InvalidOperationException("The test container was not initialized."); + } + + var options = new ArangoDbOptions + { + HostUri = Container.GetTransportAddress(), + UserName = ArangoDbBuilder.DefaultUsername, + Password = ArangoDbBuilder.DefaultPassword, + }; + + return options; + } + + public async Task InitializeAsync() => Container = await CreateContainerAsync(); + + public Task DisposeAsync() => Container?.DisposeAsync().AsTask() ?? Task.CompletedTask; + + private async Task CreateContainerAsync() + { + var container = new ArangoDbBuilder() + .WithImage($"{Registry}/{Image}:{Tag}") + .Build(); + + await container.StartAsync(); + + return container; + } +} diff --git a/test/HealthChecks.ArangoDb.Tests/Functional/ArangoDbHealthCheckTests.cs b/test/HealthChecks.ArangoDb.Tests/Functional/ArangoDbHealthCheckTests.cs index b7c178428a..db1b488f9a 100644 --- a/test/HealthChecks.ArangoDb.Tests/Functional/ArangoDbHealthCheckTests.cs +++ b/test/HealthChecks.ArangoDb.Tests/Functional/ArangoDbHealthCheckTests.cs @@ -2,22 +2,18 @@ namespace HealthChecks.ArangoDb.Tests.Functional; -public class arangodb_healthcheck_should +public class arangodb_healthcheck_should(ArangoDbContainerFixture arangoDbFixture) : IClassFixture { [Fact] public async Task be_healthy_if_arangodb_is_available() { + var options = arangoDbFixture.GetConnectionOptions(); + var webHostBuilder = new WebHostBuilder() .ConfigureServices(services => { services.AddHealthChecks() - .AddArangoDb(_ => new ArangoDbOptions - { - HostUri = "http://localhost:8529/", - Database = "_system", - UserName = "root", - Password = "strongArangoDbPassword" - }, tags: ["arangodb"]); + .AddArangoDb(_ => options, tags: ["arangodb"]); }) .Configure(app => { @@ -37,25 +33,14 @@ public async Task be_healthy_if_arangodb_is_available() [Fact] public async Task be_healthy_if_multiple_arango_are_available() { + var options = arangoDbFixture.GetConnectionOptions(); + var webHostBuilder = new WebHostBuilder() .ConfigureServices(services => { services.AddHealthChecks() - .AddArangoDb(_ => new ArangoDbOptions - { - HostUri = "http://localhost:8529/", - Database = "_system", - UserName = "root", - Password = "strongArangoDbPassword" - }, tags: ["arango"], name: "1") - .AddArangoDb(_ => new ArangoDbOptions - { - HostUri = "http://localhost:8529/", - Database = "_system", - UserName = "root", - Password = "strongArangoDbPassword", - IsGenerateJwtTokenBasedOnUserNameAndPassword = true - }, tags: ["arango"], name: "2"); + .AddArangoDb(_ => options, tags: ["arango"], name: "1") + .AddArangoDb(_ => options, tags: ["arango"], name: "2"); }) .Configure(app => { @@ -75,17 +60,15 @@ public async Task be_healthy_if_multiple_arango_are_available() [Fact] public async Task be_unhealthy_if_arango_is_not_available() { + var options = arangoDbFixture.GetConnectionOptions(); + + options.Password = "invalid password"; + var webHostBuilder = new WebHostBuilder() .ConfigureServices(services => { services.AddHealthChecks() - .AddArangoDb(_ => new ArangoDbOptions - { - HostUri = "http://localhost:8529/", - Database = "_system", - UserName = "root", - Password = "invalid password" - }, tags: ["arango"]); + .AddArangoDb(_ => options, tags: ["arango"]); }) .Configure(app => { diff --git a/test/HealthChecks.ArangoDb.Tests/HealthChecks.ArangoDb.Tests.csproj b/test/HealthChecks.ArangoDb.Tests/HealthChecks.ArangoDb.Tests.csproj index 4364febf29..7cdf948080 100644 --- a/test/HealthChecks.ArangoDb.Tests/HealthChecks.ArangoDb.Tests.csproj +++ b/test/HealthChecks.ArangoDb.Tests/HealthChecks.ArangoDb.Tests.csproj @@ -4,4 +4,8 @@ + + + +