示例#1
0
        private async Task LoadBalancingTask(ClusterConnection connection)
        {
            for (int instanceId = 0; instanceId < 2; ++instanceId)
            {
                await connection.SendAsync <LoadBalancingInitRequest>(new DeliveryOptions { InstanceId = instanceId });
            }

            const int requestsCount = 100;

            for (int i = 0; i < requestsCount; ++i)
            {
                await connection.SendAsync <LoadBalancingRequest>();
            }

            var requestsHandled = new List <int>();

            for (int instanceId = 0; instanceId < 2; ++instanceId)
            {
                var response = await connection
                               .SendAsync <LoadBalancingGetStatsRequest, LoadBalancingGetStatsResponse>(new DeliveryOptions { InstanceId = instanceId });

                int value = response?.Result ?? 0;

                Assert.True(value > 0);

                requestsHandled.Add(value);
            }

            Assert.Equal(2, requestsHandled.Count);
            Assert.Equal(requestsCount, requestsHandled.Sum());
            Assert.True((double)Math.Abs(requestsHandled[0] - requestsHandled[1]) / requestsCount < 0.25);
        }
示例#2
0
        private async Task SequentialSumTask(ClusterConnection connection)
        {
            const int requestCount = 10;
            int       expectedSum  = 0;

            var initResponse =
                await connection.SendAsync <InitSumRequest, InitSumResponse>();

            int instanceId = initResponse?.InstanceId ?? -1;
            int counterId  = initResponse?.CounterId ?? -1;

            for (int i = 0; i < requestCount; ++i)
            {
                expectedSum += i;
                await connection.SendAsync(new DeliveryOptions { InstanceId = instanceId }, new AddRequest { CounterId = counterId, Value = i });
            }

            var getResponse =
                await connection.SendAsync <GetSumRequest, GetSumResponse>(
                    new DeliveryOptions { InstanceId = instanceId },
                    new GetSumRequest { CounterId = counterId }
                    );

            Assert.Equal(expectedSum, getResponse?.Result ?? 0);
        }
示例#3
0
        private async Task ServiceCommunicationTask(ClusterConnection connection)
        {
            const string expectedMessage = "Test message";

            var transferResponse = await connection
                                   .SendAsync <TransferMessageRequest, TransferMessageResponse>(new TransferMessageRequest {
                Message = expectedMessage
            });

            var options = new DeliveryOptions {
                InstanceId = transferResponse?.ServedByInstance ?? -1
            };
            var getResponse = await connection
                              .SendAsync <GetTransferredMessageRequest, GetTransferredMessageResponse>(options);

            Assert.Equal(expectedMessage, getResponse?.Message ?? "");
        }
示例#4
0
        private async Task SquaresAsyncTask(ClusterConnection connection)
        {
            const int requestCount = 10;

            for (int i = 0; i < requestCount; ++i)
            {
                var response = await connection
                               .SendAsync <SquareRequest, SquareResponse>(new SquareRequest { Value = i });

                Assert.Equal(i * i, response?.Result ?? 0);
            }
        }
示例#5
0
        private async Task PublishSubscribeTask(ClusterConnection connection)
        {
            const string expectedMessage = "Test message";

            await connection.SendAsync <PublishRequest>(new PublishRequest { Message = expectedMessage });

            await Task.Delay(TimeSpan.FromMilliseconds(500));

            for (int instanceId = 0; instanceId < 2; ++instanceId)
            {
                var subscriberOneResponse =
                    await connection.SendAsync <SubscriberOneGetMessageRequest, SubscriberOneGetMessageResponse>();

                Assert.Equal(expectedMessage, subscriberOneResponse?.Message ?? "");

                var subscriberTwoResponse =
                    await connection.SendAsync <SubscriberTwoGetMessageRequest, SubscriberTwoGetMessageResponse>();

                Assert.Equal(expectedMessage, subscriberTwoResponse?.Message ?? "");
            }
        }