diff --git a/build/dependencies.props b/build/dependencies.props index 34111dd..f0c605e 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -50,7 +50,7 @@ 3.0.0 3.0.0 3.0.0 - 3.0.0 + 3.0.1 3.0.0 3.0.0 3.0.1 diff --git a/src/BeatPulse.MongoDb/MongoDbLiveness.cs b/src/BeatPulse.MongoDb/MongoDbLiveness.cs index df50aa9..75a52b3 100644 --- a/src/BeatPulse.MongoDb/MongoDbLiveness.cs +++ b/src/BeatPulse.MongoDb/MongoDbLiveness.cs @@ -25,8 +25,17 @@ public async Task IsHealthy(LivenessExecutionContext context, Ca { _logger?.LogInformation($"{nameof(MongoDbLiveness)} is checking the MongoDb database."); - await new MongoClient(_connectionString) - .ListDatabasesAsync(cancellationToken); + var client = new MongoClient(_connectionString); + + var url = new MongoUrl(_connectionString); + if (string.IsNullOrWhiteSpace(url.DatabaseName)) + { + await client.ListDatabasesAsync(cancellationToken); + } + else + { + await client.GetDatabase(url.DatabaseName).ListCollectionsAsync(cancellationToken: cancellationToken); + } _logger?.LogInformation($"The {nameof(MongoDbLiveness)} check success."); diff --git a/tests/FunctionalTests/BeatPulse.MongoDb/BeatPulseLivenessTests.cs b/tests/FunctionalTests/BeatPulse.MongoDb/BeatPulseLivenessTests.cs index 40cfb12..2ab67ad 100644 --- a/tests/FunctionalTests/BeatPulse.MongoDb/BeatPulseLivenessTests.cs +++ b/tests/FunctionalTests/BeatPulse.MongoDb/BeatPulseLivenessTests.cs @@ -66,5 +66,52 @@ public async Task return_false_if_mongodb_is_not_available() response.StatusCode .Should().Be(HttpStatusCode.ServiceUnavailable); } + + [Fact] + public async Task return_true_if_mongodb_is_available_and_database_is_defined() + { + var connectionString = @"mongodb://localhost:27017/database"; + + var webHostBuilder = new WebHostBuilder() + .UseStartup() + .UseBeatPulse() + .ConfigureServices(services => + { + services.AddBeatPulse(context => + { + context.AddMongoDb(connectionString); + }); + }); + + var server = new TestServer(webHostBuilder); + + var response = await server.CreateRequest($"{BeatPulseKeys.BEATPULSE_DEFAULT_PATH}") + .GetAsync(); + + response.EnsureSuccessStatusCode(); + } + + [Fact] + public async Task return_false_if_mongodb_is_not_available_and_database_is_defined() + { + var webHostBuilder = new WebHostBuilder() + .UseStartup() + .UseBeatPulse() + .ConfigureServices(services => + { + services.AddBeatPulse(context => + { + context.AddMongoDb("mongodb://nonexistingdomain:27017/database"); + }); + }); + + var server = new TestServer(webHostBuilder); + + var response = await server.CreateRequest($"{BeatPulseKeys.BEATPULSE_DEFAULT_PATH}") + .GetAsync(); + + response.StatusCode + .Should().Be(HttpStatusCode.ServiceUnavailable); + } } }