alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

What this is

This file is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Other links

The source code

// $Header: /home/cvs/jakarta-jmeter/src/protocol/java/org/apache/jmeter/protocol/java/test/SleepTest.java,v 1.11.2.1 2004/04/29 14:44:12 sebb Exp $
/*
 * Copyright 2002-2004 The Apache Software Foundation.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
*/
package org.apache.jmeter.protocol.java.test;

import java.io.Serializable;
import java.util.Iterator;

import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;

/**
 * The SleepTest class is a simple example class for a
 * JMeter Java protocol client.  The class implements the
 * JavaSamplerClient interface.
 * 

* During each sample, this client will sleep for some amount of * time. The amount of time to sleep is determined from the * two parameters SleepTime and SleepMask using the formula: *

 *     totalSleepTime = SleepTime + (System.currentTimeMillis() % SleepMask)
 * 
* Thus, the SleepMask provides a way to add a random component * to the sleep time. * * @author Jeremy Arnold * @version $Revision: 1.11.2.1 $ */ public class SleepTest extends AbstractJavaSamplerClient implements Serializable { /** * The default value of the SleepTime parameter, in milliseconds. */ public static final long DEFAULT_SLEEP_TIME = 1000; /** * The default value of the SleepMask parameter. */ public static final long DEFAULT_SLEEP_MASK = 0x3ff; /** * The base number of milliseconds to sleep during each sample. */ private long sleepTime; /** * A mask to be applied to the current time in order to add a * random component to the sleep time. */ private long sleepMask; /** * Default constructor for SleepTest. * * The Java Sampler uses the default constructor to instantiate * an instance of the client class. */ public SleepTest() { getLogger().debug(whoAmI() + "\tConstruct"); } /** * Do any initialization required by this client. In this case, * initialization consists of getting the values of the SleepTime * and SleepMask parameters. It is generally recommended to do * any initialization such as getting parameter values in the * setupTest method rather than the runTest method in order to * add as little overhead as possible to the test. * * @param context the context to run with. This provides access * to initialization parameters. */ public void setupTest(JavaSamplerContext context) { getLogger().debug(whoAmI() + "\tsetupTest()"); listParameters(context); sleepTime = context.getLongParameter("SleepTime", DEFAULT_SLEEP_TIME); sleepMask = context.getLongParameter("SleepMask", DEFAULT_SLEEP_MASK); } /** * Perform a single sample. In this case, this method will * simply sleep for some amount of time. * Perform a single sample for each iteration. This method * returns a SampleResult object. * SampleResult has many fields which can be * used. At a minimum, the test should use * SampleResult.sampleStart and * SampleResult.sampleEndto set the time that * the test required to execute. It is also a good idea to * set the sampleLabel and the successful flag. * * @see org.apache.jmeter.samplers.SampleResult#sampleStart() * @see org.apache.jmeter.samplers.SampleResult#sampleEnd() * @see org.apache.jmeter.samplers.SampleResult#setSuccessful(boolean) * @see org.apache.jmeter.samplers.SampleResult#setSampleLabel(String) * * @param context the context to run with. This provides access * to initialization parameters. * * @return a SampleResult giving the results of this * sample. */ public SampleResult runTest(JavaSamplerContext context) { SampleResult results = new SampleResult(); try { // Record sample start time. results.sampleStart(); // Generate a random value using the current time. long start = System.currentTimeMillis(); long sleep = getSleepTime() + (start % getSleepMask()); results.setSampleLabel( "Sleep Test: time = " + sleep); // Execute the sample. In this case sleep for the // specified time. Thread.sleep(sleep); results.setSuccessful(true); } catch (InterruptedException e) { getLogger().warn("SleepTest: interrupted."); results.setSuccessful(true); } catch (Exception e) { getLogger().error("SleepTest: error during sample", e); results.setSuccessful(false); } finally { results.sampleEnd(); } if (getLogger().isDebugEnabled()) { getLogger().debug( whoAmI() + "\trunTest()" + "\tTime:\t" + results.getTime()); listParameters(context); } return results; } /** * Do any clean-up required by this test. In this case no * clean-up is necessary, but some messages are logged for * debugging purposes. * * @param context the context to run with. This provides access * to initialization parameters. */ public void teardownTest(JavaSamplerContext context) { getLogger().debug(whoAmI() + "\tteardownTest()"); listParameters(context); } /** * Provide a list of parameters which this test supports. Any * parameter names and associated values returned by this method * will appear in the GUI by default so the user doesn't have * to remember the exact names. The user can add other parameters * which are not listed here. If this method returns null then * no parameters will be listed. If the value for some parameter * is null then that parameter will be listed in the GUI with * an empty value. * * @return a specification of the parameters used by this * test which should be listed in the GUI, or null * if no parameters should be listed. */ public Arguments getDefaultParameters() { Arguments params = new Arguments(); params.addArgument("SleepTime", String.valueOf(DEFAULT_SLEEP_TIME)); params.addArgument( "SleepMask", "0x" + (Long.toHexString(DEFAULT_SLEEP_MASK)).toUpperCase()); return params; } /** * Dump a list of the parameters in this context to the debug log. * * @param context the context which contains the initialization * parameters. */ private void listParameters(JavaSamplerContext context) { if (getLogger().isDebugEnabled()) { Iterator argsIt = context.getParameterNamesIterator(); while (argsIt.hasNext()) { String name = (String) argsIt.next(); getLogger().debug(name + "=" + context.getParameter(name)); } } } /** * Generate a String identifier of this test for debugging * purposes. * * @return a String identifier for this test instance */ private String whoAmI() { StringBuffer sb = new StringBuffer(); sb.append(Thread.currentThread().toString()); sb.append("@"); sb.append(Integer.toHexString(hashCode())); return sb.toString(); } /** * Get the value of the sleepTime field. * * @return the base number of milliseconds to sleep during * each sample. */ private long getSleepTime() { return sleepTime; } /** * Get the value of the sleepMask field. * * @return a mask to be applied to the current time in order * to add a random component to the sleep time. */ private long getSleepMask() { return sleepMask; } }
... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.