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); }
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); }
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(); }
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]); }
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]); }
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]); }
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; } }
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); }
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); }
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); }
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); } }