public async Task JsonServerHandlesDeserializationErrors() { // fake transport and serializer var server = new StubServer(); var client = new StubClient(server); var provider = new StubMessageTypeProvider(); var serverSerializer = new BrokenSerializer(); var clientSerializer = new Serializer(); var executor = new StubExecutor(); using (var js = new JsonServer(server, provider, serverSerializer, executor)) using (var jc = new JsonClient(client, provider, clientSerializer)) { js.Start(); var tcs = new TaskCompletionSource <bool>(); js.UnhandledException += (s, e) => tcs.TrySetException(e.Exception); // TODO: can we have something better than a timeout here? await Assert_TimedOut(jc.ConnectAsync(), timeout : Task.Delay(200)); // the server should have got an unhandled exception Assert.ThrowsAsync <NotImplementedException>(async() => await Assert_NotTimedOut(tcs.Task)); } }
public async Task CallGetVersionService() { // fake transport and serializer var server = new StubServer(); var client = new StubClient(server); var serializer = new Serializer(); var executor = new StubExecutor(); var provider = new StubMessageTypeProvider(); using (var js = new JsonServer(server, provider, serializer, executor)) using (var jc = new JsonClient(client, provider, serializer)) { await CallGetVersionServiceCore(js, jc); } }
public async Task JsonServerCanExecuteGenericMessages() { // fake transport and serializer var server = new StubServer(); var client = new StubClient(server); var serializer = new Serializer(); var executor = new GenericServiceExecutor(); var provider = new GenericMessageTypeProvider(); // json server and client using (var js = new JsonServer(server, provider, serializer, executor)) using (var jc = new JsonClient(client, provider, serializer)) { await CallGenericMessagesCore(js, jc); } }
public async Task JsonServerHasEvents() { var server = new StubServer(); var serializer = new Serializer(); var executor = new StubExecutor(); var provider = new StubMessageTypeProvider(); var js = new JsonServer(server, provider, serializer, executor); var connectCounter = 0; void connectEventHandler(object sender, MessageEventArgs e) => connectCounter++; js.ClientConnected += connectEventHandler; js.ClientDisconnected += connectEventHandler; var serviceCounter = 0; void serviceEventHandler(object sender, EventArgs e) => serviceCounter++; js.InitializeRequestContext += serviceEventHandler; js.BeforeExecuteService += serviceEventHandler; js.AfterExecuteService += serviceEventHandler; var client = new StubClient(server); var jc = new JsonClient(client, provider, serializer); Assert.AreEqual(1, connectCounter); Assert.AreEqual(0, serviceCounter); // connect makes one service call and fires three events: // InitializeRequestContext, BeforeExecuteService, AfterExecuteService await jc.ConnectAsync(); Assert.AreEqual(3, serviceCounter); js.Dispose(); Assert.AreEqual(2, connectCounter); // unsubscribe js.ClientDisconnected -= connectEventHandler; js.ClientConnected -= connectEventHandler; js.AfterExecuteService -= serviceEventHandler; js.BeforeExecuteService -= serviceEventHandler; js.InitializeRequestContext -= serviceEventHandler; }
public async Task CallServiceBeforeConnectingShouldFail() { // fake transport and serializer var server = new StubServer(); var client = new StubClient(server); var serializer = new Serializer(); var executor = new StubExecutor(); var provider = new StubMessageTypeProvider(); var js = new JsonServer(server, provider, serializer, executor); var jc = new JsonClient(client, provider, serializer); js.Start(); Assert.ThrowsAsync <AuthRequiredException>(async() => await Assert_NotTimedOut(jc.Call(new GetVersion()), "jc.Call(GetVersion) before Connect")); await Assert_NotTimedOut(jc.ConnectAsync(), "jc.ConnectAsync()"); await Assert_NotTimedOut(jc.Call(new GetVersion()), "jc.Call(GetVersion) after connect"); }
public void JsonServerHandlesMessageTypeProvidersErrors() { // fake transport and serializer var server = new StubServer(); var client = new StubClient(server); var provider = new BrokenMessageTypeProvider(); var serverSerializer = new Serializer(); var clientSerializer = new Serializer(); var executor = new StubExecutor(); using (var js = new JsonServer(server, provider, serverSerializer, executor)) using (var jc = new JsonClient(client, provider, clientSerializer)) { js.Start(); var ex = Assert.ThrowsAsync <InvalidRequestException>(() => Assert_NotTimedOut(jc.ConnectAsync(), timeout: Task.Delay(200))); // note: JsonServicesException.MessageId is lost // when an exception is translated to Error and back again Assert.IsNull(ex.MessageId); } }