jmeter-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Felix Schumacher <felix.schumac...@internetallee.de>
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 Wed, 29 Nov 2017 05:31:02 GMT


Am 28. November 2017 22:24:33 MEZ schrieb Philippe Mouawad <philippe.mouawad@gmail.com>:
>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.

You could always look at the bytecode yourself. :) 

Felix 

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

Mime
View raw message