Esempio n. 1
0
        public async Task ServiceProxyRpcMessageShouldRemainSame()
        {
            const string serviceName = "DemoService";
            int          defaultPort = DisposablePort.GetPort().Port;
            var          dict        = new Dictionary <string, string>
            {
                { $"Discovery.Services.{serviceName}.Source", "Config" },
                { $"Discovery.Services.{serviceName}.Hosts", "host1" },
                { $"Discovery.Services.{serviceName}.DefaultPort", defaultPort.ToString() }
            };

            Uri    uri            = null;
            string requestMessage = null;

            Func <HttpClientConfiguration, HttpMessageHandler> messageHandlerFactory = _ =>
            {
                var messageHandler = new MockHttpMessageHandler();
                messageHandler
                .When("*").Respond(async req =>
                {
                    requestMessage = await req.Content.ReadAsStringAsync();
                    uri            = req.RequestUri;
                    return(HttpResponseFactory.GetResponse(HttpStatusCode.Accepted));
                });
                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);
            }, dict))
            {
                var providerFactory = kernel.Get <Func <string, ServiceProxyProvider> >();

                TracingContext.SetRequestID("g");

                var serviceProxy = providerFactory(serviceName);

                string expectedHost = "override-host";
                int    expectedPort = DisposablePort.GetPort().Port;

                TracingContext.SetHostOverride(serviceName, expectedHost, expectedPort);

                var request = new HttpServiceRequest("testMethod", null, new Dictionary <string, object>());
                using (TracingContext.Tags.SetUnencryptedTag("test", 1))
                    await serviceProxy.Invoke(request, typeof(string));
                var body = requestMessage;
                Console.WriteLine($"error: {body}");

                JsonConvert.DeserializeObject <GigyaRequestProtocol>(body, new JsonSerializerSettings()
                {
                    MissingMemberHandling = MissingMemberHandling.Error
                });


                uri.Host.ShouldBe(expectedHost);
                uri.Port.ShouldBe(expectedPort);
            }
        }
Esempio n. 2
0
        public async Task RequestContextShouldOverrideHostOnly()
        {
            const string serviceName = "DemoService";
            int          defaultPort = DisposablePort.GetPort().Port;

            var dict = new Dictionary <string, string> {
                { $"Discovery.Services.{serviceName}.Source", "Config" },
                { $"Discovery.Services.{serviceName}.Hosts", "host1" },
                { $"Discovery.Services.{serviceName}.DefaultPort", defaultPort.ToString() }
            };

            var kernel          = new TestingKernel <ConsoleLog>(k => k.Rebind <IDiscovery>().To <ServiceDiscovery.Rewrite.Discovery>().InSingletonScope(), dict);
            var providerFactory = kernel.Get <Func <string, ServiceProxyProvider> >();
            var serviceProxy    = providerFactory(serviceName);

            var messageHandler = new MockHttpMessageHandler();

            messageHandler
            .When("*")
            .Respond(req => HttpResponseFactory.GetResponse(content: $"'{req.RequestUri.Host}:{req.RequestUri.Port}'"));
            string overrideHost = "override-host";

            serviceProxy.HttpMessageHandler = messageHandler;

            TracingContext.SetHostOverride(serviceName, overrideHost);

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

            for (int i = 0; i < 50; i++)
            {
                var host = (string)await serviceProxy.Invoke(request, typeof(string));

                host.ShouldBe($"{overrideHost}:{defaultPort}");
            }
        }
Esempio n. 3
0
        public async Task RequestContextOverrideShouldFailOnFirstAttempt()
        {
            var port = DisposablePort.GetPort().Port;
            var dict = new Dictionary <string, string>
            {
                { "Discovery.Services.DemoService.Source", "Config" },
                { "Discovery.Services.DemoService.Hosts", "notImpotent" },
                { "Discovery.Services.DemoService.DefaultPort", port.ToString() }
            };

            using (var kernel =
                       new TestingKernel <ConsoleLog>(
                           k => k.Rebind <IDiscovery>().To <ServiceDiscovery.Rewrite.Discovery>().InSingletonScope(), dict)
                   )
            {
                var providerFactory = kernel.Get <Func <string, ServiceProxyProvider> >();
                var serviceProxy    = providerFactory("DemoService");
                serviceProxy.DefaultPort = port;

                //Disable  TracingContext.SetRequestID("1");

                CallContext.FreeNamedDataSlot("#ORL_RC");

                int counter        = 0;
                var messageHandler = new MockHttpMessageHandler();
                messageHandler
                .When("*")
                .Respond(req =>
                {
                    counter++;

                    throw new HttpRequestException();
                });


                string overrideHost = "override-host";
                int    overridePort = 5318;
                TracingContext.SetHostOverride("DemoService", overrideHost, overridePort);
                serviceProxy.HttpMessageHandler = messageHandler;

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

                for (int i = 0; i < 3; i++)
                {
                    Func <Task> act = () => serviceProxy.Invoke(request, typeof(string));

                    await act.ShouldThrowAsync <HttpRequestException>();
                }
                counter.ShouldBe(3);
            }
        }
        public async Task ServiceDiscoveryFlowAllDeployedwithOverrides()
        {
            _currentEnvironment = Staging;

            _discoveryConfig.EnvironmentFallbackEnabled = true;

            TracingContext.SetPreferredEnvironment(Canary);
            TracingContext.SetHostOverride(ServiceName, "override-host");

            var node = await _serviceDiscovery.GetNode();

            Assert.IsNull(node.LoadBalancer);
            Assert.AreEqual(node.Node.Hostname, "override-host");

            HealthCheckResult hResult = GetHealthResult();

            Assert.IsTrue(hResult.IsHealthy);
        }
Esempio n. 5
0
        public async Task RequestContextShouldOverridePortAndHost()
        {
            const string serviceName = "DemoService";
            const int    defaultPort = 5555;
            var          dict        = new Dictionary <string, string>
            {
                { $"Discovery.Services.{serviceName}.Source", "Config" },
                { $"Discovery.Services.{serviceName}.Hosts", "host1" },
                { $"Discovery.Services.{serviceName}.DefaultPort", defaultPort.ToString() }
            };

            using (var kernel = new TestingKernel <ConsoleLog>(k => k.Rebind <IDiscovery>().To <ServiceDiscovery.Rewrite.Discovery>().InSingletonScope(), dict))
            {
                var    providerFactory = kernel.Get <Func <string, ServiceProxyProvider> >();
                var    serviceProxy    = providerFactory(serviceName);
                Uri    uri             = null;
                string requestMessage  = null;
                var    messageHandler  = new MockHttpMessageHandler();
                messageHandler
                .When("*").Respond(async req =>
                {
                    requestMessage = await req.Content.ReadAsStringAsync();
                    uri            = req.RequestUri;
                    return(HttpResponseFactory.GetResponse(HttpStatusCode.Accepted));
                });

                serviceProxy.HttpMessageHandler = messageHandler;
                string expectedHost = "override-host";
                int    expectedPort = 5318;

                TracingContext.SetHostOverride(serviceName, expectedHost, expectedPort);

                var request = new HttpServiceRequest("testMethod", null, new Dictionary <string, object>());
                await serviceProxy.Invoke(request, typeof(string));

                var body = requestMessage;
                JsonConvert.DeserializeObject <GigyaRequestProtocol>(body, new JsonSerializerSettings()
                {
                    MissingMemberHandling = MissingMemberHandling.Error
                });
                uri.Host.ShouldBe(expectedHost);
                uri.Port.ShouldBe(expectedPort);
            }
        }