jmeter-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From s...@apache.org
Subject svn commit: r1461911 - in /jmeter/trunk: ./ bin/testfiles/ src/core/org/apache/jmeter/engine/ src/core/org/apache/jmeter/samplers/ xdocs/
Date Thu, 28 Mar 2013 01:12:11 GMT
Author: sebb
Date: Thu Mar 28 01:12:10 2013
New Revision: 1461911

URL: http://svn.apache.org/r1461911
Log:
ArrayIndexOutOfBoundsException if "sample_variable" is set in client but not server
Bugzilla Id: 54685

Added:
    jmeter/trunk/bin/testfiles/Bug54685.csv
    jmeter/trunk/bin/testfiles/Bug54685.jmx   (with props)
    jmeter/trunk/bin/testfiles/Bug54685.xml   (with props)
Modified:
    jmeter/trunk/build.xml
    jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java
    jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleEvent.java
    jmeter/trunk/xdocs/changes.xml

Added: jmeter/trunk/bin/testfiles/Bug54685.csv
URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/Bug54685.csv?rev=1461911&view=auto
==============================================================================
--- jmeter/trunk/bin/testfiles/Bug54685.csv (added)
+++ jmeter/trunk/bin/testfiles/Bug54685.csv Thu Mar 28 01:12:10 2013
@@ -0,0 +1,2 @@
+label,responseCode,responseMessage,threadName,dataType,success,bytes,"REFERENCE","JSESSIONID"
+"sample_variables=REFERENCE,JSESSIONID REFERENCE=reference JSESSIONID=jsessionId",,,Thread
Group 1-1,,true,0,reference,jsessionId

Added: jmeter/trunk/bin/testfiles/Bug54685.jmx
URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/Bug54685.jmx?rev=1461911&view=auto
==============================================================================
--- jmeter/trunk/bin/testfiles/Bug54685.jmx (added)
+++ jmeter/trunk/bin/testfiles/Bug54685.jmx Thu Mar 28 01:12:10 2013
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jmeterTestPlan version="1.2" properties="2.5" jmeter="2.9-SNAPSHOT.20130327">
+  <hashTree>
+    <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Bug54685" enabled="true">
+      <stringProp name="TestPlan.comments"></stringProp>
+      <boolProp name="TestPlan.functional_mode">false</boolProp>
+      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel"
testclass="Arguments" testname="User Defined Variables" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="REFERENCE" elementType="Argument">
+            <stringProp name="Argument.name">REFERENCE</stringProp>
+            <stringProp name="Argument.value">reference</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="JSESSIONID" elementType="Argument">
+            <stringProp name="Argument.name">JSESSIONID</stringProp>
+            <stringProp name="Argument.value">jsessionId</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="TestPlan.user_define_classpath"></stringProp>
+    </TestPlan>
+    <hashTree>
+      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread
Group" enabled="true">
+        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+        <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel"
testclass="LoopController" testname="Loop Controller" enabled="true">
+          <boolProp name="LoopController.continue_forever">false</boolProp>
+          <stringProp name="LoopController.loops">1</stringProp>
+        </elementProp>
+        <stringProp name="ThreadGroup.num_threads">1</stringProp>
+        <stringProp name="ThreadGroup.ramp_time">1</stringProp>
+        <longProp name="ThreadGroup.start_time">1364309240000</longProp>
+        <longProp name="ThreadGroup.end_time">1364309240000</longProp>
+        <boolProp name="ThreadGroup.scheduler">false</boolProp>
+        <stringProp name="ThreadGroup.duration"></stringProp>
+        <stringProp name="ThreadGroup.delay"></stringProp>
+      </ThreadGroup>
+      <hashTree>
+        <JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java
Request" enabled="true">
+          <elementProp name="arguments" elementType="Arguments" guiclass="ArgumentsPanel"
testclass="Arguments" enabled="true">
+            <collectionProp name="Arguments.arguments">
+              <elementProp name="Sleep_Time" elementType="Argument">
+                <stringProp name="Argument.name">Sleep_Time</stringProp>
+                <stringProp name="Argument.value">100</stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+              </elementProp>
+              <elementProp name="Sleep_Mask" elementType="Argument">
+                <stringProp name="Argument.name">Sleep_Mask</stringProp>
+                <stringProp name="Argument.value">0xFF</stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+              </elementProp>
+              <elementProp name="Label" elementType="Argument">
+                <stringProp name="Argument.name">Label</stringProp>
+                <stringProp name="Argument.value">sample_variables=${__P(sample_variables,&apos;undef&apos;)}
REFERENCE=${REFERENCE} JSESSIONID=${JSESSIONID}</stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+              </elementProp>
+              <elementProp name="ResponseCode" elementType="Argument">
+                <stringProp name="Argument.name">ResponseCode</stringProp>
+                <stringProp name="Argument.value"></stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+              </elementProp>
+              <elementProp name="ResponseMessage" elementType="Argument">
+                <stringProp name="Argument.name">ResponseMessage</stringProp>
+                <stringProp name="Argument.value"></stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+              </elementProp>
+              <elementProp name="Status" elementType="Argument">
+                <stringProp name="Argument.name">Status</stringProp>
+                <stringProp name="Argument.value">OK</stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+              </elementProp>
+              <elementProp name="SamplerData" elementType="Argument">
+                <stringProp name="Argument.name">SamplerData</stringProp>
+                <stringProp name="Argument.value"></stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+              </elementProp>
+              <elementProp name="ResultData" elementType="Argument">
+                <stringProp name="Argument.name">ResultData</stringProp>
+                <stringProp name="Argument.value"></stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+              </elementProp>
+            </collectionProp>
+          </elementProp>
+          <stringProp name="classname">org.apache.jmeter.protocol.java.test.JavaTest</stringProp>
+        </JavaSampler>
+        <hashTree/>
+      </hashTree>
+      <ResultCollector guiclass="TableVisualizer" testclass="ResultCollector" testname="View
Results in Table" enabled="true">
+        <boolProp name="ResultCollector.error_logging">false</boolProp>
+        <objProp>
+          <name>saveConfig</name>
+          <value class="SampleSaveConfiguration">
+            <time>false</time>
+            <latency>false</latency>
+            <timestamp>false</timestamp>
+            <success>true</success>
+            <label>true</label>
+            <code>true</code>
+            <message>true</message>
+            <threadName>true</threadName>
+            <dataType>true</dataType>
+            <encoding>false</encoding>
+            <assertions>true</assertions>
+            <subresults>true</subresults>
+            <responseData>false</responseData>
+            <samplerData>false</samplerData>
+            <xml>false</xml>
+            <fieldNames>true</fieldNames>
+            <responseHeaders>false</responseHeaders>
+            <requestHeaders>false</requestHeaders>
+            <responseDataOnError>false</responseDataOnError>
+            <saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
+            <assertionsResultsToSave>0</assertionsResultsToSave>
+            <bytes>true</bytes>
+          </value>
+        </objProp>
+        <stringProp name="filename">Bug54685.csv</stringProp>
+      </ResultCollector>
+      <hashTree/>
+      <ResultCollector guiclass="SimpleDataWriter" testclass="ResultCollector" testname="Simple
Data Writer" enabled="true">
+        <boolProp name="ResultCollector.error_logging">false</boolProp>
+        <objProp>
+          <name>saveConfig</name>
+          <value class="SampleSaveConfiguration">
+            <time>false</time>
+            <latency>false</latency>
+            <timestamp>false</timestamp>
+            <success>true</success>
+            <label>true</label>
+            <code>true</code>
+            <message>true</message>
+            <threadName>true</threadName>
+            <dataType>true</dataType>
+            <encoding>false</encoding>
+            <assertions>true</assertions>
+            <subresults>true</subresults>
+            <responseData>false</responseData>
+            <samplerData>false</samplerData>
+            <xml>true</xml>
+            <fieldNames>false</fieldNames>
+            <responseHeaders>false</responseHeaders>
+            <requestHeaders>false</requestHeaders>
+            <responseDataOnError>false</responseDataOnError>
+            <saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
+            <assertionsResultsToSave>0</assertionsResultsToSave>
+            <bytes>true</bytes>
+          </value>
+        </objProp>
+        <stringProp name="filename">Bug54685.xml</stringProp>
+      </ResultCollector>
+      <hashTree/>
+    </hashTree>
+  </hashTree>
+</jmeterTestPlan>

Propchange: jmeter/trunk/bin/testfiles/Bug54685.jmx
------------------------------------------------------------------------------
    svn:eol-style = LF

Added: jmeter/trunk/bin/testfiles/Bug54685.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/Bug54685.xml?rev=1461911&view=auto
==============================================================================
--- jmeter/trunk/bin/testfiles/Bug54685.xml (added)
+++ jmeter/trunk/bin/testfiles/Bug54685.xml Thu Mar 28 01:12:10 2013
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<testResults version="1.2">
+<sample s="true" lb="sample_variables=REFERENCE,JSESSIONID REFERENCE=reference JSESSIONID=jsessionId"
rc="" rm="" tn="Thread Group 1-1" dt="" by="0" REFERENCE="reference" JSESSIONID="jsessionId"/>
+
+</testResults>

Propchange: jmeter/trunk/bin/testfiles/Bug54685.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: jmeter/trunk/build.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/build.xml?rev=1461911&r1=1461910&r2=1461911&view=diff
==============================================================================
--- jmeter/trunk/build.xml (original)
+++ jmeter/trunk/build.xml Thu Mar 28 01:12:10 2013
@@ -2341,7 +2341,7 @@ run JMeter unless all the JMeter jars ar
             <antcall target="batchtest">
                 <param name="remote" value="-Rlocalhost:${rmi_port}"/>
                 <param name="taskname" value="client"/>
-                <param name="batchtest.name" value="BatchTestLocalRemote"/>
+                <!-- Default the test name so we can override with a parameter -->
             </antcall>
         </sequential>
     </parallel>
@@ -2373,6 +2373,12 @@ run JMeter unless all the JMeter jars ar
     <property name="batchtest.inp" location="${basedir}/bin/testfiles"/>
     <property name="batchtest.out" location="${basedir}/bin"/>
     <property name="batchtest.name" value="BatchTestLocal"/>
+    <!--
+         Allow variable to be set on the command line
+         Cannot omit value because that causes a warning message
+     -->
+    <property name="batchtest.variable" value="dummy"/>
+    <property name="batchtest.value" value="dummy"/>
 
     <!-- Fix the EOL in case the file was derived from the "wrong" archive type -->
     <fixcrlf srcdir="${batchtest.inp}" includes="${batchtest.name}.csv"/>
@@ -2429,6 +2435,7 @@ run JMeter unless all the JMeter jars ar
         <arg value="-Gmodule=Module"/>
         <!-- Check property can be used for filenames in local/remote tests (no need to
defined as -G) -->
         <arg value="-JCSVFILE=${batchtest.name}.csv"/>
+        <arg value="-J${batchtest.variable}=${batchtest.value}"/>
      </java>
 
     <checkfile type="output" file="${batchtest.out}${file.separator}${batchtest.name}.csv"/>
@@ -2481,6 +2488,7 @@ run JMeter unless all the JMeter jars ar
       </antcall>
       <antcall target="batchtest">
           <!--  variable in IPSource failed HTTP request if "Concurrent Pool Size" is
enabled -->
+          <!-- N.B. requires access to jmeter.apache.org -->
           <param name="batchtest.name" value="Bug52310"/>
       </antcall>
       <antcall target="batchtest">
@@ -2492,6 +2500,22 @@ run JMeter unless all the JMeter jars ar
           <!-- IncludeController : NullPointerException loading script in non-GUI mode
if Includers use same element name -->
           <param name="batchtest.name" value="Bug50898"/>
       </antcall>
+
+      <antcall target="batchtest">
+          <!-- ArrayIndexOutOfBoundsException if "sample_variable" is set in client but
not server -->
+          <!-- This is unaffected by the bug; it just checks the script works OK in local
mode -->
+          <param name="batchtest.name" value="Bug54685"/>
+          <param name="batchtest.variable" value="sample_variables"/>
+          <param name="batchtest.value" value="REFERENCE,JSESSIONID"/>
+      </antcall>
+
+      <antcall target="batchtestserver">
+          <!-- ArrayIndexOutOfBoundsException if "sample_variable" is set in client but
not server -->
+          <!-- This is the actual test -->
+          <param name="batchtest.name" value="Bug54685"/>
+          <param name="batchtest.variable" value="sample_variables"/>
+          <param name="batchtest.value" value="REFERENCE,JSESSIONID"/>
+      </antcall>
   </target>
 
   <!-- Run all batch tests; used by test target -->

Modified: jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java?rev=1461911&r1=1461910&r2=1461911&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java Thu Mar 28 01:12:10
2013
@@ -27,6 +27,7 @@ import java.util.Properties;
 import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.apache.jmeter.JMeter;
+import org.apache.jmeter.samplers.SampleEvent;
 import org.apache.jmeter.testbeans.TestBean;
 import org.apache.jmeter.testbeans.TestBeanHelper;
 import org.apache.jmeter.testelement.TestElement;
@@ -302,6 +303,12 @@ public class StandardJMeterEngine implem
         log.info("Running the test!");
         running = true;
 
+        /*
+         * Ensure that the sample variables are correctly initialised for each run.
+         * TODO is this the best way to do this? should it be done elsewhere ?
+         */
+        SampleEvent.initSampleVariables();
+
         JMeterContextService.startTest();
         try {
             PreCompiler compiler = new PreCompiler();

Modified: jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleEvent.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleEvent.java?rev=1461911&r1=1461910&r2=1461911&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleEvent.java (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleEvent.java Thu Mar 28 01:12:10
2013
@@ -21,6 +21,7 @@ package org.apache.jmeter.samplers;
 import java.io.Serializable;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
+import java.util.Arrays;
 
 import org.apache.jmeter.threads.JMeterVariables;
 import org.apache.jmeter.util.JMeterUtils;
@@ -37,16 +38,18 @@ public class SampleEvent implements Seri
 
     private static final long serialVersionUID = 232L;
 
+    /** The property {@value} is used to define additional variables to be saved */
     public static final String SAMPLE_VARIABLES = "sample_variables"; // $NON-NLS-1$
 
     public static final String HOSTNAME;
 
     // List of variable names to be saved in JTL files
-    private static final String[] variableNames;
+    private static volatile String[] variableNames = new String[0];
 
     // The values. Entries may be null, but there will be the correct number.
     private final String[] values;
 
+    // The hostname cannot change during a run, so safe to cache it just once
     static {
         String hn="";
         try {
@@ -55,16 +58,19 @@ public class SampleEvent implements Seri
             log.error("Cannot obtain local host name "+e);
         }
         HOSTNAME=hn;
+        initSampleVariables();
+    }
 
+    /**
+     * Set up the additional variable names to be saved
+     * from the value in the {@link #SAMPLE_VARIABLES} property
+     */
+    public static void initSampleVariables() {
         String vars = JMeterUtils.getProperty(SAMPLE_VARIABLES);
-           variableNames=vars != null ? vars.split(",") : new String[0];
-           int varCount=variableNames.length;
-        if (varCount>0){
-            log.info(varCount + " sample_variables have been declared: "+vars);
-        }
+        variableNames=vars != null ? vars.split(",") : new String[0];
+        log.info("List of sample_variables: " + Arrays.toString(variableNames));
     }
 
-
     private final SampleResult result;
 
     private final String threadGroup; // TODO appears to duplicate the threadName field in
SampleResult

Modified: jmeter/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1461911&r1=1461910&r2=1461911&view=diff
==============================================================================
--- jmeter/trunk/xdocs/changes.xml (original)
+++ jmeter/trunk/xdocs/changes.xml Thu Mar 28 01:12:10 2013
@@ -109,7 +109,8 @@ This does not affect JMeter operation.
 <h3>Listeners</h3>
 <ul>
 <li><bugzilla>54589</bugzilla> - View Results Tree have a lot of Garbage
characters if html page uses double-byte charset</li>
-<li><bugzilla>5473</bugzilla> - StringIndexOutOfBoundsException at SampleResult.getSampleLabel()
if key_on_threadname=false when using Statistical mode</li>
+<li><bugzilla>54753</bugzilla> - StringIndexOutOfBoundsException at SampleResult.getSampleLabel()
if key_on_threadname=false when using Statistical mode</li>
+<li><bugzilla>54865</bugzilla> - ArrayIndexOutOfBoundsException if "sample_variable"
is set in client but not server</li>
 </ul>
 
 <h3>Timers, Assertions, Config, Pre- &amp; Post-Processors</h3>



Mime
View raw message