diff --git a/src/Aspire.Hosting/MongoDB/MongoDBBuilderExtensions.cs b/src/Aspire.Hosting/MongoDB/MongoDBBuilderExtensions.cs index da6c665b020..d648f32f03e 100644 --- a/src/Aspire.Hosting/MongoDB/MongoDBBuilderExtensions.cs +++ b/src/Aspire.Hosting/MongoDB/MongoDBBuilderExtensions.cs @@ -68,6 +68,8 @@ public static IResourceBuilder AddMongoDBConnection(t /// A reference to the . public static IResourceBuilder AddDatabase(this IResourceBuilder builder, string name) { + builder.WithEnvironment("MONGO_INITDB_DATABASE", name); + var mongoDBDatabase = new MongoDBDatabaseResource(name, builder.Resource); return builder.ApplicationBuilder diff --git a/src/Aspire.Hosting/MongoDB/MongoDBConnectionStringBuilder.cs b/src/Aspire.Hosting/MongoDB/MongoDBConnectionStringBuilder.cs index 874876e1e73..467f9ff8e66 100644 --- a/src/Aspire.Hosting/MongoDB/MongoDBConnectionStringBuilder.cs +++ b/src/Aspire.Hosting/MongoDB/MongoDBConnectionStringBuilder.cs @@ -6,6 +6,7 @@ namespace Aspire.Hosting.MongoDB; internal class MongoDBConnectionStringBuilder { private const string Scheme = "mongodb"; + private const string AuthenticationDatabase = "admin"; private string? _server; private int _port; @@ -54,7 +55,8 @@ public string Build() Host = _server, Port = _port, UserName = _userName, - Password = _password + Password = _password, + Path = AuthenticationDatabase }; return builder.ToString(); diff --git a/src/Aspire.Hosting/MongoDB/MongoDBDatabaseResource.cs b/src/Aspire.Hosting/MongoDB/MongoDBDatabaseResource.cs index 7e0e4b45f37..1bffe3e4875 100644 --- a/src/Aspire.Hosting/MongoDB/MongoDBDatabaseResource.cs +++ b/src/Aspire.Hosting/MongoDB/MongoDBDatabaseResource.cs @@ -21,9 +21,7 @@ public class MongoDBDatabaseResource(string name, MongoDBContainerResource mongo { if (Parent.GetConnectionString() is { } connectionString) { - return connectionString.EndsWith('/') ? - $"{connectionString}{Name}" : - $"{connectionString}/{Name}"; + return connectionString; } throw new DistributedApplicationException("Parent resource connection string was null."); diff --git a/tests/Aspire.Hosting.Tests/MongoDB/AddMongoDBTests.cs b/tests/Aspire.Hosting.Tests/MongoDB/AddMongoDBTests.cs index 80e2e97a409..8b828217951 100644 --- a/tests/Aspire.Hosting.Tests/MongoDB/AddMongoDBTests.cs +++ b/tests/Aspire.Hosting.Tests/MongoDB/AddMongoDBTests.cs @@ -94,6 +94,6 @@ public void MongoDBCreatesConnectionString() var connectionStringResource = Assert.Single(appModel.Resources.OfType()); var connectionString = connectionStringResource.GetConnectionString(); - Assert.Equal("mongodb://root:password@localhost:27017/mydatabase", connectionString); + Assert.Equal("mongodb://root:password@localhost:27017/admin", connectionString); } } diff --git a/tests/Aspire.Hosting.Tests/MongoDB/MongoDBContainerResourceTests.cs b/tests/Aspire.Hosting.Tests/MongoDB/MongoDBContainerResourceTests.cs index f34bcbf519c..8a629b6558a 100644 --- a/tests/Aspire.Hosting.Tests/MongoDB/MongoDBContainerResourceTests.cs +++ b/tests/Aspire.Hosting.Tests/MongoDB/MongoDBContainerResourceTests.cs @@ -10,14 +10,14 @@ namespace Aspire.Hosting.Tests.MongoDB; public class MongoDBContainerResourceTests { [Theory] - [InlineData("password", "mongodb://root:password@myserver:1000/")] - [InlineData("@abc!$", "mongodb://root:%40abc!$@myserver:1000/")] - [InlineData("mypasswordwitha\"inthemiddle", "mongodb://root:mypasswordwitha\"inthemiddle@myserver:1000/")] - [InlineData("mypasswordwitha\"attheend\"", "mongodb://root:mypasswordwitha\"attheend\"@myserver:1000/")] - [InlineData("\"mypasswordwitha\"atthestart", "mongodb://root:\"mypasswordwitha\"atthestart@myserver:1000/")] - [InlineData("mypasswordwitha'inthemiddle", "mongodb://root:mypasswordwitha'inthemiddle@myserver:1000/")] - [InlineData("mypasswordwitha'attheend'", "mongodb://root:mypasswordwitha'attheend'@myserver:1000/")] - [InlineData("'mypasswordwitha'atthestart", "mongodb://root:'mypasswordwitha'atthestart@myserver:1000/")] + [InlineData("password", "mongodb://root:password@myserver:1000/admin")] + [InlineData("@abc!$", "mongodb://root:%40abc!$@myserver:1000/admin")] + [InlineData("mypasswordwitha\"inthemiddle", "mongodb://root:mypasswordwitha\"inthemiddle@myserver:1000/admin")] + [InlineData("mypasswordwitha\"attheend\"", "mongodb://root:mypasswordwitha\"attheend\"@myserver:1000/admin")] + [InlineData("\"mypasswordwitha\"atthestart", "mongodb://root:\"mypasswordwitha\"atthestart@myserver:1000/admin")] + [InlineData("mypasswordwitha'inthemiddle", "mongodb://root:mypasswordwitha'inthemiddle@myserver:1000/admin")] + [InlineData("mypasswordwitha'attheend'", "mongodb://root:mypasswordwitha'attheend'@myserver:1000/admin")] + [InlineData("'mypasswordwitha'atthestart", "mongodb://root:'mypasswordwitha'atthestart@myserver:1000/admin")] public void TestSpecialCharactersAndEscapeForPassword(string password, string expectedConnectionString) { var connectionString = new MongoDBConnectionStringBuilder()