package com.blazemeter.jmeter.threads.arrivals;
import com.blazemeter.jmeter.threads.AbstractDynamicThreadGroup;
import kg.apc.emulators.TestJMeterUtils;
import org.apache.jmeter.sampler.TestAction;
import org.apache.jorphan.collections.ListedHashTree;
import org.junit.BeforeClass;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class ArrivalsThreadGroupTest {
@BeforeClass
public static void setUpClass() throws Exception {
TestJMeterUtils.createJmeterEnv();
}
public static ListedHashTree getListedHashTree(AbstractDynamicThreadGroup atg, boolean stopThread) {
ListedHashTree tree = new ListedHashTree();
TestAction pauser = new TestAction();
if (stopThread) {
pauser.setAction(TestAction.STOP);
} else {
pauser.setAction(TestAction.PAUSE);
}
pauser.setTarget(TestAction.THREAD);
pauser.setDuration(String.valueOf(300));
tree.add(atg, pauser);
return tree;
}
@Test
public void testFlow() throws IOException {
File f = File.createTempFile("arrivalsLog-", ".jtl");
f.deleteOnExit();
ArrivalsThreadGroupEmul atg = new ArrivalsThreadGroupEmul();
atg.setName("TEST");
atg.setLogFilename(f.getAbsolutePath());
atg.setTargetLevel("10");
atg.setRampUp("5");
atg.setHold("5");
atg.setConcurrencyLimit("3");
atg.setArrivalsLimit("20");
atg.testStarted();
atg.start(0, null, getListedHashTree(atg, false), null);
atg.waitThreadsStopped();
atg.testEnded();
atg.tellThreadsToStop();
atg.verifyThreadsStopped();
assertTrue(2000 < f.length());
assertEquals(20, atg.getArrivalsDone());
}
@Test
public void testFlowStepping() throws IOException {
File f = File.createTempFile("arrivalsLog-", ".jtl");
f.deleteOnExit();
ArrivalsThreadGroupEmul atg = new ArrivalsThreadGroupEmul();
atg.setName("TEST");
atg.setLogFilename(f.getAbsolutePath());
atg.setTargetLevel("10");
atg.setSteps("5");
atg.setRampUp("5");
atg.setHold("5");
atg.setConcurrencyLimit("3");
atg.setArrivalsLimit("20");
atg.testStarted();
atg.start(0, null, getListedHashTree(atg, false), null);
atg.waitThreadsStopped();
atg.testEnded();
atg.tellThreadsToStop();
atg.verifyThreadsStopped();
assertEquals(20, atg.getArrivalsDone());
assertTrue(2000 < f.length());
}
@Test
public void testBlankUI() throws IOException {
ArrivalsThreadGroup atg = new ArrivalsThreadGroupEmul();
atg.setName("TEST");
atg.setLogFilename("");
atg.setConcurrencyLimit("");
atg.setArrivalsLimit("10");
atg.testStarted();
atg.start(0, null, getListedHashTree(atg, false), null);
atg.waitThreadsStopped();
atg.testEnded();
atg.tellThreadsToStop();
atg.verifyThreadsStopped();
}
@Test
public void testFlow_stopThread() throws IOException {
ArrivalsThreadGroupEmul atg = new ArrivalsThreadGroupEmul();
atg.setName("TEST");
atg.setTargetLevel("2");
atg.setHold("5");
atg.testStarted();
atg.start(0, null, getListedHashTree(atg, true), null);
atg.waitThreadsStopped();
atg.testEnded();
atg.tellThreadsToStop();
atg.verifyThreadsStopped();
assertEquals(10, atg.getArrivalsDone());
}
@Test
public void testFlowRefael() throws IOException {
ArrivalsThreadGroup atg = new ArrivalsThreadGroupEmul();
atg.setName("TEST");
atg.setTargetLevel("1");
atg.setRampUp("1");
atg.setSteps("5");
atg.setHold("180");
atg.setConcurrencyLimit("1000");
atg.setArrivalsLimit("20");
atg.testStarted();
atg.start(0, null, getListedHashTree(atg, true), null);
atg.waitThreadsStopped();
atg.testEnded();
atg.tellThreadsToStop();
atg.verifyThreadsStopped();
}
}