/*
* Copyright 2004-2011 H2 Group. Multiple-Licensed under the H2 License,
* Version 1.0, and under the Eclipse Public License, Version 1.0
* (http://h2database.com/html/license.html).
* Initial Developer: H2 Group
*/
package org.h2.test.poweroff;
import java.io.InputStream;
import java.util.Random;
import org.h2.store.fs.FileUtils;
import org.h2.test.TestBase;
import org.h2.test.synth.OutputCatcher;
/**
* Run the TestRecover test case in a loop. The process is killed after 10
* seconds.
*/
public class TestRecoverKillLoop extends TestBase {
/**
* This method is called when executing this application from the command
* line.
*
* @param args the command line parameters
*/
public static void main(String... args) throws Exception {
new TestRecoverKillLoop().runTest(Integer.MAX_VALUE);
}
public void test() throws Exception {
runTest(3);
}
private void runTest(int count) throws Exception {
FileUtils.deleteRecursive("data/db", false);
Random random = new Random(1);
for (int i = 0; i < count; i++) {
String[] procDef = {
"java", "-cp", getClassPath(),
"-Dtest.dir=data/db",
TestRecover.class.getName()
};
Process p = Runtime.getRuntime().exec(procDef);
InputStream in = p.getInputStream();
OutputCatcher catcher = new OutputCatcher(in);
catcher.start();
while (true) {
String s = catcher.readLine(60 * 1000);
// System.out.println("> " + s);
if (s == null) {
fail("No reply from process");
} else if (s.startsWith("testing...")) {
int sleep = random.nextInt(10000);
Thread.sleep(sleep);
printTime("killing");
p.destroy();
p.waitFor();
break;
} else if (s.startsWith("error!")) {
fail("Failed: " + s);
}
}
}
}
}