public async Task MethodCall_Event_With_StatefulLayers()
        {
            var layerProvider      = new TestLayerProvider_StatefulAppend("Layer");
            var layerStackProvider = new LayerStackProvider <Dummy>(layerProvider);

            transportBuilder.SetLayerStackProvider(layerStackProvider);
            var testService = new DummyTestService();

            await DefaultSetup(testService, 1);

            var proxy    = new DummyTestProxy <SimpleInMemConnection>(connections[0]);
            var theEvent = new Dummy {
                int_value = 100
            };

            layerProvider.Layers.Clear();

            ManualResetEventSlim waitForEvent = testService.CreateResetEvent();

            proxy.EventMethodAsync(theEvent);
            bool wasSignaled = waitForEvent.Wait(TimeSpan.FromSeconds(1));

            Assert.IsTrue(wasSignaled, "Timed out waiting for event to fire");
            testService.ClearResetEvent();

            Assert.AreEqual(1, testService.EventCount);
            Assert.AreEqual(theEvent.int_value, testService.LastEventReceived.int_value);

            Assert.AreEqual(2, layerProvider.Layers.Count);
            Assert.AreEqual("Layer0Send", layerProvider.Layers[0].State);
            Assert.AreEqual("Layer1Receive", layerProvider.Layers[1].State);
        }
Example #2
0
        static void Main(string[] args)
        {
            var layer1             = new TestLayer(1);
            var layer2             = new TestLayer(2);
            var layerStackProvider = new LayerStackProvider <PingLayerData>(layer1, layer2);

            SetupAsync(layerStackProvider).GetAwaiter().GetResult();

            Console.Out.WriteLine("Server ready");
            Console.Out.Flush();

            Thread.Sleep(3000);

            if ((NumRequests != NumRequestsExpected) ||
                (NumEvents != NumEventsExpected) ||
                (NumErrors != NumErrorsExpected))
            {
                Console.Out.WriteLine("Server failed: Did not receive all expected messages");
                Console.Out.Flush();
                return;
            }

            if ((layer1.NumReached == 0) ||
                (layer1.NumError != 0) ||
                (layer2.NumReached == 0) ||
                (layer2.NumError != 0))
            {
                Console.Out.WriteLine("Server failed: Problem with layers");
                Console.Out.Flush();
                return;
            }

            Console.Out.WriteLine("Server completed");
            Console.Out.Flush();
        }
Example #3
0
        public async Task GeneratedService_GeneratedProxy_PayloadResponse_StatefulLayers()
        {
            var clientLayerProvider      = new TestLayerProvider_StatefulAppend("Client");
            var clientLayerStackProvider = new LayerStackProvider <Dummy>(clientLayerProvider);
            var serverLayerProvider      = new TestLayerProvider_StatefulAppend("Server");
            var serverLayerStackProvider = new LayerStackProvider <Dummy>(serverLayerProvider);
            TestClientServer <DummyTestService> testClientServer =
                await SetupTestClientServer <DummyTestService>(serverLayerStackProvider, clientLayerStackProvider);

            var proxy = new DummyTestProxy <EpoxyConnection>(testClientServer.ClientConnection);

            clientLayerProvider.Layers.Clear();
            serverLayerProvider.Layers.Clear();

            await AssertRequestResponseWorksAsync(proxy);

            Assert.AreEqual(1, clientLayerProvider.Layers.Count);
            Assert.AreEqual(1, serverLayerProvider.Layers.Count);
            Assert.AreEqual("Client0SendClient0Receive", clientLayerProvider.Layers[0].State);
            Assert.AreEqual("Server0ReceiveServer0Send", serverLayerProvider.Layers[0].State);

            await AssertRequestResponseWorksAsync(proxy);

            Assert.AreEqual(2, clientLayerProvider.Layers.Count);
            Assert.AreEqual(2, serverLayerProvider.Layers.Count);
            Assert.AreEqual("Client1SendClient1Receive", clientLayerProvider.Layers[1].State);
            Assert.AreEqual("Server1ReceiveServer1Send", serverLayerProvider.Layers[1].State);
        }
        public async Task MethodCall_ReqRsp_WithStatefulLayers()
        {
            var layerProvider      = new TestLayerProvider_StatefulAppend("Layer");
            var layerStackProvider = new LayerStackProvider <Dummy>(layerProvider);

            transportBuilder.SetLayerStackProvider(layerStackProvider);
            await DefaultSetup(new CalculatorService(), 1);

            layerProvider.Layers.Clear();

            var calculatorProxy = new CalculatorProxy <SimpleInMemConnection>(connections[0]);

            var request = new Message <PairedInput>(new PairedInput {
                First = 1, Second = 2
            });
            IMessage <Output> response = await calculatorProxy.AddAsync(request, CancellationToken.None);

            Assert.IsFalse(response.IsError);

            Assert.AreEqual(2, layerProvider.Layers.Count);
            Assert.AreEqual("Layer0SendLayer0Receive", layerProvider.Layers[0].State);
            Assert.AreEqual("Layer1ReceiveLayer1Send", layerProvider.Layers[1].State);

            request = new Message <PairedInput>(new PairedInput {
                First = 1, Second = 2
            });
            response = await calculatorProxy.AddAsync(request, CancellationToken.None);

            Assert.IsFalse(response.IsError);

            Assert.AreEqual(4, layerProvider.Layers.Count);
            Assert.AreEqual("Layer2SendLayer2Receive", layerProvider.Layers[2].State);
            Assert.AreEqual("Layer3ReceiveLayer3Send", layerProvider.Layers[3].State);
        }
Example #5
0
        public async Task GeneratedService_GeneratedProxy_PayloadResponse_ServerLayerErrors()
        {
            var errorLayer = new TestLayer_ReturnErrors();
            var serverLayerStackProvider = new LayerStackProvider <Dummy>(errorLayer);
            TestClientServer <DummyTestService> testClientServer = await SetupTestClientServer <DummyTestService>(serverLayerStackProvider, null);

            var proxy   = new DummyTestProxy <EpoxyConnection>(testClientServer.ClientConnection);
            var request = new Dummy {
                int_value = 100
            };

            errorLayer.SetState(MessageType.REQUEST, errorOnSend: false, errorOnReceive: true);

            IMessage <Dummy> response = await proxy.ReqRspMethodAsync(request);

            Assert.IsTrue(response.IsError);
            Error error = response.Error.Deserialize();

            Assert.AreEqual(TestLayer_ReturnErrors.ReceiveError, error.error_code);

            Assert.AreEqual(0, testClientServer.Service.RequestCount);
            Assert.AreEqual(Dummy.Empty.int_value, testClientServer.Service.LastRequestReceived.int_value);

            errorLayer.SetState(MessageType.RESPONSE, errorOnSend: true, errorOnReceive: false);
            response = await proxy.ReqRspMethodAsync(request);

            Assert.IsTrue(response.IsError);
            error = response.Error.Deserialize();
            Assert.AreEqual(TestLayer_ReturnErrors.SendError, error.error_code);

            Assert.AreEqual(1, testClientServer.Service.RequestCount);
            Assert.AreEqual(request.int_value, testClientServer.Service.LastRequestReceived.int_value);
        }
Example #6
0
        public async Task GeneratedService_GeneratedProxy_Event_ServerLayerErrors()
        {
            var errorLayer = new TestLayer_ReturnErrors();
            var serverLayerStackProvider = new LayerStackProvider <Dummy>(errorLayer);
            TestClientServer <DummyTestService> testClientServer = await SetupTestClientServer <DummyTestService>(serverLayerStackProvider, null);

            var proxy    = new DummyTestProxy <EpoxyConnection>(testClientServer.ClientConnection);
            var theEvent = new Dummy {
                int_value = 100
            };

            errorLayer.SetState(MessageType.EVENT, errorOnSend: false, errorOnReceive: true);

            ManualResetEventSlim waitForEvent = testClientServer.Service.CreateResetEvent();

            proxy.EventMethodAsync(theEvent);
            bool wasSignaled = waitForEvent.Wait(TimeSpan.FromSeconds(1));

            Assert.IsFalse(wasSignaled, "Event should not fire");
            testClientServer.Service.ClearResetEvent();

            Assert.AreEqual(0, testClientServer.Service.EventCount);
            Assert.AreEqual(Dummy.Empty.int_value, testClientServer.Service.LastEventReceived.int_value);

            errorLayer.SetState(MessageType.EVENT, errorOnSend: true, errorOnReceive: false);
            theEvent.int_value = 101;

            waitForEvent = testClientServer.Service.CreateResetEvent();
            proxy.EventMethodAsync(theEvent);
            wasSignaled = waitForEvent.Wait(TimeSpan.FromSeconds(1));
            Assert.IsTrue(wasSignaled, "Timed out waiting for event to fire");

            Assert.AreEqual(1, testClientServer.Service.EventCount);
            Assert.AreEqual(theEvent.int_value, testClientServer.Service.LastEventReceived.int_value);
        }
        public void LayerStack_OnSend_InvokesForwardOrder()
        {
            var         testList      = new List <string>();
            var         testLayer1    = new TestLayer_Append("foo", testList);
            var         testLayer2    = new TestLayer_Append("bar", testList);
            var         stackProvider = new LayerStackProvider <Dummy>(testLayer1, testLayer2);
            Logger      logger        = LoggerTests.BlackHole;
            ILayerStack stack;
            Error       error = stackProvider.GetLayerStack(null, out stack, logger);

            Assert.IsNull(error);

            IBonded layerData;

            error = stack.OnSend(MessageType.REQUEST, sendContext, out layerData, logger);

            Assert.IsNull(error);
            Assert.IsNotNull(layerData);

            Dummy realLayerData = layerData.Deserialize <Dummy>();

            Assert.AreEqual(2, testList.Count);
            Assert.AreEqual(testLayer1.value, testList[0]);
            Assert.AreEqual(testLayer1.value + testLayer2.value, testList[1]);
            Assert.IsNotNull(realLayerData);
            Assert.AreEqual(testLayer1.value + testLayer2.value, realLayerData.string_value);
        }
Example #8
0
        public async Task GeneratedService_GeneratedProxy_PayloadResponse_LayerData()
        {
            var layerStackProvider = new LayerStackProvider <Dummy>(new TestLayer_CheckPassedValue(1234));
            TestClientServer <DummyTestService> testClientServer = await SetupTestClientServer <DummyTestService>(layerStackProvider, layerStackProvider);

            var proxy = new DummyTestProxy <EpoxyConnection>(testClientServer.ClientConnection);

            await AssertRequestResponseWorksAsync(proxy);

            Assert.AreEqual(1, testClientServer.Service.RequestCount);
        }
Example #9
0
        public void LayerStackProvider_StatelessLayerStackDoesNotReallocate()
        {
            var         provider = new LayerStackProvider <Dummy>(LoggerTests.BlackHole, new TestLayer_AlwaysThrows(), new TestLayer_AlwaysThrows());
            ILayerStack stack;
            Error       error = provider.GetLayerStack(null, out stack);

            Assert.IsNull(error);
            ILayerStack stack2;

            error = provider.GetLayerStack(null, out stack2);
            Assert.IsNull(error);
            Assert.AreSame(stack, stack2);
        }
Example #10
0
        public async Task GeneratedService_GeneratedProxy_Event_StatefulLayers()
        {
            var clientLayerProvider      = new TestLayerProvider_StatefulAppend("Client");
            var clientLayerStackProvider = new LayerStackProvider <Dummy>(LoggerTests.BlackHole, clientLayerProvider);
            var serverLayerProvider      = new TestLayerProvider_StatefulAppend("Server");
            var serverLayerStackProvider = new LayerStackProvider <Dummy>(LoggerTests.BlackHole, serverLayerProvider);
            TestClientServer <DummyTestService> testClientServer =
                await SetupTestClientServer <DummyTestService>(serverLayerStackProvider, clientLayerStackProvider);

            var proxy    = new DummyTestProxy <EpoxyConnection>(testClientServer.ClientConnection);
            var theEvent = new Dummy {
                int_value = 100
            };

            clientLayerProvider.Layers.Clear();
            serverLayerProvider.Layers.Clear();

            ManualResetEventSlim waitForEvent = testClientServer.Service.CreateResetEvent();

            proxy.EventMethodAsync(theEvent);
            bool wasSignaled = waitForEvent.Wait(TimeSpan.FromSeconds(1));

            Assert.IsTrue(wasSignaled, "Timed out waiting for event to fire");

            Assert.AreEqual(1, testClientServer.Service.EventCount);
            Assert.AreEqual(theEvent.int_value, testClientServer.Service.LastEventReceived.int_value);

            Assert.AreEqual(1, clientLayerProvider.Layers.Count);
            Assert.AreEqual(1, serverLayerProvider.Layers.Count);
            Assert.AreEqual("Client0Send", clientLayerProvider.Layers[0].State);
            Assert.AreEqual("Server0Receive", serverLayerProvider.Layers[0].State);

            theEvent.int_value = 101;

            waitForEvent = testClientServer.Service.CreateResetEvent();
            proxy.EventMethodAsync(theEvent);
            wasSignaled = waitForEvent.Wait(TimeSpan.FromSeconds(1));
            Assert.IsTrue(wasSignaled, "Timed out waiting for event to fire");

            Assert.AreEqual(2, testClientServer.Service.EventCount);
            Assert.AreEqual(theEvent.int_value, testClientServer.Service.LastEventReceived.int_value);

            Assert.AreEqual(2, clientLayerProvider.Layers.Count);
            Assert.AreEqual(2, serverLayerProvider.Layers.Count);
            Assert.AreEqual("Client1Send", clientLayerProvider.Layers[1].State);
            Assert.AreEqual("Server1Receive", serverLayerProvider.Layers[1].State);

            await testClientServer.ServiceTransport.StopAsync();

            await testClientServer.ClientTransport.StopAsync();
        }
        public void LayerStackProvider_StatefulLayerStackDoesReallocate()
        {
            var provider = new LayerStackProvider <Dummy>(new TestLayer_AlwaysThrows(),
                                                          new TestLayerProvider_StatefulAppend("foo"),
                                                          new TestLayer_AlwaysThrows());
            Logger      logger = LoggerTests.BlackHole;
            ILayerStack stack;
            Error       error = provider.GetLayerStack(null, out stack, logger);

            Assert.IsNull(error);
            ILayerStack stack2;

            error = provider.GetLayerStack(null, out stack2, logger);
            Assert.IsNull(error);
            Assert.AreNotSame(stack, stack2);
        }
Example #12
0
        public void LayerStack_OnReceive_InvokesReverseOrder()
        {
            var         testList      = new List <string>();
            var         testLayer1    = new TestLayer_Append("foo", testList);
            var         testLayer2    = new TestLayer_Append("bar", testList);
            var         stackProvider = new LayerStackProvider <Dummy>(LoggerTests.BlackHole, testLayer1, testLayer2);
            ILayerStack stack;
            Error       error = stackProvider.GetLayerStack(null, out stack);

            Assert.IsNull(error);

            error = stack.OnReceive(MessageType.Request, receiveContext, CreateBondedTestData(initialReceiveValue));

            Assert.IsNull(error);
            Assert.AreEqual(2, testList.Count);
            Assert.AreEqual(initialReceiveValue + testLayer2.value, testList[0]);
            Assert.AreEqual(initialReceiveValue + testLayer2.value + testLayer1.value, testList[1]);
        }
Example #13
0
        public async Task GeneratedService_GeneratedProxy_PayloadResponse_StatefulLayers()
        {
            var clientLayerProvider      = new TestLayerProvider_StatefulAppend("Client");
            var clientLayerStackProvider = new LayerStackProvider <Dummy>(LoggerTests.BlackHole, clientLayerProvider);
            var serverLayerProvider      = new TestLayerProvider_StatefulAppend("Server");
            var serverLayerStackProvider = new LayerStackProvider <Dummy>(LoggerTests.BlackHole, serverLayerProvider);
            TestClientServer <DummyTestService> testClientServer =
                await SetupTestClientServer <DummyTestService>(serverLayerStackProvider, clientLayerStackProvider);

            var proxy   = new DummyTestProxy <EpoxyConnection>(testClientServer.ClientConnection);
            var request = new Dummy {
                int_value = 100
            };

            clientLayerProvider.Layers.Clear();
            serverLayerProvider.Layers.Clear();

            IMessage <Dummy> response = await proxy.ReqRspMethodAsync(request);

            Assert.IsFalse(response.IsError);
            Assert.AreEqual(101, response.Payload.Deserialize().int_value);

            Assert.AreEqual(1, clientLayerProvider.Layers.Count);
            Assert.AreEqual(1, serverLayerProvider.Layers.Count);
            Assert.AreEqual("Client0SendClient0Receive", clientLayerProvider.Layers[0].State);
            Assert.AreEqual("Server0ReceiveServer0Send", serverLayerProvider.Layers[0].State);

            request.int_value = 101;
            response          = await proxy.ReqRspMethodAsync(request);

            Assert.IsFalse(response.IsError);
            Assert.AreEqual(102, response.Payload.Deserialize().int_value);

            Assert.AreEqual(2, clientLayerProvider.Layers.Count);
            Assert.AreEqual(2, serverLayerProvider.Layers.Count);
            Assert.AreEqual("Client1SendClient1Receive", clientLayerProvider.Layers[1].State);
            Assert.AreEqual("Server1ReceiveServer1Send", serverLayerProvider.Layers[1].State);

            await testClientServer.ServiceTransport.StopAsync();

            await testClientServer.ClientTransport.StopAsync();
        }
Example #14
0
        public async Task GeneratedService_GeneratedProxy_PayloadResponse_LayerData()
        {
            var layerStackProvider = new LayerStackProvider <Dummy>(LoggerTests.BlackHole, new TestLayer_CheckPassedValue(1234));
            TestClientServer <DummyTestService> testClientServer = await SetupTestClientServer <DummyTestService>(layerStackProvider, layerStackProvider);

            var proxy   = new DummyTestProxy <EpoxyConnection>(testClientServer.ClientConnection);
            var request = new Dummy {
                int_value = 100
            };
            IMessage <Dummy> response = await proxy.ReqRspMethodAsync(request);

            Assert.IsFalse(response.IsError);
            Assert.AreEqual(101, response.Payload.Deserialize().int_value);

            Assert.AreEqual(1, testClientServer.Service.RequestCount);

            await testClientServer.ServiceTransport.StopAsync();

            await testClientServer.ClientTransport.StopAsync();
        }
        static void Main(string[] args)
        {
            var layer1             = new TestLayer(1);
            var layer2             = new TestLayer(2);
            var layerStackProvider = new LayerStackProvider <PingLayerData>(layer1, layer2);

            SetupAsync(layerStackProvider).GetAwaiter().GetResult();

            Console.Out.WriteLine("Server ready");
            Console.Out.Flush();

            bool countdownSet = Countdown.Wait(30000);

            if (!countdownSet ||
                (NumRequestsReceived != (int)PingConstants.NumRequests) ||
                (NumEventsReceived != (int)PingConstants.NumEvents) ||
                (NumErrorsReceived != (int)PingConstants.NumErrors))
            {
                Console.Out.WriteLine("Server failed: Did not receive all expected messages");
                Console.Out.Flush();
                return;
            }

            if ((layer1.NumReached == 0) ||
                (layer1.NumError != 0) ||
                (layer2.NumReached == 0) ||
                (layer2.NumError != 0))
            {
                Console.Out.WriteLine("Server failed: Problem with layers");
                Console.Out.Flush();
                return;
            }

            Console.Out.WriteLine("Server completed");
            Console.Out.Flush();
        }
        static void Main(string[] args)
        {
            Thread.Sleep(1000);

            Console.Out.WriteLine("Start client");
            Console.Out.Flush();

            var layer1             = new TestLayer(1);
            var layer2             = new TestLayer(2);
            var layerStackProvider = new LayerStackProvider <PingLayerData>(layer1, layer2);

            try
            {
                var proxy = SetupProxyAsync(layerStackProvider).GetAwaiter().GetResult();

                for (int i = 0; i < (int)PingConstants.NumRequests; i++)
                {
                    var request = new PingRequest {
                        Payload = "request" + i, Action = PingAction.Identity
                    };
                    var message = DoPingPongAsync(proxy, request).GetAwaiter().GetResult();
                    if (message.IsError)
                    {
                        Console.Out.WriteLine("Error response received: " + message.Error.Deserialize().message);
                        Console.Out.WriteLine("Client failed");
                        Console.Out.Flush();
                        return;
                    }
                    else
                    {
                        string msg = message.Payload.Deserialize().Payload;
                        if (msg != request.Payload)
                        {
                            Console.Out.WriteLine($"Response message did not match request payload: expected \"{request.Payload}\", got \"{msg}\"");
                            Console.Out.WriteLine("Client failed");
                            Console.Out.Flush();
                            return;
                        }
                    }
                }

                for (int i = 0; i < (int)PingConstants.NumEvents; i++)
                {
                    var request = new PingRequest {
                        Payload = "event" + i
                    };
                    DoPingEvent(proxy, request);
                }

                for (int i = 0; i < (int)PingConstants.NumErrors; i++)
                {
                    var request = new PingRequest {
                        Payload = "error" + i, Action = PingAction.Error
                    };
                    var message = DoPingPongAsync(proxy, request).GetAwaiter().GetResult();
                    if (!message.IsError)
                    {
                        Console.Out.WriteLine("Non-error response received: " + message.Payload.Deserialize().Payload);
                        Console.Out.WriteLine("Client failed");
                        Console.Out.Flush();
                        return;
                    }
                    else
                    {
                        string msg = message.Error.Deserialize().message;
                        if (msg != request.Payload)
                        {
                            Console.Out.WriteLine($"Error message did not match request payload: expected \"{request.Payload}\", got \"{msg}\"");
                            Console.Out.WriteLine("Client failed");
                            Console.Out.Flush();
                            return;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.Out.WriteLine("Exception caught: " + ex.Message);
                Console.Out.Flush();
                return;
            }

            if ((layer1.NumReached == 0) ||
                (layer1.NumError != 0) ||
                (layer2.NumReached == 0) ||
                (layer2.NumError != 0))
            {
                Console.Out.WriteLine("Client failed: Problem with layers");
                Console.Out.Flush();
                return;
            }

            Console.Out.WriteLine("Client succeeded");
            Console.Out.Flush();
        }
Example #17
0
        public async Task GeneratedService_GeneratedProxy_PayloadResponse_ServerLayerErrors()
        {
            var errorLayer = new TestLayer_ReturnErrors();
            var serverLayerStackProvider = new LayerStackProvider<Dummy>(LoggerTests.BlackHole, errorLayer);
            TestClientServer<DummyTestService> testClientServer = await SetupTestClientServer<DummyTestService>(serverLayerStackProvider, null);
            var proxy = new DummyTestProxy<EpoxyConnection>(testClientServer.ClientConnection);
            var request = new Dummy { int_value = 100 };

            errorLayer.SetState(MessageType.REQUEST, errorOnSend: false, errorOnReceive: true);

            IMessage<Dummy> response = await proxy.ReqRspMethodAsync(request);
            Assert.IsTrue(response.IsError);
            Error error = response.Error.Deserialize();
            Assert.AreEqual(TestLayer_ReturnErrors.ReceiveError, error.error_code);

            Assert.AreEqual(0, testClientServer.Service.RequestCount);
            Assert.AreEqual(Dummy.Empty.int_value, testClientServer.Service.LastRequestReceived.int_value);

            errorLayer.SetState(MessageType.RESPONSE, errorOnSend: true, errorOnReceive: false);
            response = await proxy.ReqRspMethodAsync(request);
            Assert.IsTrue(response.IsError);
            error = response.Error.Deserialize();
            Assert.AreEqual(TestLayer_ReturnErrors.SendError, error.error_code);

            Assert.AreEqual(1, testClientServer.Service.RequestCount);
            Assert.AreEqual(request.int_value, testClientServer.Service.LastRequestReceived.int_value);

            await testClientServer.ServiceTransport.StopAsync();
            await testClientServer.ClientTransport.StopAsync();
        }
Example #18
0
        public async Task GeneratedService_GeneratedProxy_Event_ServerLayerErrors()
        {
            var errorLayer = new TestLayer_ReturnErrors();
            var serverLayerStackProvider = new LayerStackProvider<Dummy>(LoggerTests.BlackHole, errorLayer);
            TestClientServer<DummyTestService> testClientServer = await SetupTestClientServer<DummyTestService>(serverLayerStackProvider, null);
            var proxy = new DummyTestProxy<EpoxyConnection>(testClientServer.ClientConnection);
            var theEvent = new Dummy { int_value = 100 };

            errorLayer.SetState(MessageType.EVENT, errorOnSend: false, errorOnReceive: true);

            ManualResetEventSlim waitForEvent = testClientServer.Service.CreateResetEvent();
            proxy.EventMethodAsync(theEvent);
            bool wasSignaled = waitForEvent.Wait(TimeSpan.FromSeconds(1));
            Assert.IsFalse(wasSignaled, "Event should not fire");
            testClientServer.Service.ClearResetEvent();

            Assert.AreEqual(0, testClientServer.Service.EventCount);
            Assert.AreEqual(Dummy.Empty.int_value, testClientServer.Service.LastEventReceived.int_value);

            errorLayer.SetState(MessageType.EVENT, errorOnSend: true, errorOnReceive: false);
            theEvent.int_value = 101;

            waitForEvent = testClientServer.Service.CreateResetEvent();
            proxy.EventMethodAsync(theEvent);
            wasSignaled = waitForEvent.Wait(TimeSpan.FromSeconds(1));
            Assert.IsTrue(wasSignaled, "Timed out waiting for event to fire");

            Assert.AreEqual(1, testClientServer.Service.EventCount);
            Assert.AreEqual(theEvent.int_value, testClientServer.Service.LastEventReceived.int_value);

            await testClientServer.ServiceTransport.StopAsync();
            await testClientServer.ClientTransport.StopAsync();
        }
Example #19
0
        public async Task GeneratedService_GeneratedProxy_Event_StatefulLayers()
        {
            var clientLayerProvider = new TestLayerProvider_StatefulAppend("Client");
            var clientLayerStackProvider = new LayerStackProvider<Dummy>(LoggerTests.BlackHole, clientLayerProvider);
            var serverLayerProvider = new TestLayerProvider_StatefulAppend("Server");
            var serverLayerStackProvider = new LayerStackProvider<Dummy>(LoggerTests.BlackHole, serverLayerProvider);
            TestClientServer<DummyTestService> testClientServer =
                await SetupTestClientServer<DummyTestService>(serverLayerStackProvider, clientLayerStackProvider);
            var proxy = new DummyTestProxy<EpoxyConnection>(testClientServer.ClientConnection);
            var theEvent = new Dummy { int_value = 100 };

            clientLayerProvider.Layers.Clear();
            serverLayerProvider.Layers.Clear();

            ManualResetEventSlim waitForEvent = testClientServer.Service.CreateResetEvent();
            proxy.EventMethodAsync(theEvent);
            bool wasSignaled = waitForEvent.Wait(TimeSpan.FromSeconds(1));
            Assert.IsTrue(wasSignaled, "Timed out waiting for event to fire");

            Assert.AreEqual(1, testClientServer.Service.EventCount);
            Assert.AreEqual(theEvent.int_value, testClientServer.Service.LastEventReceived.int_value);

            Assert.AreEqual(1, clientLayerProvider.Layers.Count);
            Assert.AreEqual(1, serverLayerProvider.Layers.Count);
            Assert.AreEqual("Client0Send", clientLayerProvider.Layers[0].State);
            Assert.AreEqual("Server0Receive", serverLayerProvider.Layers[0].State);

            theEvent.int_value = 101;

            waitForEvent = testClientServer.Service.CreateResetEvent();
            proxy.EventMethodAsync(theEvent);
            wasSignaled = waitForEvent.Wait(TimeSpan.FromSeconds(1));
            Assert.IsTrue(wasSignaled, "Timed out waiting for event to fire");

            Assert.AreEqual(2, testClientServer.Service.EventCount);
            Assert.AreEqual(theEvent.int_value, testClientServer.Service.LastEventReceived.int_value);

            Assert.AreEqual(2, clientLayerProvider.Layers.Count);
            Assert.AreEqual(2, serverLayerProvider.Layers.Count);
            Assert.AreEqual("Client1Send", clientLayerProvider.Layers[1].State);
            Assert.AreEqual("Server1Receive", serverLayerProvider.Layers[1].State);

            await testClientServer.ServiceTransport.StopAsync();
            await testClientServer.ClientTransport.StopAsync();
        }
Example #20
0
        public async Task GeneratedService_GeneratedProxy_PayloadResponse_StatefulLayers()
        {
            var clientLayerProvider = new TestLayerProvider_StatefulAppend("Client");
            var clientLayerStackProvider = new LayerStackProvider<Dummy>(LoggerTests.BlackHole, clientLayerProvider);
            var serverLayerProvider = new TestLayerProvider_StatefulAppend("Server");
            var serverLayerStackProvider = new LayerStackProvider<Dummy>(LoggerTests.BlackHole, serverLayerProvider);
            TestClientServer<DummyTestService> testClientServer =
                await SetupTestClientServer<DummyTestService>(serverLayerStackProvider, clientLayerStackProvider);
            var proxy = new DummyTestProxy<EpoxyConnection>(testClientServer.ClientConnection);

            clientLayerProvider.Layers.Clear();
            serverLayerProvider.Layers.Clear();

            await AssertRequestResponseWorksAsync(proxy);
            Assert.AreEqual(1, clientLayerProvider.Layers.Count);
            Assert.AreEqual(1, serverLayerProvider.Layers.Count);
            Assert.AreEqual("Client0SendClient0Receive", clientLayerProvider.Layers[0].State);
            Assert.AreEqual("Server0ReceiveServer0Send", serverLayerProvider.Layers[0].State);

            await AssertRequestResponseWorksAsync(proxy);
            Assert.AreEqual(2, clientLayerProvider.Layers.Count);
            Assert.AreEqual(2, serverLayerProvider.Layers.Count);
            Assert.AreEqual("Client1SendClient1Receive", clientLayerProvider.Layers[1].State);
            Assert.AreEqual("Server1ReceiveServer1Send", serverLayerProvider.Layers[1].State);

            await testClientServer.ServiceTransport.StopAsync();
            await testClientServer.ClientTransport.StopAsync();
        }
Example #21
0
        public async Task MethodCall_Event_With_StatefulLayers()
        {
            var layerProvider = new TestLayerProvider_StatefulAppend("Layer");
            var layerStackProvider = new LayerStackProvider<Dummy>(LoggerTests.BlackHole, layerProvider);
            transportBuilder.SetLayerStackProvider(layerStackProvider);
            var testService = new DummyTestService();
            await DefaultSetup(testService, 1);

            var proxy = new DummyTestProxy<SimpleInMemConnection>(connections[0]);
            var theEvent = new Dummy { int_value = 100 };

            layerProvider.Layers.Clear();

            ManualResetEventSlim waitForEvent = testService.CreateResetEvent();
            proxy.EventMethodAsync(theEvent);
            bool wasSignaled = waitForEvent.Wait(TimeSpan.FromSeconds(1));
            Assert.IsTrue(wasSignaled, "Timed out waiting for event to fire");
            testService.ClearResetEvent();

            Assert.AreEqual(1, testService.EventCount);
            Assert.AreEqual(theEvent.int_value, testService.LastEventReceived.int_value);

            Assert.AreEqual(2, layerProvider.Layers.Count);
            Assert.AreEqual("Layer0Send", layerProvider.Layers[0].State);
            Assert.AreEqual("Layer1Receive", layerProvider.Layers[1].State);
        }
Example #22
0
        public async Task MethodCall_ReqRsp_WithStatefulLayers()
        {
            var layerProvider = new TestLayerProvider_StatefulAppend("Layer");
            var layerStackProvider = new LayerStackProvider<Dummy>(LoggerTests.BlackHole, layerProvider);
            transportBuilder.SetLayerStackProvider(layerStackProvider);
            await DefaultSetup(new CalculatorService(), 1);

            layerProvider.Layers.Clear();

            var calculatorProxy = new CalculatorProxy<SimpleInMemConnection>(connections[0]);

            var request = new Message<PairedInput>(new PairedInput { First = 1, Second = 2 });
            IMessage<Output> response = await calculatorProxy.AddAsync(request, CancellationToken.None);
            Assert.IsFalse(response.IsError);

            Assert.AreEqual(2, layerProvider.Layers.Count);
            Assert.AreEqual("Layer0SendLayer0Receive", layerProvider.Layers[0].State);
            Assert.AreEqual("Layer1ReceiveLayer1Send", layerProvider.Layers[1].State);

            request = new Message<PairedInput>(new PairedInput { First = 1, Second = 2 });
            response = await calculatorProxy.AddAsync(request, CancellationToken.None);
            Assert.IsFalse(response.IsError);

            Assert.AreEqual(4, layerProvider.Layers.Count);
            Assert.AreEqual("Layer2SendLayer2Receive", layerProvider.Layers[2].State);
            Assert.AreEqual("Layer3ReceiveLayer3Send", layerProvider.Layers[3].State);
        }
Example #23
0
        public async Task GeneratedService_GeneratedProxy_PayloadResponse_LayerData()
        {
            var layerStackProvider = new LayerStackProvider<Dummy>(LoggerTests.BlackHole, new TestLayer_CheckPassedValue(1234));
            TestClientServer<DummyTestService> testClientServer = await SetupTestClientServer<DummyTestService>(layerStackProvider, layerStackProvider);
            var proxy = new DummyTestProxy<EpoxyConnection>(testClientServer.ClientConnection);

            await AssertRequestResponseWorksAsync(proxy);
            Assert.AreEqual(1, testClientServer.Service.RequestCount);

            await testClientServer.ServiceTransport.StopAsync();
            await testClientServer.ClientTransport.StopAsync();
         }