On 29 March 2013 21:26, Philippe Mouawad <[email protected]> wrote:
> Hello sebb, > I have a question about this , see below. > > Regards > Philippe > > On Thu, Mar 28, 2013 at 2:12 AM, <[email protected]> wrote: > > > 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(); > > + > > > I don't understand the logic behind this. Won't this method be called by > static initializer ? > Why calling it here ? > > Because it needs to be called at the start of each test - the value may change between client invocations. E.g. if the client is re-run without restarting the server. The call to the method in the static block is wrong (it was a temp test) > > 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(); > Oops - that was a debug test - should have been removed. > > + } > > > > + /** > > + * 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> > > > > > > > > > -- > Cordialement. > Philippe Mouawad. >
