diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 49dce58f4e4..37a6ce9fcfc 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -257,13 +257,6 @@ jobs:
matrix:
framework: ["net8.0", "net10.0"]
provider: ["AzureStorage"]
- services:
- azurite:
- image: mcr.microsoft.com/azure-storage/azurite:latest
- ports:
- - 10000:10000
- - 10001:10001
- - 10002:10002
steps:
- uses: actions/checkout@v4
- name: Setup .NET
@@ -278,11 +271,6 @@ jobs:
--logger "trx;LogFileName=test_results_${{ matrix.provider }}_${{ matrix.framework }}.trx"
--
-parallel none -noshadow
- env:
-# [SuppressMessage("Microsoft.Security", "CS002:SecretInNextLine", Justification="Not a secret")]
-# [SuppressMessage("Microsoft.Security", "CSCAN0090:ConfigFile", Justification="Not a secret")]
-# [SuppressMessage("Microsoft.Security", "CSCAN0220:DefaultPasswordContexts", Justification="Not a secret")]
- ORLEANSDATACONNECTIONSTRING: "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;QueueEndpoint=http://127.0.0.1:10001/devstoreaccount1;TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;"
- name: Archive Test Results
if: always()
uses: actions/upload-artifact@v4
@@ -341,8 +329,6 @@ jobs:
# [SuppressMessage("Microsoft.Security", "CSCAN0090:ConfigFile", Justification="Not a secret")]
# [SuppressMessage("Microsoft.Security", "CSCAN0220:DefaultPasswordContexts", Justification="Not a secret")]
ORLEANSEVENTHUBCONNECTIONSTRING: "Endpoint=sb://localhost;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=SAS_KEY_VALUE;UseDevelopmentEmulator=true;"
-# [SuppressMessage("Microsoft.Security", "CS002:SecretInNextLine", Justification="Not a secret")]
- ORLEANSDATACONNECTIONSTRING: "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;QueueEndpoint=http://127.0.0.1:10001/devstoreaccount1;TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;"
- name: Clean up Event Hubs emulator
if: always()
run: docker rm -f eventhubs-emulator
@@ -595,7 +581,7 @@ jobs:
- name: Test
run: dotnet test
--framework ${{ matrix.framework }}
- --filter "Category=${{ matrix.suite }}&Category!=Consul"
+ --filter "Category=${{ matrix.suite }}&Category!=Consul&Category!=AzureStorage"
--blame-hang-timeout 10m
--logger "trx;LogFileName=test_results_${{ matrix.suite }}_${{ matrix.framework }}.trx"
--
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 21c418f7e0a..6d5b5408b44 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -105,6 +105,7 @@
+
diff --git a/test/Benchmarks/GrainStorage/GrainStorageBenchmark.cs b/test/Benchmarks/GrainStorage/GrainStorageBenchmark.cs
index a87db9227ee..fa32841e87a 100644
--- a/test/Benchmarks/GrainStorage/GrainStorageBenchmark.cs
+++ b/test/Benchmarks/GrainStorage/GrainStorageBenchmark.cs
@@ -68,7 +68,7 @@ public void Configure(ISiloBuilder hostBuilder)
{
hostBuilder.AddAzureTableGrainStorageAsDefault(options =>
{
- options.TableServiceClient = new(TestDefaultConfiguration.DataConnectionString);
+ options.TableServiceClient = new(AzuriteContainerManager.ConnectionString);
});
}
}
@@ -79,7 +79,7 @@ public void Configure(ISiloBuilder hostBuilder)
{
hostBuilder.AddAzureBlobGrainStorageAsDefault(options =>
{
- options.BlobServiceClient = new(TestDefaultConfiguration.DataConnectionString);
+ options.BlobServiceClient = new(AzuriteContainerManager.ConnectionString);
});
}
}
@@ -90,7 +90,7 @@ public void Configure(ISiloBuilder hostBuilder)
{
hostBuilder.AddAdoNetGrainStorageAsDefault(options =>
{
- options.ConnectionString = TestDefaultConfiguration.DataConnectionString;
+ options.ConnectionString = AzuriteContainerManager.ConnectionString;
});
}
}
diff --git a/test/Benchmarks/Transactions/TransactionBenchmark.cs b/test/Benchmarks/Transactions/TransactionBenchmark.cs
index a9ee3d9b147..f804debc1e9 100644
--- a/test/Benchmarks/Transactions/TransactionBenchmark.cs
+++ b/test/Benchmarks/Transactions/TransactionBenchmark.cs
@@ -72,7 +72,7 @@ public void Configure(ISiloBuilder hostBuilder)
{
hostBuilder.AddAzureTableTransactionalStateStorageAsDefault(options =>
{
- options.TableServiceClient = new(TestDefaultConfiguration.DataConnectionString);
+ options.TableServiceClient = new(AzuriteContainerManager.ConnectionString);
});
}
}
diff --git a/test/Extensions/ServiceBus.Tests/EventHubConfigurationExtensions.cs b/test/Extensions/ServiceBus.Tests/EventHubConfigurationExtensions.cs
index 035122336ad..c1712d35773 100644
--- a/test/Extensions/ServiceBus.Tests/EventHubConfigurationExtensions.cs
+++ b/test/Extensions/ServiceBus.Tests/EventHubConfigurationExtensions.cs
@@ -1,4 +1,3 @@
-using Azure.Identity;
using Orleans.Configuration;
using Tester.AzureUtils;
using TestExtensions;
@@ -9,14 +8,7 @@ public static class EventHubConfigurationExtensions
{
public static EventHubOptions ConfigureTestDefaults(this EventHubOptions options, string eventHubName, string consumerGroup)
{
- if (TestDefaultConfiguration.UseAadAuthentication)
- {
- options.ConfigureEventHubConnection(TestDefaultConfiguration.EventHubFullyQualifiedNamespace, eventHubName, consumerGroup, TestDefaultConfiguration.TokenCredential);
- }
- else
- {
- options.ConfigureEventHubConnection(TestDefaultConfiguration.EventHubConnectionString, eventHubName, consumerGroup);
- }
+ options.ConfigureEventHubConnection(TestDefaultConfiguration.EventHubConnectionString, eventHubName, consumerGroup);
return options;
}
diff --git a/test/Extensions/Tester.Cosmos/CosmosOptionsExtensions.cs b/test/Extensions/Tester.Cosmos/CosmosOptionsExtensions.cs
index f3b5624367d..0c00f8c7ae1 100644
--- a/test/Extensions/Tester.Cosmos/CosmosOptionsExtensions.cs
+++ b/test/Extensions/Tester.Cosmos/CosmosOptionsExtensions.cs
@@ -1,4 +1,3 @@
-using Azure.Identity;
using Microsoft.Azure.Cosmos;
using Orleans.Clustering.Cosmos;
using Orleans.Persistence.Cosmos;
@@ -11,43 +10,19 @@ public static class CosmosOptionsExtensions
{
public static void ConfigureTestDefaults(this CosmosClusteringOptions options)
{
- if (TestDefaultConfiguration.UseAadAuthentication)
- {
- options.ConfigureCosmosClient(TestDefaultConfiguration.CosmosDBAccountEndpoint, TestDefaultConfiguration.TokenCredential);
- }
- else
- {
- options.ConfigureCosmosClient(GetCosmosClientUsingAccountKey());
- }
-
+ options.ConfigureCosmosClient(GetCosmosClientUsingAccountKey());
options.IsResourceCreationEnabled = true;
}
public static void ConfigureTestDefaults(this CosmosGrainStorageOptions options)
{
- if (TestDefaultConfiguration.UseAadAuthentication)
- {
- options.ConfigureCosmosClient(TestDefaultConfiguration.CosmosDBAccountEndpoint, TestDefaultConfiguration.TokenCredential);
- }
- else
- {
- options.ConfigureCosmosClient(GetCosmosClientUsingAccountKey());
- }
-
+ options.ConfigureCosmosClient(GetCosmosClientUsingAccountKey());
options.IsResourceCreationEnabled = true;
}
public static void ConfigureTestDefaults(this CosmosReminderTableOptions options)
{
- if (TestDefaultConfiguration.UseAadAuthentication)
- {
- options.ConfigureCosmosClient(TestDefaultConfiguration.CosmosDBAccountEndpoint, TestDefaultConfiguration.TokenCredential);
- }
- else
- {
- options.ConfigureCosmosClient(GetCosmosClientUsingAccountKey());
- }
-
+ options.ConfigureCosmosClient(GetCosmosClientUsingAccountKey());
options.IsResourceCreationEnabled = true;
}
@@ -73,4 +48,4 @@ private static Func> GetCosmosClientUs
return new(new CosmosClient(TestDefaultConfiguration.CosmosDBAccountEndpoint, TestDefaultConfiguration.CosmosDBAccountKey, cosmosClientOptions));
};
}
-}
\ No newline at end of file
+}
diff --git a/test/Extensions/TesterAzureUtils/AzureStorageOperationOptionsExtensions.cs b/test/Extensions/TesterAzureUtils/AzureStorageOperationOptionsExtensions.cs
index 9fc2526ecf6..a1715433531 100644
--- a/test/Extensions/TesterAzureUtils/AzureStorageOperationOptionsExtensions.cs
+++ b/test/Extensions/TesterAzureUtils/AzureStorageOperationOptionsExtensions.cs
@@ -1,6 +1,4 @@
-using Azure.Core.Diagnostics;
using Azure.Data.Tables;
-using Azure.Identity;
using Azure.Storage.Blobs;
using TestExtensions;
@@ -8,8 +6,6 @@ namespace Tester.AzureUtils
{
public static class AzureStorageOperationOptionsExtensions
{
- public static DefaultAzureCredential Credential = new DefaultAzureCredential();
-
public static Orleans.Clustering.AzureStorage.AzureStorageOperationOptions ConfigureTestDefaults(this Orleans.Clustering.AzureStorage.AzureStorageOperationOptions options)
{
options.TableServiceClient = GetTableServiceClient();
@@ -19,9 +15,7 @@ public static Orleans.Clustering.AzureStorage.AzureStorageOperationOptions Confi
public static TableServiceClient GetTableServiceClient()
{
- return TestDefaultConfiguration.UseAadAuthentication
- ? new(TestDefaultConfiguration.TableEndpoint, TestDefaultConfiguration.TokenCredential)
- : new(TestDefaultConfiguration.DataConnectionString);
+ return new(AzuriteContainerManager.ConnectionString);
}
public static Orleans.GrainDirectory.AzureStorage.AzureStorageOperationOptions ConfigureTestDefaults(this Orleans.GrainDirectory.AzureStorage.AzureStorageOperationOptions options)
@@ -47,56 +41,28 @@ public static Orleans.Reminders.AzureStorage.AzureStorageOperationOptions Config
public static Orleans.Configuration.AzureBlobStorageOptions ConfigureTestDefaults(this Orleans.Configuration.AzureBlobStorageOptions options)
{
- if (TestDefaultConfiguration.UseAadAuthentication)
- {
- options.BlobServiceClient = new(TestDefaultConfiguration.DataBlobUri, TestDefaultConfiguration.TokenCredential);
- }
- else
- {
- options.BlobServiceClient = new(TestDefaultConfiguration.DataConnectionString);
- }
+ options.BlobServiceClient = new(AzuriteContainerManager.ConnectionString);
return options;
}
public static AzureStorageJobShardOptions ConfigureTestDefaults(this AzureStorageJobShardOptions options)
{
- if (TestDefaultConfiguration.UseAadAuthentication)
- {
- options.BlobServiceClient = new(TestDefaultConfiguration.DataBlobUri, TestDefaultConfiguration.TokenCredential);
- }
- else
- {
- options.BlobServiceClient = new(TestDefaultConfiguration.DataConnectionString);
- }
+ options.BlobServiceClient = new(AzuriteContainerManager.ConnectionString);
return options;
}
public static Orleans.Configuration.AzureQueueOptions ConfigureTestDefaults(this Orleans.Configuration.AzureQueueOptions options)
{
- if (TestDefaultConfiguration.UseAadAuthentication)
- {
- options.QueueServiceClient = new(TestDefaultConfiguration.DataQueueUri, TestDefaultConfiguration.TokenCredential);
- }
- else
- {
- options.QueueServiceClient = new(TestDefaultConfiguration.DataConnectionString);
- }
+ options.QueueServiceClient = new(AzuriteContainerManager.ConnectionString);
return options;
}
public static Orleans.Configuration.AzureBlobLeaseProviderOptions ConfigureTestDefaults(this Orleans.Configuration.AzureBlobLeaseProviderOptions options)
{
- if (TestDefaultConfiguration.UseAadAuthentication)
- {
- options.BlobServiceClient = new(TestDefaultConfiguration.DataBlobUri, TestDefaultConfiguration.TokenCredential);
- }
- else
- {
- options.BlobServiceClient = new(TestDefaultConfiguration.DataConnectionString);
- }
+ options.BlobServiceClient = new(AzuriteContainerManager.ConnectionString);
return options;
}
diff --git a/test/Extensions/TesterAzureUtils/StorageEmulatorUtilities.cs b/test/Extensions/TesterAzureUtils/StorageEmulatorUtilities.cs
index f20ceaf1f58..b77b2cd522d 100644
--- a/test/Extensions/TesterAzureUtils/StorageEmulatorUtilities.cs
+++ b/test/Extensions/TesterAzureUtils/StorageEmulatorUtilities.cs
@@ -7,7 +7,7 @@ public static class StorageEmulatorUtilities
{
public static void EnsureEmulatorIsNotUsed()
{
- if (TestDefaultConfiguration.DataConnectionString is { Length: > 0 } connectionString
+ if (AzuriteContainerManager.ConnectionString is { Length: > 0 } connectionString
&& (connectionString.Contains("UseDevelopmentStorage", StringComparison.OrdinalIgnoreCase)
|| connectionString.Contains("devstoreaccount", StringComparison.OrdinalIgnoreCase)))
{
diff --git a/test/Extensions/TesterAzureUtils/Streaming/AQStreamingTests.cs b/test/Extensions/TesterAzureUtils/Streaming/AQStreamingTests.cs
index 0d1a773a3ef..d6a89d79194 100644
--- a/test/Extensions/TesterAzureUtils/Streaming/AQStreamingTests.cs
+++ b/test/Extensions/TesterAzureUtils/Streaming/AQStreamingTests.cs
@@ -49,19 +49,7 @@ void ConfigureStreaming(string option, string value)
}
ConfigureStreaming("ProviderType", "AzureQueueStorage");
- if (TestDefaultConfiguration.UseAadAuthentication)
- {
- cb.AddKeyedAzureQueueServiceClient(AzureQueueStreamProviderName, settings =>
- {
- settings.ServiceUri = TestDefaultConfiguration.DataQueueUri;
- settings.Credential = TestDefaultConfiguration.TokenCredential;
- });
- ConfigureStreaming("ServiceKey", AzureQueueStreamProviderName);
- }
- else
- {
- ConfigureStreaming("ConnectionString", TestDefaultConfiguration.DataConnectionString);
- }
+ ConfigureStreaming("ConnectionString", AzuriteContainerManager.ConnectionString);
var names = AzureQueueUtilities.GenerateQueueNames(builder.Options.ClusterId, queueCount);
for (var i = 0; i < names.Count; i++)
diff --git a/test/Extensions/TesterAzureUtils/Streaming/TestAzureTableStorageStreamFailureHandler.cs b/test/Extensions/TesterAzureUtils/Streaming/TestAzureTableStorageStreamFailureHandler.cs
index e216585f4be..4b1dce904cf 100644
--- a/test/Extensions/TesterAzureUtils/Streaming/TestAzureTableStorageStreamFailureHandler.cs
+++ b/test/Extensions/TesterAzureUtils/Streaming/TestAzureTableStorageStreamFailureHandler.cs
@@ -1,5 +1,4 @@
using Azure.Data.Tables;
-using Azure.Identity;
using Microsoft.Extensions.Logging.Abstractions;
using Orleans.Persistence.AzureStorage;
using Orleans.Providers.Streams.PersistentStreams;
@@ -32,14 +31,7 @@ public static async Task DeleteAll()
private static AzureTableDataManager GetDataManager()
{
var options = new AzureStorageOperationOptions { TableName = TableName };
- if (TestDefaultConfiguration.UseAadAuthentication)
- {
- options.TableServiceClient = new(TestDefaultConfiguration.TableEndpoint, TestDefaultConfiguration.TokenCredential);
- }
- else
- {
- options.TableServiceClient = new(TestDefaultConfiguration.DataConnectionString);
- }
+ options.TableServiceClient = new(AzuriteContainerManager.ConnectionString);
return new AzureTableDataManager(options, NullLogger.Instance);
}
}
diff --git a/test/Orleans.Journaling.Tests/JournalingAzureStorageTestConfiguration.cs b/test/Orleans.Journaling.Tests/JournalingAzureStorageTestConfiguration.cs
index a67f8992867..ce1a052f889 100644
--- a/test/Orleans.Journaling.Tests/JournalingAzureStorageTestConfiguration.cs
+++ b/test/Orleans.Journaling.Tests/JournalingAzureStorageTestConfiguration.cs
@@ -7,26 +7,12 @@ internal static class JournalingAzureStorageTestConfiguration
{
public static void CheckPreconditionsOrThrow()
{
- if (TestDefaultConfiguration.UseAadAuthentication)
- {
- Skip.If(string.IsNullOrEmpty(TestDefaultConfiguration.DataBlobUri.ToString()), "DataBlobUri is not set. Skipping test.");
- }
- else
- {
- Skip.If(string.IsNullOrEmpty(TestDefaultConfiguration.DataConnectionString), "DataConnectionString is not set. Skipping test.");
- }
+ Skip.If(string.IsNullOrEmpty(AzuriteContainerManager.ConnectionString), "DataConnectionString is not set. Skipping test.");
}
public static AzureAppendBlobStateMachineStorageOptions ConfigureTestDefaults(this AzureAppendBlobStateMachineStorageOptions options)
{
- if (TestDefaultConfiguration.UseAadAuthentication)
- {
- options.ConfigureBlobServiceClient(TestDefaultConfiguration.DataBlobUri, TestDefaultConfiguration.TokenCredential);
- }
- else
- {
- options.ConfigureBlobServiceClient(TestDefaultConfiguration.DataConnectionString);
- }
+ options.ConfigureBlobServiceClient(AzuriteContainerManager.ConnectionString);
return options;
}
diff --git a/test/TestInfrastructure/TestExtensions/AzuriteContainerManager.cs b/test/TestInfrastructure/TestExtensions/AzuriteContainerManager.cs
new file mode 100644
index 00000000000..d37028918f8
--- /dev/null
+++ b/test/TestInfrastructure/TestExtensions/AzuriteContainerManager.cs
@@ -0,0 +1,78 @@
+using Testcontainers.Azurite;
+using Xunit;
+
+namespace TestExtensions;
+
+///
+/// Manages a singleton Azurite container for Azure Storage integration tests.
+/// The container is lazily started on first use and shared across all tests in the process.
+/// When running standalone silos (separate processes), the connection string is propagated
+/// via environment variable so child processes reuse the same container.
+///
+public static class AzuriteContainerManager
+{
+ private const string ConnectionStringEnvVar = "ORLEANS_AZURITE_CONNECTION_STRING";
+
+ private static readonly AzuriteContainer _container = new AzuriteBuilder()
+ .WithImage("mcr.microsoft.com/azure-storage/azurite:3.35.0")
+ .Build();
+
+ ///
+ /// Gets the connection string for the running Azurite container.
+ /// If running in a child process (e.g. standalone silo), returns the connection string
+ /// propagated via environment variable without starting a new container.
+ ///
+ public static string ConnectionString
+ {
+ get
+ {
+ var envConnectionString = Environment.GetEnvironmentVariable(ConnectionStringEnvVar);
+ if (!string.IsNullOrEmpty(envConnectionString))
+ return envConnectionString;
+
+ EnsureStarted();
+ return _container.GetConnectionString();
+ }
+ }
+
+ private static readonly Lazy _ensureStartedLazy = new(() => EnsureStartedAsync().Result);
+
+ ///
+ /// Ensures Azurite is available by starting the container if not already running.
+ /// If the connection string is already available via environment variable (e.g. in a child process),
+ /// this method is a no-op.
+ ///
+ /// Thrown if the container could not be started.
+ public static void EnsureStarted()
+ {
+ if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable(ConnectionStringEnvVar)))
+ return;
+
+ if (!_ensureStartedLazy.Value)
+ throw new SkipException("Azurite container could not be started. Skipping.");
+ }
+
+ ///
+ /// Ensures Azurite is available by starting an Azurite Testcontainer.
+ /// The container is started once and shared across all tests in the process.
+ /// The connection string is propagated to child processes via environment variable.
+ ///
+ /// if Azurite is available; if it could not be started.
+ public static async Task EnsureStartedAsync()
+ {
+ try
+ {
+ await _container.StartAsync();
+ Environment.SetEnvironmentVariable(ConnectionStringEnvVar, _container.GetConnectionString());
+ return true;
+ }
+ catch (HttpRequestException)
+ {
+ return false;
+ }
+ catch (OperationCanceledException)
+ {
+ return false;
+ }
+ }
+}
diff --git a/test/TestInfrastructure/TestExtensions/TestDefaultConfiguration.cs b/test/TestInfrastructure/TestExtensions/TestDefaultConfiguration.cs
index a5e6316aac5..ba3ab80d1a7 100644
--- a/test/TestInfrastructure/TestExtensions/TestDefaultConfiguration.cs
+++ b/test/TestInfrastructure/TestExtensions/TestDefaultConfiguration.cs
@@ -1,5 +1,3 @@
-using Azure.Core;
-using Azure.Identity;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Primitives;
@@ -25,23 +23,9 @@ public static void InitializeDefaults()
}
}
- public static bool UseAadAuthentication
- {
- get
- {
- bool.TryParse(defaultConfiguration[nameof(UseAadAuthentication)], out var value);
- return value;
- }
- }
-
public static string CosmosDBAccountEndpoint => defaultConfiguration[nameof(CosmosDBAccountEndpoint)];
public static string CosmosDBAccountKey => defaultConfiguration[nameof(CosmosDBAccountKey)];
- public static Uri TableEndpoint => new Uri(defaultConfiguration[nameof(TableEndpoint)]);
- public static Uri DataBlobUri => new Uri(defaultConfiguration[nameof(DataBlobUri)]);
- public static Uri DataQueueUri => new Uri(defaultConfiguration[nameof(DataQueueUri)]);
- public static string DataConnectionString => defaultConfiguration[nameof(DataConnectionString)];
public static string EventHubConnectionString => defaultConfiguration[nameof(EventHubConnectionString)];
- public static string EventHubFullyQualifiedNamespace => defaultConfiguration[nameof(EventHubFullyQualifiedNamespace)];
public static string ZooKeeperConnectionString => defaultConfiguration[nameof(ZooKeeperConnectionString)];
public static string ConsulConnectionString => defaultConfiguration[nameof(ConsulConnectionString)];
public static string RedisConnectionString => defaultConfiguration[nameof(RedisConnectionString)];
@@ -52,22 +36,6 @@ public static bool UseAadAuthentication
public static string DynamoDbAccessKey => defaultConfiguration[nameof(DynamoDbAccessKey)];
public static string DynamoDbSecretKey => defaultConfiguration[nameof(DynamoDbSecretKey)];
public static string SqsConnectionString => defaultConfiguration[nameof(SqsConnectionString)];
- public static TokenCredential TokenCredential
- {
- get
- {
- var systemAccessToken = Environment.GetEnvironmentVariable("SYSTEM_ACCESSTOKEN");
- if (!string.IsNullOrEmpty(systemAccessToken))
- {
- // If running in an AzDo pipeline with a SYSTEM_ACCESSTOKEN available, let's try to use AzurePipelinesCredential
- var tenantId = Environment.GetEnvironmentVariable("AZURE_TENANT_ID");
- var clientId = Environment.GetEnvironmentVariable("AZURE_CLIENT_ID");
- var serviceConnectionId = Environment.GetEnvironmentVariable("SERVICE_CONNECTION_ID");
- return new AzurePipelinesCredential(tenantId, clientId, serviceConnectionId, systemAccessToken);
- }
- return new DefaultAzureCredential();
- }
- }
public static bool GetValue(string key, out string value)
{
diff --git a/test/TestInfrastructure/TestExtensions/TestExtensions.csproj b/test/TestInfrastructure/TestExtensions/TestExtensions.csproj
index 7cf32e70ac6..2c6eb0e60af 100644
--- a/test/TestInfrastructure/TestExtensions/TestExtensions.csproj
+++ b/test/TestInfrastructure/TestExtensions/TestExtensions.csproj
@@ -14,7 +14,7 @@
-
+
-
+
diff --git a/test/TestInfrastructure/TestExtensions/TestUtils.cs b/test/TestInfrastructure/TestExtensions/TestUtils.cs
index 3817f466bd9..7b3fdce9d9f 100644
--- a/test/TestInfrastructure/TestExtensions/TestUtils.cs
+++ b/test/TestInfrastructure/TestExtensions/TestUtils.cs
@@ -1,7 +1,6 @@
using System.Diagnostics;
-using System.Net;
using Orleans.Runtime;
-using Orleans.TestingHost.Utils;
+using TestExtensions;
using Xunit;
using static TestExtensions.TestDefaultConfiguration;
@@ -13,33 +12,12 @@ public class TestUtils
public static void CheckForAzureStorage()
{
- if ((UseAadAuthentication && (TableEndpoint == null)) ||
- (!UseAadAuthentication && string.IsNullOrWhiteSpace(DataConnectionString)))
- {
- throw new SkipException("No connection string found. Skipping");
- }
-
- bool usingLocalWAS = string.Equals(DataConnectionString, "UseDevelopmentStorage=true", StringComparison.OrdinalIgnoreCase);
-
- if (!usingLocalWAS)
- {
- // Tests are using Azure Cloud Storage, not local WAS emulator.
- return;
- }
-
- //Starts the storage emulator if not started already and it exists (i.e. is installed).
- if (!StorageEmulator.TryStart())
- {
- string errorMsg = "Azure Storage Emulator could not be started.";
- Console.WriteLine(errorMsg);
- throw new SkipException(errorMsg);
- }
+ AzuriteContainerManager.EnsureStarted();
}
public static void CheckForEventHub()
{
- if ((UseAadAuthentication && (EventHubFullyQualifiedNamespace == null)) ||
- (!UseAadAuthentication && string.IsNullOrWhiteSpace(EventHubConnectionString)))
+ if (string.IsNullOrWhiteSpace(EventHubConnectionString))
{
throw new SkipException("No connection string found. Skipping");
}
diff --git a/test/Tester/Forwarding/ShutdownSiloTests.cs b/test/Tester/Forwarding/ShutdownSiloTests.cs
index 0a9ff5e26a1..7bc9f31a677 100644
--- a/test/Tester/Forwarding/ShutdownSiloTests.cs
+++ b/test/Tester/Forwarding/ShutdownSiloTests.cs
@@ -6,7 +6,6 @@
using System.Diagnostics;
using Microsoft.Extensions.DependencyInjection;
using Azure.Data.Tables;
-using Azure.Identity;
using Orleans.Runtime.Placement;
namespace Tester.Forwarding
@@ -39,9 +38,7 @@ public void Configure(ISiloBuilder hostBuilder)
private static TableServiceClient GetTableServiceClient()
{
- return TestDefaultConfiguration.UseAadAuthentication
- ? new(TestDefaultConfiguration.TableEndpoint, TestDefaultConfiguration.TokenCredential)
- : new(TestDefaultConfiguration.DataConnectionString);
+ return new(AzuriteContainerManager.ConnectionString);
}
}
diff --git a/test/TesterInternal/GeoClusterTests/BasicLogTestGrainTests.cs b/test/TesterInternal/GeoClusterTests/BasicLogTestGrainTests.cs
index a42f2c37688..64542b566da 100644
--- a/test/TesterInternal/GeoClusterTests/BasicLogTestGrainTests.cs
+++ b/test/TesterInternal/GeoClusterTests/BasicLogTestGrainTests.cs
@@ -7,7 +7,6 @@
using Orleans.Configuration;
using Azure.Data.Tables;
-using Azure.Identity;
namespace Tests.GeoClusterTests
{
@@ -46,18 +45,16 @@ public void Configure(ISiloBuilder hostBuilder)
{
options.TableServiceClient = GetTableServiceClient();
}))
- .AddMemoryGrainStorage("MemoryStore");
+ .AddMemoryGrainStorage("MemoryStore");
}
private static TableServiceClient GetTableServiceClient()
{
- return TestDefaultConfiguration.UseAadAuthentication
- ? new(TestDefaultConfiguration.TableEndpoint, TestDefaultConfiguration.TokenCredential)
- : new(TestDefaultConfiguration.DataConnectionString);
+ return new(AzuriteContainerManager.ConnectionString);
}
}
}
-
+
public BasicLogTestGrainTests(Fixture fixture)
{
this.fixture = fixture;
@@ -105,7 +102,7 @@ private async Task DoBasicLogTestGrainTest(string grainClass, int phases = 100)
private async Task ThreeCheckers(string grainClass, int phases)
{
- // Global
+ // Global
async Task checker1()
{
int x = GetRandom();