Author: pmouawad
Date: Thu Aug  3 21:11:20 2017
New Revision: 1804046

URL: http://svn.apache.org/viewvc?rev=1804046&view=rev
Log:
Bug 61321 - HTTP Cache Manager : with cache enabled & Retrieving embedded 
resources, JMeter fetches resource from server rather than cache at each 
alternate iteration
Add test case
Bugzilla Id: 61321

Modified:
    
jmeter/trunk/test/src/org/apache/jmeter/protocol/http/control/TestCacheManagerBase.java
    
jmeter/trunk/test/src/org/apache/jmeter/protocol/http/control/TestCacheManagerHC4.java

Modified: 
jmeter/trunk/test/src/org/apache/jmeter/protocol/http/control/TestCacheManagerBase.java
URL: 
http://svn.apache.org/viewvc/jmeter/trunk/test/src/org/apache/jmeter/protocol/http/control/TestCacheManagerBase.java?rev=1804046&r1=1804045&r2=1804046&view=diff
==============================================================================
--- 
jmeter/trunk/test/src/org/apache/jmeter/protocol/http/control/TestCacheManagerBase.java
 (original)
+++ 
jmeter/trunk/test/src/org/apache/jmeter/protocol/http/control/TestCacheManagerBase.java
 Thu Aug  3 21:11:20 2017
@@ -86,7 +86,7 @@ public abstract class TestCacheManagerBa
 
     protected abstract void setRequestHeaders();
 
-    private void sleepTill(long deadline) {
+    protected void sleepTill(long deadline) {
         while (System.currentTimeMillis() < deadline) {
             try {
                 Thread.sleep(100);
@@ -344,7 +344,7 @@ public abstract class TestCacheManagerBa
         assertNotNull("Should find entry", getThreadCacheEntry(LOCAL_HOST));
         assertFalse("Should not find valid entry", 
this.cacheManager.inCache(url));
     }
-
+    
     @Test
     public void testGetClearEachIteration() throws Exception {
         assertFalse("Should default not to clear after each iteration.", 
this.cacheManager.getClearEachIteration());
@@ -406,7 +406,7 @@ public abstract class TestCacheManagerBa
         assertTrue("ThreadCache should be emptied by call to clear.", 
getThreadCache().isEmpty());
     }
 
-    private HTTPSampleResult getSampleResultWithSpecifiedResponseCode(String 
code) {
+    protected HTTPSampleResult getSampleResultWithSpecifiedResponseCode(String 
code) {
         HTTPSampleResult sampleResult = new HTTPSampleResult();
         sampleResult.setResponseCode(code);
         sampleResult.setHTTPMethod("GET");
@@ -422,7 +422,7 @@ public abstract class TestCacheManagerBa
         return threadLocal.get();
     }
 
-    private CacheManager.CacheEntry getThreadCacheEntry(String url) throws 
Exception {
+    protected CacheManager.CacheEntry getThreadCacheEntry(String url) throws 
Exception {
         return getThreadCache().get(url);
     }
     

Modified: 
jmeter/trunk/test/src/org/apache/jmeter/protocol/http/control/TestCacheManagerHC4.java
URL: 
http://svn.apache.org/viewvc/jmeter/trunk/test/src/org/apache/jmeter/protocol/http/control/TestCacheManagerHC4.java?rev=1804046&r1=1804045&r2=1804046&view=diff
==============================================================================
--- 
jmeter/trunk/test/src/org/apache/jmeter/protocol/http/control/TestCacheManagerHC4.java
 (original)
+++ 
jmeter/trunk/test/src/org/apache/jmeter/protocol/http/control/TestCacheManagerHC4.java
 Thu Aug  3 21:11:20 2017
@@ -18,8 +18,16 @@
 
 package org.apache.jmeter.protocol.http.control;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
 import java.net.URISyntaxException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Locale;
 
@@ -34,8 +42,9 @@ import org.apache.http.message.AbstractH
 import org.apache.http.message.BasicHeader;
 import org.apache.jmeter.protocol.http.sampler.HTTPSampleResult;
 import org.apache.jmeter.protocol.http.util.HTTPConstants;
-
-import static org.junit.Assert.assertEquals;
+import org.apache.jmeter.protocol.http.util.HTTPConstantsInterface;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * Test {@link CacheManager} that uses HTTPHC4Impl
@@ -243,5 +252,52 @@ public class TestCacheManagerHC4 extends
         assertEquals("Wrong name in header for " + requestHeader, 
requestHeader, header.getName());
         assertEquals("Wrong value for header " + header, expectedValue, 
header.getValue());
     }
+    
+    @Test
+    public void testBug61321() throws Exception {
+        this.cacheManager.setUseExpires(false);
+        this.cacheManager.testIterationStart(null);
+        assertNull("Should not find entry", getThreadCacheEntry(LOCAL_HOST));
+        assertFalse("Should not find valid entry", 
this.cacheManager.inCache(url));
+        cacheResult(sampleResultOK);
+        assertNotNull("Should find entry", getThreadCacheEntry(LOCAL_HOST));
+        assertFalse("Should find valid entry", this.cacheManager.inCache(url));
+        cacheManager.setHeaders(url, httpMethod);
+        checkIfModifiedSinceHeader(httpMethod);
+        
+        this.httpMethod = new HttpPostStub();
+        sampleResultOK = getSampleResultWithSpecifiedResponseCode("304");
+        setLastModified(null);
+        cacheResult(sampleResultOK);
+        assertNotNull("Should find entry", getThreadCacheEntry(LOCAL_HOST));
+        assertFalse("Should not find valid entry", 
this.cacheManager.inCache(url));
+        cacheManager.setHeaders(url, httpMethod);
+        checkIfModifiedSinceHeader(httpMethod);
+
+        this.httpMethod = new HttpPostStub();
+        sampleResultOK = getSampleResultWithSpecifiedResponseCode("304");
+        setLastModified(null);
+        cacheResult(sampleResultOK);
+        assertNotNull("Should find entry", getThreadCacheEntry(LOCAL_HOST));
+        assertFalse("Should not find valid entry", 
this.cacheManager.inCache(url));
+        cacheManager.setHeaders(url, httpMethod);
+        checkIfModifiedSinceHeader(httpMethod);
+    }
+
+    /**
+     * 
+     */
+    protected void checkIfModifiedSinceHeader(HttpRequestBase httpMethod) {
+        SimpleDateFormat dateFormat = new SimpleDateFormat("EEE, dd MMM yyyy 
HH:mm:ss z");
+        try {
+            assertEquals("Should have found 1 header 
"+HTTPConstantsInterface.IF_MODIFIED_SINCE, 
+                    1, 
+                    
httpMethod.getHeaders(HTTPConstantsInterface.IF_MODIFIED_SINCE).length);
+            Date date = 
dateFormat.parse(httpMethod.getHeaders(HTTPConstantsInterface.IF_MODIFIED_SINCE)[0].getValue());
+            assertNotNull("Should have found a valid entry", date);
+        } catch(ParseException e) {
+            Assert.fail("Invalid header format for:"+ 
HTTPConstantsInterface.IF_MODIFIED_SINCE);
+        }
+    }
 
 }


Reply via email to