/* * -----------------------------------------------------------------------\ * PerfCake *   * Copyright (C) 2010 - 2016 the original author or authors. *   * 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.perfcake.common; import org.perfcake.RunInfo; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.testng.Assert; import org.testng.annotations.Test; /** * Tests the {@link org.perfcake.RunInfo} conditions. * * @author <a href="mailto:marvenec@gmail.com">Martin Večeřa</a> */ @Test(groups = { "unit" }) public class RunInfoTest { private static final Logger log = LogManager.getLogger(RunInfoTest.class); @Test public void runInfoIterationBasedState() throws InterruptedException { final Period p = new Period(PeriodType.ITERATION, 100); final RunInfo ri = new RunInfo(p); Assert.assertEquals(ri.getDuration(), p); log.info("NEW " + ri); Assert.assertEquals(ri.getStartTime(), -1); Assert.assertEquals(ri.getEndTime(), -1); Assert.assertEquals(ri.getIteration(), -1); Assert.assertFalse(ri.isStarted()); Assert.assertFalse(ri.isRunning()); Assert.assertEquals(ri.getPercentage(), 0d); ri.start(); log.info("START 0 " + ri); long startTime = ri.getStartTime(); Assert.assertTrue(startTime > 0); Assert.assertEquals(ri.getEndTime(), -1); Assert.assertEquals(ri.getIteration(), -1); Assert.assertTrue(ri.isStarted()); Assert.assertTrue(ri.isRunning()); Assert.assertEquals(ri.getPercentage(), 0d); ri.getNextIteration(); log.info("START 1 " + ri); Assert.assertEquals(ri.getStartTime(), startTime); Assert.assertEquals(ri.getEndTime(), -1); Assert.assertEquals(ri.getIteration(), 0); Assert.assertTrue(ri.isStarted()); Assert.assertTrue(ri.isRunning()); Assert.assertEquals(ri.getPercentage(), 1d); for (int i = 0; i < 20; i++) { ri.getNextIteration(); } log.info("START 20 " + ri); Assert.assertEquals(ri.getStartTime(), startTime); Assert.assertEquals(ri.getEndTime(), -1); Assert.assertEquals(ri.getIteration(), 20); Assert.assertTrue(ri.isStarted()); Assert.assertTrue(ri.isRunning()); Assert.assertEquals(ri.getPercentage(), 21d); Thread.sleep(10); // make sure the startTime will be different after reset ri.reset(); log.info("RESET " + ri); Assert.assertNotEquals(ri.getStartTime(), startTime); startTime = ri.getStartTime(); Assert.assertEquals(ri.getEndTime(), -1); Assert.assertEquals(ri.getIteration(), -1); Assert.assertTrue(ri.isStarted()); Assert.assertTrue(ri.isRunning()); Assert.assertEquals(ri.getPercentage(), 0d); for (int i = 0; i < 50; i++) { ri.getNextIteration(); } log.info("START 50 " + ri); Assert.assertEquals(ri.getStartTime(), startTime); Assert.assertEquals(ri.getEndTime(), -1); Assert.assertEquals(ri.getIteration(), 49); Assert.assertTrue(ri.isStarted()); Assert.assertTrue(ri.isRunning()); Assert.assertEquals(ri.getPercentage(), 50d); for (int i = 0; i < 50; i++) { ri.getNextIteration(); } log.info("START 100 " + ri); Assert.assertEquals(ri.getStartTime(), startTime); Assert.assertEquals(ri.getEndTime(), -1); Assert.assertEquals(ri.getIteration(), 99); Assert.assertTrue(ri.isStarted()); Assert.assertFalse(ri.isRunning()); Assert.assertEquals(ri.getPercentage(), 100d); ri.getNextIteration(); log.info("START 101 " + ri); Assert.assertEquals(ri.getStartTime(), startTime); Assert.assertEquals(ri.getEndTime(), -1); Assert.assertEquals(ri.getIteration(), 100); Assert.assertTrue(ri.isStarted()); Assert.assertFalse(ri.isRunning()); Assert.assertEquals(ri.getPercentage(), 100d); Thread.sleep(10); ri.stop(); log.info("STOP " + ri); Assert.assertEquals(ri.getStartTime(), startTime); Assert.assertTrue(ri.getEndTime() > startTime); Assert.assertEquals(ri.getIteration(), 100); Assert.assertFalse(ri.isStarted()); Assert.assertFalse(ri.isRunning()); Assert.assertEquals(ri.getPercentage(), 100d); // after stop, we cannot get over 100 } @Test public void runInfoTimeBasedState() throws InterruptedException { final Period p = new Period(PeriodType.TIME, 3000); final RunInfo ri = new RunInfo(p); Assert.assertEquals(ri.getDuration(), p); log.info("NEW " + ri); Assert.assertEquals(ri.getStartTime(), -1); Assert.assertEquals(ri.getEndTime(), -1); Assert.assertEquals(ri.getIteration(), -1); Assert.assertFalse(ri.isStarted()); Assert.assertFalse(ri.isRunning()); Assert.assertTrue(ri.getPercentage() < 10d); ri.start(); log.info("START 0 " + ri); long startTime = ri.getStartTime(); Assert.assertTrue(startTime > 0); Assert.assertEquals(ri.getEndTime(), -1); Assert.assertEquals(ri.getIteration(), -1); Assert.assertTrue(ri.isStarted()); Assert.assertTrue(ri.isRunning()); Assert.assertTrue(ri.getPercentage() < 50d); ri.getNextIteration(); log.info("START 1 " + ri); Assert.assertEquals(ri.getStartTime(), startTime); Assert.assertEquals(ri.getEndTime(), -1); Assert.assertEquals(ri.getIteration(), 0); Assert.assertTrue(ri.isStarted()); Assert.assertTrue(ri.isRunning()); Assert.assertTrue(ri.getPercentage() < 50d); for (int i = 0; i < 20; i++) { ri.getNextIteration(); } log.info("START 20 " + ri); Assert.assertEquals(ri.getStartTime(), startTime); Assert.assertEquals(ri.getEndTime(), -1); Assert.assertEquals(ri.getIteration(), 20); Assert.assertTrue(ri.isStarted()); Assert.assertTrue(ri.isRunning()); Assert.assertTrue(ri.getPercentage() < 50d); Thread.sleep(10); // make sure the startTime will be different after reset ri.reset(); log.info("RESET " + ri); Assert.assertNotEquals(ri.getStartTime(), startTime); startTime = ri.getStartTime(); Assert.assertEquals(ri.getEndTime(), -1); Assert.assertEquals(ri.getIteration(), -1); Assert.assertTrue(ri.isStarted()); Assert.assertTrue(ri.isRunning()); Assert.assertTrue(ri.getPercentage() < 10d); // we should be at the very beginning for (int i = 0; i < 50; i++) { ri.getNextIteration(); } log.info("START 50 " + ri); Assert.assertEquals(ri.getStartTime(), startTime); Assert.assertEquals(ri.getEndTime(), -1); Assert.assertEquals(ri.getIteration(), 49); Assert.assertTrue(ri.isStarted()); Assert.assertTrue(ri.isRunning()); Assert.assertTrue(ri.getPercentage() < 50d); // we should not be that far for (int i = 0; i < 50; i++) { ri.getNextIteration(); } log.info("START 100 " + ri); Assert.assertEquals(ri.getStartTime(), startTime); Assert.assertEquals(ri.getEndTime(), -1); Assert.assertEquals(ri.getIteration(), 99); Assert.assertTrue(ri.isStarted()); Assert.assertTrue(ri.isRunning()); Assert.assertTrue(ri.getPercentage() < 50d); // we should not be that far Thread.sleep(3000); // wait to reach 100% ri.getNextIteration(); log.info("START 101 " + ri); Assert.assertEquals(ri.getStartTime(), startTime); Assert.assertEquals(ri.getEndTime(), -1); Assert.assertEquals(ri.getIteration(), 100); Assert.assertTrue(ri.isStarted()); Assert.assertFalse(ri.isRunning()); Assert.assertEquals(ri.getPercentage(), 100d); // we cannot get over 100 ri.stop(); log.info("STOP " + ri); Assert.assertEquals(ri.getStartTime(), startTime); Assert.assertTrue(ri.getEndTime() > startTime); Assert.assertEquals(ri.getIteration(), 100); Assert.assertFalse(ri.isStarted()); Assert.assertFalse(ri.isRunning()); Assert.assertEquals(ri.getPercentage(), 100d); // we cannot get over 100 } }