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 void JsonClientCallsUnhandledException() { var server = new StubServer(); var client = new StubClient(server); var clientProvider = new StubMessageTypeProvider(); var clientSerializer = new Serializer(); var jc = new JsonClient(client, clientProvider, clientSerializer); var exception = default(Exception); jc.UnhandledException += (s, e) => exception = e.Exception; // simulate JsonServicesException jc.HandleClientMessage(this, new MessageEventArgs()); Assert.IsInstanceOf <JsonServicesException>(exception); exception = null; jc.HandleClientMessage(this, new MessageEventArgs { Data = string.Empty }); Assert.IsInstanceOf <JsonServicesException>(exception); // simulate NullReferenceException exception = null; jc.Serializer = null; jc.HandleClientMessage(this, new MessageEventArgs { Data = "Goofy" }); Assert.IsInstanceOf <NullReferenceException>(exception); }
public async Task JsonClientSupportsFilteredSubscriptionsAndUnsubscriptionsUsingFleckServer() { // fake transport and serializer var server = new StubServer(); var serverSerializer = new Serializer(); var serverProvider = new StubMessageTypeProvider(); var executor = new StubExecutor(); var client = new StubClient(server, "jc"); var clientProvider = new StubMessageTypeProvider(); var clientSerializer = new Serializer(); var secondClient = new StubClient(server, "sc"); var secondClientProvider = new StubMessageTypeProvider(); var secondClientSerializer = new Serializer(); // json server and client using (var js = new JsonServer(server, serverProvider, serverSerializer, executor, AuthProvider)) using (var jc = new JsonClient(client, clientProvider, clientSerializer)) using (var sc = new JsonClient(secondClient, secondClientProvider, secondClientSerializer)) { // set names for easier debugging jc.DebugName = "First"; sc.DebugName = "Second"; // execute core test await TestFilteredSubscriptionsAndUnsubscriptionsCore(js, jc, sc, Credentials); } }
public void SrpAuthenticationFailsOnBadCredentials() { // 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(); // json server and client using (var js = new JsonServer(server, provider, serializer, executor, AuthProvider)) using (var jc = new JsonClient(client, provider, serializer)) { // default credentials var ex = Assert.ThrowsAsync <AuthFailedException>(async() => await CallGetVersionServiceCore(js, jc)); Assert.AreEqual("No credentials specified", ex.Message); // invalid credentials ex = Assert.ThrowsAsync <AuthFailedException>(async() => await CallGetVersionServiceCore(js, jc, new SrpCredentials("root", "beer"))); Assert.AreEqual("Authentication failed", ex.Message); // invalid credentials ex = Assert.ThrowsAsync <AuthFailedException>(async() => await CallGetVersionServiceCore(js, jc, new SrpCredentials("hacker", "password"))); Assert.AreEqual("Authentication failed", ex.Message); } }
protected override JsonClient CreateClient(JsonServer server) { var client = new StubClient(server.Server as StubServer); var serializer = new Serializer(); var provider = new StubMessageTypeProvider(); return(new JsonClient(client, provider, serializer)); }
protected override JsonServer CreateServer() { // fake transport var server = new StubServer(); var serializer = new Serializer(); var executor = new StubExecutor(); var provider = new StubMessageTypeProvider(); return(new JsonServer(server, provider, serializer, executor, AuthProvider)); }
protected virtual JsonClient CreateClient(JsonServer server) { // fake transport and serializer var client = new StubClient((StubServer)server.Server); var serializer = new Serializer(); var executor = new StubExecutor(); var provider = new StubMessageTypeProvider(); return(new JsonClient(client, provider, serializer)); }
protected virtual int MaxClientsWithExceptions => 100; // exceptions slow things down considerably protected virtual JsonServer CreateServer() { // fake transport and serializer var server = new StubServer(); var serializer = new Serializer(); var executor = new StubExecutor(); var provider = new StubMessageTypeProvider(); return(new JsonServer(server, provider, serializer, executor)); }
public void JsonClientCallAndNotifyThrowOnNullArguments() { var server = new StubServer(); var client = new StubClient(server); var clientProvider = new StubMessageTypeProvider(); var clientSerializer = new Serializer(); var jc = new JsonClient(client, clientProvider, clientSerializer); Assert.Throws <ArgumentNullException>(() => jc.Notify(null)); Assert.ThrowsAsync <ArgumentNullException>(() => jc.Call(null)); Assert.ThrowsAsync <ArgumentNullException>(() => jc.Call <string>(null)); }
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 JsonClientRejectsPendingMessagesWhenConnectionIsAborted() { // 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(); // json server and client using (var js = new JsonServer(server, provider, serializer, executor)) using (var jc = new JsonClient(client, provider, serializer)) { await CallDelayServiceAndAbortConnectionCore(js, jc); } }
public async Task JsonServerAwaitsTasks() { // 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(); // json server and client using (var js = new JsonServer(server, provider, serializer, executor)) using (var jc = new JsonClient(client, provider, serializer)) { await CallDelayServiceCore(js, jc); } }
public async Task CallCalculateServiceUsingSrpAuthentication() { // 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(); // json server and client using (var js = new JsonServer(server, provider, serializer, executor, AuthProvider)) using (var jc = new JsonClient(client, provider, serializer)) { await CallCalculateServiceCore(js, jc, Credentials); } }
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 void SrpAuthenticationFailsOnIncompatibleAuthProvider() { // 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(); // json server without authentication vs SRP client using (var js = new JsonServer(server, provider, serializer, executor)) using (var jc = new JsonClient(client, provider, serializer)) { var ex = Assert.ThrowsAsync <AuthFailedException>(async() => await CallGetVersionServiceCore(js, jc, Credentials)); Assert.AreEqual("Server doesn't support SRP authentication protocol", ex.Message); } }
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"); }
static void Main() { HostFactory.Run(config => { config.SetDescription("JsonServices Sample Server"); config.SetServiceName(ServiceName); config.Service <JsonServer>(sc => { var logger = HostLogger.Get <Program>(); sc.ConstructUsing(() => { // websocket transport var server = new FleckServer(Url); var serializer = new Serializer(); var executor = new StubExecutor(); var provider = new StubMessageTypeProvider(); var jsonServer = new JsonServer(server, provider, serializer, executor); // optional: set product name and version information jsonServer.ProductName = ServiceName; jsonServer.ProductVersion = "0.0.1-beta"; return(jsonServer); }); sc.WhenStarted(js => { logger.Info($"{js.ProductName} starts listening: {Url}"); js.Start(); }); sc.WhenStopped(js => { logger.Info($"{js.ProductName} is stopping..."); js.Dispose(); }); }); }); }
public async Task JsonClientSupportsSubscriptionsAndUnsubscriptions() { // fake transport and serializer var server = new StubServer(); var serverSerializer = new Serializer(); var serverProvider = new StubMessageTypeProvider(); var executor = new StubExecutor(); var client = new StubClient(server, "jc"); var clientProvider = new StubMessageTypeProvider(); var clientSerializer = new Serializer(); // json server and client var js = new JsonServer(server, serverProvider, serverSerializer, executor); var jc = new JsonClient(client, clientProvider, clientSerializer); // second client var secondClientProvider = new StubMessageTypeProvider(); var secondClientSerializer = new Serializer(); var sc = new JsonClient(new StubClient(server, "sc"), secondClientProvider, secondClientSerializer); // test core await TestSubscriptionsAndUnsubscriptionsCore(js, jc, sc); }
public async Task AuthenticationProviderIsCalledOnConnectAsync() { // fake transport and serializer var server = new StubServer(); var serverSerializer = new Serializer(); var serverProvider = new StubMessageTypeProvider(); var executor = new StubExecutor(); var authProvider = new StubAuthProvider("root", "s3cr3t"); var client = new StubClient(server, "jc"); var clientProvider = new StubMessageTypeProvider(); var clientSerializer = new Serializer(); // json server and client var js = new JsonServer(server, serverProvider, serverSerializer, executor, authProvider).Start(); var jc = new JsonClient(client, clientProvider, clientSerializer); Assert.IsFalse(authProvider.IsCalled); // connect await jc.ConnectAsync(new CredentialsBase("root", "s3cr3t")); Assert.IsTrue(authProvider.IsCalled); }