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); }
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 DisruptorTest() { _delayedEventHandlers = new List <DelayedEventHandler>(); _testWorkHandlers = new List <TestWorkHandler>(); _executor = new StubExecutor(); _disruptor = new Disruptor <TestEvent>(() => new TestEvent(), 4, _executor); }
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)); }
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 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); }
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 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 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 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 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 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())); }
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); } }
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); }
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 void SetUp() { _executor = new StubExecutor(); _memory = UnmanagedRingBufferMemory.Allocate(4, TestValueEvent.Size); _disruptor = new UnmanagedDisruptor <TestValueEvent>(_memory.PointerToFirstEvent, _memory.EventSize, _memory.EventCount, _executor); }