diff --git a/src/Azure/Orleans.Persistence.Cosmos/CosmosGrainStorage.cs b/src/Azure/Orleans.Persistence.Cosmos/CosmosGrainStorage.cs index f4993b45a5..995fb3b069 100644 --- a/src/Azure/Orleans.Persistence.Cosmos/CosmosGrainStorage.cs +++ b/src/Azure/Orleans.Persistence.Cosmos/CosmosGrainStorage.cs @@ -29,7 +29,7 @@ public CosmosGrainStorage( CosmosGrainStorageOptions options, ILoggerFactory loggerFactory, IServiceProvider serviceProvider, - ClusterOptions clusterOptions, + IOptions clusterOptions, IPartitionKeyProvider partitionKeyProvider ) { @@ -37,7 +37,7 @@ IPartitionKeyProvider partitionKeyProvider _options = options; _name = name; _serviceProvider = serviceProvider; - _serviceId = clusterOptions.ServiceId; + _serviceId = clusterOptions.Value.ServiceId; _partitionKeyProvider = partitionKeyProvider; } diff --git a/test/Extensions/Tester.Cosmos/PersistenceGrainTests_CosmosGrainStorage.cs b/test/Extensions/Tester.Cosmos/PersistenceGrainTests_CosmosGrainStorage.cs new file mode 100644 index 0000000000..611a96aa99 --- /dev/null +++ b/test/Extensions/Tester.Cosmos/PersistenceGrainTests_CosmosGrainStorage.cs @@ -0,0 +1,80 @@ +using Microsoft.Extensions.DependencyInjection; +using Xunit.Abstractions; +using Orleans.Configuration; +using Microsoft.Extensions.Options; +using Orleans.TestingHost; +using TestExtensions; +using TestExtensions.Runners; + +namespace Tester.Cosmos.Persistence; + +/// +/// PersistenceGrainTests using Cosmos DB - Requires access to Cosmos DB +/// +[TestCategory("Persistence"), TestCategory("Cosmos")] +public class PersistenceGrainTests_CosmosGrainStorage : OrleansTestingBase, IClassFixture +{ + private readonly GrainPersistenceTestsRunner _runner; + + public class Fixture : BaseTestClusterFixture + { + protected override void ConfigureTestCluster(TestClusterBuilder builder) + { + builder.Options.InitialSilosCount = 4; + builder.AddSiloBuilderConfigurator(); + } + + private class SiloConfigurator : ISiloConfigurator + { + public void Configure(ISiloBuilder hostBuilder) + { + hostBuilder + .AddCosmosGrainStorage("GrainStorageForTest", builder => builder.Configure>((options, silo) => + { + options.ConfigureTestDefaults(); + options.DeleteStateOnClear = true; + })) + .AddMemoryGrainStorage("MemoryStore"); + } + } + + protected override void CheckPreconditionsOrThrow() + { + base.CheckPreconditionsOrThrow(); + CosmosTestUtils.CheckCosmosStorage(); + } + } + + public PersistenceGrainTests_CosmosGrainStorage(ITestOutputHelper output, Fixture fixture, string grainNamespace = "UnitTests.Grains") + { + fixture.EnsurePreconditionsMet(); + _runner = new GrainPersistenceTestsRunner(output, fixture, grainNamespace); + } + + [SkippableFact, TestCategory("Functional")] + public async Task Grain_CosmosGrainStorage_Delete() => await _runner.Grain_GrainStorage_Delete(); + + [SkippableFact, TestCategory("Functional")] + public async Task Grain_CosmosGrainStorage_Read() => await _runner.Grain_GrainStorage_Read(); + + [SkippableFact, TestCategory("Functional")] + public async Task Grain_GuidKey_CosmosGrainStorage_Read_Write() => await _runner.Grain_GuidKey_GrainStorage_Read_Write(); + + [SkippableFact, TestCategory("Functional")] + public async Task Grain_LongKey_CosmosGrainStorage_Read_Write() => await _runner.Grain_LongKey_GrainStorage_Read_Write(); + + [SkippableFact, TestCategory("Functional")] + public async Task Grain_LongKeyExtended_CosmosGrainStorage_Read_Write() => await _runner.Grain_LongKeyExtended_GrainStorage_Read_Write(); + + [SkippableFact, TestCategory("Functional")] + public async Task Grain_GuidKeyExtended_CosmosGrainStorage_Read_Write() => await _runner.Grain_GuidKeyExtended_GrainStorage_Read_Write(); + + [SkippableFact, TestCategory("Functional")] + public async Task Grain_Generic_CosmosGrainStorage_Read_Write() => await _runner.Grain_Generic_GrainStorage_Read_Write(); + + [SkippableFact, TestCategory("Functional")] + public async Task Grain_Generic_CosmosGrainStorage_DiffTypes() => await _runner.Grain_Generic_GrainStorage_DiffTypes(); + + [SkippableFact, TestCategory("Functional")] + public async Task Grain_CosmosGrainStorage_SiloRestart() => await _runner.Grain_GrainStorage_SiloRestart(); +} diff --git a/test/Extensions/Tester.Cosmos/PersistenceProviderTests_Cosmos.cs b/test/Extensions/Tester.Cosmos/PersistenceProviderTests_Cosmos.cs index f79b83388f..c5513bc4e4 100644 --- a/test/Extensions/Tester.Cosmos/PersistenceProviderTests_Cosmos.cs +++ b/test/Extensions/Tester.Cosmos/PersistenceProviderTests_Cosmos.cs @@ -10,6 +10,7 @@ using Orleans.Configuration; using Orleans.Persistence.Cosmos; using UnitTests.Persistence; +using Microsoft.Extensions.Options; namespace Tester.Cosmos.Persistence; @@ -46,7 +47,7 @@ private async Task InitializeStorage() options.ConfigureTestDefaults(); var pkProvider = new DefaultPartitionKeyProvider(); - var clusterOptions = new ClusterOptions { ClusterId = _clusterId, ServiceId = _serviceId }; + var clusterOptions = Options.Create(new ClusterOptions { ClusterId = _clusterId, ServiceId = _serviceId }); var store = ActivatorUtilities.CreateInstance(providerRuntime.ServiceProvider, options, clusterOptions, "TestStorage", pkProvider); var lifecycle = ActivatorUtilities.CreateInstance(providerRuntime.ServiceProvider);