Author: milamber
Date: Wed Apr 13 22:27:51 2011
New Revision: 1091965

URL: http://svn.apache.org/viewvc?rev=1091965&view=rev
Log:
Change strategy to get response size (use CountingInputStream from Commons IO) 
View Results Tree - Add new size fields: response headers and response body (in 
bytes) - derived from Bug 43363 Size Assertion - Add response size scope (full, 
headers, body, code, message) - derived from Bug 43363

Modified:
    jakarta/jmeter/trunk/bin/jmeter.properties
    
jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/SizeAssertion.java
    
jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/gui/SizeAssertionGui.java
    
jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SamplerResultTab.java
    
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
    
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
    jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleResult.java
    
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC3Impl.java
    
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java
    
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPJavaImpl.java
    
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSampleResult.java
    
jakarta/jmeter/trunk/test/src/org/apache/jmeter/assertions/SizeAssertionTest.java
    jakarta/jmeter/trunk/xdocs/changes.xml
    jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml

Modified: jakarta/jmeter/trunk/bin/jmeter.properties
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/bin/jmeter.properties?rev=1091965&r1=1091964&r2=1091965&view=diff
==============================================================================
--- jakarta/jmeter/trunk/bin/jmeter.properties (original)
+++ jakarta/jmeter/trunk/bin/jmeter.properties Wed Apr 13 22:27:51 2011
@@ -243,17 +243,6 @@ log_level.jorphan=INFO
 #log_config=logkit.xml
 
 #---------------------------------------------------------------------------
-# HTTP common configuration
-#---------------------------------------------------------------------------
-
-# Response size calculate method
-# Include headers: add the headers size in total of response size
-# Use Content-Length: if web server uses a deflate/gzip module,
-# gets the value of Content-Length to get response size rather uncompressed 
length
-#http.getbytes.include.headers=false
-#http.getbytes.use.contentlength=false
-
-#---------------------------------------------------------------------------
 # HTTP Java configuration
 #---------------------------------------------------------------------------
 
@@ -699,6 +688,14 @@ beanshell.server.file=../extras/startup.
 # The encoding to be used if none is provided (default ISO-8859-1)
 #sampleresult.default.encoding=ISO-8859-1
 
+# Network response size calculation method
+# Use real size: number of bytes for response body return by webserver
+# (i.e. the network bytes received for response)
+# if set to false, the (uncompressed) response data size will used (default 
before 2.4.1)
+# Include headers: add the headers size in real size
+#sampleresult.getbytes.body_real_size=true
+#sampleresult.getbytes.headers_size=true
+
 # CookieManager behaviour - should cookies with null/empty values be deleted?
 # Default is true. Use false to revert to original behaviour
 #CookieManager.delete_null_cookies=true

Modified: 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/SizeAssertion.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/SizeAssertion.java?rev=1091965&r1=1091964&r2=1091965&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/SizeAssertion.java
 (original)
+++ 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/SizeAssertion.java
 Wed Apr 13 22:27:51 2011
@@ -34,7 +34,7 @@ import org.apache.jmeter.util.JMeterUtil
  */
 public class SizeAssertion extends AbstractScopedAssertion implements 
Serializable, Assertion {
 
-    private static final long serialVersionUID = 233L;
+    private static final long serialVersionUID = 241L;
 
     // * Static int to signify the type of logical comparitor to assert
     public final static int EQUAL = 1;
@@ -53,6 +53,18 @@ public class SizeAssertion extends Abstr
     private static final String SIZE_KEY = "SizeAssertion.size"; // $NON-NLS-1$
 
     private static final String OPERATOR_KEY = "SizeAssertion.operator"; // 
$NON-NLS-1$
+    
+    private final static String TEST_FIELD = "Assertion.test_field";  // 
$NON-NLS-1$
+
+    private final static String RESPONSE_NETWORK_SIZE = 
"SizeAssertion.response_network_size"; // $NON-NLS-1$
+
+    private final static String RESPONSE_HEADERS = 
"SizeAssertion.response_headers"; // $NON-NLS-1$
+
+    private final static String RESPONSE_BODY = "SizeAssertion.response_data"; 
// $NON-NLS-1$
+
+    private final static String RESPONSE_CODE = "SizeAssertion.response_code"; 
// $NON-NLS-1$
+
+    private final static String RESPONSE_MESSAGE = 
"SizeAssertion.response_message"; // $NON-NLS-1$
 
     /**
      * Returns the result of the Assertion. 
@@ -72,6 +84,14 @@ public class SizeAssertion extends Abstr
                 result.setFailureMessage("Error parsing variable name: 
"+variableName+" value: "+value);
                 return result;
             }
+        } else if (isTestFieldResponseHeaders()) {
+            resultSize = response.getHeadersSize();
+        }  else if (isTestFieldResponseBody()) {
+            resultSize = response.getBodySize();
+        } else if (isTestFieldResponseCode()) {
+            resultSize = response.getResponseCode().length();
+        } else if (isTestFieldResponseMessage()) {
+            resultSize = response.getResponseMessage().length();
         } else {
             resultSize = response.getBytes();
         }
@@ -168,4 +188,53 @@ public class SizeAssertion extends Abstr
         }
         return result ? "" : comparatorErrorMessage;
     }
+    
+    private void setTestField(String testField) {
+        setProperty(TEST_FIELD, testField);
+    }
+
+    public void setTestFieldNetworkSize(){
+        setTestField(RESPONSE_NETWORK_SIZE);
+    }
+    
+    public void setTestFieldResponseHeaders(){
+        setTestField(RESPONSE_HEADERS);
+    }
+    
+    public void setTestFieldResponseBody(){
+        setTestField(RESPONSE_BODY);
+    }
+    
+    public void setTestFieldResponseCode(){
+        setTestField(RESPONSE_CODE);
+    }
+    
+    public void setTestFieldResponseMessage(){
+        setTestField(RESPONSE_MESSAGE);
+    }
+
+    public String getTestField() {
+        return getPropertyAsString(TEST_FIELD);
+    }
+
+    public boolean isTestFieldNetworkSize(){
+        return RESPONSE_NETWORK_SIZE.equals(getTestField());
+    }
+
+    public boolean isTestFieldResponseHeaders(){
+        return RESPONSE_HEADERS.equals(getTestField());
+    }
+    
+    public boolean isTestFieldResponseBody(){
+        return RESPONSE_BODY.equals(getTestField());
+    }
+
+    public boolean isTestFieldResponseCode(){
+        return RESPONSE_CODE.equals(getTestField());
+    }
+
+    public boolean isTestFieldResponseMessage(){
+        return RESPONSE_MESSAGE.equals(getTestField());
+    }
+
 }

Modified: 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/gui/SizeAssertionGui.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/gui/SizeAssertionGui.java?rev=1091965&r1=1091964&r2=1091965&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/gui/SizeAssertionGui.java
 (original)
+++ 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/gui/SizeAssertionGui.java
 Wed Apr 13 22:27:51 2011
@@ -20,6 +20,7 @@ package org.apache.jmeter.assertions.gui
 
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+
 import javax.swing.BorderFactory;
 import javax.swing.Box;
 import javax.swing.ButtonGroup;
@@ -38,7 +39,22 @@ import org.apache.jorphan.gui.layout.Ver
  */
 public class SizeAssertionGui extends AbstractAssertionGui implements 
ActionListener {
 
-    private static final long serialVersionUID = 240L;
+    private static final long serialVersionUID = 241L;
+    
+    /** Radio button indicating that the body response should be tested. */
+    private JRadioButton responseBodyButton;
+
+    /** Radio button indicating that the network response size should be 
tested. */
+    private JRadioButton responseNetworkButton;
+
+    /** Radio button indicating that the responseMessage should be tested. */
+    private JRadioButton responseMessageButton;
+
+    /** Radio button indicating that the responseCode should be tested. */
+    private JRadioButton responseCodeButton;
+
+    /** Radio button indicating that the headers should be tested. */
+    private JRadioButton responseHeadersButton;
 
     private JTextField size;
 
@@ -69,6 +85,18 @@ public class SizeAssertionGui extends Ab
     public void modifyTestElement(TestElement el) {
         configureTestElement(el);
         SizeAssertion assertion = (SizeAssertion) el;
+        
+        if (responseHeadersButton.isSelected()) {
+            assertion.setTestFieldResponseHeaders();
+        } else if (responseBodyButton.isSelected()) {
+            assertion.setTestFieldResponseBody();
+        } else if (responseCodeButton.isSelected()) {
+            assertion.setTestFieldResponseCode();
+        } else if (responseMessageButton.isSelected()) {
+            assertion.setTestFieldResponseMessage();
+        } else {
+            assertion.setTestFieldNetworkSize();
+        }
         assertion.setAllowedSize(size.getText());
         assertion.setCompOper(getState());
         saveScopeSettings(assertion);
@@ -81,6 +109,12 @@ public class SizeAssertionGui extends Ab
     public void clearGui() {
         super.clearGui();
 
+        responseNetworkButton.setSelected(true); // default
+        responseHeadersButton.setSelected(false);
+        responseBodyButton.setSelected(false);
+        responseCodeButton.setSelected(false);
+        responseMessageButton.setSelected(false);
+        
         size.setText(""); //$NON-NLS-1$
         equalButton.setSelected(true);
         notequalButton.setSelected(false);
@@ -98,6 +132,18 @@ public class SizeAssertionGui extends Ab
         size.setText(assertion.getAllowedSize());
         setState(assertion.getCompOper());
         showScopeSettings(assertion);
+        
+        if (assertion.isTestFieldResponseHeaders()) {
+        responseHeadersButton.setSelected(true);
+        } else if (assertion.isTestFieldResponseBody()) {
+            responseBodyButton.setSelected(true);
+        } else if (assertion.isTestFieldResponseCode()) {
+            responseCodeButton.setSelected(true);
+        } else if (assertion.isTestFieldResponseMessage()) {
+            responseMessageButton.setSelected(true);
+        } else {
+            responseNetworkButton.setSelected(true);
+        }
     }
 
     /**
@@ -139,6 +185,7 @@ public class SizeAssertionGui extends Ab
         add(makeTitlePanel());
 
         add(createScopePanel(true));
+        add(createFieldPanel());
 
         // USER_INPUT
         JPanel sizePanel = new JPanel();
@@ -153,6 +200,40 @@ public class SizeAssertionGui extends Ab
 
         add(sizePanel);
     }
+    
+    /**
+     * Create a panel allowing the user to choose which response field should 
be
+     * tested.
+     *
+     * @return a new panel for selecting the response field
+     */
+    private JPanel createFieldPanel() {
+        JPanel panel = new JPanel();
+        
panel.setBorder(BorderFactory.createTitledBorder(JMeterUtils.getResString("assertion_resp_size_field")));
 //$NON-NLS-1$
+
+        responseNetworkButton = new 
JRadioButton(JMeterUtils.getResString("assertion_network_size")); //$NON-NLS-1$
+        responseHeadersButton = new 
JRadioButton(JMeterUtils.getResString("assertion_headers")); //$NON-NLS-1$
+        responseBodyButton = new 
JRadioButton(JMeterUtils.getResString("assertion_body_resp")); //$NON-NLS-1$
+        responseCodeButton = new 
JRadioButton(JMeterUtils.getResString("assertion_code_resp")); //$NON-NLS-1$
+        responseMessageButton = new 
JRadioButton(JMeterUtils.getResString("assertion_message_resp")); //$NON-NLS-1$
+
+        ButtonGroup group = new ButtonGroup();
+        group.add(responseNetworkButton);
+        group.add(responseHeadersButton);
+        group.add(responseBodyButton);
+        group.add(responseCodeButton);
+        group.add(responseMessageButton);
+
+        panel.add(responseNetworkButton);
+        panel.add(responseHeadersButton);
+        panel.add(responseBodyButton);
+        panel.add(responseCodeButton);
+        panel.add(responseMessageButton);
+
+        responseNetworkButton.setSelected(true);
+
+        return panel;
+    }
 
     private Box createComparatorButtonPanel() {
         ButtonGroup group = new ButtonGroup();

Modified: 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SamplerResultTab.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SamplerResultTab.java?rev=1091965&r1=1091964&r2=1091965&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SamplerResultTab.java
 (original)
+++ 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SamplerResultTab.java
 Wed Apr 13 22:27:51 2011
@@ -227,6 +227,8 @@ public abstract class SamplerResultTab i
                 
statsBuff.append(JMeterUtils.getResString("view_results_load_time")).append(sampleResult.getTime()).append(NL);
 //$NON-NLS-1$
                 
statsBuff.append(JMeterUtils.getResString("view_results_latency")).append(sampleResult.getLatency()).append(NL);
 //$NON-NLS-1$
                 
statsBuff.append(JMeterUtils.getResString("view_results_size_in_bytes")).append(sampleResult.getBytes()).append(NL);
 //$NON-NLS-1$
+                
statsBuff.append(JMeterUtils.getResString("view_results_size_headers_in_bytes")).append(sampleResult.getHeadersSize()).append(NL);
 //$NON-NLS-1$
+                
statsBuff.append(JMeterUtils.getResString("view_results_size_body_in_bytes")).append(sampleResult.getBodySize()).append(NL);
 //$NON-NLS-1$
                 
statsBuff.append(JMeterUtils.getResString("view_results_sample_count")).append(sampleResult.getSampleCount()).append(NL);
 //$NON-NLS-1$
                 
statsBuff.append(JMeterUtils.getResString("view_results_error_count")).append(sampleResult.getErrorCount()).append(NL);
 //$NON-NLS-1$
                 statsDoc.insertString(statsDoc.getLength(), 
statsBuff.toString(), null);
@@ -280,6 +282,8 @@ public abstract class SamplerResultTab i
                 resultModel.addRow(new 
RowResult(JMeterUtils.getParsedLabel("view_results_load_time"), 
sampleResult.getTime())); //$NON-NLS-1$
                 resultModel.addRow(new 
RowResult(JMeterUtils.getParsedLabel("view_results_latency"), 
sampleResult.getLatency())); //$NON-NLS-1$
                 resultModel.addRow(new 
RowResult(JMeterUtils.getParsedLabel("view_results_size_in_bytes"), 
sampleResult.getBytes())); //$NON-NLS-1$
+                resultModel.addRow(new 
RowResult(JMeterUtils.getParsedLabel("view_results_size_headers_in_bytes"), 
sampleResult.getHeadersSize())); //$NON-NLS-1$
+                resultModel.addRow(new 
RowResult(JMeterUtils.getParsedLabel("view_results_size_body_in_bytes"), 
sampleResult.getBodySize())); //$NON-NLS-1$
                 resultModel.addRow(new 
RowResult(JMeterUtils.getParsedLabel("view_results_sample_count"), 
sampleResult.getSampleCount())); //$NON-NLS-1$
                 resultModel.addRow(new 
RowResult(JMeterUtils.getParsedLabel("view_results_error_count"), 
sampleResult.getErrorCount())); //$NON-NLS-1$
                 resultModel.addRow(new 
RowResult(JMeterUtils.getParsedLabel("view_results_response_code"), 
responseCode)); //$NON-NLS-1$

Modified: 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties?rev=1091965&r1=1091964&r2=1091965&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties 
(original)
+++ 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties 
Wed Apr 13 22:27:51 2011
@@ -65,16 +65,19 @@ anchor_modifier_title=HTML Link Parser
 appearance=Look and Feel
 argument_must_not_be_negative=The Argument must not be negative\!
 assertion_assume_success=Ignore Status
+assertion_body_resp=Response Body
 assertion_code_resp=Response Code
 assertion_contains=Contains
 assertion_equals=Equals
 assertion_headers=Response Headers
 assertion_matches=Matches
 assertion_message_resp=Response Message
+assertion_network_size=Full Response
 assertion_not=Not
 assertion_pattern_match_rules=Pattern Matching Rules
 assertion_patterns_to_test=Patterns to Test
 assertion_resp_field=Response Field to Test
+assertion_resp_size_field=Response Size Field to Test
 assertion_substring=Substring
 assertion_text_resp=Text Response
 assertion_textarea_label=Assertions\:
@@ -988,6 +991,8 @@ view_results_sample_count=Sample Count: 
 view_results_sample_start=Sample Start: 
 view_results_search_pane=Search pane
 view_results_size_in_bytes=Size in bytes: 
+view_results_size_body_in_bytes=Body size in bytes: 
+view_results_size_headers_in_bytes=Headers size in bytes: 
 view_results_tab_assertion=Assertion result
 view_results_tab_request=Request
 view_results_tab_response=Response data

Modified: 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties?rev=1091965&r1=1091964&r2=1091965&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
 (original)
+++ 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
 Wed Apr 13 22:27:51 2011
@@ -55,16 +55,19 @@ anchor_modifier_title=Analyseur de lien 
 appearance=Apparence
 argument_must_not_be_negative=L'argument ne peut pas \u00EAtre n\u00E9gatif \!
 assertion_assume_success=Ignorer le statut
+assertion_body_resp=Corps de r\u00E9ponse
 assertion_code_resp=Code de r\u00E9ponse
 assertion_contains=Contient (exp. r\u00E9guli\u00E8re)
 assertion_equals=Est \u00E9gale \u00E0 (texte brut)
 assertion_headers=Ent\u00EAtes de r\u00E9ponse
 assertion_matches=Correspond \u00E0 (exp. r\u00E9guli\u00E8re)
 assertion_message_resp=Message de r\u00E9ponse
+assertion_network_size=R\u00E9ponse compl\u00E8te
 assertion_not=Inverser
 assertion_pattern_match_rules=Type de correspondance du motif
 assertion_patterns_to_test=Motifs \u00E0 tester
 assertion_resp_field=Section de r\u00E9ponse \u00E0 tester
+assertion_resp_size_field=Taille \u00E0 v\u00E9rifier sur
 assertion_substring=Contient (texte brut)
 assertion_text_resp=Texte de r\u00E9ponse
 assertion_textarea_label=Assertions \:
@@ -892,6 +895,8 @@ view_results_response_too_large_message=
 view_results_sample_count=Compteur \u00E9chantillon \: 
 view_results_sample_start=Date d\u00E9but \u00E9chantillon \: 
 view_results_search_pane=Volet recherche 
+view_results_size_body_in_bytes=Taille du corps en octets \: 
+view_results_size_headers_in_bytes=Taille de l'ent\u00EAte en octets \: 
 view_results_size_in_bytes=Taille en octets \: 
 view_results_tab_assertion=R\u00E9sultats d'assertion
 view_results_tab_request=Requ\u00EAte

Modified: 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleResult.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleResult.java?rev=1091965&r1=1091964&r2=1091965&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleResult.java 
(original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleResult.java 
Wed Apr 13 22:27:51 2011
@@ -43,7 +43,7 @@ import org.apache.log.Logger;
  */
 public class SampleResult implements Serializable {
 
-    private static final long serialVersionUID = 233L;
+    private static final long serialVersionUID = 241L;
 
     // Needs to be accessible from Test code
     static final Logger log = LoggingManager.getLoggerForClass();
@@ -93,6 +93,15 @@ public class SampleResult implements Ser
     private static final SampleResult[] EMPTY_SR = new SampleResult[0];
 
     private static final AssertionResult[] EMPTY_AR = new AssertionResult[0];
+    
+    private static final boolean GETBYTES_BODY_REALSIZE = 
+        JMeterUtils.getPropDefault("sampleresult.getbytes.body_real_size", 
true); // $NON-NLS-1$
+
+    private static final boolean GETBYTES_HEADERS_SIZE = 
+        JMeterUtils.getPropDefault("sampleresult.getbytes.headers_size", 
true); // $NON-NLS-1$
+    
+    private static final boolean GETBYTES_NETWORK_SIZE = 
+        GETBYTES_HEADERS_SIZE && GETBYTES_BODY_REALSIZE ? true : false;
 
     private SampleSaveConfiguration saveConfig;
 
@@ -181,6 +190,10 @@ public class SampleResult implements Ser
     private int sampleCount = 1;
 
     private int bytes = 0; // Allows override of sample size in case sampler 
does not want to store all the data
+    
+    private int headersSize = 0;
+    
+    private int bodySize = 0;
 
     /** Currently active threads in this thread group */
     private volatile int groupThreads = 0;
@@ -1082,6 +1095,14 @@ public class SampleResult implements Ser
      * @return byte count
      */
     public int getBytes() {
+        if (GETBYTES_NETWORK_SIZE) {
+            int tmpSum = this.getHeadersSize() + this.getBodySize();
+            return tmpSum == 0 ? bytes : tmpSum;
+        } else if (GETBYTES_HEADERS_SIZE) {
+            return this.getHeadersSize();
+        } else if (GETBYTES_BODY_REALSIZE) {
+            return this.getBodySize();
+        }
         return bytes == 0 ? responseData.length : bytes;
     }
 
@@ -1192,4 +1213,37 @@ public class SampleResult implements Ser
     public void removeSubResults() {
         this.subResults = null;
     }
+    
+    /**
+     * Set the headers size in bytes
+     * 
+     * @param size
+     */
+    public void setHeadersSize(int size) {
+        this.headersSize = size;
+    }
+    
+    /**
+     * Get the headers size in bytes
+     * 
+     * @return the headers size
+     */
+    public int getHeadersSize() {
+        return headersSize;
+    }
+
+    /**
+     * @return the body size in bytes
+     */
+    public int getBodySize() {
+        return bodySize == 0 ? responseData.length : bodySize;
+    }
+
+    /**
+     * @param bodySize the body size to set
+     */
+    public void setBodySize(int bodySize) {
+        this.bodySize = bodySize;
+    }
+
 }

Modified: 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC3Impl.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC3Impl.java?rev=1091965&r1=1091964&r2=1091965&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC3Impl.java
 (original)
+++ 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC3Impl.java
 Wed Apr 13 22:27:51 2011
@@ -60,6 +60,7 @@ import org.apache.commons.httpclient.met
 import org.apache.commons.httpclient.params.HttpClientParams;
 import org.apache.commons.httpclient.params.HttpMethodParams;
 import org.apache.commons.httpclient.protocol.Protocol;
+import org.apache.commons.io.input.CountingInputStream;
 import org.apache.jmeter.protocol.http.control.AuthManager;
 import org.apache.jmeter.protocol.http.control.Authorization;
 import org.apache.jmeter.protocol.http.control.CacheManager;
@@ -85,7 +86,7 @@ public class HTTPHC3Impl extends HTTPHCA
 
     private static final Logger log = LoggingManager.getLoggerForClass();
 
-    private static final long serialVersionUID = 240L;
+    private static final long serialVersionUID = 241L;
 
     private static final boolean canSetPreEmptive; // OK to set pre-emptive 
auth?
 
@@ -244,15 +245,17 @@ public class HTTPHC3Impl extends HTTPHCA
             res.setRequestHeaders(getConnectionHeaders(httpMethod));
 
             // Request sent. Now get the response:
-            InputStream instream = httpMethod.getResponseBodyAsStream();
+            InputStream instream = new 
CountingInputStream(httpMethod.getResponseBodyAsStream());
 
             if (instream != null) {// will be null for HEAD
                 try {
                     Header responseHeader = 
httpMethod.getResponseHeader(HEADER_CONTENT_ENCODING);
                     if (responseHeader!= null && 
ENCODING_GZIP.equals(responseHeader.getValue())) {
-                        instream = new GZIPInputStream(instream);
+                        InputStream tmpInput = new GZIPInputStream(instream); 
// tmp inputstream needs to have a good counting
+                        res.setResponseData(readResponse(res, tmpInput, (int) 
httpMethod.getResponseContentLength()));                        
+                    } else {
+                        res.setResponseData(readResponse(res, instream, (int) 
httpMethod.getResponseContentLength()));
                     }
-                    res.setResponseData(readResponse(res, instream, (int) 
httpMethod.getResponseContentLength()));
                 } finally {
                     JOrphanUtils.closeQuietly(instream);
                 }
@@ -290,11 +293,11 @@ public class HTTPHC3Impl extends HTTPHCA
             }
 
             // record some sizes to allow HTTPSampleResult.getBytes() with 
different options
-            res.setContentLength((int) httpMethod.getResponseContentLength());
+            res.setBodySize(((CountingInputStream) instream).getCount());
             res.setHeadersSize(calculateHeadersSize(httpMethod));
             if (log.isDebugEnabled()) {
-                log.debug("ResponseHeadersSize=" + res.getHeadersSize() + " 
Content-Length=" + res.getContentLength()
-                        + " Total=" + (res.getHeadersSize() + 
res.getContentLength()));
+                log.debug("Response headersSize=" + res.getHeadersSize() + " 
bodySize=" + res.getBodySize()
+                        + " Total=" + (res.getHeadersSize() + 
res.getBodySize()));
             }
             
             // If we redirected automatically, the URL may have changed

Modified: 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java?rev=1091965&r1=1091964&r2=1091965&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java
 (original)
+++ 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java
 Wed Apr 13 22:27:51 2011
@@ -112,7 +112,7 @@ public class HTTPHC4Impl extends HTTPHCA
 
     private static final Logger log = LoggingManager.getLoggerForClass();
 
-    private static final long serialVersionUID = 240L;
+    private static final long serialVersionUID = 241L;
 
     private static final String CONTEXT_METRICS = "jmeter_metrics"; // TODO 
hack, to be removed later
 
@@ -308,10 +308,10 @@ public class HTTPHC4Impl extends HTTPHCA
             // record some sizes to allow HTTPSampleResult.getBytes() with 
different options
             long totalBytes = metrics.getReceivedBytesCount();
             res.setHeadersSize((int) headerBytes);
-            res.setContentLength((int)(totalBytes - headerBytes));
+            res.setBodySize((int)(totalBytes - headerBytes));
             if (log.isDebugEnabled()) {
-                log.debug("ResponseHeadersSize=" + res.getHeadersSize() + " 
Content-Length=" + res.getContentLength()
-                        + " Total=" + (res.getHeadersSize() + 
res.getContentLength()));
+                log.debug("ResponseHeadersSize=" + res.getHeadersSize() + " 
Content-Length=" + res.getBodySize()
+                        + " Total=" + (res.getHeadersSize() + 
res.getBodySize()));
             }
 
             // If we redirected automatically, the URL may have changed

Modified: 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPJavaImpl.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPJavaImpl.java?rev=1091965&r1=1091964&r2=1091965&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPJavaImpl.java
 (original)
+++ 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPJavaImpl.java
 Wed Apr 13 22:27:51 2011
@@ -34,6 +34,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.zip.GZIPInputStream;
 
+import org.apache.commons.io.input.CountingInputStream;
 import org.apache.jmeter.protocol.http.control.AuthManager;
 import org.apache.jmeter.protocol.http.control.Authorization;
 import org.apache.jmeter.protocol.http.control.CacheManager;
@@ -62,7 +63,7 @@ public class HTTPJavaImpl extends HTTPAb
     private static final boolean OBEY_CONTENT_LENGTH =
         JMeterUtils.getPropDefault("httpsampler.obey_contentlength", false); 
// $NON-NLS-1$
 
-    private static final long serialVersionUID = 233L;
+    private static final long serialVersionUID = 241L;
 
     private static final Logger log = LoggingManager.getLoggerForClass();
 
@@ -241,12 +242,13 @@ public class HTTPJavaImpl extends HTTPAb
 
         // works OK even if ContentEncoding is null
         boolean gzipped = ENCODING_GZIP.equals(conn.getContentEncoding());
-
+        InputStream instream = null;
         try {
+            instream = new CountingInputStream(conn.getInputStream());
             if (gzipped) {
-                in = new BufferedInputStream(new 
GZIPInputStream(conn.getInputStream()));
+                in = new BufferedInputStream(new GZIPInputStream(instream));
             } else {
-                in = new BufferedInputStream(conn.getInputStream());
+                in = new BufferedInputStream(instream);
             }
         } catch (IOException e) {
             if (! (e.getCause() instanceof FileNotFoundException))
@@ -281,7 +283,9 @@ public class HTTPJavaImpl extends HTTPAb
             }
             in = new BufferedInputStream(conn.getErrorStream());
         }
-        return readResponse(res, in, contentLength);
+        byte[] responseData = readResponse(res, in, contentLength);
+        res.setBodySize(((CountingInputStream) instream).getCount());
+        return responseData;
     }
 
     /**
@@ -562,14 +566,12 @@ public class HTTPJavaImpl extends HTTPAb
                 res.setRedirectLocation(conn.getHeaderField(HEADER_LOCATION));
             }
             
-            // record some sizes to allow HTTPSampleResult.getBytes() with 
different options
-            String contentLength = conn.getHeaderField(HEADER_CONTENT_LENGTH);
-            res.setContentLength(contentLength != null ? 
Integer.parseInt(contentLength) : 0); // 0 to getBytes with responseData length
+            // record headers size to allow HTTPSampleResult.getBytes() with 
different options
             res.setHeadersSize(responseHeaders.replaceAll("\n", "\r\n") // 
$NON-NLS-1$ $NON-NLS-2$
                     .length() + 2); // add 2 for a '\r\n' at end of headers 
(before data) 
             if (log.isDebugEnabled()) {
-                log.debug("ResponseHeadersSize=" + res.getHeadersSize() + " 
Content-Length=" + res.getContentLength()
-                        + " Total=" + (res.getHeadersSize() + 
res.getContentLength()));
+                log.debug("Response headersSize=" + res.getHeadersSize() + " 
bodySize=" + res.getBodySize()
+                        + " Total=" + (res.getHeadersSize() + 
res.getBodySize()));
             }
             
             // If we redirected automatically, the URL may have changed

Modified: 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSampleResult.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSampleResult.java?rev=1091965&r1=1091964&r2=1091965&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSampleResult.java
 (original)
+++ 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSampleResult.java
 Wed Apr 13 22:27:51 2011
@@ -23,7 +23,6 @@ import java.net.URL;
 
 import org.apache.jmeter.protocol.http.util.HTTPConstants;
 import org.apache.jmeter.samplers.SampleResult;
-import org.apache.jmeter.util.JMeterUtils;
 
 /**
  * This is a specialisation of the SampleResult class for the HTTP protocol.
@@ -32,23 +31,10 @@ import org.apache.jmeter.util.JMeterUtil
 public class HTTPSampleResult extends SampleResult {
 
     private static final long serialVersionUID = 240L;
-    
-    private static final boolean GETBYTES_INCLUDE_HEADERS = 
-        JMeterUtils.getPropDefault("http.getbytes.include.headers", false); // 
$NON-NLS-1$
-    
-    private static final boolean GETBYTES_USE_CONTENTLENGTH = 
-        JMeterUtils.getPropDefault("http.getbytes.use.contentlength", false); 
// $NON-NLS-1$
-
-    private static final boolean GETBYTES_HEADERS_CONTENTLENGTH = 
-        GETBYTES_INCLUDE_HEADERS && GETBYTES_USE_CONTENTLENGTH ? true : false;
 
     private String cookies = ""; // never null
 
     private String method;
-    
-    private int headersSize = 0;
-    
-    private int contentLength = 0;
 
     /**
      * The raw value of the Location: header; may be null.
@@ -230,53 +216,4 @@ public class HTTPSampleResult extends Sa
         setResponseMessage(HTTP_NO_CONTENT_MSG);
     }
     
-    /**
-     * Set the headers size in bytes
-     * 
-     * @param size
-     */
-    public void setHeadersSize(int size) {
-        this.headersSize = size;
-    }
-    
-    /**
-     * Get the headers size in bytes
-     * 
-     * @return the headers size
-     */
-    public int getHeadersSize() {
-        return headersSize;
-    }
-
-    /**
-     * @return the contentLength
-     */
-    public int getContentLength() {
-        return contentLength == 0 ? super.getBytes() : contentLength;
-    }
-
-    /**
-     * @param contentLength the contentLength to set
-     */
-    public void setContentLength(int contentLength) {
-        this.contentLength = contentLength;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.jmeter.samplers.SampleResult#getBytes()
-     */
-    @Override
-    public int getBytes() {
-        if (GETBYTES_HEADERS_CONTENTLENGTH) {
-            return headersSize + contentLength;
-        } else if (GETBYTES_INCLUDE_HEADERS) {
-            return headersSize + super.getBytes();
-        } else if (GETBYTES_USE_CONTENTLENGTH) {
-            return contentLength;
-        }
-        return super.getBytes(); // Default
-    }
-    
 }

Modified: 
jakarta/jmeter/trunk/test/src/org/apache/jmeter/assertions/SizeAssertionTest.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/test/src/org/apache/jmeter/assertions/SizeAssertionTest.java?rev=1091965&r1=1091964&r2=1091965&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/test/src/org/apache/jmeter/assertions/SizeAssertionTest.java
 (original)
+++ 
jakarta/jmeter/trunk/test/src/org/apache/jmeter/assertions/SizeAssertionTest.java
 Wed Apr 13 22:27:51 2011
@@ -39,6 +39,7 @@ public class SizeAssertionTest extends J
           jmctx = JMeterContextService.getContext();
           assertion = new SizeAssertion();
           assertion.setThreadContext(jmctx);
+          assertion.setTestFieldResponseBody();
           vars = new JMeterVariables();
           jmctx.setVariables(vars);
           sample0 = new SampleResult();

Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=1091965&r1=1091964&r2=1091965&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Wed Apr 13 22:27:51 2011
@@ -179,12 +179,14 @@ Fixed RMI startup to provide location of
 <li>Bug 37156 - Formatted view of Request in Results Tree</li>
 <li>Bug 49365 - Allow result set to be written to file in a path relative to 
the loaded script</li>
 <li>Bug 50579 - Error count is long, sample count is int. Changed sample count 
to long.</li>
+<li>View Results Tree - Add new size fields: response headers and response 
body (in bytes) - derived from Bug 43363</li>
 </ul>
 
 <h3>Timers, Assertions, Config, Pre- &amp; Post-Processors</h3>
 <ul>
 <li>Bug 48015 - Proposal new icons for pre-processor, post-processor and 
assertion elements</li>
 <li>Bug 50962 - SizeAssertionGui validation prevents the use of variables for 
the size</li>
+<li>Size Assertion - Add response size scope (full, headers, body, code, 
message) - derived from Bug 43363</li>
 </ul>
 
 <h3>Functions</h3>

Modified: jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml?rev=1091965&r1=1091964&r2=1091965&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml (original)
+++ jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml Wed Apr 13 
22:27:51 2011
@@ -333,13 +333,14 @@ The HttpClient version of the sampler su
 #httpclient.socket.http.cps=0
 #httpclient.socket.https.cps=0
 </pre>
-<p><b>Method to calculate Response size</b><br></br>
+<p><b>Response size calculation</b><br></br>
 Optional properties to allow change the method to get response size:<br></br>
-<ul><li>Include the headers length with the response data length
-<pre>http.getbytes.include.headers=false</pre></li>
-<li>Uses value of "Content-length" header (generally provide by web server), 
rather than decompressed response data length<br></br>
-Useful when web server uses a deflate/gzip method to compress response data
-<pre>http.getbytes.use.contentlength=false</pre></li></ul>
+<ul><li>Gets the real network size in bytes for the body response
+<pre>sampleresult.getbytes.body_real_size=true</pre></li>
+<li>Add HTTP headers to full response size
+<pre>sampleresult.getbytes.headers_size=true</pre></li></ul>
+<note>Versions of JMeter before 2.4.1 returns only data response size 
(uncompressed if request uses gzip/defate mode).
+<br></br>To return to settings before version 2.4.1, set the two properties to 
false.</note>
 </p>
 <links>
         <link href="test_plan.html#assertions">Assertion</link>



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to