diff --git a/src/NServiceBus.Persistence.CosmosDB.LogicalOutbox.AcceptanceTests/NServiceBus.Persistence.CosmosDB.LogicalOutbox.AcceptanceTests.csproj b/src/NServiceBus.Persistence.CosmosDB.LogicalOutbox.AcceptanceTests/NServiceBus.Persistence.CosmosDB.LogicalOutbox.AcceptanceTests.csproj
index ff10bd52..bb206555 100644
--- a/src/NServiceBus.Persistence.CosmosDB.LogicalOutbox.AcceptanceTests/NServiceBus.Persistence.CosmosDB.LogicalOutbox.AcceptanceTests.csproj
+++ b/src/NServiceBus.Persistence.CosmosDB.LogicalOutbox.AcceptanceTests/NServiceBus.Persistence.CosmosDB.LogicalOutbox.AcceptanceTests.csproj
@@ -11,6 +11,7 @@
+
diff --git a/src/NServiceBus.Persistence.CosmosDB.LogicalOutbox.AcceptanceTests/SetupFixture.cs b/src/NServiceBus.Persistence.CosmosDB.LogicalOutbox.AcceptanceTests/SetupFixture.cs
index 2e518590..250e3f87 100644
--- a/src/NServiceBus.Persistence.CosmosDB.LogicalOutbox.AcceptanceTests/SetupFixture.cs
+++ b/src/NServiceBus.Persistence.CosmosDB.LogicalOutbox.AcceptanceTests/SetupFixture.cs
@@ -16,9 +16,7 @@ public class SetupFixture
[OneTimeSetUp]
public async Task OneTimeSetUp()
{
- var connectionStringEnvironmentVariableName = "CosmosDBPersistence_ConnectionString";
- var connectionString = GetEnvironmentVariable(connectionStringEnvironmentVariableName,
- fallbackEmulatorConnectionString: "AccountEndpoint = https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==");
+ var connectionString = GetConnectionStringOrFallback();
ContainerName = $"{DateTime.UtcNow.Ticks}_{Path.GetFileNameWithoutExtension(Path.GetTempFileName())}";
@@ -51,14 +49,17 @@ public async Task OneTimeTearDown()
CosmosDbClient.Dispose();
}
- static string GetEnvironmentVariable(string variable, string fallbackEmulatorConnectionString)
+ public static string GetConnectionStringOrFallback(string environmentVariableName = "CosmosDBPersistence_ConnectionString", string fallbackEmulatorConnectionString = EmulatorConnectionString)
{
- var candidate = Environment.GetEnvironmentVariable(variable, EnvironmentVariableTarget.User);
- var environmentVariableConnectionString = string.IsNullOrWhiteSpace(candidate) ? Environment.GetEnvironmentVariable(variable) : candidate;
+ var candidate = Environment.GetEnvironmentVariable(environmentVariableName, EnvironmentVariableTarget.User);
+ var environmentVariableConnectionString = string.IsNullOrWhiteSpace(candidate) ? Environment.GetEnvironmentVariable(environmentVariableName) : candidate;
return string.IsNullOrEmpty(environmentVariableConnectionString) ? fallbackEmulatorConnectionString : environmentVariableConnectionString;
}
+ public static bool IsRunningWithEmulator => GetConnectionStringOrFallback() == EmulatorConnectionString;
+
+ const string EmulatorConnectionString = "AccountEndpoint = https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==";
public const string DatabaseName = "CosmosDBPersistence";
public const string PartitionPathKey = "/deep/down";
public static string ContainerName;
diff --git a/src/NServiceBus.Persistence.CosmosDB.NonTransactionalSagas.AcceptanceTests/NServiceBus.Persistence.CosmosDB.NonTransactionalSagas.AcceptanceTests.csproj b/src/NServiceBus.Persistence.CosmosDB.NonTransactionalSagas.AcceptanceTests/NServiceBus.Persistence.CosmosDB.NonTransactionalSagas.AcceptanceTests.csproj
index bd935989..79b3d686 100644
--- a/src/NServiceBus.Persistence.CosmosDB.NonTransactionalSagas.AcceptanceTests/NServiceBus.Persistence.CosmosDB.NonTransactionalSagas.AcceptanceTests.csproj
+++ b/src/NServiceBus.Persistence.CosmosDB.NonTransactionalSagas.AcceptanceTests/NServiceBus.Persistence.CosmosDB.NonTransactionalSagas.AcceptanceTests.csproj
@@ -11,6 +11,7 @@
+
diff --git a/src/NServiceBus.Persistence.CosmosDB.NonTransactionalSagas.AcceptanceTests/SetupFixture.cs b/src/NServiceBus.Persistence.CosmosDB.NonTransactionalSagas.AcceptanceTests/SetupFixture.cs
index 00faa23f..64e966ce 100644
--- a/src/NServiceBus.Persistence.CosmosDB.NonTransactionalSagas.AcceptanceTests/SetupFixture.cs
+++ b/src/NServiceBus.Persistence.CosmosDB.NonTransactionalSagas.AcceptanceTests/SetupFixture.cs
@@ -16,9 +16,7 @@ public class SetupFixture
[OneTimeSetUp]
public async Task OneTimeSetUp()
{
- var connectionStringEnvironmentVariableName = "CosmosDBPersistence_ConnectionString";
- var connectionString = GetEnvironmentVariable(connectionStringEnvironmentVariableName,
- fallbackEmulatorConnectionString: "AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==");
+ var connectionString = GetConnectionStringOrFallback();
ContainerName = $"{DateTime.UtcNow.Ticks}_{Path.GetFileNameWithoutExtension(Path.GetTempFileName())}";
@@ -51,14 +49,17 @@ public async Task OneTimeTearDown()
CosmosDbClient.Dispose();
}
- static string GetEnvironmentVariable(string variable, string fallbackEmulatorConnectionString)
+ public static string GetConnectionStringOrFallback(string environmentVariableName = "CosmosDBPersistence_ConnectionString", string fallbackEmulatorConnectionString = EmulatorConnectionString)
{
- var candidate = Environment.GetEnvironmentVariable(variable, EnvironmentVariableTarget.User);
- var environmentVariableConnectionString = string.IsNullOrWhiteSpace(candidate) ? Environment.GetEnvironmentVariable(variable) : candidate;
+ var candidate = Environment.GetEnvironmentVariable(environmentVariableName, EnvironmentVariableTarget.User);
+ var environmentVariableConnectionString = string.IsNullOrWhiteSpace(candidate) ? Environment.GetEnvironmentVariable(environmentVariableName) : candidate;
return string.IsNullOrEmpty(environmentVariableConnectionString) ? fallbackEmulatorConnectionString : environmentVariableConnectionString;
}
+ public static bool IsRunningWithEmulator => GetConnectionStringOrFallback() == EmulatorConnectionString;
+
+ const string EmulatorConnectionString = "AccountEndpoint = https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==";
public const string DatabaseName = "CosmosDBPersistence";
public const string PartitionPathKey = "/id";
public static string ContainerName;
diff --git a/src/NServiceBus.Persistence.CosmosDB.PessimisticLock.AcceptanceTests/NServiceBus.Persistence.CosmosDB.PessimisticLock.AcceptanceTests.csproj b/src/NServiceBus.Persistence.CosmosDB.PessimisticLock.AcceptanceTests/NServiceBus.Persistence.CosmosDB.PessimisticLock.AcceptanceTests.csproj
index 292aa5dc..8e86fe69 100644
--- a/src/NServiceBus.Persistence.CosmosDB.PessimisticLock.AcceptanceTests/NServiceBus.Persistence.CosmosDB.PessimisticLock.AcceptanceTests.csproj
+++ b/src/NServiceBus.Persistence.CosmosDB.PessimisticLock.AcceptanceTests/NServiceBus.Persistence.CosmosDB.PessimisticLock.AcceptanceTests.csproj
@@ -11,6 +11,7 @@
+
diff --git a/src/NServiceBus.Persistence.CosmosDB.PessimisticLock.AcceptanceTests/SetupFixture.cs b/src/NServiceBus.Persistence.CosmosDB.PessimisticLock.AcceptanceTests/SetupFixture.cs
index 00faa23f..64e966ce 100644
--- a/src/NServiceBus.Persistence.CosmosDB.PessimisticLock.AcceptanceTests/SetupFixture.cs
+++ b/src/NServiceBus.Persistence.CosmosDB.PessimisticLock.AcceptanceTests/SetupFixture.cs
@@ -16,9 +16,7 @@ public class SetupFixture
[OneTimeSetUp]
public async Task OneTimeSetUp()
{
- var connectionStringEnvironmentVariableName = "CosmosDBPersistence_ConnectionString";
- var connectionString = GetEnvironmentVariable(connectionStringEnvironmentVariableName,
- fallbackEmulatorConnectionString: "AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==");
+ var connectionString = GetConnectionStringOrFallback();
ContainerName = $"{DateTime.UtcNow.Ticks}_{Path.GetFileNameWithoutExtension(Path.GetTempFileName())}";
@@ -51,14 +49,17 @@ public async Task OneTimeTearDown()
CosmosDbClient.Dispose();
}
- static string GetEnvironmentVariable(string variable, string fallbackEmulatorConnectionString)
+ public static string GetConnectionStringOrFallback(string environmentVariableName = "CosmosDBPersistence_ConnectionString", string fallbackEmulatorConnectionString = EmulatorConnectionString)
{
- var candidate = Environment.GetEnvironmentVariable(variable, EnvironmentVariableTarget.User);
- var environmentVariableConnectionString = string.IsNullOrWhiteSpace(candidate) ? Environment.GetEnvironmentVariable(variable) : candidate;
+ var candidate = Environment.GetEnvironmentVariable(environmentVariableName, EnvironmentVariableTarget.User);
+ var environmentVariableConnectionString = string.IsNullOrWhiteSpace(candidate) ? Environment.GetEnvironmentVariable(environmentVariableName) : candidate;
return string.IsNullOrEmpty(environmentVariableConnectionString) ? fallbackEmulatorConnectionString : environmentVariableConnectionString;
}
+ public static bool IsRunningWithEmulator => GetConnectionStringOrFallback() == EmulatorConnectionString;
+
+ const string EmulatorConnectionString = "AccountEndpoint = https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==";
public const string DatabaseName = "CosmosDBPersistence";
public const string PartitionPathKey = "/id";
public static string ContainerName;
diff --git a/src/NServiceBus.Persistence.CosmosDB.PhysicalOutbox.AcceptanceTests/NServiceBus.Persistence.CosmosDB.PhysicalOutbox.AcceptanceTests.csproj b/src/NServiceBus.Persistence.CosmosDB.PhysicalOutbox.AcceptanceTests/NServiceBus.Persistence.CosmosDB.PhysicalOutbox.AcceptanceTests.csproj
index ff10bd52..bb206555 100644
--- a/src/NServiceBus.Persistence.CosmosDB.PhysicalOutbox.AcceptanceTests/NServiceBus.Persistence.CosmosDB.PhysicalOutbox.AcceptanceTests.csproj
+++ b/src/NServiceBus.Persistence.CosmosDB.PhysicalOutbox.AcceptanceTests/NServiceBus.Persistence.CosmosDB.PhysicalOutbox.AcceptanceTests.csproj
@@ -11,6 +11,7 @@
+
diff --git a/src/NServiceBus.Persistence.CosmosDB.PhysicalOutbox.AcceptanceTests/SetupFixture.cs b/src/NServiceBus.Persistence.CosmosDB.PhysicalOutbox.AcceptanceTests/SetupFixture.cs
index 642b2187..250e3f87 100644
--- a/src/NServiceBus.Persistence.CosmosDB.PhysicalOutbox.AcceptanceTests/SetupFixture.cs
+++ b/src/NServiceBus.Persistence.CosmosDB.PhysicalOutbox.AcceptanceTests/SetupFixture.cs
@@ -16,9 +16,7 @@ public class SetupFixture
[OneTimeSetUp]
public async Task OneTimeSetUp()
{
- var connectionStringEnvironmentVariableName = "CosmosDBPersistence_ConnectionString";
- var connectionString = GetEnvironmentVariable(connectionStringEnvironmentVariableName,
- fallbackEmulatorConnectionString: "AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==");
+ var connectionString = GetConnectionStringOrFallback();
ContainerName = $"{DateTime.UtcNow.Ticks}_{Path.GetFileNameWithoutExtension(Path.GetTempFileName())}";
@@ -51,14 +49,17 @@ public async Task OneTimeTearDown()
CosmosDbClient.Dispose();
}
- static string GetEnvironmentVariable(string variable, string fallbackEmulatorConnectionString)
+ public static string GetConnectionStringOrFallback(string environmentVariableName = "CosmosDBPersistence_ConnectionString", string fallbackEmulatorConnectionString = EmulatorConnectionString)
{
- var candidate = Environment.GetEnvironmentVariable(variable, EnvironmentVariableTarget.User);
- var environmentVariableConnectionString = string.IsNullOrWhiteSpace(candidate) ? Environment.GetEnvironmentVariable(variable) : candidate;
+ var candidate = Environment.GetEnvironmentVariable(environmentVariableName, EnvironmentVariableTarget.User);
+ var environmentVariableConnectionString = string.IsNullOrWhiteSpace(candidate) ? Environment.GetEnvironmentVariable(environmentVariableName) : candidate;
return string.IsNullOrEmpty(environmentVariableConnectionString) ? fallbackEmulatorConnectionString : environmentVariableConnectionString;
}
+ public static bool IsRunningWithEmulator => GetConnectionStringOrFallback() == EmulatorConnectionString;
+
+ const string EmulatorConnectionString = "AccountEndpoint = https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==";
public const string DatabaseName = "CosmosDBPersistence";
public const string PartitionPathKey = "/deep/down";
public static string ContainerName;
diff --git a/src/NServiceBus.Persistence.CosmosDB.TransactionalSession.AcceptanceTests/SetupFixture.cs b/src/NServiceBus.Persistence.CosmosDB.TransactionalSession.AcceptanceTests/SetupFixture.cs
index 25a22ef4..04d12d0e 100644
--- a/src/NServiceBus.Persistence.CosmosDB.TransactionalSession.AcceptanceTests/SetupFixture.cs
+++ b/src/NServiceBus.Persistence.CosmosDB.TransactionalSession.AcceptanceTests/SetupFixture.cs
@@ -17,8 +17,7 @@ public class SetupFixture
[OneTimeSetUp]
public async Task OneTimeSetUp()
{
- var connectionString = GetEnvironmentVariable("CosmosDBPersistence_ConnectionString",
- fallbackEmulatorConnectionString: "AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==");
+ var connectionString = GetConnectionStringOrFallback();
ContainerName = $"{DateTime.UtcNow.Ticks}_{Path.GetFileNameWithoutExtension(Path.GetTempFileName())}";
@@ -51,13 +50,17 @@ public async Task OneTimeTearDown()
CosmosDbClient.Dispose();
}
- static string GetEnvironmentVariable(string variable, string fallbackEmulatorConnectionString)
+ public static string GetConnectionStringOrFallback(string environmentVariableName = "CosmosDBPersistence_ConnectionString", string fallbackEmulatorConnectionString = EmulatorConnectionString)
{
- var environmentVariableConnectionString = Environment.GetEnvironmentVariable(variable);
+ var candidate = Environment.GetEnvironmentVariable(environmentVariableName, EnvironmentVariableTarget.User);
+ var environmentVariableConnectionString = string.IsNullOrWhiteSpace(candidate) ? Environment.GetEnvironmentVariable(environmentVariableName) : candidate;
return string.IsNullOrEmpty(environmentVariableConnectionString) ? fallbackEmulatorConnectionString : environmentVariableConnectionString;
}
+ public static bool IsRunningWithEmulator => GetConnectionStringOrFallback() == EmulatorConnectionString;
+
+ const string EmulatorConnectionString = "AccountEndpoint = https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==";
public const string DatabaseName = "CosmosDBPersistence";
public const string PartitionPathKey = $"/{PartitionPropertyName}";
public const string PartitionPropertyName = "somekey";
diff --git a/src/SharedAcceptanceTests.All/When_default_credentials_used.cs b/src/SharedAcceptanceTests.All/When_default_credentials_used.cs
new file mode 100644
index 00000000..899694bd
--- /dev/null
+++ b/src/SharedAcceptanceTests.All/When_default_credentials_used.cs
@@ -0,0 +1,88 @@
+namespace NServiceBus.AcceptanceTests
+{
+ using System;
+ using System.Data.Common;
+ using System.Threading.Tasks;
+ using AcceptanceTesting;
+ using Azure.Identity;
+ using EndpointTemplates;
+ using Microsoft.Azure.Cosmos;
+ using NUnit.Framework;
+
+ public class When_default_credentials_used : NServiceBusAcceptanceTest
+ {
+ [Test]
+ public async Task Should_work()
+ {
+ if (SetupFixture.IsRunningWithEmulator)
+ {
+ Assert.Ignore("This test uses DefaultAzureCredential which is not supported with the emulator.");
+ }
+
+ var context = await Scenario.Define()
+ .WithEndpoint(b => b.When(session => session.SendLocal(new StartSaga1
+ {
+ DataId = Guid.NewGuid()
+ })))
+ .Done(c => c.SagaReceivedMessage)
+ .Run();
+
+ Assert.True(context.SagaReceivedMessage);
+ }
+
+ public class Context : ScenarioContext
+ {
+ public bool SagaReceivedMessage { get; set; }
+ }
+
+ public class EndpointUsingDefaultCredentials : EndpointConfigurationBuilder
+ {
+ public EndpointUsingDefaultCredentials() =>
+ EndpointSetup(config =>
+ {
+ var builder = new DbConnectionStringBuilder
+ {
+ ConnectionString = SetupFixture.GetConnectionStringOrFallback()
+ };
+ builder.TryGetValue("AccountEndpoint", out var accountEndpoint);
+
+ var cosmosClient = new CosmosClient($"{accountEndpoint}", new DefaultAzureCredential(), new CosmosClientOptions());
+
+ var persistence = config.UsePersistence();
+ persistence.DisableContainerCreation();
+ persistence.CosmosClient(cosmosClient);
+ // with RBAC data plane operations are not supported, so we are using the existing database and container
+ persistence.DatabaseName(Environment.GetEnvironmentVariable("CosmosDBPersistence_ConnectionString_DatabaseName"));
+ persistence.DefaultContainer(Environment.GetEnvironmentVariable("CosmosDBPersistence_ConnectionString_ContainerOrTableName"), "/id");
+ });
+
+ public class JustASaga : Saga, IAmStartedByMessages
+ {
+ public JustASaga(Context testContext) => this.testContext = testContext;
+
+ public Task Handle(StartSaga1 message, IMessageHandlerContext context)
+ {
+ Data.DataId = message.DataId;
+ testContext.SagaReceivedMessage = true;
+ MarkAsComplete();
+ return Task.CompletedTask;
+ }
+
+ protected override void ConfigureHowToFindSaga(SagaPropertyMapper mapper)
+ => mapper.ConfigureMapping(m => m.DataId).ToSaga(s => s.DataId);
+
+ readonly Context testContext;
+ }
+
+ public class JustASagaData : ContainSagaData
+ {
+ public virtual Guid DataId { get; set; }
+ }
+ }
+
+ public class StartSaga1 : ICommand
+ {
+ public Guid DataId { get; set; }
+ }
+ }
+}
\ No newline at end of file