Beispiel #1
0
        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));
                }
        }
Beispiel #3
0
        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);
                    }
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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));
        }
Beispiel #6
0
        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));
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        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);
                }
        }
Beispiel #10
0
        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);
                }
        }
Beispiel #11
0
        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);
                }
        }
Beispiel #12
0
        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;
        }
Beispiel #15
0
        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);
                }
        }
Beispiel #16
0
        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);
        }
Beispiel #17
0
        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);
                }
        }
Beispiel #20
0
        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);
        }
Beispiel #22
0
 public static void Shutdown()
 {
     StubServer.Stop();
 }