aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Benjamin Jones <bjones@galois.com>2012-12-04 14:31:01 -0800
committerGravatar Benjamin Jones <bjones@galois.com>2012-12-04 14:31:01 -0800
commit40a8f890484a4bee9244de7417ca3e9d47d63220 (patch)
treecc953bd705cbd274aa0e19882ed19cf75b5d1a44
parent2f77a07a9e51339ee0962cfb7d06a0620c32ff9e (diff)
refactored BatchRunner to delay WebDriver creation until after the webcrawl
-rw-r--r--headless/src/main/java/com/galois/fiveui/BatchRunner.java94
-rw-r--r--headless/src/main/java/com/galois/fiveui/HeadlessRunner.java48
-rw-r--r--headless/src/test/java/com/galois/fiveui/BatchExecutorTest.java14
-rw-r--r--headless/src/test/java/com/galois/fiveui/HeadlessTest.java15
4 files changed, 93 insertions, 78 deletions
diff --git a/headless/src/main/java/com/galois/fiveui/BatchRunner.java b/headless/src/main/java/com/galois/fiveui/BatchRunner.java
index 1bacf4f..fb955c7 100644
--- a/headless/src/main/java/com/galois/fiveui/BatchRunner.java
+++ b/headless/src/main/java/com/galois/fiveui/BatchRunner.java
@@ -47,9 +47,9 @@ import org.apache.log4j.Logger; // System.out.* is old fashioned
*/
public class BatchRunner {
- private final WebDriver _driver;
- private final JavascriptExecutor _exe;
- private final String _root; // FiveUI root directory
+ private WebDriver _driver;
+ private JavascriptExecutor _exe;
+ private String _root; // FiveUI root directory
// Hard coded JS files, relative to the FiveUI root directory.
private static final String DATA_DIR = "contexts/data/";
@@ -68,21 +68,18 @@ public class BatchRunner {
private static Logger logger = Logger.getLogger("com.galois.fiveui.BatchRunner");
- /**
- * BatchRunner constructor, stores the given WebDriver.
- *
- * TODO DRY
- *
- * @param driver the WebDriver object to run tests with
- */
- public BatchRunner(WebDriver driver) {
- logger.debug("initializing BatchRunner ...");
- _driver = driver;
- _exe = (JavascriptExecutor) _driver;
- _root = Drivers.getRootPath();
+ private void registerDriver(WebDriver driver) {
+ logger.debug("registering new webdriver...");
+ this._driver = driver;
+ this._exe = (JavascriptExecutor) driver;
+ this._root = Drivers.getRootPath();
logger.debug("root path for webdriver is " + _root);
}
-
+
+ public BatchRunner() {
+ logger.debug("initializing BatchRunner ...");
+ }
+
/**
* Run a headless run description, returning the raw results: 'PASS' if
* no inconsistencies were found, 'ERROR' for each inconsistency found,
@@ -110,6 +107,9 @@ public class BatchRunner {
logger.debug("setting seed URL for crawl: " + seedUrl);
urls = null;
+ /**************
+ * Gather URLs
+ **************/
if (params.isNone()) {
urls = ImmutableList.of(seedUrl);
@@ -147,27 +147,34 @@ public class BatchRunner {
}
}
- // run ruleset on each discovered URL
- for (String url: urls) {
- logger.info("loading " + url + " for ruleset run ...");
- loadURL(url); // set state of the WebDriver (blocking)
- try {
- logger.info("running ruleset \"" + rs.getName() + "\"");
- rawResults = runRule(rs); // run the ruleset, collect results
- builder.addAll(rawResults);
- } catch (Exception e) {
- String errStr = "exception during runRule: " + rs.getName() + "\n";
- errStr += e.toString();
- builder.add(Result.exception(_driver, errStr));
- logger.error(errStr);
- }
- try {
- logger.debug("being polite for " + politeness + " millis...");
- Thread.sleep(politeness);
- } catch (InterruptedException e) {
- e.printStackTrace();
+ /***********************
+ * Drive the browser(s)
+ ***********************/
+
+ for (WebDriver driver: getDrivers()) {
+ registerDriver(driver);
+ for (String url: urls) {
+ logger.info("loading " + url + " for ruleset run ...");
+ loadURL(url); // set state of the WebDriver (blocking)
+ try {
+ logger.info("running ruleset \"" + rs.getName() + "\"");
+ rawResults = runRule(rs); // run the ruleset, collect results
+ builder.addAll(rawResults);
+ } catch (Exception e) {
+ String errStr = "exception during runRule: " + rs.getName() + "\n";
+ errStr += e.toString();
+ builder.add(Result.exception(_driver, errStr));
+ logger.error(errStr);
+ }
+ try {
+ logger.debug("being polite for " + politeness + " millis...");
+ Thread.sleep(politeness);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
}
- }
+ driver.quit();
+ }
}
return builder.build();
}
@@ -262,6 +269,21 @@ public class BatchRunner {
}
/**
+ * Build a list of webdrivers with which to run each ruleset.
+ *
+ * @return list of initialized WebDriver objects
+ */
+ private static ImmutableList<WebDriver> getDrivers() {
+ logger.debug("building webdrivers ...");
+ ImmutableList<WebDriver> r = ImmutableList.<WebDriver>of(
+ Drivers.buildFFDriver()
+ // , Drivers.buildChromeDriver()
+ );
+ logger.debug("built: " + r.toString());
+ return r;
+ }
+
+ /**
* Sets the state of the WebDriver by loading a given URL.
*
* @param url URL to load
diff --git a/headless/src/main/java/com/galois/fiveui/HeadlessRunner.java b/headless/src/main/java/com/galois/fiveui/HeadlessRunner.java
index 53b3c2c..2f3fb53 100644
--- a/headless/src/main/java/com/galois/fiveui/HeadlessRunner.java
+++ b/headless/src/main/java/com/galois/fiveui/HeadlessRunner.java
@@ -20,10 +20,7 @@ package com.galois.fiveui;
import java.io.IOException;
import java.net.URISyntaxException;
-import org.openqa.selenium.WebDriver;
-
import com.galois.fiveui.Result;
-import com.galois.fiveui.drivers.Drivers;
import com.google.common.collect.ImmutableList;
import org.apache.log4j.Level;
@@ -74,8 +71,13 @@ public class HeadlessRunner {
logLevel = Level.DEBUG;
BasicConfigurator.configure();
+
+ // com.galois.fiveui.* loggers get logLevel
+ Logger fiveuiLogger = Logger.getLogger("com.galois.fiveui");
+ fiveuiLogger.setLevel(logLevel);
+ // root logger gets ERROR level (and hence all 3rd party libraries do too)
Logger rootLogger = Logger.getRootLogger();
- rootLogger.setLevel(logLevel);
+ rootLogger.setLevel(Level.ERROR);
// Process the command line arguments
if (0 == args.length) {
@@ -86,37 +88,21 @@ public class HeadlessRunner {
for (int i = 0; i < args.length; i++) {
String runDescFileName = args[i];
logger.debug("parsing headless run description: " + args[i]);
- HeadlessRunDescription descr = HeadlessRunDescription.parse(runDescFileName);
- for (WebDriver driver : getDrivers()) {
- logger.debug("invoking headless run...");
- BatchRunner runner = new BatchRunner(driver);
- ImmutableList<Result> results = runner.runHeadless(descr);
- logger.debug("runHeadless returned " + results.size() + " results");
- System.out.println("\n=========================\n");
- System.out.println( " RESULTS \n");
- System.out.println( "=========================\n\n");
- for (Result result : results) {
- System.out.println(result.toString()); // TODO add support for file output
- }
- driver.quit();
+ HeadlessRunDescription descr = HeadlessRunDescription.parse(runDescFileName);
+ logger.debug("invoking headless run...");
+ BatchRunner runner = new BatchRunner();
+ ImmutableList<Result> results = runner.runHeadless(descr);
+ logger.debug("runHeadless returned " + results.size() + " results");
+ System.out.println("\n=========================\n");
+ System.out.println( " RESULTS\n");
+ System.out.println( "=========================\n\n");
+ for (Result result : results) {
+ System.out.println(result.toString()); // TODO add support for file output
}
}
}
- /**
- * Build a list of webdrivers with which to run each ruleset.
- *
- * @return list of initialized WebDriver objects
- */
- private static ImmutableList<WebDriver> getDrivers() {
- logger.debug("building webdrivers ...");
- ImmutableList<WebDriver> r = ImmutableList.<WebDriver>of(
- Drivers.buildFFDriver()
- // , Drivers.buildChromeDriver()
- );
- logger.debug("built: " + r.toString());
- return r;
- }
+
private static void printHelp() {
System.out.println(
diff --git a/headless/src/test/java/com/galois/fiveui/BatchExecutorTest.java b/headless/src/test/java/com/galois/fiveui/BatchExecutorTest.java
index 00e9b46..9cc82f6 100644
--- a/headless/src/test/java/com/galois/fiveui/BatchExecutorTest.java
+++ b/headless/src/test/java/com/galois/fiveui/BatchExecutorTest.java
@@ -30,12 +30,9 @@ import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
-import org.openqa.selenium.WebDriver;
-
import com.galois.fiveui.BatchRunner;
import com.galois.fiveui.HeadlessRunDescription;
import com.galois.fiveui.Result;
-import com.galois.fiveui.drivers.Drivers;
import com.google.common.collect.ImmutableList;
import junit.framework.Assert;
@@ -115,19 +112,16 @@ public class BatchExecutorTest {
* @param fn filename of a .json file containing a headless run description
*/
private static void testHeadlessRun(String fn) {
- WebDriver driver = Drivers.buildFFDriver(); // initialize the webdriver
boolean flag = true;
try {
HeadlessRunDescription descr = HeadlessRunDescription.parse(fn);
- BatchRunner runner = new BatchRunner(driver); // setup the batch runner
- ImmutableList<Result> results = runner.runHeadless(descr); // excecute the run
- logger.info(results.toString()); // print out results
+ BatchRunner runner = new BatchRunner();
+ ImmutableList<Result> results = runner.runHeadless(descr);
+ logger.info(results.toString());
} catch (Exception e) {
logger.error("testHeadlessRun: exception caught while running a headless run description");
flag = false;
- } finally {
- driver.quit();
- }
+ }
Assert.assertTrue(flag);
}
diff --git a/headless/src/test/java/com/galois/fiveui/HeadlessTest.java b/headless/src/test/java/com/galois/fiveui/HeadlessTest.java
index e0e3239..c33d86c 100644
--- a/headless/src/test/java/com/galois/fiveui/HeadlessTest.java
+++ b/headless/src/test/java/com/galois/fiveui/HeadlessTest.java
@@ -7,6 +7,10 @@ import java.io.IOException;
import junit.framework.Assert;
+import org.apache.log4j.BasicConfigurator;
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.junit.BeforeClass;
import org.junit.Test;
import com.galois.fiveui.HeadlessAtom;
@@ -21,7 +25,16 @@ import com.google.common.collect.ImmutableList;
*/
public class HeadlessTest {
private static final String RUN_DESCRIPTION_DIR = "src/test/resources/runDescriptions/";
-
+ private static Logger logger = Logger.getLogger("com.galois.fiveui.HeadlessTest");
+
+ @BeforeClass
+ public static void beforeClass() {
+ BasicConfigurator.configure();
+ Logger root = Logger.getRootLogger();
+ root.setLevel(Level.ERROR);
+ logger.setLevel(Level.DEBUG);
+ logger.debug("running headless tests...");
+ }
/**
* Test method for {@link com.galois.com.galois.fiveui.HeadlessRunDescription}, parses
* 'src/test/resources/runDescriptions/headlessSample0.json'.