jmeter-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sebb <seb...@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 23:57:31 GMT
On 29 March 2013 21:26, Philippe Mouawad <philippe.mouawad@gmail.com> wrote:

> 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 ?
>
>
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- &amp; Post-Processors</h3>
> >
> >
> >
>
>
> --
> Cordialement.
> Philippe Mouawad.
>

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