You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by rh...@apache.org on 2014/04/04 14:29:07 UTC

svn commit: r1584636 - in /db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest: NsTest.java README.txt TimerThread.java

Author: rhillegas
Date: Fri Apr  4 12:29:06 2014
New Revision: 1584636

URL: http://svn.apache.org/r1584636
Log:
DERBY-6533: Add a knob to NsTest, allowing you to set a time limit for the test run; commit derby-6533-03-timerThread.diff.

Added:
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/TimerThread.java   (with props)
Modified:
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/NsTest.java
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/README.txt

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/NsTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/NsTest.java?rev=1584636&r1=1584635&r2=1584636&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/NsTest.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/NsTest.java Fri Apr  4 12:29:06 2014
@@ -65,6 +65,7 @@ public class NsTest extends Thread
     private static  final   String  OUTPUT_FILE = "derby.nstest.outputFile";
     private static  final   String  JUST_COUNT_ERRORS = "derby.nstest.justCountErrors";
     private static  final   String  QUIET = "derby.nstest.quiet";
+    private static  final   String  DURATION = "derby.nstest.durationInMinutes";
 
     private static  final   long    MILLIS_PER_MINUTE = 1000L * 60L;
     
@@ -81,7 +82,9 @@ public class NsTest extends Thread
         "\n" +
         "    -D" + OUTPUT_FILE + "=fileName    Redirects output and errors to a file.\n" +
         "\n" +
-        "    -D" + JUST_COUNT_ERRORS + "=true    Makes the test run quietly at steady-state, counting errors, and printing a summary at the end.\n";
+        "    -D" + JUST_COUNT_ERRORS + "=true    Makes the test run quietly at steady-state, counting errors, and printing a summary at the end.\n" +
+        "\n" +
+        "    -D" + DURATION + "=$number    Run for this number of minutes.\n";
 
     private static  final   String  ERROR_BANNER1 = "//////////////////////////////////////////////////////////////\n";
     private static  final   String  ERROR_BANNER2 = "//    ";
@@ -225,6 +228,8 @@ public class NsTest extends Thread
     private static  boolean _justCountErrors;
     private static  HashMap<String,NsTestError> _errors = new HashMap<String,NsTestError>();
 
+    private static  long    _duration;
+    
     private static  boolean _statisticsAlreadyPrinted = false;
     private static  long        _maxSequenceCounter;
     private static  long        _startTimestamp;
@@ -350,6 +355,12 @@ public class NsTest extends Thread
             statisticsLogger = new PrintStream( outputFile );
         }
 
+		String duration = System.getProperty( DURATION );
+        if ( duration != null )
+        {
+            _duration = Long.parseLong( duration ) * MILLIS_PER_MINUTE;
+        }
+
         _justCountErrors = Boolean.getBoolean( JUST_COUNT_ERRORS );
 
         logger = new NsTestPrintStream( statisticsLogger, !_justCountErrors );
@@ -380,6 +391,13 @@ public class NsTest extends Thread
 			}    
 		}
         
+		TimerThread timerThread = null;
+        if ( _duration > 0L )
+        {
+            timerThread = new TimerThread( _duration );
+            timerThread.start();
+        }
+
 		// Load the driver and get a connection to the database
 		String jdbcUrl = "";
 		try {
@@ -571,8 +589,16 @@ public class NsTest extends Thread
 			testThreads[j].join();
 		}
 
+        if ( timerThread != null )
+        {
+            timerThread.stopNow();
+            timerThread.interrupt();
+            timerThread.join();
+        }
+
         // stop the sequence reader thread
 		sequenceReader.stopNow = true;
+		sequenceReader.interrupt();
 		sequenceReader.join();
 
 		// Print statistics

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/README.txt
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/README.txt?rev=1584636&r1=1584635&r2=1584636&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/README.txt (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/README.txt Fri Apr  4 12:29:06 2014
@@ -79,6 +79,8 @@ The following flags can be set:
 
     -Dderby.nstest.justCountErrors=true    Makes the test run quietly at steady-state, counting errors, and printing a summary at the end.
 
+    -Dderby.nstest.durationInMinutes=$number    Run for this number of minutes.
+
 The main class to invoke is org.apache.derbyTesting.system.nstest.NsTest. This class
 takes a String argument of "DerbyClient"/"Embedded", default is DerbyClient. The test requires
 the Network Server to be started on port 1900 to begin the run. 

Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/TimerThread.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/TimerThread.java?rev=1584636&view=auto
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/TimerThread.java (added)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/TimerThread.java Fri Apr  4 12:29:06 2014
@@ -0,0 +1,111 @@
+/*
+
+ Derby - Class org.apache.derbyTesting.system.nstest.TimerThread
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.apache.derbyTesting.system.nstest;
+
+/**
+ * <p>
+ * A thread which sleeps for a specified time period, then wakes up
+ * and terminates the VM.
+ * </p>
+ */
+public class TimerThread extends Thread
+{
+    ///////////////////////////////////////////////////////////////////////////////////
+    //
+    // CONSTANTS
+    //
+    ///////////////////////////////////////////////////////////////////////////////////
+
+    ///////////////////////////////////////////////////////////////////////////////////
+    //
+    // STATE
+    //
+    ///////////////////////////////////////////////////////////////////////////////////
+
+    private long    _sleepTime;
+    private boolean _continueRunning = true;
+    
+    ///////////////////////////////////////////////////////////////////////////////////
+    //
+    // CONSTRUCTOR
+    //
+    ///////////////////////////////////////////////////////////////////////////////////
+
+	public TimerThread( long sleepTime )
+    {
+        _sleepTime = sleepTime;
+	}
+
+    ///////////////////////////////////////////////////////////////////////////////////
+    //
+    // Thread BEHAVIOR
+    //
+    ///////////////////////////////////////////////////////////////////////////////////
+
+	/*
+	 * Implementation of run() method to sleep, wake up, and kill the program.
+	 * 
+	 */
+	public void run() {
+
+        long    remainingTime = _sleepTime;
+        
+        while ( _continueRunning )
+        {
+            long    cycleStartTime = System.currentTimeMillis();
+            
+            try {
+                if ( remainingTime > 0L )
+                {
+                    NsTest.logger.println( "TimerThread sleeping for " + remainingTime + " milliseconds." );
+                    sleep( remainingTime );
+                }
+
+                //
+                // End the program. This will fire the shutdown hook which
+                // prints the final statistics.
+                //
+                NsTest.logger.println( "TimerThread attempting to shut down the program." );
+                NsTest.printStatistics();
+                Runtime.getRuntime().halt( 0 );
+                
+            } catch (java.lang.InterruptedException ie)
+            {
+                NsTest.printException( TimerThread.class.getName(), ie );
+            }
+            
+            long    elapsedTime = System.currentTimeMillis() - cycleStartTime;
+
+            remainingTime = remainingTime - elapsedTime;
+        }
+	}
+
+    ///////////////////////////////////////////////////////////////////////////////////
+    //
+    // OTHER BEHAVIOR
+    //
+    ///////////////////////////////////////////////////////////////////////////////////
+
+    /** This method marks the thread for rundown */
+    public  void    stopNow() { _continueRunning = false; }
+
+}
+

Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/nstest/TimerThread.java
------------------------------------------------------------------------------
    svn:eol-style = native