diff --git a/bin/upgrade.properties b/bin/upgrade.properties index 2e77556112..fd7d9f5d28 100644 --- a/bin/upgrade.properties +++ b/bin/upgrade.properties @@ -1,4 +1,17 @@ +# Class, property and value upgrade equivalences. +# +# Format is as follows -- +# for renamed test element & GUI classes: +# old.class.Name=new.class.Name +# for renamed properties: +# old.class.Name/Old.propertyName=newPropertyName +# for renamed values: +# old.class.Name.old.propertyName/oldValue=newValue +# org.apache.jmeter.protocol.http.config.gui.UrlConfigGui=org.apache.jmeter.protocol.http.config.gui.HttpDefaultsGui org.apache.jmeter.assertions.Assertion=org.apache.jmeter.assertions.ResponseAssertion org.apache.jmeter.protocol.http.sampler.HTTPSamplerFull=org.apache.jmeter.protocol.http.sampler.HTTPSampler -org.apache.jmeter.control.gui.RecordController=org.apache.jmeter.protocol.http.control.gui.RecordController \ No newline at end of file +org.apache.jmeter.control.gui.RecordController=org.apache.jmeter.protocol.http.control.gui.RecordController + +org.apache.jmeter.timers.gui.ConstantThroughputTimerGui=org.apache.jmeter.testbeans.gui.TestBeanGUI +org.apache.jmeter.timers.ConstantThroughputTimer/ConstantThroughputTimer.throughput=throughput \ No newline at end of file diff --git a/src/components/org/apache/jmeter/timers/ConstantThroughputTimer.java b/src/components/org/apache/jmeter/timers/ConstantThroughputTimer.java index 42a71c8cf0..9a1f35d661 100644 --- a/src/components/org/apache/jmeter/timers/ConstantThroughputTimer.java +++ b/src/components/org/apache/jmeter/timers/ConstantThroughputTimer.java @@ -54,10 +54,12 @@ */ package org.apache.jmeter.timers; -import java.io.Serializable; - -import org.apache.jmeter.testelement.AbstractTestElement; +import org.apache.jmeter.engine.event.LoopIterationEvent; +import org.apache.jmeter.testbeans.TestBean; +import org.apache.jmeter.testelement.TestListener; import org.apache.jmeter.util.JMeterUtils; +import org.apache.jorphan.logging.LoggingManager; +import org.apache.log.Logger; /** * This class implements a constant throughput timer. A Constant Throughtput @@ -69,11 +71,11 @@ import org.apache.jmeter.util.JMeterUtils; * @version $Id$ */ public class ConstantThroughputTimer - extends AbstractTestElement - implements Timer, Serializable + extends TestBean + implements Timer, TestListener { - public final static String THROUGHPUT= "ConstantThroughputTimer.throughput"; - + protected static final Logger log = LoggingManager.getLoggerForClass(); + /** * Target time for the start of the next request. The delay provided by * the timer will be calculated so that the next request happens at this @@ -81,6 +83,11 @@ public class ConstantThroughputTimer */ private long targetTime= 0; + /** + * Desired throughput, in samples per minute. + */ + private double throughput; + /** * Constructor for a non-configured ConstantThroughputTimer. */ @@ -93,39 +100,9 @@ public class ConstantThroughputTimer * * @param throughput Desired sampling rate, in samples per minute. */ - public void setThroughput(String throughput) + public void setThroughput(double throughput) { - setProperty(THROUGHPUT,throughput); - } - - /** - * Not implemented. - */ - public void setRange(double range) - { - } - - /** - * Not implemented. - */ - public double getRange() - { - return (double)0; - } - - /** - * Not implemented. - */ - public void setDelay(String delay) - { - } - - /** - * Not implemented. - */ - public String getDelay() - { - return ""; + this.throughput= throughput; } /** @@ -133,16 +110,11 @@ public class ConstantThroughputTimer * * @return the rate at which samples should occur, in samples per minute. */ - public long getThroughput() + public double getThroughput() { - return getPropertyAsLong(THROUGHPUT); + return throughput; } - public String getThroughputString() - { - return getPropertyAsString(THROUGHPUT); - } - /** * Retrieve the delay to use during test execution. * @@ -150,9 +122,11 @@ public class ConstantThroughputTimer */ public synchronized long delay() { + prepare(); + long currentTime = System.currentTimeMillis(); long currentTarget = targetTime == 0 ? currentTime : targetTime; - targetTime = currentTarget + 60000 / getThroughput(); + targetTime = currentTarget + (long)( 60000.0 / getThroughput() ); if (currentTime > currentTarget) { // We're behind schedule -- try to catch up: @@ -172,17 +146,41 @@ public class ConstantThroughputTimer } /** - * Creates a copy of this ConstantThroughputTimer, ready to start - * calculating delays for new samples. This is in assumption that cloning - * always happens just before a test starts running. - * - * @return a fresh copy of this ConstantThroughputTimer + * Get the timer ready to compute delays for a new test. + * + * @see org.apache.jmeter.testelement.TestListener#testStarted() */ - public Object clone() + public void testStarted() { - ConstantThroughputTimer result = - (ConstantThroughputTimer) super.clone(); - result.targetTime = 0; - return result; + log.debug("Test started - reset throughput calculation."); + targetTime= 0; } -} + + /* (non-Javadoc) + * @see org.apache.jmeter.testelement.TestListener#testEnded() + */ + public void testEnded() + { + } + + /* (non-Javadoc) + * @see org.apache.jmeter.testelement.TestListener#testStarted(java.lang.String) + */ + public void testStarted(String host) + { + } + + /* (non-Javadoc) + * @see org.apache.jmeter.testelement.TestListener#testEnded(java.lang.String) + */ + public void testEnded(String host) + { + } + + /* (non-Javadoc) + * @see org.apache.jmeter.testelement.TestListener#testIterationStart(org.apache.jmeter.engine.event.LoopIterationEvent) + */ + public void testIterationStart(LoopIterationEvent event) + { + } +} \ No newline at end of file diff --git a/src/components/org/apache/jmeter/timers/ConstantThroughputTimerBeanInfo.java b/src/components/org/apache/jmeter/timers/ConstantThroughputTimerBeanInfo.java new file mode 100644 index 0000000000..401c730d36 --- /dev/null +++ b/src/components/org/apache/jmeter/timers/ConstantThroughputTimerBeanInfo.java @@ -0,0 +1,76 @@ +/* + * ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2004 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache JMeter" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache JMeter", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + * + * @author Jordi Salvat i Alabart + * @version $Id$ + */ +package org.apache.jmeter.timers; + +import java.beans.PropertyDescriptor; + +import org.apache.jmeter.testbeans.gui.BeanInfoSupport; + +public class ConstantThroughputTimerBeanInfo extends BeanInfoSupport +{ + public ConstantThroughputTimerBeanInfo() + { + super(ConstantThroughputTimer.class); + + createPropertyGroup("delay", new String[] { "throughput" }); + + PropertyDescriptor p= property("throughput"); + p.setValue(NOT_UNDEFINED, Boolean.TRUE); + p.setValue(DEFAULT, new Double(0.0)); + } +} \ No newline at end of file diff --git a/src/components/org/apache/jmeter/timers/ConstantThroughputTimerResources.properties b/src/components/org/apache/jmeter/timers/ConstantThroughputTimerResources.properties new file mode 100644 index 0000000000..0e960e6232 --- /dev/null +++ b/src/components/org/apache/jmeter/timers/ConstantThroughputTimerResources.properties @@ -0,0 +1,4 @@ +displayName=Constant Throughput Timer +delay.displayName=Delay before each affected sampler +throughput.displayName=Throughput (samples per minute) +throughput.shortDescription=Maximum number of samples per minute you want to obtain per thread from all affected samplers. diff --git a/src/components/org/apache/jmeter/timers/gui/ConstantThroughputTimerGui.java b/src/components/org/apache/jmeter/timers/gui/ConstantThroughputTimerGui.java deleted file mode 100644 index d168f4e88b..0000000000 --- a/src/components/org/apache/jmeter/timers/gui/ConstantThroughputTimerGui.java +++ /dev/null @@ -1,164 +0,0 @@ -/* - * ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2002,2003 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache JMeter" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache JMeter", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -package org.apache.jmeter.timers.gui; - -import javax.swing.Box; -import javax.swing.JLabel; -import javax.swing.JTextField; - -import org.apache.jmeter.testelement.TestElement; -import org.apache.jmeter.timers.ConstantThroughputTimer; -import org.apache.jmeter.util.JMeterUtils; -import org.apache.jorphan.gui.layout.VerticalLayout; - -/** - * GUI for the Constant Throughput Timer. - * - * @author Jordi Salvat i Alabart - * @author Scott Eade - * @version $Id$ - */ -public class ConstantThroughputTimerGui extends AbstractTimerGui -{ - private static final String DEFAULT_THROUGHPUT = "60"; - private static final String THROUGHPUT_FIELD = "Throughput Field"; - - private JTextField throughputField; - - /** - * Constructor for an initialized but unconfigured - * ConstantThroughputTimerGui. - */ - public ConstantThroughputTimerGui() - { - init(); - } - - /** - * Get the title to display for this component. - * - * @see org.apache.jmeter.gui.JMeterGUIComponent#getStaticLabel() - */ - public String getStaticLabel() - { - return JMeterUtils.getResString("constant_throughput_timer_title"); - } - - /** - * Create the test element underlying this GUI component. - * - * @see org.apache.jmeter.gui.JMeterGUIComponent#createTestElement() - */ - public TestElement createTestElement() - { - ConstantThroughputTimer timer = new ConstantThroughputTimer(); - modifyTestElement(timer); - return timer; - } - - /** - * Modifies a given TestElement to mirror the data in the gui components. - * @see org.apache.jmeter.gui.JMeterGUIComponent#modifyTestElement(TestElement) - */ - public void modifyTestElement(TestElement timer) - { - this.configureTestElement(timer); - ((ConstantThroughputTimer) timer).setThroughput(throughputField.getText()); - } - - /** - * Configure this GUI component from the underlying TestElement. - * - * @see org.apache.jmeter.gui.JMeterGUIComponent#configure(TestElement) - */ - public void configure(TestElement el) - { - super.configure(el); - ConstantThroughputTimer e = (ConstantThroughputTimer) el; - throughputField.setText(e.getThroughputString()); - } - - /** - * Initializes this GUI component. Creates and lays out all GUI elements. - */ - private void init() - { - setLayout(new VerticalLayout(5, VerticalLayout.LEFT, VerticalLayout.TOP)); - - setBorder(makeBorder()); - setLayout(new VerticalLayout(5, VerticalLayout.LEFT)); - - add(makeTitlePanel()); - - Box throughputPanel = Box.createHorizontalBox(); - throughputPanel.add(new JLabel(JMeterUtils.getResString("constant_throughput_timer_throughput"))); - - throughputField = new JTextField(6); - throughputField.setText(DEFAULT_THROUGHPUT); - throughputField.setName(THROUGHPUT_FIELD); - throughputPanel.add(throughputField); - - add(throughputPanel); - } - /* (non-Javadoc) - * @see org.apache.jmeter.gui.JMeterGUIComponent#clear() - */ - public void clear() - { - throughputField.setText(DEFAULT_THROUGHPUT); - super.clear(); - } -}