Exemplo n.º 1
0
        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));
                }
        }
Exemplo n.º 2
0
        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);
                }
        }
Exemplo n.º 3
0
        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);
                }
        }
Exemplo n.º 4
0
        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;
        }
Exemplo n.º 5
0
        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");
        }
Exemplo n.º 6
0
        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);
                }
        }