public async Task MethodCall_Event_FailingLayerStackProvider_ServerReceiveEvent() { // Fail after 3 successful GetLayerStack calls (2 on client, 1 on server) transportBuilder.SetLayerStackProvider(new TestLayerStackProvider_Fails(3)); var testService = new DummyTestService(); await DefaultSetup(testService, 1); var proxy = new DummyTestProxy <SimpleInMemConnection>(connections[0]); var theEvent = new Dummy { int_value = 100 }; ManualResetEventSlim waitForEvent = testService.CreateResetEvent(); proxy.EventMethodAsync(theEvent); bool wasSignaled = waitForEvent.Wait(TimeSpan.FromSeconds(1)); Assert.IsTrue(wasSignaled, "Timed out waiting for event to fire"); Assert.AreEqual(1, testService.EventCount); Assert.AreEqual(theEvent.int_value, testService.LastEventReceived.int_value); waitForEvent = testService.CreateResetEvent(); proxy.EventMethodAsync(theEvent); wasSignaled = waitForEvent.Wait(TimeSpan.FromSeconds(1)); Assert.IsFalse(wasSignaled, "Event should not fire 2"); Assert.AreEqual(1, testService.EventCount); }
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); }
public async Task MethodCall_ReqRsp_FailingLayerStackProvider_ServerReceiveReq() { // Fail after 3 successful GetLayerStack calls (2 on client, 1 on server) transportBuilder.SetLayerStackProvider(new TestLayerStackProvider_Fails(3)); var testService = new DummyTestService(); await DefaultSetup(testService, 1); var proxy = new DummyTestProxy <SimpleInMemConnection>(connections[0]); 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); request.int_value = 101; response = await proxy.ReqRspMethodAsync(request); Assert.IsTrue(response.IsError); Error error = response.Error.Deserialize(); Assert.AreEqual((int)ErrorCode.INTERNAL_SERVER_ERROR, error.error_code); Assert.AreEqual(Errors.InternalErrorMessage, error.message); }
public async Task MethodCall_Event_WithLayerStackErrors() { var errorLayer = new TestLayer_ReturnErrors(); transportBuilder.SetLayerStackProvider(new LayerStackProvider <Dummy>(errorLayer)); var testService = new DummyTestService(); await DefaultSetup(testService, 1); var proxy = new DummyTestProxy <SimpleInMemConnection>(connections[0]); var theEvent = new Dummy { int_value = 100 }; errorLayer.SetState(MessageType.EVENT, errorOnSend: false, errorOnReceive: true); ManualResetEventSlim waitForEvent = testService.CreateResetEvent(); proxy.EventMethodAsync(theEvent); bool wasSignaled = waitForEvent.Wait(TimeSpan.FromSeconds(1)); Assert.IsFalse(wasSignaled, "Event should not fire 1"); testService.ClearResetEvent(); Assert.AreEqual(0, testService.EventCount); Assert.AreEqual(Dummy.Empty.int_value, testService.LastEventReceived.int_value); errorLayer.SetState(MessageType.EVENT, errorOnSend: true, errorOnReceive: false); theEvent.int_value = 101; waitForEvent = testService.CreateResetEvent(); proxy.EventMethodAsync(theEvent); wasSignaled = waitForEvent.Wait(TimeSpan.FromSeconds(1)); Assert.IsFalse(wasSignaled, "Event should not fire 2"); testService.ClearResetEvent(); Assert.AreEqual(0, testService.EventCount); Assert.AreEqual(Dummy.Empty.int_value, testService.LastEventReceived.int_value); errorLayer.SetState(MessageType.EVENT, errorOnSend: false, errorOnReceive: false); theEvent.int_value = 102; waitForEvent = testService.CreateResetEvent(); proxy.EventMethodAsync(theEvent); wasSignaled = waitForEvent.Wait(TimeSpan.FromSeconds(1)); Assert.IsTrue(wasSignaled, "Timed out waiting for event to fire"); Assert.AreEqual(1, testService.EventCount); Assert.AreEqual(theEvent.int_value, testService.LastEventReceived.int_value); }
private static async Task <EpoxyTransport> Server( ILogSink logSink, IMetricsSink metricsSink, IPEndPoint endPoint) { var transport = new EpoxyTransportBuilder() .SetLogSink(logSink) .SetMetricsSink(metricsSink) .Construct(); var service = new DummyTestService(); var listener = transport.MakeListener(endPoint); listener.AddService(service); await listener.StartAsync(); return(transport); }
private async Task<EpoxyTransport> Server( ILogSink logSink, IMetricsSink metricsSink, IPEndPoint endPoint) { var transport = new EpoxyTransportBuilder() .SetLogSink(logSink) .SetMetricsSink(metricsSink) .Construct(); var service = new DummyTestService(); var listener = transport.MakeListener(endPoint); listeners.Add(listener); listener.AddService(service); await listener.StartAsync(); return transport; }
public async Task MethodCall_ReqRsp_WithLayerStackErrors() { var errorLayer = new TestLayer_ReturnErrors(); transportBuilder.SetLayerStackProvider(new LayerStackProvider <Dummy>(errorLayer)); var testService = new DummyTestService(); await DefaultSetup(testService, 1); var proxy = new DummyTestProxy <SimpleInMemConnection>(connections[0]); 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, "Error 1 does not match"); Assert.AreEqual(0, testService.RequestCount); Assert.AreEqual(Dummy.Empty.int_value, testService.LastRequestReceived.int_value); errorLayer.SetState(MessageType.REQUEST, errorOnSend: true, errorOnReceive: false); request.int_value = 101; response = await proxy.ReqRspMethodAsync(request); Assert.IsTrue(response.IsError); error = response.Error.Deserialize(); Assert.AreEqual(TestLayer_ReturnErrors.SendError, error.error_code, "Error 2 does not match"); Assert.AreEqual(0, testService.RequestCount); Assert.AreEqual(Dummy.Empty.int_value, testService.LastRequestReceived.int_value); errorLayer.SetState(MessageType.RESPONSE, errorOnSend: true, errorOnReceive: false); request.int_value = 102; response = await proxy.ReqRspMethodAsync(request); Assert.IsTrue(response.IsError); error = response.Error.Deserialize(); Assert.AreEqual(TestLayer_ReturnErrors.SendError, error.error_code, "Error 3 does not match"); Assert.AreEqual(1, testService.RequestCount); Assert.AreEqual(request.int_value, testService.LastRequestReceived.int_value); errorLayer.SetState(MessageType.RESPONSE, errorOnSend: false, errorOnReceive: true); request.int_value = 103; response = await proxy.ReqRspMethodAsync(request); Assert.IsTrue(response.IsError); error = response.Error.Deserialize(); Assert.AreEqual(TestLayer_ReturnErrors.ReceiveError, error.error_code, "Error 4 does not match"); Assert.AreEqual(2, testService.RequestCount); Assert.AreEqual(request.int_value, testService.LastRequestReceived.int_value); errorLayer.SetState(MessageType.EVENT, errorOnSend: true, errorOnReceive: true); request.int_value = 104; response = await proxy.ReqRspMethodAsync(request); Assert.IsFalse(response.IsError); Assert.AreEqual(105, response.Payload.Deserialize().int_value); Assert.AreEqual(3, testService.RequestCount); Assert.AreEqual(request.int_value, testService.LastRequestReceived.int_value); }
public async Task MethodCall_Event_FailingLayerStackProvider_ServerReceiveEvent() { // Fail after 3 successful GetLayerStack calls (2 on client, 1 on server) transportBuilder.SetLayerStackProvider(new TestLayerStackProvider_Fails(3)); var testService = new DummyTestService(); await DefaultSetup(testService, 1); var proxy = new DummyTestProxy<SimpleInMemConnection>(connections[0]); var theEvent = new Dummy { int_value = 100 }; ManualResetEventSlim waitForEvent = testService.CreateResetEvent(); proxy.EventMethodAsync(theEvent); bool wasSignaled = waitForEvent.Wait(TimeSpan.FromSeconds(1)); Assert.IsTrue(wasSignaled, "Timed out waiting for event to fire"); Assert.AreEqual(1, testService.EventCount); Assert.AreEqual(theEvent.int_value, testService.LastEventReceived.int_value); waitForEvent = testService.CreateResetEvent(); proxy.EventMethodAsync(theEvent); wasSignaled = waitForEvent.Wait(TimeSpan.FromSeconds(1)); Assert.IsFalse(wasSignaled, "Event should not fire 2"); Assert.AreEqual(1, testService.EventCount); }
public async Task MethodCall_Event_WithLayerStackErrors() { var errorLayer = new TestLayer_ReturnErrors(); transportBuilder.SetLayerStackProvider(new LayerStackProvider<Dummy>(LoggerTests.BlackHole, errorLayer)); var testService = new DummyTestService(); await DefaultSetup(testService, 1); var proxy = new DummyTestProxy<SimpleInMemConnection>(connections[0]); var theEvent = new Dummy { int_value = 100 }; errorLayer.SetState(MessageType.Event, errorOnSend: false, errorOnReceive: true); ManualResetEventSlim waitForEvent = testService.CreateResetEvent(); proxy.EventMethodAsync(theEvent); bool wasSignaled = waitForEvent.Wait(TimeSpan.FromSeconds(1)); Assert.IsFalse(wasSignaled, "Event should not fire 1"); testService.ClearResetEvent(); Assert.AreEqual(0, testService.EventCount); Assert.AreEqual(Dummy.Empty.int_value, testService.LastEventReceived.int_value); errorLayer.SetState(MessageType.Event, errorOnSend: true, errorOnReceive: false); theEvent.int_value = 101; waitForEvent = testService.CreateResetEvent(); proxy.EventMethodAsync(theEvent); wasSignaled = waitForEvent.Wait(TimeSpan.FromSeconds(1)); Assert.IsFalse(wasSignaled, "Event should not fire 2"); testService.ClearResetEvent(); Assert.AreEqual(0, testService.EventCount); Assert.AreEqual(Dummy.Empty.int_value, testService.LastEventReceived.int_value); errorLayer.SetState(MessageType.Event, errorOnSend: false, errorOnReceive: false); theEvent.int_value = 102; waitForEvent = testService.CreateResetEvent(); proxy.EventMethodAsync(theEvent); wasSignaled = waitForEvent.Wait(TimeSpan.FromSeconds(1)); Assert.IsTrue(wasSignaled, "Timed out waiting for event to fire"); Assert.AreEqual(1, testService.EventCount); Assert.AreEqual(theEvent.int_value, testService.LastEventReceived.int_value); }
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); }
public async Task MethodCall_ReqRsp_FailingLayerStackProvider_ServerReceiveReq() { // Fail after 3 successful GetLayerStack calls (2 on client, 1 on server) transportBuilder.SetLayerStackProvider(new TestLayerStackProvider_Fails(3)); var testService = new DummyTestService(); await DefaultSetup(testService, 1); var proxy = new DummyTestProxy<SimpleInMemConnection>(connections[0]); 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); request.int_value = 101; response = await proxy.ReqRspMethodAsync(request); Assert.IsTrue(response.IsError); Error error = response.Error.Deserialize(); Assert.AreEqual((int)ErrorCode.InternalServerError, error.error_code); Assert.AreEqual(Errors.InternalErrorMessage, error.message); }
public async Task MethodCall_ReqRsp_WithLayerStackErrors() { var errorLayer = new TestLayer_ReturnErrors(); transportBuilder.SetLayerStackProvider(new LayerStackProvider<Dummy>(LoggerTests.BlackHole, errorLayer)); var testService = new DummyTestService(); await DefaultSetup(testService, 1); var proxy = new DummyTestProxy<SimpleInMemConnection>(connections[0]); 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, "Error 1 does not match"); Assert.AreEqual(0, testService.RequestCount); Assert.AreEqual(Dummy.Empty.int_value, testService.LastRequestReceived.int_value); errorLayer.SetState(MessageType.Request, errorOnSend: true, errorOnReceive: false); request.int_value = 101; response = await proxy.ReqRspMethodAsync(request); Assert.IsTrue(response.IsError); error = response.Error.Deserialize(); Assert.AreEqual(TestLayer_ReturnErrors.SendError, error.error_code, "Error 2 does not match"); Assert.AreEqual(0, testService.RequestCount); Assert.AreEqual(Dummy.Empty.int_value, testService.LastRequestReceived.int_value); errorLayer.SetState(MessageType.Response, errorOnSend: true, errorOnReceive: false); request.int_value = 102; response = await proxy.ReqRspMethodAsync(request); Assert.IsTrue(response.IsError); error = response.Error.Deserialize(); Assert.AreEqual(TestLayer_ReturnErrors.SendError, error.error_code, "Error 3 does not match"); Assert.AreEqual(1, testService.RequestCount); Assert.AreEqual(request.int_value, testService.LastRequestReceived.int_value); errorLayer.SetState(MessageType.Response, errorOnSend: false, errorOnReceive: true); request.int_value = 103; response = await proxy.ReqRspMethodAsync(request); Assert.IsTrue(response.IsError); error = response.Error.Deserialize(); Assert.AreEqual(TestLayer_ReturnErrors.ReceiveError, error.error_code, "Error 4 does not match"); Assert.AreEqual(2, testService.RequestCount); Assert.AreEqual(request.int_value, testService.LastRequestReceived.int_value); errorLayer.SetState(MessageType.Event, errorOnSend: true, errorOnReceive: true); request.int_value = 104; response = await proxy.ReqRspMethodAsync(request); Assert.IsFalse(response.IsError); Assert.AreEqual(105, response.Payload.Deserialize().int_value); Assert.AreEqual(3, testService.RequestCount); Assert.AreEqual(request.int_value, testService.LastRequestReceived.int_value); }