Return-Path: Delivered-To: apmail-hc-commits-archive@www.apache.org Received: (qmail 13778 invoked from network); 18 Aug 2010 19:17:27 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 18 Aug 2010 19:17:27 -0000 Received: (qmail 87429 invoked by uid 500); 18 Aug 2010 19:17:27 -0000 Delivered-To: apmail-hc-commits-archive@hc.apache.org Received: (qmail 87392 invoked by uid 500); 18 Aug 2010 19:17:27 -0000 Mailing-List: contact commits-help@hc.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "HttpComponents Project" Delivered-To: mailing list commits@hc.apache.org Received: (qmail 87383 invoked by uid 99); 18 Aug 2010 19:17:27 -0000 Received: from Unknown (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 18 Aug 2010 19:17:27 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 18 Aug 2010 19:17:05 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 96A812388A02; Wed, 18 Aug 2010 19:15:45 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r986864 [2/2] - in /httpcomponents/httpclient/trunk/httpclient-cache/src: main/java/org/apache/http/client/cache/ main/java/org/apache/http/impl/client/cache/ main/java/org/apache/http/impl/client/cache/ehcache/ test/java/org/apache/http/im... Date: Wed, 18 Aug 2010 19:15:45 -0000 To: commits@hc.apache.org From: olegk@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100818191545.96A812388A02@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachingHttpClient.java URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachingHttpClient.java?rev=986864&r1=986863&r2=986864&view=diff ============================================================================== --- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachingHttpClient.java (original) +++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachingHttpClient.java Wed Aug 18 19:15:43 2010 @@ -27,14 +27,11 @@ package org.apache.http.impl.client.cache; import java.io.IOException; -import java.io.InputStream; import java.net.URI; import java.util.ArrayList; import java.util.Date; import java.util.List; -import org.apache.http.Header; -import org.apache.http.HttpEntity; import org.apache.http.HttpHost; import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; @@ -47,13 +44,9 @@ import org.apache.http.client.HttpClient import org.apache.http.client.ResponseHandler; import org.apache.http.client.cache.HttpCache; import org.apache.http.client.cache.HttpCacheEntry; -import org.apache.http.client.cache.Resource; -import org.apache.http.client.cache.ResourceFactory; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.conn.ClientConnectionManager; -import org.apache.http.entity.ByteArrayEntity; import org.apache.http.message.BasicHttpRequest; -import org.apache.http.message.BasicHttpResponse; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpParams; import org.apache.http.protocol.BasicHttpContext; @@ -73,17 +66,9 @@ public class TestCachingHttpClient { private static final String REVALIDATE_CACHE_ENTRY = "revalidateCacheEntry"; - private static final String GET_CACHE_ENTRY = "getCacheEntry"; - - private static final String STORE_IN_CACHE = "storeInCache"; - - private static final String GET_RESPONSE_READER = "getResponseReader"; - private CachingHttpClient impl; private boolean mockedImpl; - private ResourceFactory mockResourceFactory; - private CacheInvalidator mockInvalidator; private CacheValidityPolicy mockValidityPolicy; private CacheableRequestPolicy mockRequestPolicy; private HttpClient mockBackend; @@ -92,20 +77,14 @@ public class TestCachingHttpClient { private ResponseCachingPolicy mockResponsePolicy; private HttpResponse mockBackendResponse; private CacheEntry mockCacheEntry; - private CacheEntry mockVariantCacheEntry; - private CacheEntry mockUpdatedCacheEntry; - private URIExtractor mockExtractor; private CachedHttpResponseGenerator mockResponseGenerator; - private SizeLimitedResponseReader mockResponseReader; private ClientConnectionManager mockConnectionManager; private ResponseHandler mockHandler; private HttpUriRequest mockUriRequest; private HttpResponse mockCachedResponse; - private HttpResponse mockReconstructedResponse; private ConditionalRequestBuilder mockConditionalRequestBuilder; private HttpRequest mockConditionalRequest; private StatusLine mockStatusLine; - private CacheEntryUpdater mockCacheEntryUpdater; private ResponseProtocolCompliance mockResponseProtocolCompliance; private RequestProtocolCompliance mockRequestProtocolCompliance; @@ -119,8 +98,6 @@ public class TestCachingHttpClient { @SuppressWarnings("unchecked") @Before public void setUp() { - mockResourceFactory = EasyMock.createMock(ResourceFactory.class); - mockInvalidator = EasyMock.createMock(CacheInvalidator.class); mockRequestPolicy = EasyMock.createMock(CacheableRequestPolicy.class); mockValidityPolicy = EasyMock.createMock(CacheValidityPolicy.class); mockBackend = EasyMock.createMock(HttpClient.class); @@ -132,17 +109,11 @@ public class TestCachingHttpClient { mockBackendResponse = EasyMock.createMock(HttpResponse.class); mockUriRequest = EasyMock.createMock(HttpUriRequest.class); mockCacheEntry = EasyMock.createMock(CacheEntry.class); - mockUpdatedCacheEntry = EasyMock.createMock(CacheEntry.class); - mockVariantCacheEntry = EasyMock.createMock(CacheEntry.class); - mockExtractor = EasyMock.createMock(URIExtractor.class); mockResponseGenerator = EasyMock.createMock(CachedHttpResponseGenerator.class); mockCachedResponse = EasyMock.createMock(HttpResponse.class); mockConditionalRequestBuilder = EasyMock.createMock(ConditionalRequestBuilder.class); mockConditionalRequest = EasyMock.createMock(HttpRequest.class); mockStatusLine = EasyMock.createMock(StatusLine.class); - mockCacheEntryUpdater = EasyMock.createMock(CacheEntryUpdater.class); - mockResponseReader = EasyMock.createMock(SizeLimitedResponseReader.class); - mockReconstructedResponse = EasyMock.createMock(HttpResponse.class); mockResponseProtocolCompliance = EasyMock.createMock(ResponseProtocolCompliance.class); mockRequestProtocolCompliance = EasyMock.createMock(RequestProtocolCompliance.class); @@ -154,32 +125,24 @@ public class TestCachingHttpClient { params = new BasicHttpParams(); impl = new CachingHttpClient( mockBackend, - mockResourceFactory, mockValidityPolicy, mockResponsePolicy, - mockExtractor, mockCache, mockResponseGenerator, - mockInvalidator, mockRequestPolicy, mockSuitabilityChecker, mockConditionalRequestBuilder, - mockCacheEntryUpdater, mockResponseProtocolCompliance, mockRequestProtocolCompliance); } private void replayMocks() { - EasyMock.replay(mockResourceFactory); - EasyMock.replay(mockInvalidator); EasyMock.replay(mockRequestPolicy); EasyMock.replay(mockValidityPolicy); EasyMock.replay(mockSuitabilityChecker); EasyMock.replay(mockResponsePolicy); EasyMock.replay(mockCacheEntry); - EasyMock.replay(mockVariantCacheEntry); EasyMock.replay(mockResponseGenerator); - EasyMock.replay(mockExtractor); EasyMock.replay(mockBackend); EasyMock.replay(mockCache); EasyMock.replay(mockConnectionManager); @@ -190,9 +153,6 @@ public class TestCachingHttpClient { EasyMock.replay(mockConditionalRequestBuilder); EasyMock.replay(mockConditionalRequest); EasyMock.replay(mockStatusLine); - EasyMock.replay(mockCacheEntryUpdater); - EasyMock.replay(mockResponseReader); - EasyMock.replay(mockReconstructedResponse); EasyMock.replay(mockResponseProtocolCompliance); EasyMock.replay(mockRequestProtocolCompliance); if (mockedImpl) { @@ -201,16 +161,12 @@ public class TestCachingHttpClient { } private void verifyMocks() { - EasyMock.verify(mockResourceFactory); - EasyMock.verify(mockInvalidator); EasyMock.verify(mockRequestPolicy); EasyMock.verify(mockValidityPolicy); EasyMock.verify(mockSuitabilityChecker); EasyMock.verify(mockResponsePolicy); EasyMock.verify(mockCacheEntry); - EasyMock.verify(mockVariantCacheEntry); EasyMock.verify(mockResponseGenerator); - EasyMock.verify(mockExtractor); EasyMock.verify(mockBackend); EasyMock.verify(mockCache); EasyMock.verify(mockConnectionManager); @@ -221,9 +177,6 @@ public class TestCachingHttpClient { EasyMock.verify(mockConditionalRequestBuilder); EasyMock.verify(mockConditionalRequest); EasyMock.verify(mockStatusLine); - EasyMock.verify(mockCacheEntryUpdater); - EasyMock.verify(mockResponseReader); - EasyMock.verify(mockReconstructedResponse); EasyMock.verify(mockResponseProtocolCompliance); EasyMock.verify(mockRequestProtocolCompliance); if (mockedImpl) { @@ -233,20 +186,12 @@ public class TestCachingHttpClient { @Test public void testCacheableResponsesGoIntoCache() throws Exception { - mockImplMethods(STORE_IN_CACHE, GET_RESPONSE_READER); responsePolicyAllowsCaching(true); responseProtocolValidationIsCalled(); - getMockResponseReader(); - responseRead(); - responseLimitReached(false); - responseGetResource(); - storeInCacheWasCalled(); - responseIsGeneratedFromCache(); - responseStatusLineIsInspectable(); - responseGetHeaders(); - responseDoesNotHaveExplicitContentLength(); + EasyMock.expect(mockCache.cacheAndReturnResponse(host, request, mockBackendResponse, requestDate, responseDate)) + .andReturn(mockCachedResponse); replayMocks(); HttpResponse result = impl.handleBackendResponse(host, request, requestDate, @@ -284,36 +229,12 @@ public class TestCachingHttpClient { } @Test - public void testStoreInCachePutsNonVariantEntryInPlace() throws Exception { - - final String theURI = "theURI"; - - cacheEntryHasVariants(false); - extractTheURI(theURI); - putInCache(theURI); - - replayMocks(); - impl.storeInCache(host, request, mockCacheEntry); - verifyMocks(); - } - - @Test - public void testCacheUpdateAddsVariantURIToParentEntry() throws Exception { - final String variantURI = "variantURI"; - final CacheEntry entry = new CacheEntry(); - copyResource(); - replayMocks(); - impl.doGetUpdatedParentEntry("/stuff", null, entry, variantURI); - verifyMocks(); - } - - - @Test public void testCacheMissCausesBackendRequest() throws Exception { - mockImplMethods(GET_CACHE_ENTRY, CALL_BACKEND); + mockImplMethods(CALL_BACKEND); cacheInvalidatorWasCalled(); requestPolicyAllowsCaching(true); getCacheEntryReturns(null); + requestProtocolValidationIsCalled(); requestIsFatallyNonCompliant(null); @@ -331,7 +252,7 @@ public class TestCachingHttpClient { @Test public void testUnsuitableUnvalidatableCacheEntryCausesBackendRequest() throws Exception { - mockImplMethods(GET_CACHE_ENTRY, CALL_BACKEND); + mockImplMethods(CALL_BACKEND); cacheInvalidatorWasCalled(); requestPolicyAllowsCaching(true); requestProtocolValidationIsCalled(); @@ -354,7 +275,7 @@ public class TestCachingHttpClient { @Test public void testUnsuitableValidatableCacheEntryCausesRevalidation() throws Exception { - mockImplMethods(GET_CACHE_ENTRY, REVALIDATE_CACHE_ENTRY); + mockImplMethods(REVALIDATE_CACHE_ENTRY); cacheInvalidatorWasCalled(); requestPolicyAllowsCaching(true); requestProtocolValidationIsCalled(); @@ -384,11 +305,9 @@ public class TestCachingHttpClient { backendCallWasMadeWithRequest(mockConditionalRequest); getCurrentDateReturns(responseDate); backendResponseCodeIs(HttpStatus.SC_OK); - cacheEntryUpdaterCalled(); - cacheEntryHasVariants(false, mockUpdatedCacheEntry); - extractTheURI("http://foo.example.com"); - putInCache("http://foo.example.com", mockUpdatedCacheEntry); - responseIsGeneratedFromCache(mockUpdatedCacheEntry); + EasyMock.expect(mockCache.updateCacheEntry(host, request, + mockCacheEntry, mockBackendResponse, requestDate, responseDate)) + .andReturn(mockCachedResponse); replayMocks(); @@ -406,17 +325,15 @@ public class TestCachingHttpClient { @Test public void testRevalidationUpdatesCacheEntryAndPutsItToCacheWhen304ReturningCachedResponse() throws Exception { - mockImplMethods(GET_CURRENT_DATE, STORE_IN_CACHE); + mockImplMethods(GET_CURRENT_DATE); conditionalRequestBuilderCalled(); getCurrentDateReturns(requestDate); backendCallWasMadeWithRequest(mockConditionalRequest); getCurrentDateReturns(responseDate); backendResponseCodeIs(HttpStatus.SC_NOT_MODIFIED); - - cacheEntryUpdaterCalled(); - storeInCacheWasCalled(mockUpdatedCacheEntry); - - responseIsGeneratedFromCache(mockUpdatedCacheEntry); + EasyMock.expect(mockCache.updateCacheEntry(host, request, + mockCacheEntry, mockBackendResponse, requestDate, responseDate)) + .andReturn(mockCachedResponse); replayMocks(); @@ -432,7 +349,6 @@ public class TestCachingHttpClient { @Test public void testSuitableCacheEntryDoesNotCauseBackendRequest() throws Exception { - mockImplMethods(GET_CACHE_ENTRY); cacheInvalidatorWasCalled(); requestPolicyAllowsCaching(true); requestProtocolValidationIsCalled(); @@ -465,13 +381,11 @@ public class TestCachingHttpClient { @Test public void testNonCacheableResponseIsNotCachedAndIsReturnedAsIs() throws Exception { - final String theURI = "theURI"; Date currentDate = new Date(); responsePolicyAllowsCaching(false); responseProtocolValidationIsCalled(); - extractTheURI(theURI); - removeFromCache(theURI); + flushCache(); replayMocks(); HttpResponse result = impl.handleBackendResponse(host, request, currentDate, @@ -481,115 +395,6 @@ public class TestCachingHttpClient { Assert.assertSame(mockBackendResponse, result); } - @Test - public void testGetCacheEntryReturnsNullOnCacheMiss() throws Exception { - - final String theURI = "theURI"; - extractTheURI(theURI); - gotCacheMiss(theURI); - - replayMocks(); - HttpCacheEntry result = impl.getCacheEntry(host, request); - verifyMocks(); - Assert.assertNull(result); - } - - @Test - public void testGetCacheEntryFetchesFromCacheOnCacheHitIfNoVariants() throws Exception { - - final String theURI = "theURI"; - extractTheURI(theURI); - gotCacheHit(theURI); - cacheEntryHasVariants(false); - - replayMocks(); - HttpCacheEntry result = impl.getCacheEntry(host, request); - verifyMocks(); - Assert.assertSame(mockCacheEntry, result); - } - - @Test - public void testGetCacheEntryReturnsNullIfNoVariantInCache() throws Exception { - - final String theURI = "theURI"; - final String variantURI = "variantURI"; - extractTheURI(theURI); - gotCacheHit(theURI); - cacheEntryHasVariants(true); - extractVariantURI(variantURI); - gotCacheMiss(variantURI); - - replayMocks(); - HttpCacheEntry result = impl.getCacheEntry(host, request); - verifyMocks(); - Assert.assertNull(result); - } - - @Test - public void testGetCacheEntryReturnsVariantIfPresentInCache() throws Exception { - - final String theURI = "theURI"; - final String variantURI = "variantURI"; - extractTheURI(theURI); - gotCacheHit(theURI, mockCacheEntry); - cacheEntryHasVariants(true); - extractVariantURI(variantURI); - gotCacheHit(variantURI, mockVariantCacheEntry); - - replayMocks(); - HttpCacheEntry result = impl.getCacheEntry(host, request); - verifyMocks(); - Assert.assertSame(mockVariantCacheEntry, result); - } - - @Test - public void testTooLargeResponsesAreNotCached() throws Exception { - mockImplMethods(GET_CURRENT_DATE, GET_RESPONSE_READER, STORE_IN_CACHE); - getCurrentDateReturns(requestDate); - backendCallWasMadeWithRequest(request); - responseProtocolValidationIsCalled(); - - getCurrentDateReturns(responseDate); - responsePolicyAllowsCaching(true); - getMockResponseReader(); - responseRead(); - responseLimitReached(true); - responseGetReconstructed(); - - replayMocks(); - - impl.callBackend(host, request, context); - - verifyMocks(); - } - - @Test - public void testSmallEnoughResponsesAreCached() throws Exception { - requestDate = new Date(); - responseDate = new Date(); - mockImplMethods(GET_CURRENT_DATE, GET_RESPONSE_READER, STORE_IN_CACHE); - getCurrentDateReturns(requestDate); - responseProtocolValidationIsCalled(); - - backendCallWasMadeWithRequest(request); - getCurrentDateReturns(responseDate); - responsePolicyAllowsCaching(true); - getMockResponseReader(); - responseRead(); - responseLimitReached(false); - responseGetResource(); - storeInCacheWasCalled(); - responseIsGeneratedFromCache(); - responseStatusLineIsInspectable(); - responseGetHeaders(); - responseDoesNotHaveExplicitContentLength(); - - replayMocks(); - - impl.callBackend(host, request, context); - - verifyMocks(); - } @Test public void testCallsSelfForExecuteOnHostRequestWithNullContext() throws Exception { @@ -599,17 +404,13 @@ public class TestCachingHttpClient { final HttpResponse theResponse = mockBackendResponse; impl = new CachingHttpClient( mockBackend, - mockResourceFactory, mockValidityPolicy, mockResponsePolicy, - mockExtractor, mockCache, mockResponseGenerator, - mockInvalidator, mockRequestPolicy, mockSuitabilityChecker, mockConditionalRequestBuilder, - mockCacheEntryUpdater, mockResponseProtocolCompliance, mockRequestProtocolCompliance) { @Override @@ -641,17 +442,13 @@ public class TestCachingHttpClient { final Object value = new Object(); impl = new CachingHttpClient( mockBackend, - mockResourceFactory, mockValidityPolicy, mockResponsePolicy, - mockExtractor, mockCache, mockResponseGenerator, - mockInvalidator, mockRequestPolicy, mockSuitabilityChecker, mockConditionalRequestBuilder, - mockCacheEntryUpdater, mockResponseProtocolCompliance, mockRequestProtocolCompliance) { @Override @@ -691,17 +488,13 @@ public class TestCachingHttpClient { final HttpContext theContext = context; impl = new CachingHttpClient( mockBackend, - mockResourceFactory, mockValidityPolicy, mockResponsePolicy, - mockExtractor, mockCache, mockResponseGenerator, - mockInvalidator, mockRequestPolicy, mockSuitabilityChecker, mockConditionalRequestBuilder, - mockCacheEntryUpdater, mockResponseProtocolCompliance, mockRequestProtocolCompliance) { @Override @@ -733,17 +526,13 @@ public class TestCachingHttpClient { final HttpResponse theResponse = mockBackendResponse; impl = new CachingHttpClient( mockBackend, - mockResourceFactory, mockValidityPolicy, mockResponsePolicy, - mockExtractor, mockCache, mockResponseGenerator, - mockInvalidator, mockRequestPolicy, mockSuitabilityChecker, mockConditionalRequestBuilder, - mockCacheEntryUpdater, mockResponseProtocolCompliance, mockRequestProtocolCompliance) { @Override @@ -773,17 +562,13 @@ public class TestCachingHttpClient { final HttpResponse theResponse = mockBackendResponse; impl = new CachingHttpClient( mockBackend, - mockResourceFactory, mockValidityPolicy, mockResponsePolicy, - mockExtractor, mockCache, mockResponseGenerator, - mockInvalidator, mockRequestPolicy, mockSuitabilityChecker, mockConditionalRequestBuilder, - mockCacheEntryUpdater, mockResponseProtocolCompliance, mockRequestProtocolCompliance) { @Override @@ -816,17 +601,13 @@ public class TestCachingHttpClient { final Object theValue = new Object(); impl = new CachingHttpClient( mockBackend, - mockResourceFactory, mockValidityPolicy, mockResponsePolicy, - mockExtractor, mockCache, mockResponseGenerator, - mockInvalidator, mockRequestPolicy, mockSuitabilityChecker, mockConditionalRequestBuilder, - mockCacheEntryUpdater, mockResponseProtocolCompliance, mockRequestProtocolCompliance) { @Override @@ -861,17 +642,13 @@ public class TestCachingHttpClient { final Object theValue = new Object(); impl = new CachingHttpClient( mockBackend, - mockResourceFactory, mockValidityPolicy, mockResponsePolicy, - mockExtractor, mockCache, mockResponseGenerator, - mockInvalidator, mockRequestPolicy, mockSuitabilityChecker, mockConditionalRequestBuilder, - mockCacheEntryUpdater, mockResponseProtocolCompliance, mockRequestProtocolCompliance) { @Override @@ -916,17 +693,13 @@ public class TestCachingHttpClient { @Test public void testResponseIsGeneratedWhenCacheEntryIsUsable() throws Exception { - final String theURI = "http://foo"; - requestIsFatallyNonCompliant(null); requestProtocolValidationIsCalled(); cacheInvalidatorWasCalled(); requestPolicyAllowsCaching(true); cacheEntrySuitable(true); - extractTheURI(theURI); - gotCacheHit(theURI); + getCacheEntryReturns(mockCacheEntry); responseIsGeneratedFromCache(); - cacheEntryHasVariants(false); replayMocks(); impl.execute(host, request, context); @@ -954,122 +727,16 @@ public class TestCachingHttpClient { } @Test - public void testCorrectIncompleteResponseDoesNotCorrectComplete200Response() - throws Exception { - HttpResponse resp = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "OK"); - byte[] bytes = HttpTestUtils.getRandomBytes(128); - resp.setEntity(new ByteArrayEntity(bytes)); - resp.setHeader("Content-Length","128"); - - HttpResponse result = impl.correctIncompleteResponse(resp, new HeapResource(bytes)); - Assert.assertTrue(HttpTestUtils.semanticallyTransparent(resp, result)); - } - - @Test - public void testCorrectIncompleteResponseDoesNotCorrectComplete206Response() - throws Exception { - HttpResponse resp = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_PARTIAL_CONTENT, "Partial Content"); - byte[] bytes = HttpTestUtils.getRandomBytes(128); - resp.setEntity(new ByteArrayEntity(bytes)); - resp.setHeader("Content-Length","128"); - resp.setHeader("Content-Range","bytes 0-127/255"); - - HttpResponse result = impl.correctIncompleteResponse(resp, new HeapResource(bytes)); - Assert.assertTrue(HttpTestUtils.semanticallyTransparent(resp, result)); - } - - @Test - public void testCorrectIncompleteResponseGenerates502ForIncomplete200Response() - throws Exception { - HttpResponse resp = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "OK"); - byte[] bytes = HttpTestUtils.getRandomBytes(128); - resp.setEntity(new ByteArrayEntity(bytes)); - resp.setHeader("Content-Length","256"); - - HttpResponse result = impl.correctIncompleteResponse(resp, new HeapResource(bytes)); - Assert.assertTrue(HttpStatus.SC_BAD_GATEWAY == result.getStatusLine().getStatusCode()); - } - - @Test - public void testCorrectIncompleteResponseDoesNotCorrectIncompleteNon200Or206Responses() - throws Exception { - HttpResponse resp = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_FORBIDDEN, "Forbidden"); - byte[] bytes = HttpTestUtils.getRandomBytes(128); - resp.setEntity(new ByteArrayEntity(bytes)); - resp.setHeader("Content-Length","256"); - - HttpResponse result = impl.correctIncompleteResponse(resp, new HeapResource(bytes)); - Assert.assertTrue(HttpTestUtils.semanticallyTransparent(resp, result)); - } - - @Test - public void testCorrectIncompleteResponseDoesNotCorrectResponsesWithoutExplicitContentLength() - throws Exception { - HttpResponse resp = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "OK"); - byte[] bytes = HttpTestUtils.getRandomBytes(128); - resp.setEntity(new ByteArrayEntity(bytes)); - - HttpResponse result = impl.correctIncompleteResponse(resp, new HeapResource(bytes)); - Assert.assertTrue(HttpTestUtils.semanticallyTransparent(resp, result)); - } - - @Test - public void testCorrectIncompleteResponseDoesNotCorrectResponsesWithUnparseableContentLengthHeader() - throws Exception { - HttpResponse resp = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "OK"); - byte[] bytes = HttpTestUtils.getRandomBytes(128); - resp.setHeader("Content-Length","foo"); - resp.setEntity(new ByteArrayEntity(bytes)); - - HttpResponse result = impl.correctIncompleteResponse(resp, new HeapResource(bytes)); - Assert.assertTrue(HttpTestUtils.semanticallyTransparent(resp, result)); - } - - @Test - public void testCorrectIncompleteResponseProvidesPlainTextErrorMessage() - throws Exception { - HttpResponse resp = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "OK"); - byte[] bytes = HttpTestUtils.getRandomBytes(128); - resp.setEntity(new ByteArrayEntity(bytes)); - resp.setHeader("Content-Length","256"); - - HttpResponse result = impl.correctIncompleteResponse(resp, new HeapResource(bytes)); - Header ctype = result.getFirstHeader("Content-Type"); - Assert.assertEquals("text/plain;charset=UTF-8", ctype.getValue()); - } - - @Test - public void testCorrectIncompleteResponseProvidesNonEmptyErrorMessage() - throws Exception { - HttpResponse resp = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "OK"); - byte[] bytes = HttpTestUtils.getRandomBytes(128); - resp.setEntity(new ByteArrayEntity(bytes)); - resp.setHeader("Content-Length","256"); - - HttpResponse result = impl.correctIncompleteResponse(resp, new HeapResource(bytes)); - int clen = Integer.parseInt(result.getFirstHeader("Content-Length").getValue()); - Assert.assertTrue(clen > 0); - HttpEntity body = result.getEntity(); - if (body.getContentLength() < 0) { - InputStream is = body.getContent(); - int bytes_read = 0; - while((is.read()) != -1) { - bytes_read++; - } - is.close(); - Assert.assertEquals(clen, bytes_read); - } else { - Assert.assertTrue(body.getContentLength() == clen); - } - } - - @Test public void testIsSharedCache() { Assert.assertTrue(impl.isSharedCache()); } + private void getCacheEntryReturns(HttpCacheEntry result) throws IOException { + EasyMock.expect(mockCache.getCacheEntry(host, request)).andReturn(result); + } + private void cacheInvalidatorWasCalled() throws IOException { - mockInvalidator.flushInvalidatedCacheEntries( + mockCache.flushInvalidatedCacheEntriesFor( EasyMock.anyObject(), EasyMock.anyObject()); } @@ -1096,22 +763,6 @@ public class TestCachingHttpClient { EasyMock.anyObject())).andReturn(b); } - private void cacheEntryUpdaterCalled() throws IOException { - EasyMock.expect( - mockCacheEntryUpdater.updateCacheEntry( - EasyMock.anyObject(), - EasyMock.anyObject(), - EasyMock.anyObject(), - EasyMock.anyObject(), - EasyMock.anyObject())).andReturn(mockUpdatedCacheEntry); - } - - private void getCacheEntryReturns(CacheEntry entry) throws IOException { - EasyMock.expect(impl.getCacheEntry( - EasyMock.anyObject(), - EasyMock.anyObject())).andReturn(entry); - } - private void backendResponseCodeIs(int code) { EasyMock.expect(mockBackendResponse.getStatusLine()).andReturn(mockStatusLine); EasyMock.expect(mockStatusLine.getStatusCode()).andReturn(code); @@ -1128,42 +779,11 @@ public class TestCachingHttpClient { EasyMock.expect(impl.getCurrentDate()).andReturn(date); } - private void getMockResponseReader() { - EasyMock.expect(impl.getResponseReader( - EasyMock.anyObject(), - EasyMock.anyObject())).andReturn(mockResponseReader); - } - - private void removeFromCache(String theURI) throws Exception { - mockCache.removeEntry(theURI); - } - private void requestPolicyAllowsCaching(boolean allow) { EasyMock.expect(mockRequestPolicy.isServableFromCache( EasyMock.anyObject())).andReturn(allow); } - private void responseDoesNotHaveExplicitContentLength() { - EasyMock.expect(mockBackendResponse.getFirstHeader("Content-Length")) - .andReturn(null).anyTimes(); - } - - private void responseRead() throws Exception { - mockResponseReader.readResponse(); - } - - private void responseLimitReached(boolean limitReached) throws Exception { - EasyMock.expect(mockResponseReader.isLimitReached()).andReturn(limitReached); - } - - private void responseGetResource() throws Exception { - EasyMock.expect(mockResponseReader.getResource()).andReturn(new HeapResource(new byte[] {} )); - } - - private void responseGetReconstructed() throws Exception { - EasyMock.expect(mockResponseReader.getReconstructedResponse()).andReturn(mockReconstructedResponse); - } - private void backendCallWasMadeWithRequest(HttpRequest request) throws IOException { EasyMock.expect(mockBackend.execute( EasyMock.anyObject(), @@ -1178,10 +798,6 @@ public class TestCachingHttpClient { EasyMock.anyObject())).andReturn(allow); } - private void gotCacheMiss(String theURI) throws Exception { - EasyMock.expect(mockCache.getEntry(theURI)).andReturn(null); - } - private void cacheEntrySuitable(boolean suitable) { EasyMock.expect( mockSuitabilityChecker.canCachedResponseBeUsed( @@ -1190,68 +806,13 @@ public class TestCachingHttpClient { EasyMock.anyObject())).andReturn(suitable); } - private void gotCacheHit(String theURI) throws Exception { - EasyMock.expect(mockCache.getEntry(theURI)).andReturn(mockCacheEntry); - } - - private void gotCacheHit(String theURI, CacheEntry entry) throws Exception { - EasyMock.expect(mockCache.getEntry(theURI)).andReturn(entry); - } - - private void cacheEntryHasVariants(boolean b) { - EasyMock.expect(mockCacheEntry.hasVariants()).andReturn(b); - } - - private void cacheEntryHasVariants(boolean b, CacheEntry entry) { - EasyMock.expect(entry.hasVariants()).andReturn(b); - } - private void responseIsGeneratedFromCache() { EasyMock.expect(mockResponseGenerator.generateResponse( EasyMock.anyObject())).andReturn(mockCachedResponse); } - private void responseStatusLineIsInspectable() { - EasyMock.expect(mockBackendResponse.getStatusLine()).andReturn(new OKStatus()).anyTimes(); - } - - private void responseGetHeaders() { - EasyMock.expect(mockBackendResponse.getAllHeaders()).andReturn(new Header[] {}).anyTimes(); - } - - private void responseIsGeneratedFromCache(CacheEntry entry) { - EasyMock.expect(mockResponseGenerator.generateResponse(entry)) - .andReturn(mockCachedResponse); - } - - private void extractTheURI(String theURI) { - EasyMock.expect(mockExtractor.getURI(host, request)).andReturn(theURI); - } - - private void extractVariantURI(String variantURI) { - extractVariantURI(variantURI,mockCacheEntry); - } - - private void extractVariantURI(String variantURI, CacheEntry entry){ - EasyMock.expect(mockExtractor.getVariantURI( - EasyMock.anyObject(), - EasyMock.anyObject(), - EasyMock.same(entry))).andReturn(variantURI); - } - - private void putInCache(String theURI) throws Exception { - mockCache.putEntry(theURI, mockCacheEntry); - } - - private void putInCache(String theURI, CacheEntry entry) throws Exception { - mockCache.putEntry(theURI, entry); - } - - private void copyResource() throws IOException { - EasyMock.expect( - mockResourceFactory.copy( - EasyMock.anyObject(), - EasyMock.anyObject())).andReturn(new HeapResource(new byte[] {})); + private void flushCache() throws IOException { + mockCache.flushCacheEntriesFor(host, request); } private void handleBackendResponseReturnsResponse(HttpRequest request, HttpResponse response) @@ -1265,20 +826,6 @@ public class TestCachingHttpClient { EasyMock.anyObject())).andReturn(response); } - private void storeInCacheWasCalled() throws IOException { - impl.storeInCache( - EasyMock.anyObject(), - EasyMock.anyObject(), - EasyMock.anyObject()); - } - - private void storeInCacheWasCalled(CacheEntry entry) throws IOException { - impl.storeInCache( - EasyMock.anyObject(), - EasyMock.anyObject(), - EasyMock.same(entry)); - } - private void responseProtocolValidationIsCalled() throws ClientProtocolException { mockResponseProtocolCompliance.ensureProtocolCompliance( EasyMock.anyObject(), @@ -1301,17 +848,13 @@ public class TestCachingHttpClient { mockedImpl = true; impl = EasyMock.createMockBuilder(CachingHttpClient.class).withConstructor( mockBackend, - mockResourceFactory, mockValidityPolicy, mockResponsePolicy, - mockExtractor, mockCache, mockResponseGenerator, - mockInvalidator, mockRequestPolicy, mockSuitabilityChecker, mockConditionalRequestBuilder, - mockCacheEntryUpdater, mockResponseProtocolCompliance, mockRequestProtocolCompliance).addMockedMethods(methods).createMock(); } Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolDeviations.java URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolDeviations.java?rev=986864&r1=986863&r2=986864&view=diff ============================================================================== --- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolDeviations.java (original) +++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolDeviations.java Wed Aug 18 19:15:43 2010 @@ -93,14 +93,16 @@ public class TestProtocolDeviations { originResponse = make200Response(); - HttpCache cache = new BasicHttpCache(MAX_ENTRIES); + CacheConfig params = new CacheConfig(); + params.setMaxObjectSizeBytes(MAX_BYTES); + params.setMaxCacheEntries(MAX_ENTRIES); + + HttpCache cache = new BasicHttpCache(params); mockBackend = EasyMock.createMock(HttpClient.class); mockEntity = EasyMock.createMock(HttpEntity.class); mockCache = EasyMock.createMock(HttpCache.class); - CacheConfig params = new CacheConfig(); - params.setMaxObjectSizeBytes(MAX_BYTES); - impl = new CachingHttpClient(mockBackend, cache, new HeapResourceFactory(), params); + impl = new CachingHttpClient(mockBackend, cache, params); } private HttpResponse make200Response() { Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRequirements.java URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRequirements.java?rev=986864&r1=986863&r2=986864&view=diff ============================================================================== --- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRequirements.java (original) +++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRequirements.java Wed Aug 18 19:15:43 2010 @@ -42,7 +42,6 @@ import org.apache.http.HttpStatus; import org.apache.http.HttpVersion; import org.apache.http.ProtocolVersion; import org.apache.http.client.ClientProtocolException; -import org.apache.http.client.cache.HttpCacheEntry; import org.apache.http.entity.BasicHttpEntity; import org.apache.http.entity.ByteArrayEntity; import org.apache.http.impl.client.RequestWrapper; @@ -2220,9 +2219,9 @@ public class TestProtocolRequirements ex CacheEntry entry = new CacheEntry(tenSecondsAgo, eightSecondsAgo, hdrs, bytes); - mockCache.putEntry(EasyMock.eq("http://foo.example.com/thing"), EasyMock.isA(HttpCacheEntry.class)); + impl = new CachingHttpClient(mockBackend, mockCache, params); - impl = new CachingHttpClient(mockBackend, mockCache, new HeapResourceFactory(), params); + request = new BasicHttpRequest("GET", "/thing", HttpVersion.HTTP_1_1); HttpRequest validate = new BasicHttpRequest("GET", "/thing", HttpVersion.HTTP_1_1); validate.setHeader("If-None-Match", "\"etag\""); @@ -2232,17 +2231,23 @@ public class TestProtocolRequirements ex notModified.setHeader("Date", DateUtils.formatDate(now)); notModified.setHeader("ETag", "\"etag\""); - EasyMock.expect(mockCache.getEntry("http://foo.example.com/thing")).andReturn(entry); + HttpResponse reconstructed = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "OK"); + + mockCache.flushInvalidatedCacheEntriesFor(host, request); + EasyMock.expect(mockCache.getCacheEntry(host, request)).andReturn(entry); EasyMock.expect( mockBackend.execute(EasyMock.eq(host), eqRequest(validate), (HttpContext) EasyMock .isNull())).andReturn(notModified); + EasyMock.expect(mockCache.updateCacheEntry(EasyMock.same(host), EasyMock.same(request), + EasyMock.same(entry), EasyMock.same(notModified), EasyMock.isA(Date.class), + EasyMock.isA(Date.class))) + .andReturn(reconstructed); replayMocks(); - request = new BasicHttpRequest("GET", "/thing", HttpVersion.HTTP_1_1); HttpResponse result = impl.execute(host, request); verifyMocks(); - Assert.assertEquals(200, result.getStatusLine().getStatusCode()); + Assert.assertSame(reconstructed, result); } @Test @@ -2264,12 +2269,13 @@ public class TestProtocolRequirements ex CacheEntry entry = new CacheEntry(tenSecondsAgo, eightSecondsAgo, hdrs, bytes); - impl = new CachingHttpClient(mockBackend, mockCache, new HeapResourceFactory(), params); + impl = new CachingHttpClient(mockBackend, mockCache, params); + request = new BasicHttpRequest("GET", "/thing", HttpVersion.HTTP_1_1); - EasyMock.expect(mockCache.getEntry("http://foo.example.com/thing")).andReturn(entry); + mockCache.flushInvalidatedCacheEntriesFor(host, request); + EasyMock.expect(mockCache.getCacheEntry(host, request)).andReturn(entry); replayMocks(); - request = new BasicHttpRequest("GET", "/thing", HttpVersion.HTTP_1_1); HttpResponse result = impl.execute(host, request); verifyMocks(); @@ -2305,16 +2311,17 @@ public class TestProtocolRequirements ex CacheEntry entry = new CacheEntry(tenSecondsAgo, eightSecondsAgo, hdrs, bytes); - impl = new CachingHttpClient(mockBackend, mockCache, new HeapResourceFactory(), params); + impl = new CachingHttpClient(mockBackend, mockCache, params); + request = new BasicHttpRequest("GET", "/thing", HttpVersion.HTTP_1_1); - EasyMock.expect(mockCache.getEntry("http://foo.example.com/thing")).andReturn(entry); + mockCache.flushInvalidatedCacheEntriesFor(host, request); + EasyMock.expect(mockCache.getCacheEntry(host, request)).andReturn(entry); EasyMock.expect( mockBackend.execute(EasyMock.isA(HttpHost.class), EasyMock.isA(HttpRequest.class), (HttpContext) EasyMock.isNull())).andThrow( new IOException("can't talk to origin!")).anyTimes(); replayMocks(); - request = new BasicHttpRequest("GET", "/thing", HttpVersion.HTTP_1_1); HttpResponse result = impl.execute(host, request); @@ -2506,12 +2513,13 @@ public class TestProtocolRequirements ex CacheEntry entry = new CacheEntry(tenSecondsAgo, eightSecondsAgo, hdrs, bytes); - impl = new CachingHttpClient(mockBackend, mockCache, new HeapResourceFactory(), params); + impl = new CachingHttpClient(mockBackend, mockCache, params); + request = new BasicHttpRequest("GET", "/thing", HttpVersion.HTTP_1_1); - EasyMock.expect(mockCache.getEntry("http://foo.example.com/thing")).andReturn(entry); + mockCache.flushInvalidatedCacheEntriesFor(host, request); + EasyMock.expect(mockCache.getCacheEntry(host, request)).andReturn(entry); replayMocks(); - request = new BasicHttpRequest("GET", "/thing", HttpVersion.HTTP_1_1); HttpResponse result = impl.execute(host, request); verifyMocks(); @@ -2550,7 +2558,9 @@ public class TestProtocolRequirements ex CacheEntry entry = new CacheEntry(requestTime, responseTime, hdrs, bytes); - impl = new CachingHttpClient(mockBackend, mockCache, new HeapResourceFactory(), params); + impl = new CachingHttpClient(mockBackend, mockCache, params); + + request = new BasicHttpRequest("GET", "/thing", HttpVersion.HTTP_1_1); HttpResponse validated = make200Response(); validated.setHeader("Cache-Control", "public"); @@ -2558,18 +2568,20 @@ public class TestProtocolRequirements ex validated.setHeader("Content-Length", "128"); validated.setEntity(new ByteArrayEntity(bytes)); - Capture cap = new Capture(); - - EasyMock.expect(mockCache.getEntry("http://foo.example.com/thing")).andReturn(entry); + HttpResponse reconstructed = make200Response(); - mockCache.putEntry(EasyMock.isA(String.class), EasyMock.isA(HttpCacheEntry.class)); + Capture cap = new Capture(); + mockCache.flushInvalidatedCacheEntriesFor(host, request); + EasyMock.expect(mockCache.getCacheEntry(host, request)).andReturn(entry); EasyMock.expect( mockBackend.execute(EasyMock.isA(HttpHost.class), EasyMock.capture(cap), (HttpContext) EasyMock.isNull())).andReturn(validated).times(0, 1); + EasyMock.expect(mockCache.updateCacheEntry(EasyMock.same(host), EasyMock.same(request), EasyMock.same(entry), + EasyMock.same(validated), EasyMock.isA(Date.class), EasyMock.isA(Date.class))) + .andReturn(reconstructed).times(0, 1); replayMocks(); - request = new BasicHttpRequest("GET", "/thing", HttpVersion.HTTP_1_1); HttpResponse result = impl.execute(host, request); verifyMocks(); Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestResponseCache.java URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestResponseCache.java?rev=986864&r1=986863&r2=986864&view=diff ============================================================================== --- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestResponseCache.java (original) +++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestResponseCache.java Wed Aug 18 19:15:43 2010 @@ -1,171 +0,0 @@ -/* - * ==================================================================== - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - * - */ -package org.apache.http.impl.client.cache; - -import java.io.ByteArrayOutputStream; -import java.io.InputStream; - -import org.apache.http.client.cache.HttpCacheEntry; -import org.apache.http.client.cache.HttpCacheUpdateCallback; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -public class TestResponseCache { - - private BasicHttpCache cache; - private HttpCacheEntry entry; - - @Before - public void setUp() { - cache = new BasicHttpCache(5); - entry = new CacheEntry(); - } - - @Test - public void testEntryRemainsInCacheWhenPutThere() throws Exception { - cache.putEntry("foo", entry); - - HttpCacheEntry cachedEntry = cache.getEntry("foo"); - - Assert.assertSame(entry, cachedEntry); - } - - @Test - public void testRemovedEntriesDoNotExistAnymore() throws Exception { - cache.putEntry("foo", entry); - - cache.removeEntry("foo"); - - HttpCacheEntry nullEntry = cache.getEntry("foo"); - - Assert.assertNull(nullEntry); - } - - @Test - public void testCacheHoldsNoMoreThanSpecifiedMaxEntries() throws Exception { - BasicHttpCache cache = new BasicHttpCache(1); - - HttpCacheEntry entry1 = new CacheEntry(); - cache.putEntry("foo", entry1); - - HttpCacheEntry entry2 = new CacheEntry(); - cache.putEntry("bar", entry2); - - HttpCacheEntry entry3 = new CacheEntry(); - cache.putEntry("baz", entry3); - - HttpCacheEntry e1 = cache.getEntry("foo"); - Assert.assertNull("Got foo entry when we should not", e1); - - HttpCacheEntry e2 = cache.getEntry("bar"); - Assert.assertNull("Got bar entry when we should not", e2); - - HttpCacheEntry e3 = cache.getEntry("baz"); - Assert.assertNotNull("Did not get baz entry, but should have", e3); - } - - @Test - public void testSmallCacheKeepsMostRecentlyUsedEntry() throws Exception { - - final int max_size = 3; - BasicHttpCache cache = new BasicHttpCache(max_size); - - // fill the cache with entries - for (int i = 0; i < max_size; i++) { - HttpCacheEntry entry = new CacheEntry(); - cache.putEntry("entry" + i, entry); - } - - // read the eldest entry to make it the MRU entry - cache.getEntry("entry0"); - - // add another entry, which kicks out the eldest (should be the 2nd one - // created), and becomes the new MRU entry - HttpCacheEntry newMru = new CacheEntry(); - cache.putEntry("newMru", newMru); - - // get the original second eldest - HttpCacheEntry gone = cache.getEntry("entry1"); - Assert.assertNull("entry1 should be gone", gone); - - HttpCacheEntry latest = cache.getEntry("newMru"); - Assert.assertNotNull("latest entry should still be there", latest); - - HttpCacheEntry originalEldest = cache.getEntry("entry0"); - Assert.assertNotNull("original eldest entry should still be there", originalEldest); - } - - @Test - public void testZeroMaxSizeCacheDoesNotStoreAnything() throws Exception { - BasicHttpCache cache = new BasicHttpCache(0); - - HttpCacheEntry entry = new CacheEntry(); - cache.putEntry("foo", entry); - - HttpCacheEntry gone = cache.getEntry("foo"); - - Assert.assertNull("This cache should not have anything in it!", gone); - } - - @Test - public void testCacheEntryCallbackUpdatesCacheEntry() throws Exception { - - final byte[] expectedArray = new byte[] { 1, 2, 3, 4, 5 }; - - HttpCacheEntry entry = new CacheEntry(); - - cache.putEntry("foo", entry); - - cache.updateEntry("foo", new HttpCacheUpdateCallback() { - - public HttpCacheEntry update(HttpCacheEntry existing) { - HttpCacheEntry updated = new HttpCacheEntry( - existing.getRequestDate(), - existing.getRequestDate(), - existing.getStatusLine(), - existing.getAllHeaders(), - new HeapResource(expectedArray), - null); - return updated; - } - }); - - HttpCacheEntry afterUpdate = cache.getEntry("foo"); - - ByteArrayOutputStream outstream = new ByteArrayOutputStream(); - InputStream instream = afterUpdate.getResource().getInputStream(); - byte[] buf = new byte[2048]; - int len; - while ((len = instream.read(buf)) != -1) { - outstream.write(buf, 0, len); - } - byte[] bytes = outstream.toByteArray(); - Assert.assertArrayEquals(expectedArray, bytes); - } - -} Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestSizeLimitedResponseReader.java URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestSizeLimitedResponseReader.java?rev=986864&r1=986863&r2=986864&view=diff ============================================================================== --- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestSizeLimitedResponseReader.java (original) +++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestSizeLimitedResponseReader.java Wed Aug 18 19:15:43 2010 @@ -26,18 +26,14 @@ */ package org.apache.http.impl.client.cache; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; - -import org.apache.http.Header; -import org.apache.http.HttpEntity; import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; +import org.apache.http.HttpStatus; import org.apache.http.HttpVersion; -import org.apache.http.message.BasicRequestLine; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.entity.ByteArrayEntity; +import org.apache.http.message.BasicHttpResponse; import org.apache.http.util.EntityUtils; -import org.easymock.classextension.EasyMock; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -46,56 +42,44 @@ public class TestSizeLimitedResponseRead private static final long MAX_SIZE = 4; + private HttpRequest request; private SizeLimitedResponseReader impl; - private HttpRequest mockRequest; - private HttpResponse mockResponse; - private HttpEntity mockEntity; - - private boolean mockedImpl; @Before public void setUp() { - mockRequest = EasyMock.createMock(HttpRequest.class); - mockResponse = EasyMock.createMock(HttpResponse.class); - mockEntity = EasyMock.createMock(HttpEntity.class); + request = new HttpGet("http://foo.example.com/bar"); } @Test public void testLargeResponseIsTooLarge() throws Exception { - byte[] buf = new byte[] { 1, 2, 3, 4, 5}; - requestReturnsRequestLine(); - responseReturnsProtocolVersion(); - responseReturnsHeaders(); - responseReturnsContent(new ByteArrayInputStream(buf)); - initReader(); - replayMocks(); + byte[] buf = new byte[] { 1, 2, 3, 4, 5 }; + HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "OK"); + response.setEntity(new ByteArrayEntity(buf)); + + impl = new SizeLimitedResponseReader(new HeapResourceFactory(), MAX_SIZE, request, response); impl.readResponse(); boolean tooLarge = impl.isLimitReached(); - HttpResponse response = impl.getReconstructedResponse(); - byte[] result = EntityUtils.toByteArray(response.getEntity()); + HttpResponse result = impl.getReconstructedResponse(); + byte[] body = EntityUtils.toByteArray(result.getEntity()); - verifyMocks(); Assert.assertTrue(tooLarge); - Assert.assertArrayEquals(buf, result); + Assert.assertArrayEquals(buf, body); } @Test public void testExactSizeResponseIsNotTooLarge() throws Exception { byte[] buf = new byte[] { 1, 2, 3, 4 }; - requestReturnsRequestLine(); - responseReturnsProtocolVersion(); - responseReturnsHeaders(); - responseReturnsContent(new ByteArrayInputStream(buf)); - initReader(); - replayMocks(); + HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "OK"); + response.setEntity(new ByteArrayEntity(buf)); + + impl = new SizeLimitedResponseReader(new HeapResourceFactory(), MAX_SIZE, request, response); impl.readResponse(); boolean tooLarge = impl.isLimitReached(); - HttpResponse response = impl.getReconstructedResponse(); - byte[] result = EntityUtils.toByteArray(response.getEntity()); + HttpResponse reconstructed = impl.getReconstructedResponse(); + byte[] result = EntityUtils.toByteArray(reconstructed.getEntity()); - verifyMocks(); Assert.assertFalse(tooLarge); Assert.assertArrayEquals(buf, result); } @@ -103,18 +87,15 @@ public class TestSizeLimitedResponseRead @Test public void testSmallResponseIsNotTooLarge() throws Exception { byte[] buf = new byte[] { 1, 2, 3 }; - requestReturnsRequestLine(); - responseReturnsProtocolVersion(); - responseReturnsHeaders(); - responseReturnsContent(new ByteArrayInputStream(buf)); - initReader(); - replayMocks(); + HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "OK"); + response.setEntity(new ByteArrayEntity(buf)); + + impl = new SizeLimitedResponseReader(new HeapResourceFactory(), MAX_SIZE, request, response); impl.readResponse(); boolean tooLarge = impl.isLimitReached(); - HttpResponse response = impl.getReconstructedResponse(); - byte[] result = EntityUtils.toByteArray(response.getEntity()); - verifyMocks(); + HttpResponse reconstructed = impl.getReconstructedResponse(); + byte[] result = EntityUtils.toByteArray(reconstructed.getEntity()); Assert.assertFalse(tooLarge); Assert.assertArrayEquals(buf, result); @@ -122,56 +103,14 @@ public class TestSizeLimitedResponseRead @Test public void testResponseWithNoEntityIsNotTooLarge() throws Exception { - responseHasNullEntity(); + HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "OK"); + + impl = new SizeLimitedResponseReader(new HeapResourceFactory(), MAX_SIZE, request, response); - initReader(); - replayMocks(); impl.readResponse(); boolean tooLarge = impl.isLimitReached(); - verifyMocks(); Assert.assertFalse(tooLarge); } - private void responseReturnsContent(InputStream buffer) throws IOException { - EasyMock.expect(mockResponse.getEntity()).andReturn(mockEntity); - EasyMock.expect(mockEntity.getContent()).andReturn(buffer); - } - - private void requestReturnsRequestLine() { - EasyMock.expect(mockRequest.getRequestLine()).andReturn( - new BasicRequestLine("GET", "/", HttpVersion.HTTP_1_1)); - } - - private void responseReturnsProtocolVersion() { - EasyMock.expect(mockResponse.getProtocolVersion()).andReturn(HttpVersion.HTTP_1_1); - } - - private void responseReturnsHeaders() { - EasyMock.expect(mockResponse.getAllHeaders()).andReturn(new Header[] {}); - } - - private void responseHasNullEntity() { - EasyMock.expect(mockResponse.getEntity()).andReturn(null); - } - - private void verifyMocks() { - EasyMock.verify(mockRequest, mockResponse, mockEntity); - if (mockedImpl) { - EasyMock.verify(impl); - } - } - - private void replayMocks() { - EasyMock.replay(mockRequest, mockResponse, mockEntity); - if (mockedImpl) { - EasyMock.replay(impl); - } - } - - private void initReader() { - impl = new SizeLimitedResponseReader( - new HeapResourceFactory(), MAX_SIZE, mockRequest, mockResponse); - } - } Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/ehcache/TestEhcacheHttpCache.java URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/ehcache/TestEhcacheHttpCache.java?rev=986864&r1=986863&r2=986864&view=diff ============================================================================== --- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/ehcache/TestEhcacheHttpCache.java (original) +++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/ehcache/TestEhcacheHttpCache.java Wed Aug 18 19:15:43 2010 @@ -40,11 +40,11 @@ import org.junit.Test; public class TestEhcacheHttpCache extends TestCase { private Ehcache mockCache; - private EhcacheHttpCache impl; + private EhcacheHttpCacheStorage impl; public void setUp() { mockCache = EasyMock.createMock(Ehcache.class); - impl = new EhcacheHttpCache(mockCache); + impl = new EhcacheHttpCacheStorage(mockCache); } @Test Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/ehcache/TestEhcacheProtcolRequirements.java URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/ehcache/TestEhcacheProtcolRequirements.java?rev=986864&r1=986863&r2=986864&view=diff ============================================================================== --- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/ehcache/TestEhcacheProtcolRequirements.java (original) +++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/ehcache/TestEhcacheProtcolRequirements.java Wed Aug 18 19:15:43 2010 @@ -1,99 +0,0 @@ -/* - * ==================================================================== - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - * - */ -package org.apache.http.impl.client.cache.ehcache; - -import net.sf.ehcache.CacheManager; -import net.sf.ehcache.config.CacheConfiguration; -import net.sf.ehcache.config.Configuration; -import net.sf.ehcache.store.MemoryStoreEvictionPolicy; - -import org.apache.http.HttpHost; -import org.apache.http.HttpVersion; -import org.apache.http.client.HttpClient; -import org.apache.http.client.cache.HttpCache; -import org.apache.http.impl.client.cache.CacheConfig; -import org.apache.http.impl.client.cache.CachingHttpClient; -import org.apache.http.impl.client.cache.HeapResourceFactory; -import org.apache.http.impl.client.cache.HttpTestUtils; -import org.apache.http.impl.client.cache.TestProtocolRequirements; -import org.apache.http.message.BasicHttpRequest; -import org.easymock.classextension.EasyMock; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; - -public class TestEhcacheProtcolRequirements extends TestProtocolRequirements{ - - private final String TEST_EHCACHE_NAME = "TestEhcacheProtocolRequirements-cache"; - - private static CacheManager CACHE_MANAGER; - - @BeforeClass - public static void setUpGlobal() { - Configuration config = new Configuration(); - config.addDefaultCache( - new CacheConfiguration("default", Integer.MAX_VALUE) - .memoryStoreEvictionPolicy(MemoryStoreEvictionPolicy.LFU) - .overflowToDisk(false)); - CACHE_MANAGER = CacheManager.create(config); - } - - @Override - @Before - public void setUp() { - host = new HttpHost("foo.example.com"); - - body = HttpTestUtils.makeBody(entityLength); - - request = new BasicHttpRequest("GET", "/foo", HttpVersion.HTTP_1_1); - - originResponse = make200Response(); - - if (CACHE_MANAGER.cacheExists(TEST_EHCACHE_NAME)){ - CACHE_MANAGER.removeCache(TEST_EHCACHE_NAME); - } - CACHE_MANAGER.addCache(TEST_EHCACHE_NAME); - cache = new EhcacheHttpCache(CACHE_MANAGER.getCache(TEST_EHCACHE_NAME)); - mockBackend = EasyMock.createMock(HttpClient.class); - mockCache = EasyMock.createMock(HttpCache.class); - params = new CacheConfig(); - params.setMaxObjectSizeBytes(MAX_BYTES); - impl = new CachingHttpClient(mockBackend, cache, new HeapResourceFactory(), params); - } - - @After - public void tearDown(){ - CACHE_MANAGER.removeCache(TEST_EHCACHE_NAME); - } - - @AfterClass - public static void tearDownGlobal(){ - CACHE_MANAGER.shutdown(); - } - -}