예제 #1
0
        public async Task LocalhostSiloTest()
        {
            using var portAllocator    = new TestClusterPortAllocator();
            var(siloPort, gatewayPort) = portAllocator.AllocateConsecutivePortPairs(1);
            var silo = new SiloHostBuilder()
                       .AddMemoryGrainStorage("MemoryStore")
                       .UseLocalhostClustering(siloPort, gatewayPort)
                       .Build();

            var client = new ClientBuilder()
                         .UseLocalhostClustering(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());
            }
        }
예제 #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());
            }
        }
예제 #3
0
        public async Task LocalhostClusterTest()
        {
            using var portAllocator            = new TestClusterPortAllocator();
            var(baseSiloPort, baseGatewayPort) = portAllocator.AllocateConsecutivePortPairs(2);
            var silo1 = new SiloHostBuilder()
                        .AddMemoryGrainStorage("MemoryStore")
                        .UseLocalhostClustering(baseSiloPort, baseGatewayPort)
                        .Build();

            var silo2 = new SiloHostBuilder()
                        .AddMemoryGrainStorage("MemoryStore")
                        .UseLocalhostClustering(baseSiloPort + 1, baseGatewayPort + 1, new IPEndPoint(IPAddress.Loopback, baseSiloPort))
                        .Build();

            var client = new ClientBuilder()
                         .UseLocalhostClustering(new[] { baseGatewayPort, baseGatewayPort + 1 })
                         .Build();

            try
            {
                await Task.WhenAll(silo1.StartAsync(), silo2.StartAsync());

                await client.Connect();

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

                Assert.Equal("test", result);
            }
            finally
            {
                var cancelled = new CancellationTokenSource();
                cancelled.Cancel();
                Utils.SafeExecute(() => silo1.StopAsync(cancelled.Token));
                Utils.SafeExecute(() => silo2.StopAsync(cancelled.Token));
                Utils.SafeExecute(() => silo1.Dispose());
                Utils.SafeExecute(() => silo2.Dispose());
                Utils.SafeExecute(() => client.Close());
                Utils.SafeExecute(() => client.Dispose());
            }
        }
예제 #4
0
        public async Task LocalhostClusterTest()
        {
            var silo1 = new SiloHostBuilder()
                        .AddMemoryGrainStorage("MemoryStore")
                        .UseLocalhostClustering(12111, 30001)
                        .Build();

            var silo2 = new SiloHostBuilder()
                        .AddMemoryGrainStorage("MemoryStore")
                        .UseLocalhostClustering(12112, 30002, new IPEndPoint(IPAddress.Loopback, 12111))
                        .Build();

            var client = new ClientBuilder()
                         .UseLocalhostClustering(new[] { 30001, 30002 })
                         .Build();

            try
            {
                await Task.WhenAll(silo1.StartAsync(), silo2.StartAsync());

                await client.Connect();

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

                Assert.Equal("test", result);
            }
            finally
            {
                var cancelled = new CancellationTokenSource();
                cancelled.Cancel();
                Utils.SafeExecute(() => silo1.StopAsync(cancelled.Token));
                Utils.SafeExecute(() => silo2.StopAsync(cancelled.Token));
                Utils.SafeExecute(() => silo1.Dispose());
                Utils.SafeExecute(() => silo2.Dispose());
                Utils.SafeExecute(() => client.Close());
                Utils.SafeExecute(() => client.Dispose());
            }
        }