Package load

Source Code of load.TypicalProcessTests

/*
* This file is part of the WfMOpen project.
* Copyright (C) 2001-2003 Danet GmbH (www.danet.de), GS-AN.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*
* $Id: TypicalProcessTests.java 2550 2007-10-22 14:00:54Z  $
*/
package load;

import java.util.HashMap;
import java.util.Map;

import javax.security.auth.login.LoginException;

import de.danet.an.util.junit.EJBClientTest;
import de.danet.an.util.junit.NamedTestGroup;

import com.clarkware.junitperf.ConstantTimer;
import com.clarkware.junitperf.LoadTest;
import common.STProjectLoginContext;
import junit.framework.Test;
import junit.framework.TestSuite;

import org.apache.log4j.Logger;

import load.TypicalProcessManager.InitialProcessDataAdapter;
/**
* This class generates base load for the workflow engine.
* Additionally a test suite for load test szenario with a running base load
* can be built.
*
* @author <a href="weidauer@danet.de">Christian Weidauer</a>
* @version $Revision: 2550 $
*/

public class TypicalProcessTests {
   
    // base load parameters
    private static final int BASELOAD_PROCESS_NUMBER = 500;
    private static final int PROCESS_AVERAGE_DURATION = 60 * 60; // in s
    private static final int WAIT_TIME
  = (int) (0.1 * PROCESS_AVERAGE_DURATION); // in s

    // test load parameters
    private static final int USERS = 30;
    private static final int ITERATIONS = 1;
    private static final int PROCESSSTARTS_PER_SECOND = 2;

    // dependend test load parameters
    private static final int DELAYTIME
  = (int) (1000 / PROCESSSTARTS_PER_SECOND); // in ms

    // logger
    private static final Logger logger
  = Logger.getLogger(TypicalProcessTests.class);


    private static STProjectLoginContext plc = null;
    static {
  try {
      plc = new STProjectLoginContext();
      plc.login();
  } catch (LoginException e) {
      throw new IllegalStateException (e.getMessage ());
  }
    }

    /**
     * Make this test suite.
     * @return the test suite
     */
    public static Test suite() throws Exception {
  clearWorkflowEngine();
  generateBaseLoad(BASELOAD_PROCESS_NUMBER, PROCESS_AVERAGE_DURATION);
  System.out.println("waits for " + WAIT_TIME + " sec");
  pause(WAIT_TIME * 1000);
  System.out.println("starts test preparation");

  //TypicalProcess tp1 = new TypicalProcess(PROCESS_AVERAGE_DURATION);
         TypicalProcess tp2a
      = new TypicalProcess(TypicalProcess.PATH1,
         PROCESS_AVERAGE_DURATION / 4,
         PROCESS_AVERAGE_DURATION / 4, 2);
  /*
    TypicalProcess tp2b
      = new TypicalProcess(TypicalProcess.PATH2,
         PROCESS_AVERAGE_DURATION / 3, 0, 3);
  TypicalProcess tp3 = new TypicalProcess(PROCESS_AVERAGE_DURATION / 8,
            PROCESS_AVERAGE_DURATION / 6,
            6);
  */

  TestSuite rootSuite = new TestSuite();

  Map tg = new HashMap ();
  TestSuite suite = new TestSuite();
  tg.put("title",
         "Create typical processes along different pathes and start them."
         + " Baseload: " + BASELOAD_PROCESS_NUMBER + " processes,"
         + " process starts per second: " + PROCESSSTARTS_PER_SECOND
         + ".");
  //addTest(suite, "Create and Start Process along Path1",
  //  tp1.createInitStartTest());
  addTest(suite, "Create and Start Process along Path2a",
    tp2a.createInitStartTest());
  /*  addTest(suite, "Create and Start Process along Path2b",
    tp2b.createInitStartTest());
  addTest(suite, "Create and Start Process along Path3",
    tp3.createInitStartTest());
  */
  rootSuite.addTest(new NamedTestGroup (suite, "TestGroup", tg));
  System.out.println("finished test preparation");
        return new EJBClientTest (plc, rootSuite);
    }

    public static void generateBaseLoad(int processNumber,
          int processAverageDuration)
  throws Exception {
  System.out.println("generates base load of "
         + BASELOAD_PROCESS_NUMBER 
         + " processes of an average life time of "
         + processAverageDuration + " sec");
  long startTime = System.currentTimeMillis();
  // 10% processes with 5 active activities
  generatePath1Processes((int) (processNumber * 0.1 * 0.5),
             (int) (0.1 * processAverageDuration),
             (int) (1.9 * processAverageDuration));
  generatePath2Processes((int) (processNumber * 0.1 * 0.5),
             TypicalProcess.PATH1,
             (int) (0.2 * processAverageDuration / 2),
             (int) (0.8 * processAverageDuration / 2),
             (int) (0.5 * processAverageDuration / 2), 2);

  // 40% processes with 8-10 active activities
  generatePath3Processes((int) (processNumber * 0.4 * 0.3),
             (int) (0.6 * processAverageDuration / 1),
             (int) (1.4 * processAverageDuration / 1),
             (int) (processAverageDuration / 5), 1);

  generatePath2Processes((int) (processNumber * 0.4 * 0.3),
             TypicalProcess.PATH1,
             (int) (0.2 * processAverageDuration / 2),
             (int) (0.8 * processAverageDuration / 2),
             (int) (0.5 * processAverageDuration / 2), 2);

  generatePath2Processes((int) (processNumber * 0.4 * 0.4),
             TypicalProcess.PATH2,
             (int) (0.2 * processAverageDuration / 2),
             (int) (1.8 * processAverageDuration / 2),
             (int) 0, 2);

  // 40% processes with 21-22 active activities
  generatePath3Processes((int) (processNumber * 0.4 * 0.3),
             (int) (0.6 * processAverageDuration / 3),
             (int) (1.4 * processAverageDuration / 3),
             (int) (processAverageDuration / 5), 3);

  generatePath2Processes((int) (processNumber * 0.4 * 0.3),
             TypicalProcess.PATH1,
             (int) (0.2 * processAverageDuration / 5),
             (int) (0.8 * processAverageDuration / 5),
             (int) (0.5 * processAverageDuration / 5), 5);

  generatePath2Processes((int) (processNumber * 0.4 * 0.4),
             TypicalProcess.PATH2,
             (int) (0.2 * processAverageDuration / 4),
             (int) (1.8 * processAverageDuration / 4),
             (int) 0, 4);


  // 10% processes with 29-31 active activities
  generatePath3Processes((int) (processNumber * 0.1 * 0.4),
             (int) (0.6 * processAverageDuration / 4),
             (int) (1.4 * processAverageDuration / 4),
             (int) (processAverageDuration / 10), 4);
  generatePath2Processes((int) (processNumber * 0.1 * 0.3),
             TypicalProcess.PATH1,
             (int) (0.2 * processAverageDuration / 7),
             (int) (0.8 * processAverageDuration / 7),
             (int) (0.5 * processAverageDuration / 7), 7);
  generatePath2Processes((int) (processNumber * 0.1 * 0.3),
             TypicalProcess.PATH2,
             (int) (0.2 * processAverageDuration / 6),
             (int) (1.8 * processAverageDuration / 6),
             (int) 0, 6);
  long duration = System.currentTimeMillis() - startTime;
  System.out.println("... took " + duration / 1000
         + " sec");
    }


    private static void pause(int milliSeconds) throws Exception {
  Thread.currentThread().sleep(milliSeconds / 4);
  System.out.println("... waited " + milliSeconds / 4000 + " sec.");
  Thread.currentThread().sleep(milliSeconds / 4);
  System.out.println("... waited " + milliSeconds / 2000 + " sec.");
  Thread.currentThread().sleep(milliSeconds / 4);
  System.out.println("... waited " + milliSeconds / 1333 + " sec.");
  Thread.currentThread().sleep(milliSeconds / 4);
    }

    private static void generatePath1Processes(int number, int duration)
  throws Exception {
  TypicalProcessManager.STARTER
      .generate(new TypicalProcess(duration), number);
    }

    private static void generatePath1Processes(int number, int durationFrom,
                 int durationTo)
  throws Exception {
  InitialProcessDataAdapter adapter
            = TypicalProcessManager.STARTER.createAdapter
                ("BE1_3_Duration", durationFrom, durationTo);
  TypicalProcessManager.STARTER
      .generate(new TypicalProcess(0), number, adapter);
    }

    private static void generatePath2Processes(int number, String decision2,
                 int durationBE2_1,
                 int durationBE2_3_1,
                 int initialLoopCounter)
  throws Exception {
  TypicalProcessManager.STARTER
      .generate(new TypicalProcess(decision2, durationBE2_1,
           durationBE2_3_1, initialLoopCounter),
          number);
    }

    private static void generatePath2Processes(int number, String decision2,
                 int durationBE2_1_From, 
                 int durationBE2_1_To,
                 int durationBE2_3_1,
                 int initialLoopCounter)
  throws Exception {
  InitialProcessDataAdapter adapter
            = TypicalProcessManager.STARTER.createAdapter
                ("BE2_1_Duration", durationBE2_1_From, durationBE2_1_To);
  TypicalProcessManager.STARTER
      .generate(new TypicalProcess(decision2, 0,
           durationBE2_3_1, initialLoopCounter),
          number, adapter);
    }

    private static void generatePath3Processes(int number,
                 int durationBE3_2_1,
                 int durationBE3_2_2,
                 int initialLoopCounter)
  throws Exception {
  TypicalProcessManager.STARTER
      .generate(new TypicalProcess(durationBE3_2_1,
           durationBE3_2_2, initialLoopCounter),
          number);
    }

    private static void generatePath3Processes(int number,
                 int durationBE3_2_1_From,
                 int durationBE3_2_1_To,
                 int durationBE3_2_2,
                 int initialLoopCounter)
  throws Exception {
  InitialProcessDataAdapter adapter
            = TypicalProcessManager.STARTER.createAdapter
                ("BE3_2_1_Duration", durationBE3_2_1_From, durationBE3_2_1_To);
  TypicalProcessManager.STARTER
      .generate(new TypicalProcess(0, durationBE3_2_2,
           initialLoopCounter),
          number, adapter);
    }

    private static void clearWorkflowEngine() throws Exception {
  System.out.println("clears workflow engine");
  GenericTest.closeAllCloseableProcesses();
  GenericTest.waitForNoRunningProcesses();
  GenericTest.removeAllProcesses();
    }

    private static void addTest (TestSuite parentSuite, String title,
         Test testCase) {
  TestSuite suite = new TestSuite ();
  Map sas = new HashMap ();
  sas.put ("users", new Integer(USERS));
  suite.addTest
      (new NamedTestGroup
       (new LoadTest(testCase, USERS, ITERATIONS,
         new ConstantTimer(DELAYTIME)),
        "Samples", sas));
      
  Map tt = new HashMap ();
  tt.put ("title", title);
  parentSuite.addTest (new NamedTestGroup(suite, "Test", tt));
    }



}
TOP

Related Classes of load.TypicalProcessTests

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.