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,'undef')}
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- & Post-Processors</h3>
|