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));
                }
        }
 public void SetUp()
 {
     _ringBuffer           = null;
     _delayedEventHandlers = new List <DelayedEventHandler>();
     _executor             = new StubExecutor();
     _disruptor            = new ValueDisruptor <TestValueEvent>(() => new TestValueEvent(), 4, _executor);
 }
Exemplo n.º 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);
                    }
        }
Exemplo n.º 4
0
 public DisruptorTest()
 {
     _delayedEventHandlers = new List <DelayedEventHandler>();
     _testWorkHandlers     = new List <TestWorkHandler>();
     _executor             = new StubExecutor();
     _disruptor            = new Disruptor <TestEvent>(() => new TestEvent(), 4, _executor);
 }
Exemplo n.º 5
0
        public async Task ExecuteAsync_Default_CallInterceptor()
        {
            // arrange
            var interceptorMock  = new Mock <IInMemoryRequestInterceptor>();
            var client           = new InMemoryClient("Foo");
            var variables        = new Dictionary <string, object?>();
            var operationRequest = new OperationRequest("foo", new StubDocument(), variables);
            var executor         = new StubExecutor();

            client.Executor = executor;
            client.RequestInterceptors.Add(interceptorMock.Object);
            client.RequestInterceptors.Add(interceptorMock.Object);
            interceptorMock
            .Setup(x => x
                   .OnCreateAsync(
                       StubExecutor.ApplicationServiceProvider,
                       operationRequest,
                       It.IsAny <IQueryRequestBuilder>(),
                       It.IsAny <CancellationToken>()));

            // act
            await client.ExecuteAsync(operationRequest);

            // assert
            interceptorMock
            .Verify(x => x
                    .OnCreateAsync(
                        StubExecutor.ApplicationServiceProvider,
                        operationRequest,
                        It.IsAny <IQueryRequestBuilder>(),
                        It.IsAny <CancellationToken>()),
                    Times.Exactly(2));
        }
Exemplo n.º 6
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);
                }
        }
Exemplo n.º 7
0
 public void SetUp()
 {
     _lastPublishedEvent   = null;
     _ringBuffer           = null;
     _delayedEventHandlers = new List <DelayedEventHandler>();
     _testWorkHandlers     = new List <TestWorkHandler>();
     _executor             = new StubExecutor();
     _disruptor            = new Disruptor <TestEvent>(() => new TestEvent(), 4, _executor);
 }
Exemplo n.º 8
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));
        }
Exemplo n.º 9
0
        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));
        }
Exemplo n.º 10
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));
        }
Exemplo n.º 11
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.º 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);
                }
        }
Exemplo n.º 13
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);
                }
        }
Exemplo n.º 14
0
        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);
                }
        }
Exemplo n.º 15
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.º 16
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);
                }
        }
Exemplo n.º 17
0
        public async Task ExecuteAsync_Default_ExecuteQuery()
        {
            // arrange
            var client           = new InMemoryClient("Foo");
            var variables        = new Dictionary <string, object?>();
            var operationRequest = new OperationRequest("foo", new StubDocument(), variables);
            var executor         = new StubExecutor();

            client.Executor = executor;

            // act
            await client.ExecuteAsync(operationRequest);

            // assert
            Assert.Equal(operationRequest.Name, executor.Request.OperationName);
            Assert.Equal(variables, executor.Request.VariableValues);
            Assert.Equal("{ foo }", Encoding.UTF8.GetString(executor.Request.Query !.AsSpan()));
        }
Exemplo n.º 18
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.º 19
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);
                }
        }
Exemplo n.º 20
0
        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 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);
        }
Exemplo n.º 22
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);
        }
Exemplo n.º 23
0
 public void SetUp()
 {
     _executor  = new StubExecutor();
     _memory    = UnmanagedRingBufferMemory.Allocate(4, TestValueEvent.Size);
     _disruptor = new UnmanagedDisruptor <TestValueEvent>(_memory.PointerToFirstEvent, _memory.EventSize, _memory.EventCount, _executor);
 }