Skip to content

Commit

Permalink
Fix Cosmos DB grain storage constructor for DI (#8539)
Browse files Browse the repository at this point in the history
* Fix Cosmos DB grain storage constructor for DI

* Check preconditions
  • Loading branch information
ReubenBond authored Jul 10, 2023
1 parent ea3372c commit edf4183
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 3 deletions.
4 changes: 2 additions & 2 deletions src/Azure/Orleans.Persistence.Cosmos/CosmosGrainStorage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,15 @@ public CosmosGrainStorage(
CosmosGrainStorageOptions options,
ILoggerFactory loggerFactory,
IServiceProvider serviceProvider,
ClusterOptions clusterOptions,
IOptions<ClusterOptions> clusterOptions,
IPartitionKeyProvider partitionKeyProvider
)
{
_logger = loggerFactory.CreateLogger<CosmosGrainStorage>();
_options = options;
_name = name;
_serviceProvider = serviceProvider;
_serviceId = clusterOptions.ServiceId;
_serviceId = clusterOptions.Value.ServiceId;
_partitionKeyProvider = partitionKeyProvider;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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;

/// <summary>
/// PersistenceGrainTests using Cosmos DB - Requires access to Cosmos DB
/// </summary>
[TestCategory("Persistence"), TestCategory("Cosmos")]
public class PersistenceGrainTests_CosmosGrainStorage : OrleansTestingBase, IClassFixture<PersistenceGrainTests_CosmosGrainStorage.Fixture>
{
private readonly GrainPersistenceTestsRunner _runner;

public class Fixture : BaseTestClusterFixture
{
protected override void ConfigureTestCluster(TestClusterBuilder builder)
{
builder.Options.InitialSilosCount = 4;
builder.AddSiloBuilderConfigurator<SiloConfigurator>();
}

private class SiloConfigurator : ISiloConfigurator
{
public void Configure(ISiloBuilder hostBuilder)
{
hostBuilder
.AddCosmosGrainStorage("GrainStorageForTest", builder => builder.Configure<IOptions<ClusterOptions>>((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();
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
using Orleans.Configuration;
using Orleans.Persistence.Cosmos;
using UnitTests.Persistence;
using Microsoft.Extensions.Options;

namespace Tester.Cosmos.Persistence;

Expand Down Expand Up @@ -46,7 +47,7 @@ private async Task<CosmosGrainStorage> 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<CosmosGrainStorage>(providerRuntime.ServiceProvider, options, clusterOptions, "TestStorage", pkProvider);
var lifecycle = ActivatorUtilities.CreateInstance<SiloLifecycleSubject>(providerRuntime.ServiceProvider);
Expand Down

0 comments on commit edf4183

Please sign in to comment.