예제 #1
0
        public async Task RequestExceptionReceivedTest()
        {
            var resMessage = HttpResponseFactory.GetResponseWithException(ExceptionSerializer, new RequestException("Post not allowed"), HttpStatusCode.MethodNotAllowed);

            var messageHandler = new MockHttpMessageHandler();

            messageHandler.When("*").Respond(resMessage);

            try
            {
                await CreateClient(messageHandler).ToUpper("aaaa");
            }
            catch (RequestException)
            {
                var expected = DefaultExpected();

                expected.Counters.Add(new MetricDataEquatable {
                    Name = "ApplicationException", Unit = Unit.Calls
                });
                expected.Timers.Add(new MetricDataEquatable {
                    Name = "Deserialization", Unit = Unit.Calls
                });

                GetMetricsData().AssertEquals(expected);
            }
        }
예제 #2
0
        public async Task NullExceptionReceivedTest()
        {
            var resMessage = HttpResponseFactory.GetResponseWithException(new NullReferenceException());

            var messageHandler = new MockHttpMessageHandler();

            messageHandler.When("*").Respond(resMessage);

            try
            {
                await CreateClient(messageHandler).ToUpper("aaaa");
            }
            catch (Exception)
            {
                var expected = DefaultExpected();

                expected.Counters.Add(new MetricDataEquatable {
                    Name = "ApplicationException", Unit = Unit.Calls
                });
                expected.Timers.Add(new MetricDataEquatable {
                    Name = "Deserialization", Unit = Unit.Calls
                });

                GetMetricsData().AssertEquals(expected);
            }
        }
예제 #3
0
        public async Task NullExceptionReceivedTest()
        {
            var resMessage = HttpResponseFactory.GetResponseWithException(ExceptionSerializer, new NullReferenceException());

            Func <bool, string, HttpMessageHandler> messageHandlerFactory = (_, __) =>
            {
                var messageHandler = new MockHttpMessageHandler();
                messageHandler.When("*").Respond(resMessage);

                return(messageHandler);
            };

            unitTesting.Rebind <Func <bool, string, HttpMessageHandler> >().ToMethod(c => messageHandlerFactory);

            try
            {
                await CreateClient().ToUpper("aaaa");
            }
            catch (Exception)
            {
                var expected = DefaultExpected();

                expected.Counters.Add(new MetricDataEquatable {
                    Name = "ApplicationException", Unit = Unit.Calls
                });
                expected.Timers.Add(new MetricDataEquatable {
                    Name = "Deserialization", Unit = Unit.Calls
                });

                GetMetricsData().AssertEquals(expected);
            }
        }
예제 #4
0
        public async Task ToUpper_MethodCallFailsWithEnvironmentException_CorrectExceptionIsThrown()
        {
            var expected       = new EnvironmentException("You environment is invalid.").ThrowAndCatch();
            var messageHandler = new MockHttpMessageHandler();

            messageHandler.When("*").Respond(HttpResponseFactory.GetResponseWithException(expected));

            var actual = CreateClient(messageHandler).ToUpper("aaaa").ShouldThrow <EnvironmentException>();

            actual.Message.ShouldBe(expected.Message);
        }
예제 #5
0
        public async Task ToUpper_MethodCallFailsWithRequestException_CorrectExceptionIsThrown()
        {
            var expected       = new RequestException("You request is invalid.").ThrowAndCatch();
            var messageHandler = new MockHttpMessageHandler();

            messageHandler.When("*").Respond(HttpResponseFactory.GetResponseWithException(expected));

            Func <Task> action = async() => await CreateClient(messageHandler).ToUpper("aaaa");

            action.ShouldThrow <RequestException>().Message.Should().Be(expected.Message);
        }
예제 #6
0
        public async Task ToUpper_MethodCallFailsWithProgrammaticException_CorrectExceptionIsThrown()
        {
            var expected       = new ProgrammaticException("You code is invalid.").ThrowAndCatch();
            var messageHandler = new MockHttpMessageHandler();

            messageHandler.When("*").Respond(HttpResponseFactory.GetResponseWithException(expected));

            var actual = CreateClient(messageHandler).ToUpper("aaaa").ShouldThrow <RemoteServiceException>();

            actual.InnerException.ShouldBeOfType <ProgrammaticException>();
            actual.InnerException.Message.ShouldBe(expected.Message);
        }
예제 #7
0
        public async Task ToUpper_MethodCallFailsWithCustomerFacingException_CorrectExceptionIsThrown()
        {
            var expected       = new RequestException("You action is invalid, Mr. Customer.", 30000).ThrowAndCatch();
            var messageHandler = new MockHttpMessageHandler();

            messageHandler.When("*").Respond(HttpResponseFactory.GetResponseWithException(expected));

            var actual = CreateClient(messageHandler).ToUpper("aaaa").ShouldThrow <RequestException>();

            actual.Message.ShouldBe(expected.Message);
            actual.ErrorCode.ShouldBe(expected.ErrorCode);
        }
예제 #8
0
        public async Task ToUpper_MethodCallFailsWithRemoteServiceException_CorrectExceptionIsThrown()
        {
            var expected       = new RemoteServiceException("A service is invalid.", "someUri").ThrowAndCatch();
            var messageHandler = new MockHttpMessageHandler();

            messageHandler.When("*").Respond(HttpResponseFactory.GetResponseWithException(expected));

            var actual = CreateClient(messageHandler).ToUpper("aaaa").ShouldThrow <RemoteServiceException>();

            actual.Message.ShouldBe(expected.Message);
            actual.RequestedUri.ShouldBe(expected.RequestedUri);
            actual.InnerException.ShouldBeNull();
        }
예제 #9
0
        public async Task ToUpper_MethodCallFailsWithEnvironmentException_CorrectExceptionIsThrown()
        {
            var expected = new EnvironmentException("You environment is invalid.").ThrowAndCatch();
            Func <HttpClientConfiguration, HttpMessageHandler> messageHandlerFactory = _ =>
            {
                var messageHandler = new MockHttpMessageHandler();
                messageHandler.When("*").Respond(HttpResponseFactory.GetResponseWithException(ExceptionSerializer, expected));

                return(messageHandler);
            };

            unitTesting.Rebind <Func <HttpClientConfiguration, HttpMessageHandler> >().ToMethod(c => messageHandlerFactory);

            var actual = CreateClient().ToUpper("aaaa").ShouldThrow <EnvironmentException>();

            actual.Message.ShouldBe(expected.Message);
        }
예제 #10
0
        public async Task ToUpper_MethodCallFailsWithRequestException_CorrectExceptionIsThrown()
        {
            var expected = new RequestException("You request is invalid.").ThrowAndCatch();
            Func <HttpClientConfiguration, HttpMessageHandler> messageHandlerFactory = _ =>
            {
                var messageHandler = new MockHttpMessageHandler();
                messageHandler.When("*").Respond(HttpResponseFactory.GetResponseWithException(unitTesting.Get <JsonExceptionSerializer>(), expected));

                return(messageHandler);
            };

            unitTesting.Rebind <Func <HttpClientConfiguration, HttpMessageHandler> >().ToMethod(c => messageHandlerFactory);

            Func <Task> action = async() => await CreateClient().ToUpper("aaaa");

            action.ShouldThrow <RequestException>().Message.Should().Be(expected.Message);
        }
예제 #11
0
        public async Task ToUpper_MethodCallFailsWithProgrammaticException_CorrectExceptionIsThrown()
        {
            var expected = new ProgrammaticException("You code is invalid.").ThrowAndCatch();
            Func <bool, string, HttpMessageHandler> messageHandlerFactory = (_, __) =>
            {
                var messageHandler = new MockHttpMessageHandler();
                messageHandler.When("*").Respond(HttpResponseFactory.GetResponseWithException(ExceptionSerializer, expected));

                return(messageHandler);
            };

            unitTesting.Rebind <Func <bool, string, HttpMessageHandler> >().ToMethod(c => messageHandlerFactory);

            var actual = CreateClient().ToUpper("aaaa").ShouldThrow <RemoteServiceException>();

            actual.InnerException.ShouldBeOfType <ProgrammaticException>();
            actual.InnerException.Message.ShouldBe(expected.Message);
        }
예제 #12
0
        public async Task ToUpper_MethodCallFailsWithRemoteServiceException_CorrectExceptionIsThrown()
        {
            var expected = new RemoteServiceException("A service is invalid.", "someUri").ThrowAndCatch();
            Func <HttpClientConfiguration, HttpMessageHandler> messageHandlerFactory = _ =>
            {
                var messageHandler = new MockHttpMessageHandler();
                messageHandler.When("*").Respond(HttpResponseFactory.GetResponseWithException(ExceptionSerializer, expected));

                return(messageHandler);
            };

            unitTesting.Rebind <Func <HttpClientConfiguration, HttpMessageHandler> >().ToMethod(c => messageHandlerFactory);

            var actual = CreateClient().ToUpper("aaaa").ShouldThrow <RemoteServiceException>();

            actual.Message.ShouldBe(expected.Message);
            actual.RequestedUri.ShouldBe(expected.RequestedUri);
            actual.InnerException.ShouldBeNull();
        }
예제 #13
0
        public async Task ToUpper_MethodCallFailsWithCustomerFacingException_CorrectExceptionIsThrown()
        {
            var expected = new RequestException("You action is invalid, Mr. Customer.", 30000).ThrowAndCatch();
            Func <HttpClientConfiguration, HttpMessageHandler> messageHandlerFactory = _ =>
            {
                var messageHandler = new MockHttpMessageHandler();
                messageHandler.When("*").Respond(req =>
                {
                    return(HttpResponseFactory.GetResponseWithException(ExceptionSerializer, expected));
                });

                return(messageHandler);
            };

            unitTesting.Rebind <Func <HttpClientConfiguration, HttpMessageHandler> >().ToMethod(c => messageHandlerFactory);
            var actual = CreateClient().ToUpper("aaaa").ShouldThrow <RequestException>();

            actual.Message.ShouldBe(expected.Message);
            actual.ErrorCode.ShouldBe(expected.ErrorCode);
        }
예제 #14
0
        public async Task HttpsDisabled_NoCertificate_CallSucceeds()
        {
            var host            = "host1";
            var httpsPortOffset = 5;
            var port            = DisposablePort.GetPort().Port;
            var dict            = new Dictionary <string, string>
            {
                { "Discovery.Services.DemoService.Source", "Config" },
                { "Discovery.Services.DemoService.Hosts", host },
                { "Discovery.Services.DemoService.DefaultPort", port.ToString() },
                { "Discovery.Services.DemoService.UseHttpsOverride", "false" }
            };

            int  httpsTestCount    = 0;
            bool httpsMethodCalled = false;

            Func <HttpClientConfiguration, HttpMessageHandler> messageHandlerFactory = _ =>
            {
                var messageHandler = new MockHttpMessageHandler();
                messageHandler
                .When("https://*")
                .Respond(req =>
                         HttpResponseFactory.GetResponseWithException(ExceptionSerializer, new SocketException()));

                messageHandler
                .When("http://*")
                .Respond(req => HttpResponseFactory.GetResponse(content: "'some HTTP response'"));

                return(messageHandler);
            };

            using (var kernel =
                       new TestingKernel <ConsoleLog>(
                           k =>
            {
                k.Rebind <IDiscovery>().To <ServiceDiscovery.Rewrite.Discovery>().InSingletonScope();
                k.Rebind <Func <HttpClientConfiguration, HttpMessageHandler> >().ToMethod(c => messageHandlerFactory);

                var certificateLocator = Substitute.For <ICertificateLocator>();
                certificateLocator
                .When(cl => cl.GetCertificate(Arg.Any <string>()))
                .Do(x => throw new Exception());
                k.Rebind <ICertificateLocator>().ToConstant(certificateLocator);

                var httpsAuthenticator = Substitute.For <IHttpsAuthenticator>();
                httpsAuthenticator
                .When(a => a.AddHttpMessageHandlerAuthentication(Arg.Any <HttpClientHandler>(), Arg.Any <HttpClientConfiguration>()))
                .Do(x => throw new Exception());
                k.Rebind <IHttpsAuthenticator>().ToConstant(httpsAuthenticator);
            }, dict)
                   )
            {
                var providerFactory = kernel.Get <Func <string, ServiceProxyProvider> >();
                var serviceProxy    = providerFactory("DemoService");
                serviceProxy.DefaultPort = port;
                TracingContext.SetRequestID("1");

                var request = new HttpServiceRequest("testMethod", null, new Dictionary <string, object>());

                await serviceProxy.Invoke(request, typeof(string));
            }
        }