public async Task ResponseWithoutEtagClearsPriorEtag() { using (var server = await TestHttpUtils.StartServerAsync()) { var etag = @"""abc123"""; server.Given(Request.Create().UsingGet()) .AtPriority(2) .RespondWith(Response.Create().WithStatusCode(200).WithHeader("Etag", etag).WithBody(AllDataJson)); server.Given(Request.Create().UsingGet().WithHeader("If-None-Match", etag)) .AtPriority(1) .RespondWith(Response.Create().WithStatusCode(200).WithBody(AllDataJson)); // respond with no etag using (var requestor = MakeRequestor(server)) { var fetch1 = await requestor.GetAllDataAsync(); var fetch2 = await requestor.GetAllDataAsync(); server.Given(Request.Create().UsingGet()) .AtPriority(1) .RespondWith(Response.Create().WithStatusCode(200).WithHeader("Etag", etag).WithBody(AllDataJson)); var fetch3 = await requestor.GetAllDataAsync(); var reqs = new List <LogEntry>(server.LogEntries); Assert.Equal(3, reqs.Count); Assert.False(reqs[0].RequestMessage.Headers.ContainsKey("If-None-Match")); Assert.Equal(new List <string> { etag }, reqs[1].RequestMessage.Headers["If-None-Match"]); Assert.False(reqs[2].RequestMessage.Headers.ContainsKey("If-None-Match")); } } }
public async Task GetAllUsesCorrectUriAndParsesResponseAsync() { using (var server = await TestHttpUtils.StartServerAsync()) { server.Given(Request.Create().UsingGet()) .RespondWith(Response.Create().WithStatusCode(200).WithBody(AllDataJson)); using (var requestor = MakeRequestor(server)) { var result = await requestor.GetAllDataAsync(); var req = GetLastRequest(server); Assert.Equal("/sdk/latest-all", req.Path); var expectedData = new DataSetBuilder().Flags(flag1).Segments(segment1).Build(); AssertHelpers.DataSetsEqual(expectedData, result.Value); } } }
public async Task GetAllReturnsNullIfNotModified() { using (var server = await TestHttpUtils.StartServerAsync()) { var etag = @"""abc123"""; // note that etag strings must be quoted server.Given(Request.Create().UsingGet()) .RespondWith(Response.Create().WithStatusCode(200).WithHeader("Etag", etag).WithBody(AllDataJson)); using (var requestor = MakeRequestor(server)) { var result1 = await requestor.GetAllDataAsync(); server.Reset(); server.Given(Request.Create().UsingGet().WithHeader("If-None-Match", etag)) .RespondWith(Response.Create().WithStatusCode(304)); var result2 = await requestor.GetAllDataAsync(); Assert.NotNull(result1); Assert.Null(result2); } } }
public async Task GetAllStoresAndSendsEtag() { using (var server = await TestHttpUtils.StartServerAsync()) { var etag = @"""abc123"""; // note that etag strings must be quoted server.Given(Request.Create().UsingGet()) .RespondWith(Response.Create().WithStatusCode(200).WithHeader("Etag", etag).WithBody(AllDataJson)); using (var requestor = MakeRequestor(server)) { await requestor.GetAllDataAsync(); await requestor.GetAllDataAsync(); var reqs = new List <LogEntry>(server.LogEntries); Assert.Equal(2, reqs.Count); Assert.False(reqs[0].RequestMessage.Headers.ContainsKey("If-None-Match")); Assert.Equal(new List <string> { etag }, reqs[1].RequestMessage.Headers["If-None-Match"]); } } }
public async Task GetAllDoesNotRetryFailedRequest() { using (var server = await TestHttpUtils.StartServerAsync()) { server.Given(Request.Create().UsingGet()) .RespondWith(Response.Create().WithStatusCode(503)); using (var requestor = MakeRequestor(server)) { try { await requestor.GetAllDataAsync(); } catch (UnsuccessfulResponseException e) { Assert.Equal(503, e.StatusCode); } var reqs = new List <LogEntry>(server.LogEntries); Assert.Equal(1, reqs.Count); } } }