/* * $Id: AbstractMultiTestWithDuration.java 9840 2012-10-01 20:33:28Z another $ * * This file is part of the MoSKito software project * that is hosted at http://moskito.dev.java.net. * * All MoSKito files are distributed under MIT License: * * Copyright (c) 2006 The MoSKito Project Team. * * Permission is hereby granted, free of charge, * to any person obtaining a copy of this software and * associated documentation files (the "Software"), * to deal in the Software without restriction, * including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit * persons to whom the Software is furnished to do so, * subject to the following conditions: * * The above copyright notice and this permission notice * shall be included in all copies * or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY * OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT * LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package org.anotheria.moskitodemo.simpleservice.test; import org.anotheria.moskitodemo.simpleservice.ISimpleService; import org.anotheria.moskitodemo.simpleservice.SimpleServiceFactory; import java.util.ArrayList; import java.util.List; public abstract class AbstractMultiTestWithDuration { private long duration; private ISimpleService service; public static final String[] INTERVALS_TO_CHECK = { null, "1m", "5m" }; protected ISimpleService createService(){ return SimpleServiceFactory.createSimpleService(); } protected AbstractMultiTestWithDuration(long aDuration){ duration = aDuration; service = createService(); } protected void executeTests(){ List<TestRunner> runners = new ArrayList<TestRunner>(); runners.add(new TestRunner(new TestControlledWait())); runners.add(new TestRunner(new TestRandomWait())); runners.add(new TestRunner(new TestExceptionProduction())); for (TestRunner runner : runners) runner.start(); System.out.println("Tests started ... "); long sleepStarted = System.currentTimeMillis(); try{ Thread.sleep(duration); }catch(InterruptedException ignored){} long sleepEnded = System.currentTimeMillis(); long realSleepDuration = sleepEnded - sleepStarted; System.out.println("stoping, slept "+realSleepDuration+" ms, please wait further 12 seconds."); //stop tests for (TestRunner runner : runners) runner.setRunning(false); sleepStarted = System.currentTimeMillis(); try{ Thread.sleep(12000); }catch(InterruptedException ignored){} sleepEnded = System.currentTimeMillis(); realSleepDuration += (sleepEnded-sleepStarted); System.out.println("Finished, total sleep time: "+realSleepDuration); for (String interval : INTERVALS_TO_CHECK){ System.out.println("\tPrinting stats for interval: "+(interval == null ? "DEFAULT (Since start)" : interval)); service.printStats(interval); } } class TestRunner extends Thread{ private AbstractTest myTestCase; private boolean running; public TestRunner(AbstractTest aTestCase){ myTestCase = aTestCase; } public void run(){ setRunning(true); long testRunCount = 0; long exceptionCount = 0; while(isRunning()){ testRunCount++; try{ myTestCase.test(service, false); }catch(Exception e){ exceptionCount++; } } System.out.println("Performed "+testRunCount+" test runs on "+myTestCase.getClass().getName()+", caught "+exceptionCount+" exceptions"); } private synchronized boolean isRunning(){ return running; } private synchronized void setRunning(boolean value){ running = value; } } }