예제 #1
0
        public void Get_OK_But_Not_In_Cache_To_Insert_In_Cache()
        {
            // setup
            var request  = new HttpRequestMessage(HttpMethod.Get, DummyUrl);
            var response = GetOkMessage();

            _messageHandler.Response = response;
            _cacheStore.Expect(x => x.TryGetValue(Arg <CacheKey> .Is.Anything,
                                                  out Arg <HttpResponseMessage> .Out(null).Dummy)).Return(false);
            _cacheStore.Expect(x => x.AddOrUpdate(Arg <CacheKey> .Is.Anything,
                                                  Arg <HttpResponseMessage> .Is.Same(response)));

            _mockRepository.ReplayAll();

            // run
            var            task             = _client.SendAsync(request);
            var            responseReturned = task.Result;
            var            header           = responseReturned.Headers.Single(x => x.Key == CacheCowHeader.Name);
            CacheCowHeader cacheCowHeader   = null;

            CacheCowHeader.TryParse(header.Value.First(), out cacheCowHeader);
            // verify
            _mockRepository.VerifyAll();

            Assert.IsNotNull(cacheCowHeader);
            Assert.AreEqual(true, cacheCowHeader.DidNotExist);
        }
        public void Get_Must_Revalidate_Etag_NotModified()
        {
            // setup
            var request           = new HttpRequestMessage(HttpMethod.Get, DummyUrl);
            var responseFromCache = GetOkMessage(true);

            responseFromCache.Headers.ETag            = new EntityTagHeaderValue(ETagValue);
            responseFromCache.Content.Headers.Expires = DateTime.Now.Subtract(TimeSpan.FromSeconds(10));
            var responseFromServer = new HttpResponseMessage(HttpStatusCode.NotModified);

            _messageHandler.Response = responseFromServer;
            _cacheStore.Expect(
                x => x.TryGetValue(Arg <CacheKey> .Is.Anything, out Arg <HttpResponseMessage> .Out(responseFromCache).Dummy))
            .Return(true);
            _cacheStore.Expect(x => x.AddOrUpdate(Arg <CacheKey> .Is.Anything, Arg <HttpResponseMessage> .Is.Anything));

            _mockRepository.ReplayAll();

            // run
            var            task             = _client.SendAsync(request);
            var            responseReturned = task.Result;
            var            header           = responseReturned.Headers.Single(x => x.Key == CacheCowHeader.Name);
            CacheCowHeader cacheCowHeader   = null;

            CacheCowHeader.TryParse(header.Value.First(), out cacheCowHeader);

            // verify
            _mockRepository.VerifyAll();
            Assert.IsNotNull(cacheCowHeader);
            Assert.AreEqual(ETagValue, request.Headers.IfNoneMatch.First().Tag);
            Assert.AreSame(responseFromCache, responseReturned);
            Assert.AreEqual(true, cacheCowHeader.CacheValidationApplied);
        }