public static void TestCachingContinuation( string method, bool existsInStore, bool addVaryHeader, bool addLastModifiedHeader, bool alreadyHasLastModified, string[] varyByHeader) { // setup var mocks = new MockRepository(); var request = new HttpRequestMessage(new HttpMethod(method), TestUrl); request.Headers.Add(HttpHeaderNames.Accept, "text/xml"); request.Headers.Add(HttpHeaderNames.AcceptLanguage, "en-GB"); var entityTagStore = mocks.StrictMock<IEntityTagStore>(); var cachingHandler = new CachingHandler(entityTagStore, varyByHeader) { AddLastModifiedHeader = addLastModifiedHeader, AddVaryHeader = addVaryHeader }; var entityTagHeaderValue = new TimedEntityTagHeaderValue("\"12345678\""); var entityTagKey = new EntityTagKey(TestUrl, new string[0]); cachingHandler.EntityTagKeyGenerator = (x, y) => entityTagKey; cachingHandler.ETagValueGenerator = (x, y) => new EntityTagHeaderValue(entityTagHeaderValue.Tag); entityTagStore.Expect(x => x.TryGet(Arg<EntityTagKey>.Matches(etg => etg.ResourceUri == TestUrl), out Arg<TimedEntityTagHeaderValue>.Out(entityTagHeaderValue).Dummy)).Return(existsInStore); if (!existsInStore || request.Method == HttpMethod.Put || request.Method == HttpMethod.Post) { entityTagStore.Expect( x => x.AddOrUpdate(Arg<EntityTagKey>.Matches(etk => etk == entityTagKey), Arg<TimedEntityTagHeaderValue>.Matches(ethv => ethv.Tag == entityTagHeaderValue.Tag))); } mocks.ReplayAll(); var response = new HttpResponseMessage(); response.Content = new ByteArrayContent(new byte[0]); if(alreadyHasLastModified) response.Content.Headers.Add(HttpHeaderNames.LastModified, DateTimeOffset.Now.ToString("r")); var cachingContinuation = cachingHandler.GetCachingContinuation(request); var taskCompletionSource = new TaskCompletionSource<HttpResponseMessage>(); taskCompletionSource.SetResult(response); // run var httpResponseMessage = cachingContinuation(taskCompletionSource.Task); // test if(addLastModifiedHeader) { Assert.That(httpResponseMessage.Content.Headers.Any(x=>x.Key == HttpHeaderNames.LastModified), "LastModified does not exist"); } if(!addLastModifiedHeader && !alreadyHasLastModified) { Assert.That(!httpResponseMessage.Content.Headers.Any(x => x.Key == HttpHeaderNames.LastModified), "LastModified exists"); } }