Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        public HostedTestClusterPerTest()
        {
            TestDefaultConfiguration.InitializeDefaults();

            GrainClient.Uninitialize();
            SerializationManager.InitializeForTesting();
            this.HostedCluster = this.CreateSiloHost();
        }
Ejemplo n.º 3
0
        protected BaseClusterFixture()
        {
            TestDefaultConfiguration.InitializeDefaults();
            GrainClient.Uninitialize();
            var hostedCluster = CreateClusterHost();

            this.HostedCluster = hostedCluster;
        }
Ejemplo n.º 4
0
        public void Setup()
        {
            var builder = new TestClusterBuilder();

            TestDefaultConfiguration.ConfigureTestCluster(builder);
            builder.ConfigureLegacyConfiguration();

            this.host = builder.Build();
            this.host.Deploy();
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
0
 static TestClusterPerTest()
 {
     TestDefaultConfiguration.InitializeDefaults();
 }