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); } }
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 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 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); }
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 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 static void Initialize(TestContext testContext) { // This is needed because testhost.exe uses its own location for the config file // There appears to be no way to set it in .NET Core. See: // https://stackoverflow.com/questions/47752271/app-config-not-beeing-loaded-in-net-core-mstests-project // https://github.com/Microsoft/testfx/issues/348 // https://github.com/dotnet/corefx/issues/26626 string asmPath = Assembly.GetExecutingAssembly().Location; SustainsysSaml2Section.Configuration = ConfigurationManager.OpenExeConfiguration(asmPath); StubServer.Start(testContext); }
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 JsonClientCanDisconnectAndReconnect() { // 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 CallDisconnectAndReconnectCore(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 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 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 void AppFactory_GetEchoApp_ReturnsCorrectMode() { //Arrange var clientManager = new StubITcpClientManager(); var serverManager = new StubITcpServerManager(); var clientApp = new StubClient(clientManager); var serverApp = new StubServer(serverManager); var appFacory = new EchoAppFactory(clientApp, serverApp); //Act var factoryClient = appFacory.GetEchoApp(RunMode.Client); var factoryServer = appFacory.GetEchoApp(RunMode.Server); //Assert Assert.AreEqual(factoryClient, clientApp); Assert.AreEqual(factoryServer, serverApp); Assert.AreNotEqual(factoryServer, clientApp); }
public void ToStringTests() { var ss = new StubServer(); var jc = new JsonClient(new StubClient(ss), new StubMessageTypeProvider(), new Serializer()) { DebugName = "MyClient" }; Assert.AreEqual("MyClient", jc.ToString()); var id = jc.GenerateMessageId(); Assert.AreEqual("MyClient1", id); var pm = new JsonClient.PendingMessage { Name = "Test" }; Assert.AreEqual("Test", pm.ToString()); }
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); } }
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); }
public static void Shutdown() { StubServer.Stop(); }