public void Configure(ISiloBuilder hostBuilder)
            {
                hostBuilder.Configure <SiloMessagingOptions>(options => options.AssumeHomogenousSilosForTesting = false);
                hostBuilder.Configure <TypeManagementOptions>(options => options.TypeMapRefreshInterval         = RefreshInterval);
                hostBuilder.Configure <GrainTypeOptions>(options =>
                {
                    var cfg         = hostBuilder.GetConfiguration();
                    var siloOptions = new TestSiloSpecificOptions();
                    cfg.Bind(siloOptions);

                    // The blacklist is only intended for the primary silo in these tests.
                    if (string.Equals(siloOptions.SiloName, Silo.PrimarySiloName))
                    {
                        var typeNames = cfg["BlockedGrainTypes"].Split('|').ToList();
                        foreach (var typeName in typeNames)
                        {
                            var type = Type.GetType(typeName);
                            options.Classes.Remove(type);
                        }
                    }
                });
                hostBuilder.ConfigureServices(services =>
                {
                    var defaultPlacementStrategy = Type.GetType(hostBuilder.GetConfiguration()["DefaultPlacementStrategy"]);
                    services.AddSingleton(typeof(PlacementStrategy), defaultPlacementStrategy);
                });
            }
Beispiel #2
0
        public async Task LocalhostSiloTest()
        {
            var opts = TestSiloSpecificOptions.Create(new TestClusterOptions(), 1, true);
            var silo = new SiloHostBuilder()
                       .AddMemoryGrainStorage("MemoryStore")
                       .UseLocalhostClustering(opts.SiloPort, opts.GatewayPort)
                       .Build();

            var client = new ClientBuilder()
                         .UseLocalhostClustering(opts.GatewayPort)
                         .Build();

            try
            {
                await silo.StartAsync();

                await client.Connect();

                var grain  = client.GetGrain <IEchoGrain>(Guid.NewGuid());
                var result = await grain.Echo("test");

                Assert.Equal("test", result);
            }
            finally
            {
                await OrleansTaskExtentions.SafeExecute(() => silo.StopAsync());

                await OrleansTaskExtentions.SafeExecute(() => client.Close());

                Utils.SafeExecute(() => silo.Dispose());
                Utils.SafeExecute(() => client.Close());
            }
        }