Exemplo n.º 1
0
        public async Task Send_returnsAnotherResponse_serverSideHandlerChanged()
        {
            // global arrange
            using var fixture = new MessagingClientFixtureBuilder()
                                .AddWebHandler <TestSuccessFailureMessageHandler>()// to have at least one handler configured
                                .ClearInterceptors()
                                .Create();

            // arrange 1
            fixture.ReplaceHandlers(new TestMessageHandler <TestScenarioMessage, TestResponse>(new TestResponse(true)));

            // act 1
            var response1 = await fixture.Client.RequestObject(new TestScenarioMessage(1));

            // assert 1
            response1.Should().BeEquivalentTo(new TestResponse(true));

            // arrange 2
            fixture.ReplaceHandlers(new TestMessageHandler <TestScenarioMessage, TestResponse>(new TestResponse(false)));

            // act 2
            var response2 = await fixture.Client.RequestObject(new TestScenarioMessage(2));

            // assert 2
            response2.Should().BeEquivalentTo(new TestResponse(false));
        }
Exemplo n.º 2
0
        public void PublishObject_throwsInterruptingKindOfException_thrownNoException(Type exceptionType)
        {
            using var fixture = new MessagingClientFixtureBuilder()
                                .AddWebHandler <TestSuccessFailureMessageHandler>()
                                .ClearInterceptors()
                                .Create();

            fixture.Client.Awaiting(x => x.PublishObject(new TestSuccessFailureMessage(exceptionType.AssemblyQualifiedName)))
            .Should().NotThrowAsync();
        }
Exemplo n.º 3
0
        public async Task RequestObject_returnsResponse()
        {
            using var fixture = new MessagingClientFixtureBuilder()
                                .AddWebHandler <TestScenarioMessageHandler>()
                                .Create();

            var response = await fixture.Client.RequestObject(new TestScenarioMessage(0));

            response.Should().Be(new TestResponse(false));
        }
        public async Task Post_returnsStatusAccepted_thrownInterruptingKindOfException(Type exceptionType)
        {
            using var fixture = new MessagingClientFixtureBuilder()
                                .AddWebHandler <TestFailMessageHandler>()
                                .ClearInterceptors()
                                .Create();

            var response = await fixture.Request(new TestFailMessage(exceptionType.AssemblyQualifiedName));

            response.Should().BeEquivalentTo(new { StatusCode = HttpStatusCode.Accepted });
        }
Exemplo n.º 5
0
        public void RequestObject_throwsMessageNotRegisteredException_NoLocalHandler()
        {
            using var fixture = new MessagingClientFixtureBuilder()
                                .AddWebHandler <TestSuccessFailureMessageHandler>()
                                .Create();

            fixture.Client.Awaiting(x => x.RequestObject(new TestScenarioMessage(0)))
            .Should().ThrowExactlyAsync <MessageNotRegisteredException>()
            .WithMessage($"Message '{nameof(TestScenarioMessage)}' wasn't registered.")
            .Result.Which.InnerException.Should().BeNull();
        }
        public async Task Send_returnsResponse()
        {
            using var fixture = new MessagingClientFixtureBuilder()
                                .UseMongo(ConnectionString, Database)
                                .AddMongoHandler <TestScenarioMessageHandler>()
                                .Create();

            var response = await fixture.Client.RequestObject(new TestScenarioMessage(0));

            response.Should().Be(new TestResponse(false));
        }
Exemplo n.º 7
0
        public void RequestObject_throwsInterruptingKindOfException_thrownMessageDeferredException(Type exceptionType)
        {
            using var fixture = new MessagingClientFixtureBuilder()
                                .AddWebHandler <TestSuccessFailureMessageHandler>()
                                .ClearInterceptors()
                                .Create();

            fixture.Client.Awaiting(x => x.RequestObject(new TestSuccessFailureMessage(exceptionType.AssemblyQualifiedName)))
            .Should().ThrowExactlyAsync <MessageDeferredException>()
            .Result.Which.InnerException.Should().BeNull();
        }
Exemplo n.º 8
0
        public void PublishObject_throwsMessageFailedException_thrownMessageFailedException()
        {
            using var fixture = new MessagingClientFixtureBuilder()
                                .AddWebHandler <TestScenarioMessageHandler>()
                                .Create();

            fixture.Client.Awaiting(x => x.PublishObject(new TestScenarioMessage(2)))
            .Should().ThrowExactlyAsync <MessageFailedException>()
            .WithMessage("2")
            .Result.Which.InnerException.Should().BeNull();
        }
Exemplo n.º 9
0
        public void RequestObject_throwsMessageFailedException_thrownInvalidOperationException()
        {
            using var fixture = new MessagingClientFixtureBuilder()
                                .AddWebHandler <TestScenarioMessageHandler>()
                                .Create();

            fixture.Client.Awaiting(x => x.RequestObject(new TestScenarioMessage(1)))
            .Should().ThrowExactlyAsync <MessageFailedException>()
            .WithMessage("Message handling has failed.")
            .Result.Which.InnerException.Should().BeNull();
        }
Exemplo n.º 10
0
        public async Task PublishObject_returnsResponse()
        {
            var handler = new TestMessageHandler <TestScenarioMessage, TestResponse>(new TestResponse(false));

            using var fixture = new MessagingClientFixtureBuilder()
                                .AddWebHandler(handler)
                                .Create();

            await fixture.Client.PublishObject(new TestScenarioMessage(0));

            handler.Message.Should().Be(new TestScenarioMessage(0));
        }
        public void Send_throwsInterruptingKindOfException_thrownMessageDeferredException(Type exceptionType)
        {
            using var fixture = new MessagingClientFixtureBuilder()
                                .UseMongo(ConnectionString, Database)
                                .AddMongoHandler <TestSuccessFailureMessageHandler>()
                                .Create();

            fixture.Client.Awaiting(x => x.RequestObject(new TestSuccessFailureMessage(exceptionType.AssemblyQualifiedName)))
            .Should().ThrowExactlyAsync <MessageDeferredException>()
            .WithMessage("No response from server in defined amount of time.")
            .Result.Which.InnerException.Should().BeNull();
        }
        public void Send_throwsMessageFailedException_thrownMessageFailedException()
        {
            using var fixture = new MessagingClientFixtureBuilder()
                                .UseMongo(ConnectionString, Database)
                                .AddMongoHandler <TestScenarioMessageHandler>()
                                .Create();

            fixture.Client.Awaiting(x => x.RequestObject(new TestScenarioMessage(2)))
            .Should().ThrowExactlyAsync <MessageFailedException>()
            .WithMessage("2")
            .Result.Which.InnerException.Should().BeNull();
        }
Exemplo n.º 13
0
        public void RequestObject_throwsMessageFailedException_thrownMessageFailedExceptionWithInnerException()
        {
            using var fixture = new MessagingClientFixtureBuilder()
                                .AddWebHandler <TestScenarioMessageHandler>()
                                .Create();

            fixture.Client.Awaiting(x => x.RequestObject(new TestScenarioMessage(3)))
            .Should().ThrowExactlyAsync <MessageFailedException>()
            .WithMessage("3")
            .Result.WithInnerExceptionExactly <MessageFailedException>()
            .Which.InnerException?.Message.Should().Be("inner");
        }
        public void Send_throwsMessageNotRegisteredException_NoRemoteHandler()
        {
            using var fixture = new MessagingClientFixtureBuilder()
                                .UseMongo(ConnectionString, Database)
                                .AddMongoMessageRegistrationOnly <TestScenarioMessage>()
                                .AddMongoHandler <TestSuccessFailureMessageHandler>()// to have at least one handler configured
                                .Create();

            fixture.Client.Awaiting(x => x.RequestObject(new TestScenarioMessage(0)))
            .Should().ThrowExactlyAsync <MessageNotRegisteredException>()
            .WithMessage($"Message '{nameof(TestScenarioMessage)}' wasn't registered.")
            .Result.Which.InnerException.Should().BeNull();
        }
        public async Task Post_returnsStatusNotFound_thrownMessageNotRegisteredException()
        {
            var exceptionType = typeof(MessageNotRegisteredException);

            using var fixture = new MessagingClientFixtureBuilder()
                                .AddWebHandler <TestFailMessageHandler>()
                                .Create();

            var response = await fixture.Request(new TestFailMessage(exceptionType.AssemblyQualifiedName));

            response.Should().BeEquivalentTo(new { StatusCode = HttpStatusCode.NotFound });
            var responseObject = await fixture.ReadObject <MessageException>(response);

            responseObject.Should().BeOfType <MessageNotRegisteredException>();
        }
        public async Task Send_onceCallsHandler_concurrently(int concurrencyCount)
        {
            var handler = new TestScenarioMessageHandler();

            using var fixture = new MessagingClientFixtureBuilder()
                                .UseMongo(ConnectionString, Database)
                                .AddMongoHandler(handler)
                                .Create();

            var tasks = Enumerable.Range(1, concurrencyCount).Select(
                _ => fixture.Client.RequestObject(new TestScenarioMessage(0)));
            await Task.WhenAll(tasks);

            handler.CallCount.Should().Be(1);
        }
        public async Task Post_returnsStatusInternalServerError_throwAnyOtherMessageException()
        {
            var exceptionType = typeof(TestMessageException);

            using var fixture = new MessagingClientFixtureBuilder()
                                .AddWebHandler <TestFailMessageHandler>()
                                .Create();

            var response = await fixture.Request(new TestFailMessage(exceptionType.AssemblyQualifiedName));

            response.Should().BeEquivalentTo(new { StatusCode = HttpStatusCode.InternalServerError });
            var responseObject = await fixture.ReadObject <MessageException>(response);

            responseObject.Should().BeOfType <TestMessageException>();
        }