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();