public async Task RateLimitWithRetryShouldCallSeveralTimes() { //Arrange _handler = new FakeMessageHandler(); var httpClient = new HttpClient(_handler); _client = new ContentfulClient(httpClient, new ContentfulOptions() { DeliveryApiKey = "123", ManagementApiKey = "123", SpaceId = "666", UsePreviewApi = false, MaxNumberOfRateLimitRetries = 3 }); var response = GetResponseFromFile(@"ErrorRateLimit.json"); response.StatusCode = (HttpStatusCode)429; response.Headers.Add("X-Contentful-RateLimit-Reset", "1"); _handler.Response = response; var numberOfTimesCalled = 0; _handler.VerificationBeforeSend = () => { numberOfTimesCalled++; }; _handler.VerifyRequest = (HttpRequestMessage msg) => { response.RequestMessage = msg; }; //Act var ex = await Assert.ThrowsAsync <ContentfulRateLimitException>(async() => await _client.GetEntryAsync <TestEntryModel>("12")); //Assert Assert.Equal(1, ex.SecondsUntilNextRequest); //1 request + 3 retries Assert.Equal(4, numberOfTimesCalled); }
public async Task SettingPreviewApiShouldUseCorrectApiKey() { //Arrange _handler = new FakeMessageHandler(); var httpClient = new HttpClient(_handler); _client = new ContentfulClient(httpClient, new ContentfulOptions() { DeliveryApiKey = "123", ManagementApiKey = "123", PreviewApiKey = "ABC-PREVIEW", SpaceId = "666", UsePreviewApi = true, MaxNumberOfRateLimitRetries = 3 }); var authHeader = ""; _handler.Response = GetResponseFromFile(@"SampleEntry.json"); _handler.VerifyRequest = (HttpRequestMessage request) => { authHeader = request.Headers.GetValues("Authorization").First(); }; //Act var res = await _client.GetEntry <Entry <TestEntryModel> >("12"); //Assert Assert.Equal("Bearer ABC-PREVIEW", authHeader); }
public ContentfulClientTests() { _handler = new FakeMessageHandler(); var httpClient = new HttpClient(_handler); _client = new ContentfulClient(httpClient, new ContentfulOptions() { DeliveryApiKey = "123", ManagementApiKey = "123", SpaceId = "666", UsePreviewApi = false }); }
public async Task RateLimitWithRetryShouldStopCallingOnSuccess() { //Arrange _handler = new FakeMessageHandler(); var httpClient = new HttpClient(_handler); _client = new ContentfulClient(httpClient, new ContentfulOptions() { DeliveryApiKey = "123", ManagementApiKey = "123", SpaceId = "666", UsePreviewApi = false, MaxNumberOfRateLimitRetries = 3 }); var response = GetResponseFromFile(@"ErrorRateLimit.json"); response.StatusCode = (HttpStatusCode)429; response.Headers.Add("X-Contentful-RateLimit-Reset", "1"); _handler.Response = response; var numberOfTimesCalled = 0; _handler.VerificationBeforeSend = () => { numberOfTimesCalled++; }; _handler.VerifyRequest = (HttpRequestMessage msg) => { response.RequestMessage = msg; }; _handler.Responses.Enqueue(response); _handler.Responses.Enqueue(GetResponseFromFile(@"SampleEntry.json")); //Act var res = await _client.GetEntryAsync <TestEntryModel>("12"); //Assert //1 request + 1 retries Assert.Equal(2, numberOfTimesCalled); Assert.Equal("SoSo Wall Clock", res.ProductName); }