1 /*
   2  * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
   3  * 
   4  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   5  *
   6  * The contents of this file are subject to the terms of either the Universal Permissive License
   7  * v 1.0 as shown at http://oss.oracle.com/licenses/upl
   8  *
   9  * or the following license:
  10  *
  11  * Redistribution and use in source and binary forms, with or without modification, are permitted
  12  * provided that the following conditions are met:
  13  * 
  14  * 1. Redistributions of source code must retain the above copyright notice, this list of conditions
  15  * and the following disclaimer.
  16  * 
  17  * 2. Redistributions in binary form must reproduce the above copyright notice, this list of
  18  * conditions and the following disclaimer in the documentation and/or other materials provided with
  19  * the distribution.
  20  * 
  21  * 3. Neither the name of the copyright holder nor the names of its contributors may be used to
  22  * endorse or promote products derived from this software without specific prior written permission.
  23  * 
  24  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
  25  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  26  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
  27  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  28  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  29  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  30  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
  31  * WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  32  */
  33 package org.openjdk.jmc.console.uitest.mbeanhelpers;
  34 
  35 /**
  36  * Design choice for this is to make the subclasses as small as possible.
  37  */
  38 public abstract class TestRunner extends Thread {
  39         protected volatile boolean loopRun = true;
  40         protected String[] args = new String[] {};
  41         protected boolean runFirst = false;
  42         protected boolean initied = false;
  43 
  44         public void loopRun(boolean loopRun) {
  45                 this.loopRun = loopRun;
  46         }
  47 
  48         public TestRunner() {
  49                 this(true);
  50         }
  51 
  52         public TestRunner(boolean runFirst) {
  53                 this.runFirst = runFirst;
  54                 setName(this.getClass().getName());
  55                 loopRun = true;
  56         }
  57 
  58         public void stopRunning() {
  59                 loopRun(false);
  60                 runLast();
  61                 System.out.println("Stopping " + this.getClass().getName()); //$NON-NLS-1$
  62         }
  63 
  64         public void setArgs(String[] args) {
  65                 this.args = args;
  66         }
  67 
  68         public void runFirst() {
  69                 initied = true;
  70         }
  71 
  72         public abstract void runLoop();
  73 
  74         public void runLast() {
  75         }
  76 
  77         public boolean isUpAndRunning() {
  78                 return initied;
  79         }
  80 
  81         @Override
  82         public void run() {
  83                 System.out.println("Starting " + this.getClass().getName()); //$NON-NLS-1$
  84                 runFirst();
  85                 while (loopRun) {
  86                         runLoop();
  87                         try {
  88                                 Thread.sleep(500);
  89                         } catch (Exception ex) {
  90                         }
  91                 }
  92         }
  93 }