Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 1 addition & 15 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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"
--
Expand Down
1 change: 1 addition & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@
<PackageVersion Include="System.Memory.Data" Version="8.0.1" />
<PackageVersion Include="System.Text.Json" Version="8.0.5" />
<PackageVersion Include="Testcontainers" Version="4.8.1" />
<PackageVersion Include="Testcontainers.Azurite" Version="4.8.1" />
<PackageVersion Include="Testcontainers.Consul" Version="4.8.1" />
<PackageVersion Include="Utf8Json" Version="1.3.7" />
<PackageVersion Include="Verify.Xunit" Version="29.3.1" />
Expand Down
6 changes: 3 additions & 3 deletions test/Benchmarks/GrainStorage/GrainStorageBenchmark.cs
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ public void Configure(ISiloBuilder hostBuilder)
{
hostBuilder.AddAzureTableGrainStorageAsDefault(options =>
{
options.TableServiceClient = new(TestDefaultConfiguration.DataConnectionString);
options.TableServiceClient = new(AzuriteContainerManager.ConnectionString);
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When we run these tests in internal Azure DevOps, we target real storage backends and TestDefaultConfiguration loads real creds. It looks like this would hard-code the tests to always use Azurite

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ReubenBond oh, so we want to keep using these dedicated real storage accounts? for some reason I assumed we want to use the testcontainers everywhere...

Copy link
Copy Markdown
Member

@ReubenBond ReubenBond Feb 16, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Meir017 We want Testcontainers in GitHub (since we don't want to expose secrets, etc) but we need the option to test against real services, too, to improve confidence since sometimes there are gaps (Cosmos DB is a good example of gaps between emulator and real service).

});
}
}
Expand All @@ -79,7 +79,7 @@ public void Configure(ISiloBuilder hostBuilder)
{
hostBuilder.AddAzureBlobGrainStorageAsDefault(options =>
{
options.BlobServiceClient = new(TestDefaultConfiguration.DataConnectionString);
options.BlobServiceClient = new(AzuriteContainerManager.ConnectionString);
});
}
}
Expand All @@ -90,7 +90,7 @@ public void Configure(ISiloBuilder hostBuilder)
{
hostBuilder.AddAdoNetGrainStorageAsDefault(options =>
{
options.ConnectionString = TestDefaultConfiguration.DataConnectionString;
options.ConnectionString = AzuriteContainerManager.ConnectionString;
});
}
}
Expand Down
2 changes: 1 addition & 1 deletion test/Benchmarks/Transactions/TransactionBenchmark.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public void Configure(ISiloBuilder hostBuilder)
{
hostBuilder.AddAzureTableTransactionalStateStorageAsDefault(options =>
{
options.TableServiceClient = new(TestDefaultConfiguration.DataConnectionString);
options.TableServiceClient = new(AzuriteContainerManager.ConnectionString);
});
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
using Azure.Identity;
using Orleans.Configuration;
using Tester.AzureUtils;
using TestExtensions;
Expand All @@ -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;
}
Expand Down
33 changes: 4 additions & 29 deletions test/Extensions/Tester.Cosmos/CosmosOptionsExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
using Azure.Identity;
using Microsoft.Azure.Cosmos;
using Orleans.Clustering.Cosmos;
using Orleans.Persistence.Cosmos;
Expand All @@ -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;
}

Expand All @@ -73,4 +48,4 @@ private static Func<IServiceProvider, ValueTask<CosmosClient>> GetCosmosClientUs
return new(new CosmosClient(TestDefaultConfiguration.CosmosDBAccountEndpoint, TestDefaultConfiguration.CosmosDBAccountKey, cosmosClientOptions));
};
}
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@
using Azure.Core.Diagnostics;
using Azure.Data.Tables;
using Azure.Identity;
using Azure.Storage.Blobs;
using TestExtensions;

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();
Expand All @@ -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)
Expand All @@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)))
{
Expand Down
14 changes: 1 addition & 13 deletions test/Extensions/TesterAzureUtils/Streaming/AQStreamingTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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++)
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -32,14 +31,7 @@ public static async Task DeleteAll()
private static AzureTableDataManager<TableEntity> 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<TableEntity>(options, NullLogger.Instance);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
Loading
Loading