private async Task <SiloHandle> StartSilo(DirectoryInfo rootDir) { SiloHandle silo; if (this.siloIdx == 0) { // Setup configuration this.builder = new TestClusterBuilder(1) { CreateSilo = AppDomainSiloHandle.Create }; TestDefaultConfiguration.ConfigureTestCluster(this.builder); builder.Options.ApplicationBaseDirectory = rootDir.FullName; builder.AddSiloBuilderConfigurator <VersionGrainsSiloBuilderConfigurator>(); builder.ConfigureLegacyConfiguration(legacy => { legacy.ClusterConfiguration.Globals.ExpectedClusterSize = SiloCount; legacy.ClusterConfiguration.Globals.AssumeHomogenousSilosForTesting = false; legacy.ClusterConfiguration.Globals.TypeMapRefreshInterval = refreshInterval; legacy.ClusterConfiguration.Globals.DefaultVersionSelectorStrategy = VersionSelectorStrategy; legacy.ClusterConfiguration.Globals.DefaultCompatibilityStrategy = CompatibilityStrategy; legacy.ClientConfiguration.Gateways = legacy.ClientConfiguration.Gateways.Take(1).ToList(); // Only use primary gw waitDelay = TestClusterLegacyUtils.GetLivenessStabilizationTime(legacy.ClusterConfiguration.Globals, false); }); this.cluster = builder.Build(); await this.cluster.DeployAsync(); silo = this.cluster.Primary; } else { var configBuilder = new ConfigurationBuilder(); foreach (var source in cluster.ConfigurationSources) { configBuilder.Add(source); } var testClusterOptions = new TestClusterOptions(); configBuilder.Build().Bind(testClusterOptions); // Override the root directory. var sources = new IConfigurationSource[] { new MemoryConfigurationSource { InitialData = new TestClusterOptions { ApplicationBaseDirectory = rootDir.FullName }.ToDictionary() } }; silo = TestCluster.StartOrleansSilo(cluster, siloIdx, testClusterOptions, sources); } this.deployedSilos.Add(silo); this.siloIdx++; return(silo); }
public HostedTestClusterPerTest() { TestDefaultConfiguration.InitializeDefaults(); GrainClient.Uninitialize(); SerializationManager.InitializeForTesting(); this.HostedCluster = this.CreateSiloHost(); }
protected BaseClusterFixture() { TestDefaultConfiguration.InitializeDefaults(); GrainClient.Uninitialize(); var hostedCluster = CreateClusterHost(); this.HostedCluster = hostedCluster; }
public void Setup() { var builder = new TestClusterBuilder(); TestDefaultConfiguration.ConfigureTestCluster(builder); builder.ConfigureLegacyConfiguration(); this.host = builder.Build(); this.host.Deploy(); }
private async Task <SiloHandle> StartSilo(FileInfo grainAssembly) { SiloHandle silo; if (this.siloIdx == 0) { // Setup configuration this.builder = new TestClusterBuilder(1); builder.CreateSiloAsync = StandaloneSiloHandle.Create; TestDefaultConfiguration.ConfigureTestCluster(this.builder); builder.AddSiloBuilderConfigurator <VersionGrainsSiloBuilderConfigurator>(); builder.AddClientBuilderConfigurator <VersionGrainsClientConfigurator>(); builder.Properties[nameof(SiloCount)] = this.SiloCount.ToString(); builder.Properties[nameof(RefreshInterval)] = RefreshInterval.ToString(); builder.Properties[nameof(VersionSelectorStrategy)] = this.VersionSelectorStrategy.Name; builder.Properties[nameof(CompatibilityStrategy)] = this.CompatibilityStrategy.Name; builder.Properties["GrainAssembly"] = grainAssembly.FullName; builder.Properties[StandaloneSiloHandle.ExecutablePathConfigKey] = grainAssembly.FullName; waitDelay = TestCluster.GetLivenessStabilizationTime(new ClusterMembershipOptions(), didKill: false); this.cluster = builder.Build(); await this.cluster.DeployAsync(); silo = this.cluster.Primary; } else { var configBuilder = new ConfigurationBuilder(); foreach (var source in cluster.ConfigurationSources) { configBuilder.Add(source); } var testClusterOptions = new TestClusterOptions(); configBuilder.Build().Bind(testClusterOptions); // Override the root directory. var sources = new IConfigurationSource[] { new MemoryConfigurationSource { InitialData = new Dictionary <string, string> { [StandaloneSiloHandle.ExecutablePathConfigKey] = grainAssembly.FullName } } }; silo = await TestCluster.StartSiloAsync(cluster, siloIdx, testClusterOptions, sources); } this.deployedSilos.Add(silo); this.siloIdx++; return(silo); }
public HostedTestClusterPerTest() { TestDefaultConfiguration.InitializeDefaults(); GrainClient.Uninitialize(); SerializationManager.InitializeForTesting(); var testCluster = CreateTestCluster(); if (testCluster.Primary == null) { testCluster.Deploy(); } this.HostedCluster = testCluster; }
internal static ISiloHostBuilder Configure(ISiloHostBuilder hostBuilder, string databaseName = null) { if (!TestDefaultConfiguration.GetValue("CosmosDBEndpoint", out string cosmosDBEndpoint) || !TestDefaultConfiguration.GetValue("CosmosDBKey", out string cosmosDBKey)) { throw new IndexConfigurationException("CosmosDB connection values are not specified"); } hostBuilder.AddMemoryGrainStorage(IndexingTestConstants.GrainStore) .AddMemoryGrainStorage(IndexingTestConstants.MemoryStore) .AddMemoryGrainStorage("PubSubStore") // PubSubStore service is run for silo startup .AddMemoryGrainStorage(IndexingConstants.INDEXING_WORKFLOWQUEUE_STORAGE_PROVIDER_NAME) .AddMemoryGrainStorage(IndexingConstants.INDEXING_STORAGE_PROVIDER_NAME) .AddSimpleMessageStreamProvider(IndexingConstants.INDEXING_STREAM_PROVIDER_NAME) .ConfigureLogging(loggingBuilder => { loggingBuilder.SetMinimumLevel(LogLevel.Information); loggingBuilder.AddDebug(); }) .ConfigureApplicationParts(parts => { parts.AddApplicationPart(typeof(BaseIndexingFixture).Assembly); parts.AddApplicationPart(typeof(ISimpleGrain).Assembly); parts.AddApplicationPart(typeof(SimpleGrain).Assembly); }); return(databaseName != null ? hostBuilder.AddCosmosDBGrainStorage(IndexingTestConstants.CosmosDBGrainStorage, opt => { opt.AccountEndpoint = cosmosDBEndpoint; opt.AccountKey = cosmosDBKey; opt.ConnectionMode = Microsoft.Azure.Documents.Client.ConnectionMode.Gateway; opt.DropDatabaseOnInit = true; opt.AutoUpdateStoredProcedures = true; opt.CanCreateResources = true; opt.DB = databaseName; opt.InitStage = ServiceLifecycleStage.RuntimeStorageServices; opt.StateFieldsToIndex.AddRange(GetStateFieldsToIndex()); }) : hostBuilder); }
internal static ISiloHostBuilder Configure(ISiloHostBuilder hostBuilder, string databaseName = null) { string cosmosDBEndpoint = string.Empty, cosmosDBKey = string.Empty; if (databaseName != null) { if (!TestDefaultConfiguration.GetValue("CosmosDBEndpoint", out cosmosDBEndpoint) || !TestDefaultConfiguration.GetValue("CosmosDBKey", out cosmosDBKey)) { throw new IndexConfigurationException("CosmosDB connection values are not specified"); } } hostBuilder.AddMemoryGrainStorage(IndexingTestConstants.GrainStore) .AddMemoryGrainStorage("PubSubStore") // PubSubStore service is needed for the streams underlying OrleansQueryResults .ConfigureLogging(loggingBuilder => { loggingBuilder.SetMinimumLevel(LogLevel.Information); loggingBuilder.AddDebug(); }) .ConfigureApplicationParts(parts => { parts.AddApplicationPart(typeof(BaseIndexingFixture).Assembly).WithReferences(); parts.AddApplicationPart(typeof(ISimpleGrain).Assembly).WithReferences(); parts.AddApplicationPart(typeof(SimpleGrain).Assembly).WithReferences(); }); return(databaseName != null ? hostBuilder.AddCosmosDBGrainStorage(IndexingTestConstants.CosmosDBGrainStorage, opt => { opt.AccountEndpoint = cosmosDBEndpoint; opt.AccountKey = cosmosDBKey; opt.ConnectionMode = Microsoft.Azure.Documents.Client.ConnectionMode.Gateway; opt.DropDatabaseOnInit = true; opt.AutoUpdateStoredProcedures = true; opt.CanCreateResources = true; opt.DB = databaseName; opt.InitStage = ServiceLifecycleStage.RuntimeStorageServices; opt.StateFieldsToIndex.AddRange(GetDSMIStateFieldsToIndex()); }) : hostBuilder); }
static TestClusterPerTest() { TestDefaultConfiguration.InitializeDefaults(); }