jmeter-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Philippe Mouawad <philippe.moua...@gmail.com>
Subject Re: svn commit: r1461911 - in /jmeter/trunk: ./ bin/testfiles/ src/core/org/apache/jmeter/engine/ src/core/org/apache/jmeter/samplers/ xdocs/
Date Fri, 29 Mar 2013 21:26:29 GMT
Hello sebb,
I have a question about this , see below.

Regards
Philippe

On Thu, Mar 28, 2013 at 2:12 AM, <sebb@apache.org> 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,&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();
> +
>
I don't understand the logic behind this. Won't this method be called by
static initializer ?
Why calling it here ?

>          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>
>
>
>


-- 
Cordialement.
Philippe Mouawad.

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message