public async Task Always_ShouldCreateCreateHttpMessageHandlersCorrectly()
        {
            // arrange
            var log = new List <string>();
            var h1  = new TestDelegatingHandler(1, log);
            var h2  = new TestDelegatingHandler(2, log);
            var h3  = new FakeHttpClientHandler(r =>
                                                new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new ByteArrayContent(Encoding.UTF8.GetBytes("the result"))
            });

            // act
            var result = await new HttpClientGenerator("http://fake.host", new ICallsWrapper[0],
                                                       new DelegatingHandler[] { h1, h2, h3 })
                         .Generate <ITestInterface>()
                         .TestMethod();

            // assert
            result.Should().Be("the result");
            log.Should().BeEquivalentTo(new List <string>
            {
                "Handler 1 before",
                "Handler 2 before",
                "Handler 2 after",
                "Handler 1 after",
            }, o => o.WithStrictOrdering());
        }
        public void OuterHandlerAndResultAreSameInstance()
        {
            var innerHandler = new HttpClientHandler();
            var outerHandler = new TestDelegatingHandler();

            var result = innerHandler.DecorateWith(outerHandler);

            Assert.Same(outerHandler, result);
        }
        public void InnerHandlerAreSameInstance()
        {
            var innerHandler = new HttpClientHandler();
            var outerHandler = new TestDelegatingHandler();

            innerHandler.DecorateWith(outerHandler);

            Assert.Same(innerHandler, outerHandler.InnerHandler);
        }
Ejemplo n.º 4
0
        private HDInsightManagementClient GetHDInsightUnitTestingClient(TestDelegatingHandler handler)
        {
            ServiceClientCredentials  cred   = new BasicAuthenticationCredentials();
            HDInsightManagementClient client = new HDInsightManagementClient(cred, handler)
            {
                SubscriptionId = Guid.NewGuid().ToString()
            };

            return(client);
        }
        public void TestCreateCustomization()
        {
            string testName = "TestCreateCustomization";
            TestDelegatingHandler     handler = new TestDelegatingHandler();
            HDInsightManagementClient client  = GetHDInsightUnitTestingClient(handler);

            client.Clusters.BeginCreating(ResourceGroupName, ClusterName, ClusterCreateParametersHelpers.GetCustomCreateParametersIaas(testName));
            client.Clusters.BeginCreate(ResourceGroupName, ClusterName, ClusterCreateParametersHelpers.GetIaasClusterSpec(testName.ToLowerInvariant()));

            Assert.Equal(handler.Requests[0], handler.Requests[1]);
        }
        protected async Task <HttpRequestMessage> InvokeAsync(DelegatingHandler handler, HttpRequestMessage request)
        {
            var testHandler = new TestDelegatingHandler();

            handler.InnerHandler = testHandler;

            var invoker = new HttpMessageInvoker(handler);

            await invoker.SendAsync(request, CancellationToken.None);

            return(testHandler.Request);
        }
Ejemplo n.º 7
0
        public void WhenGettingAnInvalidBookItShouldThrow()
        {
            // Arrange
            var fakeHandler = new TestDelegatingHandler <Customer>(HttpStatusCode.NotFound);
            var fakeServer  = new HttpServer(new HttpConfiguration(), fakeHandler);
            var service     = new CustomerBetService(new HttpClient(fakeServer));

            // Act
            var result = service.GetCustomers();

            // Assert
            Assert.Fail();
        }
Ejemplo n.º 8
0
        public void TestDisableHttpCustomization()
        {
            TestDelegatingHandler     handler = new TestDelegatingHandler();
            HDInsightManagementClient client  = GetHDInsightUnitTestingClient(handler);

            client.Configurations.BeginDisablingHttp(ResourceGroupName, ClusterName);
            client.Configurations.BeginUpdate(ResourceGroupName, ClusterName, ConfigurationKey.Gateway,
                                              ConfigurationsConverter.Convert(new HttpConnectivitySettings
            {
                EnabledCredential = "False"
            }));

            Assert.Equal(handler.Requests[0], handler.Requests[1]);
        }
Ejemplo n.º 9
0
        public void TestResizeCustomization()
        {
            TestDelegatingHandler     handler = new TestDelegatingHandler();
            HDInsightManagementClient client  = GetHDInsightUnitTestingClient(handler);

            int newSize = 5;

            client.Clusters.BeginResizing(ResourceGroupName, ClusterName, newSize);
            client.Clusters.BeginResize(ResourceGroupName, ClusterName, new ClusterResizeParameters
            {
                TargetInstanceCount = newSize
            });

            Assert.Equal(handler.Requests[0], handler.Requests[1]);
        }
Ejemplo n.º 10
0
        public void TestEnableHttpCustomization()
        {
            TestDelegatingHandler     handler = new TestDelegatingHandler();
            HDInsightManagementClient client  = GetHDInsightUnitTestingClient(handler);

            string username = "******";
            string password = "******";

            client.Configurations.BeginEnablingHttp(ResourceGroupName, ClusterName, username, password);
            client.Configurations.BeginUpdate(ResourceGroupName, ClusterName, ConfigurationKey.Gateway,
                                              ConfigurationsConverter.Convert(new HttpConnectivitySettings
            {
                EnabledCredential = "true",
                Password          = password,
                Username          = username
            }));

            Assert.Equal(handler.Requests[0], handler.Requests[1]);
        }
Ejemplo n.º 11
0
        public void TestCreateCustomization()
        {
            var currentMode = HttpMockServer.Mode;

            HttpMockServer.Mode = HttpRecorderMode.None;

            try
            {
                var commonData = new CommonTestFixture();
                TestDelegatingHandler     handler = new TestDelegatingHandler();
                HDInsightManagementClient client  = GetHDInsightUnitTestingClient(handler);

                client.Clusters.BeginCreate(ResourceGroupName, ClusterName, PrepareClusterCreateParamsForWasb(commonData));
                client.Clusters.BeginCreating(ResourceGroupName, ClusterName, PrepareCustomClusterCreateParamsForWasb(commonData));

                Assert.Equal(handler.Requests[0], handler.Requests[1]);
            }
            finally
            {
                HttpMockServer.Mode = currentMode;
            }
        }
Ejemplo n.º 12
0
        public void WhenGettingAllCustomersTheyShouldBeReturned()
        {
            // Arrange
            var customers = new[] {
                new Customer {
                    Id = 1, Name = "Customer 1"
                },
                new Customer {
                    Id = 2, Name = "Customer 2"
                }
            };

            var fakehandler = new TestDelegatingHandler <Customer[]>(customers);
            var fakeServer  = new HttpServer(new HttpConfiguration(), fakehandler);
            var service     = new CustomerBetService(new HttpClient(fakeServer));

            // Act
            var result = service.GetCustomers();

            // Assert
            Assert.AreEqual(2, result.Count);
        }
Ejemplo n.º 13
0
        public async Task TestIngestionClient()
        {
            var attemptCount = 0;
            var failFor      = 6;
            var interceptor  = new TestDelegatingHandler((request) =>
            {
                // Artificial response for the PushDataUpdate API.
                attemptCount++;
                if (failFor > 0)
                {
                    failFor--;
                    return(new HttpResponseMessage(System.Net.HttpStatusCode.GatewayTimeout));
                }
                var response     = new HttpResponseMessage(System.Net.HttpStatusCode.OK);
                response.Content = new StringContent("{}");
                return(response);
            });

            var ingestion = new BingCommerceIngestion(new TokenCredentials("test"), interceptor);

            var client = new IngestionClient(ingestion, "tenant", "index", 5, new RequestLogger(null, RequestLogLevel.None));

            var result = await client.PushDataUpdateAsync("body");

            Assert.IsNull(result);

            Assert.AreEqual(5, attemptCount);
            Assert.AreEqual(1, failFor);

            result = await client.PushDataUpdateAsync("body");

            Assert.IsNotNull(result);

            Assert.AreEqual(7, attemptCount);
            Assert.AreEqual(0, failFor);
        }
Ejemplo n.º 14
0
        public void WhenGettingAllBetsTheyShouldBeReturned()
        {
            // Arrange
            var bets = new[] {
                new Bet {
                    CustomerId = 1, RaceId = 1, HorseId = 2, ReturnStake = 100.0m, Won = true
                },
                new Bet {
                    CustomerId = 2, RaceId = 1, HorseId = 5, ReturnStake = 200.0m, Won = false
                },
                new Bet {
                    CustomerId = 3, RaceId = 1, HorseId = 3, ReturnStake = 400.0m, Won = true
                },
                new Bet {
                    CustomerId = 4, RaceId = 1, HorseId = 2, ReturnStake = 100.0m, Won = false
                },
                new Bet {
                    CustomerId = 5, RaceId = 1, HorseId = 1, ReturnStake = 500.0m, Won = false
                },
                new Bet {
                    CustomerId = 6, RaceId = 1, HorseId = 5, ReturnStake = 2100.0m, Won = true
                },
                new Bet {
                    CustomerId = 7, RaceId = 1, HorseId = 2, ReturnStake = 100.0m, Won = false
                },
            };
            var fakehandler = new TestDelegatingHandler <Bet[]>(bets);
            var fakeServer  = new HttpServer(new HttpConfiguration(), fakehandler);
            var service     = new CustomerBetService(new HttpClient(fakeServer));

            // Act
            var result = service.GetBets();

            // Assert
            Assert.AreEqual(7, result.Count);
        }
Ejemplo n.º 15
0
        public async Task TestStatusTracker()
        {
            var updateId = "123";

            var            failAfter   = 2;
            AutoResetEvent signal      = new AutoResetEvent(false);
            var            interceptor = new TestDelegatingHandler((request) =>
            {
                if (request.RequestUri.ToString().Contains("/status/"))
                {
                    // Artificial response for the PushUpdateStatus request.
                    PushUpdateStatusResponse status = new PushUpdateStatusResponse()
                    {
                        UpdateId = updateId,
                        Status   = (failAfter-- > 0) ? "InProgress" : "PartiallySucceeded",
                        Records  = new List <ResponseRecordStatus>()
                        {
                            new ResponseRecordStatus()
                            {
                                RecordId = "1", Status = "Succeeded"
                            },
                            new ResponseRecordStatus()
                            {
                                RecordId = "2", Status = "Failed", ErrorMessage = "error message"
                            }
                        }
                    };

                    var response     = new HttpResponseMessage(System.Net.HttpStatusCode.OK);
                    response.Content = new StringContent(JsonConvert.SerializeObject(status));
                    if (status.Status != "InProgress")
                    {
                        signal.Set();
                    }

                    return(response);
                }
                else
                {
                    // Artificial response for the GetIndex request.
                    var index = new IndexResponse()
                    {
                        Indexes = new List <ResponseIndex>()
                        {
                            new ResponseIndex
                            {
                                Id     = "index",
                                Fields = new List <IndexField>()
                                {
                                    new IndexField()
                                    {
                                        Name = "notid", Type = IndexFieldType.Title
                                    },
                                    new IndexField()
                                    {
                                        Name = "myid", Type = IndexFieldType.ProductId
                                    },
                                    new IndexField()
                                    {
                                        Name = "alsonotid", Type = IndexFieldType.Description
                                    }
                                }
                            }
                        }
                    };

                    var response     = new HttpResponseMessage(System.Net.HttpStatusCode.OK);
                    response.Content = new StringContent(JsonConvert.SerializeObject(index));
                    return(response);
                }
            });

            try
            {
                var ingestion = new BingCommerceIngestion(new TokenCredentials("test"), interceptor);
                var logger    = new RequestLogger(".\\log", RequestLogLevel.DeadletterOnly);
                var client    = new IngestionClient(ingestion, "tenant", "index", 1, logger);
                var tracker   = new StatusTracker(client, TimeSpan.FromSeconds(1), logger);

                tracker.Start();
                tracker.Add(updateId, new List <Dictionary <string, object> >()
                {
                    new Dictionary <string, object>()
                    {
                        { "myid", "1" }, { "notid", "something" }, { "stillnotid", "still something" }
                    },
                    new Dictionary <string, object>()
                    {
                        { "myid", "2" }, { "notid", "something else" }, { "stillnotid", "still something else" }
                    },
                });

                Assert.AreEqual(0, Directory.GetFiles(".\\log\\deadletter").Length, "Expecting no files to be in the deadletter directory");

                signal.WaitOne(TimeSpan.FromSeconds(10));

                // Adding an extra 2 seconds delay for two reasons:
                //  1. Make sure to give the tracker the chance to process the api response and logging the failure.
                //  2. Make sure that the failure would be processed only once (the next event would skip it).
                await Task.Delay(TimeSpan.FromSeconds(2));

                Assert.AreEqual(1, Directory.GetFiles(".\\log\\deadletter").Length, "Expecting one file to be in the deadletter directory");

                Assert.AreEqual(1, JArray.Parse(File.ReadAllText(Directory.EnumerateFiles(".\\log\\deadletter").First())).Count);
            }
            finally
            {
                Directory.Delete(".\\log", true);
            }
        }