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: r1816519 - in /jmeter/trunk: src/components/org/apache/jmeter/control/ src/core/org/apache/jmeter/control/ src/core/org/apache/jmeter/util/ test/src/org/apache/jmeter/control/ xdocs/
Date Tue, 28 Nov 2017 21:24:33 GMT
Hi Felix,
The constante is package protected because it's used in ForEachController.

Regarding your second remark, If you are sure the underlying bytecode is
the same, it 's ok for me, but I read some disturbing thing this morning
about it, but maybe I was not really awaken :-)
But I now remember that you had proved  it in the past by showing bytecode.


Regards


On Tue, Nov 28, 2017 at 9:58 PM, Felix Schumacher <
felix.schumacher@internetallee.de> wrote:

> Am 28.11.2017 um 08:11 schrieb pmouawad@apache.org:
>
>> Author: pmouawad
>> Date: Tue Nov 28 07:11:35 2017
>> New Revision: 1816519
>>
>> URL: http://svn.apache.org/viewvc?rev=1816519&view=rev
>> Log:
>> Bug 61802 - Loop / ForEach Controller should expose a variable for
>> current iteration
>> Bugzilla Id: 61802
>>
>> Modified:
>>      jmeter/trunk/src/components/org/apache/jmeter/control/Forea
>> chController.java
>>      jmeter/trunk/src/core/org/apache/jmeter/control/LoopController.java
>>      jmeter/trunk/src/core/org/apache/jmeter/util/JMeterUtils.java
>>      jmeter/trunk/test/src/org/apache/jmeter/control/TestLoopCon
>> troller.java
>>      jmeter/trunk/xdocs/changes.xml
>>
>> Modified: jmeter/trunk/src/components/org/apache/jmeter/control/Foreac
>> hController.java
>> URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/org
>> /apache/jmeter/control/ForeachController.java?rev=1816519&
>> r1=1816518&r2=1816519&view=diff
>> ============================================================
>> ==================
>> --- jmeter/trunk/src/components/org/apache/jmeter/control/ForeachController.java
>> (original)
>> +++ jmeter/trunk/src/components/org/apache/jmeter/control/ForeachController.java
>> Tue Nov 28 07:11:35 2017
>> @@ -24,7 +24,9 @@ import org.apache.jmeter.samplers.Sample
>>   import org.apache.jmeter.testelement.property.BooleanProperty;
>>   import org.apache.jmeter.testelement.property.StringProperty;
>>   import org.apache.jmeter.threads.JMeterContext;
>> +import org.apache.jmeter.threads.JMeterContextService;
>>   import org.apache.jmeter.threads.JMeterVariables;
>> +import org.apache.jmeter.util.JMeterUtils;
>>   import org.slf4j.Logger;
>>   import org.slf4j.LoggerFactory;
>>   @@ -36,6 +38,7 @@ import org.slf4j.LoggerFactory;
>>    *
>>    */
>>   public class ForeachController extends GenericController implements
>> Serializable {
>> +
>>       private static final Logger log = LoggerFactory.getLogger(Foreac
>> hController.class);
>>         private static final long serialVersionUID = 241L;
>> @@ -195,12 +198,21 @@ public class ForeachController extends G
>>       // Prevent entry if nothing to do
>>       @Override
>>       public Sampler next() {
>> -        if (emptyList()) {
>> -            reInitialize();
>> -            resetLoopCount();
>> -            return null;
>> +        try {
>> +            if (emptyList()) {
>> +                reInitialize();
>> +                resetLoopCount();
>> +                return null;
>> +            }
>> +            return super.next();
>> +        } finally {
>> +            JMeterVariables variables = JMeterContextService.getContex
>> t().getVariables();
>> +            if(variables != null) {
>> +                variables.putObject(
>> +                    JMeterUtils.formatJMeterExportedVariableName(
>> +                            getName()+LoopController.INDEX_VAR_NAME_SUFFIX),
>> loopCount);
>> +            }
>>           }
>> -        return super.next();
>>       }
>>         /**
>>
>> Modified: jmeter/trunk/src/core/org/apache/jmeter/control/LoopControll
>> er.java
>> URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apach
>> e/jmeter/control/LoopController.java?rev=1816519&r1=1816518&
>> r2=1816519&view=diff
>> ============================================================
>> ==================
>> --- jmeter/trunk/src/core/org/apache/jmeter/control/LoopController.java
>> (original)
>> +++ jmeter/trunk/src/core/org/apache/jmeter/control/LoopController.java
>> Tue Nov 28 07:11:35 2017
>> @@ -25,12 +25,16 @@ import org.apache.jmeter.testelement.pro
>>   import org.apache.jmeter.testelement.property.IntegerProperty;
>>   import org.apache.jmeter.testelement.property.JMeterProperty;
>>   import org.apache.jmeter.testelement.property.StringProperty;
>> +import org.apache.jmeter.threads.JMeterContextService;
>> +import org.apache.jmeter.threads.JMeterVariables;
>> +import org.apache.jmeter.util.JMeterUtils;
>>     /**
>>    * Class that implements the Loop Controller, ie iterate infinitely or
>> a configured number of times
>>    */
>>   public class LoopController extends GenericController implements
>> Serializable {
>> -
>> +    static final String INDEX_VAR_NAME_SUFFIX = "__idx";
>>
> Should this be private?
>
>
> +
>>       public static final int INFINITE_LOOP_COUNT = -1; // $NON-NLS-1$
>>             public static final String LOOPS = "LoopController.loops"; //
>> $NON-NLS-1$
>> @@ -114,15 +118,23 @@ public class LoopController extends Gene
>>        */
>>       @Override
>>       public Sampler next() {
>> -        if(endOfLoop()) {
>> -            if (!getContinueForever()) {
>> -                setDone(true);
>> +        try {
>> +            if(endOfLoop()) {
>> +                if (!getContinueForever()) {
>> +                    setDone(true);
>> +                }
>> +                return null;
>> +            }
>> +            return super.next();
>> +        } finally {
>> +            JMeterVariables variables = JMeterContextService.getContex
>> t().getVariables();
>> +            if(variables != null) {
>> +                variables.putObject(
>> +                        JMeterUtils.formatJMeterExport
>> edVariableName(getName()+INDEX_VAR_NAME_SUFFIX), loopCount);
>>               }
>> -            return null;
>>           }
>> -        return super.next();
>>       }
>> -
>> +
>>       private boolean endOfLoop() {
>>           final int loops = getLoops();
>>           return (loops > INFINITE_LOOP_COUNT) && (loopCount >= loops);
>>
>> Modified: jmeter/trunk/src/core/org/apache/jmeter/util/JMeterUtils.java
>> URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apach
>> e/jmeter/util/JMeterUtils.java?rev=1816519&r1=1816518&
>> r2=1816519&view=diff
>> ============================================================
>> ==================
>> --- jmeter/trunk/src/core/org/apache/jmeter/util/JMeterUtils.java
>> (original)
>> +++ jmeter/trunk/src/core/org/apache/jmeter/util/JMeterUtils.java Tue
>> Nov 28 07:11:35 2017
>> @@ -79,7 +79,7 @@ import com.thoughtworks.xstream.security
>>    */
>>   public class JMeterUtils implements UnitTestManager {
>>       private static final Logger log = LoggerFactory.getLogger(JMeter
>> Utils.class);
>> -
>> +    private static final String JMETER_VARS_PREFIX = "__jm__";
>>       // Note: cannot use a static variable here, because that would be
>> processed before the JMeter properties
>>       // have been defined (Bug 52783)
>>       private static class LazyPatternCacheHolder {
>> @@ -1261,4 +1261,16 @@ public class JMeterUtils implements Unit
>>           // TODO : How much are we concerned by CVE-2013-7285
>>           xstream.addPermission(AnyTypePermission.ANY);
>>       }
>> +
>> +    /**
>> +     * @param elementName String elementName
>> +     * @return variable name for index following JMeter convention
>> +     */
>> +    public static String formatJMeterExportedVariableName(String
>> elementName) {
>> +        StringBuilder builder = new StringBuilder(
>> +                JMETER_VARS_PREFIX.length()+elementName.length());
>> +        return builder.append(JMETER_VARS_PREFIX)
>> +                .append(elementName)
>> +                .toString();
>>
>
> a "return JMETER_VARS_PREFIX + elementName;" is probably more readable and
> should result in some equivalent bytecode.
>
> Regards,
>  Felix
>
>
> +    }
>>   }
>>
>> Modified: jmeter/trunk/test/src/org/apache/jmeter/control/TestLoopCont
>> roller.java
>> URL: http://svn.apache.org/viewvc/jmeter/trunk/test/src/org/apach
>> e/jmeter/control/TestLoopController.java?rev=1816519&r1=
>> 1816518&r2=1816519&view=diff
>> ============================================================
>> ==================
>> --- jmeter/trunk/test/src/org/apache/jmeter/control/TestLoopController.java
>> (original)
>> +++ jmeter/trunk/test/src/org/apache/jmeter/control/TestLoopController.java
>> Tue Nov 28 07:11:35 2017
>> @@ -36,12 +36,17 @@ import org.apache.jmeter.testelement.pro
>>   import org.apache.jmeter.threads.JMeterContext;
>>   import org.apache.jmeter.threads.JMeterContextService;
>>   import org.apache.jmeter.threads.JMeterVariables;
>> +import org.apache.jmeter.util.JMeterUtils;
>>   import org.junit.Test;
>>     public class TestLoopController extends JMeterTestCase {
>>             @Test
>>           public void testProcessing() throws Exception {
>> +            JMeterContext jmctx = JMeterContextService.getContext();
>> +            JMeterVariables variables = new JMeterVariables();
>> +            jmctx.setVariables(variables);
>> +
>>               GenericController controller = new GenericController();
>>               GenericController sub_1 = new GenericController();
>>               sub_1.addTestElement(new TestSampler("one"));
>> @@ -49,6 +54,8 @@ public class TestLoopController extends
>>               controller.addTestElement(sub_1);
>>               controller.addTestElement(new TestSampler("three"));
>>               LoopController sub_2 = new LoopController();
>> +            String lcName = "LC";
>> +            sub_2.setName(lcName);
>>               sub_2.setLoops(3);
>>               GenericController sub_3 = new GenericController();
>>               sub_2.addTestElement(new TestSampler("four"));
>> @@ -65,41 +72,72 @@ public class TestLoopController extends
>>               sub_2.setRunningVersion(true);
>>               sub_3.setRunningVersion(true);
>>               controller.initialize();
>> +            int loopControl = 0;
>>               for (int i = 0; i < 2; i++) {
>> +                loopControl = 0;
>>                   assertEquals(15, counter);
>>                   counter = 0;
>>                   TestElement sampler = null;
>>                   while ((sampler = controller.next()) != null) {
>>                       assertEquals(order[counter++], sampler.getName());
>> +                    if("four".equals(sampler.getName())) {
>> +                        Integer value = (Integer) variables.getObject(
>> +                                JMeterUtils.formatJMeterExport
>> edVariableName(lcName+LoopController.INDEX_VAR_NAME_SUFFIX));
>> +                        assertNotNull(value);
>> +                        assertEquals(Integer.valueOf(loopControl++),
>> value);
>> +                    }
>>                   }
>> +
>>               }
>> +
>>           }
>>             @Test
>>           public void testLoopZeroTimes() throws Exception {
>> +            JMeterContext jmctx = JMeterContextService.getContext();
>> +            JMeterVariables variables = new JMeterVariables();
>> +            jmctx.setVariables(variables);
>> +
>>               LoopController loop = new LoopController();
>> +            String lcName = "LC";
>> +            loop.setName(lcName);
>>               loop.setLoops(0);
>>               loop.addTestElement(new TestSampler("never run"));
>>               loop.initialize();
>>               assertNull(loop.next());
>> +            Integer value = (Integer) variables.getObject(
>> +                    JMeterUtils.formatJMeterExportedVariableName(lcName+
>> LoopController.INDEX_VAR_NAME_SUFFIX));
>> +            assertNotNull(value);
>> +            assertEquals(Integer.valueOf(0), value);
>>           }
>>             @Test
>>           public void testInfiniteLoop() throws Exception {
>> +            JMeterContext jmctx = JMeterContextService.getContext();
>>               LoopController loop = new LoopController();
>> +            String lcName = "LC";
>> +            loop.setName(lcName);
>>               loop.setLoops(LoopController.INFINITE_LOOP_COUNT);
>>               loop.addTestElement(new TestSampler("never run"));
>> +            JMeterVariables variables = new JMeterVariables();
>> +            jmctx.setVariables(variables);
>>               loop.setRunningVersion(true);
>>               loop.initialize();
>>               for (int i = 0; i < 42; i++) {
>>                   assertNotNull(loop.next());
>> +                Integer value = (Integer) variables.getObject(
>> +                        JMeterUtils.formatJMeterExport
>> edVariableName(lcName+LoopController.INDEX_VAR_NAME_SUFFIX));
>> +                assertNotNull(value);
>> +                assertEquals(Integer.valueOf(i), value);
>>               }
>>           }
>>                         @Test
>>           public void testBug54467() throws Exception {
>>               JMeterContext jmctx = JMeterContextService.getContext();
>> +            String lcName = "LC";
>>               LoopController loop = new LoopController();
>> +            loop.setName(lcName);
>>               Map<String, String> variables = new HashMap<>();
>>               ReplaceStringWithFunctions transformer = new
>> ReplaceStringWithFunctions(new CompoundVariable(), variables);
>>               jmctx.setVariables(new JMeterVariables());
>> @@ -116,6 +154,10 @@ public class TestLoopController extends
>>               for (int i = 0; i < loops; i++) {
>>                   Sampler s = loop.next();
>>                   assertNotNull(s);
>> +                Integer value = (Integer) jmctx.getVariables().getObject
>> (
>> +                        JMeterUtils.formatJMeterExport
>> edVariableName(lcName+LoopController.INDEX_VAR_NAME_SUFFIX));
>> +                assertNotNull(value);
>> +                assertEquals(Integer.valueOf(i), value);
>>               }
>>               assertNull(loop.next());
>>           }
>>
>> Modified: jmeter/trunk/xdocs/changes.xml
>> URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?
>> rev=1816519&r1=1816518&r2=1816519&view=diff
>> ============================================================
>> ==================
>> --- jmeter/trunk/xdocs/changes.xml [utf-8] (original)
>> +++ jmeter/trunk/xdocs/changes.xml [utf-8] Tue Nov 28 07:11:35 2017
>> @@ -172,6 +172,7 @@ Summary
>>       <li><bug>61640</bug>JSR223 Test Elements : Enable by default
>> caching. Contributed by Ubik Load Pack (support at ubikloadpack.com)</li>
>>       <li><bug>61785</bug>Add <menuchoice><guimenuitem>Help<
>> /guimenuitem><guimenuitem>Useful links</guimenuitem></menuchoice>
to
>> create issues and download nightly build</li>
>>       <li><bug>61808</bug>Fix main frame position. Implemented
by Artem
>> Fedorov (artem at blazemeter.com) and contributed by BlazeMeter Ltd.</li>
>> +    <li><bug>61802</bug>Loop / ForEach Controller should expose
a
>> variable for current iteration. Contributed by Ubik Load Pack (support at
>> ubikloadpack.com)</li>
>>   </ul>
>>     <ch_section>Non-functional changes</ch_section>
>>
>>
>>
>


-- 
Cordialement.
Philippe Mouawad.

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