public void CouchCache_EmulateEmpty_AddsToCacheCorrectly() { var _factory = new Mock<IHttpTransportFactory>(MockBehavior.Strict); var _transport = new Mock<IHttpTransport>(MockBehavior.Strict); var _cache = new Mock<ICouchCache>(MockBehavior.Strict); var _response = new HttpResponse(); _response.ETag = "1234"; _response.StatusCode = HttpStatusCode.OK; _response.Data = "I am data"; _factory.Setup(x => x.Create(new UriBuilder("http://localhost:5984/").Uri)).Returns(_transport.Object); _cache.Setup(x => x["/integrationtest/d1d2bac2b4e65baf10be20bf08000189"]).Returns(() => null); _cache.Setup(x => x.Add(It.IsAny<CouchCacheEntry>())); _transport.Setup(x => x.Send("/integrationtest/d1d2bac2b4e65baf10be20bf08000189", HttpVerb.Get, null, "application/json")).Returns(_response); var conn = new CouchConnection("http://localhost:5984/", _factory.Object); conn.Cache = _cache.Object; var resp = conn.Get("/integrationtest/d1d2bac2b4e65baf10be20bf08000189"); Assert.AreEqual("I am data", resp.Data); }
public void CouchCache_EmulateCacheHit_ReturnsCachedData() { var _factory = new Mock<IHttpTransportFactory>(MockBehavior.Strict); var _transport = new Mock<IHttpTransport>(MockBehavior.Strict); var _cache = new Mock<ICouchCache>(MockBehavior.Strict); var _response = new HttpResponse(); _response.ETag = "1234"; _response.StatusCode = HttpStatusCode.NotModified; _response.Data = "There should be no data (as its a 304)"; _factory.Setup(x => x.Create(new UriBuilder("http://localhost:5984/").Uri)).Returns(_transport.Object); _cache.Setup(x => x["/integrationtest/d1d2bac2b4e65baf10be20bf08000189"]) .Returns(new CouchCacheEntry("/integrationtest/d1d2bac2b4e65baf10be20bf08000189", "1234", "I am data")); _transport.Setup(x => x.CacheMatch("1234")); _transport.Setup(x => x.Send("/integrationtest/d1d2bac2b4e65baf10be20bf08000189", HttpVerb.Get, null, "application/json")).Returns(_response); var conn = new CouchConnection("http://localhost:5984/", _factory.Object); conn.Cache = _cache.Object; var resp = conn.Get("/integrationtest/d1d2bac2b4e65baf10be20bf08000189"); Assert.AreEqual("I am data", resp.Data); }
public IHttpResponse Send(string path, HttpVerb method, string data, string encoding) { ServicePointManager.Expect100Continue = false; HttpResponseMessage message; switch (method) { case (HttpVerb.Get): { message = Client.Get(path); break; } case (HttpVerb.Post): { message = Client.Post(path, encoding, HttpContent.Create(data)); break; } case (HttpVerb.Put): { message = Client.Put(path, encoding, HttpContent.Create(data)); break; } case (HttpVerb.Delete): { message = Client.Delete(path); break; } case (HttpVerb.Copy): { Client.DefaultHeaders.Add("Destination", data); message = Client.Send(new HttpRequestMessage("COPY", path)); break; } case (HttpVerb.Head): { message = Client.Head(path); break; } default: { throw new NotImplementedException("Unknown/Unsupported HTTP verb."); } } var response = new HttpResponse(); if (message.Content != null) { response.Data = message.Content.ReadAsString(); response.ContentType = message.Content.ContentType ?? string.Empty; } response.StatusCode = message.StatusCode; if (message.Headers.ETag != null) { response.ETag = message.Headers.ETag.Tag; } return response; }