aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jesse Hallett <jesse@galois.com>2014-01-03 13:26:24 -0800
committerGravatar Jesse Hallett <jesse@galois.com>2014-01-03 15:55:16 -0800
commiteee8ee81c683169914ed9dd8f6c514eab7811214 (patch)
tree5311b92fb638368f2a43857d0a2fd5d0c36e7852
parent6d63c61bb97591c0e97f00e606468754f6180b80 (diff)
Outputs message, xpath, and proper severity in batch run reports
Result extracts xpath from problem report Retrieves msg and xpath from problem report got severity working
-rw-r--r--src/batchtools/headless/src/main/java/com/galois/fiveui/BatchRunner.java41
-rw-r--r--src/batchtools/headless/src/test/java/com/galois/fiveui/ReporterTest.java32
-rw-r--r--src/batchtools/rsTester/src/main/java/com/galois/fiveui/Result.java16
3 files changed, 54 insertions, 35 deletions
diff --git a/src/batchtools/headless/src/main/java/com/galois/fiveui/BatchRunner.java b/src/batchtools/headless/src/main/java/com/galois/fiveui/BatchRunner.java
index 934620a..4adbd67 100644
--- a/src/batchtools/headless/src/main/java/com/galois/fiveui/BatchRunner.java
+++ b/src/batchtools/headless/src/main/java/com/galois/fiveui/BatchRunner.java
@@ -123,7 +123,7 @@ public class BatchRunner {
} catch (Exception e) {
String errStr = "failed to complete webcrawl of" + seedUrl + "\n";
errStr += e.toString();
- builder.add(new Result(ResType.Exception, _driver, errStr, seedUrl,
+ builder.add(new Result(ResType.Exception, _driver, errStr, null, seedUrl,
rs.getName(), rs.getDescription(), ""));
logger.error(errStr);
continue;
@@ -148,7 +148,7 @@ public class BatchRunner {
} catch (Exception e) {
String errStr = "exception during runRule: " + rs.getName() + "\n";
errStr += e.toString();
- builder.add(new Result(ResType.Exception, _driver, errStr, url,
+ builder.add(new Result(ResType.Exception, _driver, errStr, null, url,
rs.getName(), rs.getDescription(), ""));
logger.error(errStr);
}
@@ -192,33 +192,36 @@ public class BatchRunner {
if (res.getClass() == String.class) {
// we received an error via the expected mechanisms:
logger.error("exception running rule: " + res);
- builder.add(new Result(ResType.Exception, _driver, "", _driver.getCurrentUrl(),
+ builder.add(new Result(ResType.Exception, _driver, "", null, _driver.getCurrentUrl(),
ruleSet.getName(), ruleSet.getDescription(), ""));
return builder.build();
} else {
try {
@SuppressWarnings({ "unchecked", "rawtypes" })
- List<Map<String, Map<String, String>>> results = (List) res;
+ List<Map<String, Map<String, Object>>> results = (List) res;
if (0 == results.size()) {
builder.add(new Result(ResType.Pass, _driver,
- "passed " + ruleSet.getRules().size() + " tests",
+ "passed " + ruleSet.getRules().size() + " tests", null,
_driver.getCurrentUrl(), ruleSet.getName(), ruleSet.getDescription(), ""));
}
- for (Map<String, Map<String, String>> r : results) {
- Map<String, String> problem = r.get("payload");
+ for (Map<String, Map<String, Object>> r : results) {
+ Map<String, Object> problem = r.get("payload");
// TODO decide what to extract from problem object and what
// to do with it.
//
// Probably we should just pass along the Map<String, String>
// and let the reporter deal with it.
- String ruleName = problem.get("name");
- String ruleDescr = problem.get("descr");
- String problemAsHTML = "Rule Name: " + ruleName + " / "
+ String ruleName = (String) problem.get("name");
+ String ruleDescr = (String) problem.get("descr");
+ String msg = (String) (problem.get("msg") != null ? problem.get("msg") : "");
+ String xpath = (String) problem.get("xpath");
+ ResType severity = mapSeverity((Long) problem.get("severity"));
+ String problemAsHTML = "Rule Name: " + ruleName + " / "
+ "Rule Desc: " + ruleDescr + " / "
- + "XPath: " + problem.get("xpath");
- builder.add(new Result(ResType.Error, _driver, "",
+ + "XPath: " + (String) problem.get("xpath");
+ builder.add(new Result(severity, _driver, msg, xpath,
_driver.getCurrentUrl(),
ruleName, ruleDescr,
problemAsHTML));
@@ -228,7 +231,7 @@ public class BatchRunner {
// An unexpected error happened:
logger.error("unexpected object returned: " + e.toString());
builder.add(new Result(ResType.Exception, _driver,
- "Unexpected object returned: " + res + ", state: " + state,
+ "Unexpected object returned: " + res + ", state: " + state, null,
_driver.getCurrentUrl(),
ruleSet.getName(),
ruleSet.getDescription(),
@@ -302,4 +305,16 @@ public class BatchRunner {
private void loadURL(String url) {
_driver.get(url);
}
+
+ private static ResType mapSeverity(long sev) {
+ ResType res;
+
+ switch ((int) sev) {
+ case 0: res = ResType.Error; break;
+ case 1: res = ResType.Warning; break;
+ default: res = ResType.Error; break;
+ }
+
+ return res;
+ }
}
diff --git a/src/batchtools/headless/src/test/java/com/galois/fiveui/ReporterTest.java b/src/batchtools/headless/src/test/java/com/galois/fiveui/ReporterTest.java
index b30d331..9e6a4af 100644
--- a/src/batchtools/headless/src/test/java/com/galois/fiveui/ReporterTest.java
+++ b/src/batchtools/headless/src/test/java/com/galois/fiveui/ReporterTest.java
@@ -35,9 +35,9 @@ public class ReporterTest {
@Test
public void testConstructor() {
ImmutableList<Result> r = ImmutableList.of(
- new Result(ResType.Pass, (WebDriver) null, "OK", "http://nonexistant", "test rule 1", "a desc or test rule 1", "problem!"),
- new Result(ResType.Pass, (WebDriver) null, "OK", "http://intransigent", "test rule 1", "a desc or test rule 1", "problem!"),
- new Result(ResType.Error, (WebDriver) null, "ERROR", "http://nonexistant", "test rule 2", "a desc or test rule 1", "problem!"));
+ new Result(ResType.Pass, (WebDriver) null, "OK", null, "http://nonexistant", "test rule 1", "a desc or test rule 1", "problem!"),
+ new Result(ResType.Pass, (WebDriver) null, "OK", null, "http://intransigent", "test rule 1", "a desc or test rule 1", "problem!"),
+ new Result(ResType.Error, (WebDriver) null, "ERROR", null, "http://nonexistant", "test rule 2", "a desc or test rule 1", "problem!"));
Reporter kermit = new Reporter(r);
System.out.println("Summary page size: " + kermit.getSummary().length() + " bytes");
System.out.println("Summary page size: " + kermit.getByURL().length() + " bytes");
@@ -53,19 +53,19 @@ public class ReporterTest {
//File tmpPath = new File("/tmp/");
System.out.println("Writing test summary page to: " + tmpPath.toString() + File.separator);
ImmutableList<Result> r = ImmutableList.of(
- new Result(ResType.Pass, (WebDriver) null, "OK", "http://nonexistant", "test rule 1", "a desc or test rule 1", "problem!"),
- new Result(ResType.Pass, (WebDriver) null, "OK", "http://intransigent", "test rule 1", "a desc or test rule 1", "problem!"),
- new Result(ResType.Pass, (WebDriver) null, "OK", "http://intransigent", "test rule 3", "a desc or test rule 1", "problem!"),
- new Result(ResType.Pass, (WebDriver) null, "OK", "http://intransigent", "test rule 4", "a desc or test rule 1", "problem!"),
- new Result(ResType.Pass, (WebDriver) null, "OK", "http://intransigent", "test rule 5", "a desc or test rule 1", "problem!"),
- new Result(ResType.Pass, (WebDriver) null, "OK", "http://foo.com", "test rule 1", "a desc or test rule 1", "problem!"),
- new Result(ResType.Error, (WebDriver) null, "ERROR", "http://foo.com", "test rule 5", "a desc or test rule 1", "problem!"),
- new Result(ResType.Error, (WebDriver) null, "ERROR", "http://foo.com", "test rule 2", "a desc or test rule 1", "problem!"),
- new Result(ResType.Error, (WebDriver) null, "ERROR", "http://bar.com", "test rule 3", "a desc or test rule 1", "problem!"),
- new Result(ResType.Error, (WebDriver) null, "ERROR", "http://bar.com", "test rule 3", "a desc or test rule 1", "problem!"), // multiple fails for same url+rule combo
- new Result(ResType.Error, (WebDriver) null, "ERROR", "http://bar.com", "test rule 3", "a desc or test rule 1", "problem!"),
- new Result(ResType.Error, (WebDriver) null, "ERROR", "http://bar.com", "test rule 3", "a desc or test rule 1", "problem!"),
- new Result(ResType.Error, (WebDriver) null, "ERROR", "http://nonexistant", "test rule 2", "a desc or test rule 1", "problem!"));
+ new Result(ResType.Pass, (WebDriver) null, "OK", null, "http://nonexistant", "test rule 1", "a desc or test rule 1", "problem!"),
+ new Result(ResType.Pass, (WebDriver) null, "OK", null, "http://intransigent", "test rule 1", "a desc or test rule 1", "problem!"),
+ new Result(ResType.Pass, (WebDriver) null, "OK", null, "http://intransigent", "test rule 3", "a desc or test rule 1", "problem!"),
+ new Result(ResType.Pass, (WebDriver) null, "OK", null, "http://intransigent", "test rule 4", "a desc or test rule 1", "problem!"),
+ new Result(ResType.Pass, (WebDriver) null, "OK", null, "http://intransigent", "test rule 5", "a desc or test rule 1", "problem!"),
+ new Result(ResType.Pass, (WebDriver) null, "OK", null, "http://foo.com", "test rule 1", "a desc or test rule 1", "problem!"),
+ new Result(ResType.Error, (WebDriver) null, "ERROR", null, "http://foo.com", "test rule 5", "a desc or test rule 1", "problem!"),
+ new Result(ResType.Error, (WebDriver) null, "ERROR", null, "http://foo.com", "test rule 2", "a desc or test rule 1", "problem!"),
+ new Result(ResType.Error, (WebDriver) null, "ERROR", null, "http://bar.com", "test rule 3", "a desc or test rule 1", "problem!"),
+ new Result(ResType.Error, (WebDriver) null, "ERROR", null, "http://bar.com", "test rule 3", "a desc or test rule 1", "problem!"), // multiple fails for same url+rule combo
+ new Result(ResType.Error, (WebDriver) null, "ERROR", null, "http://bar.com", "test rule 3", "a desc or test rule 1", "problem!"),
+ new Result(ResType.Error, (WebDriver) null, "ERROR", null, "http://bar.com", "test rule 3", "a desc or test rule 1", "problem!"),
+ new Result(ResType.Error, (WebDriver) null, "ERROR", null, "http://nonexistant", "test rule 2", "a desc or test rule 1", "problem!"));
Reporter kermit = new Reporter(r);
kermit.writeReportsToDir(tmpPath.toString());
assertTrue("made it!", true);
diff --git a/src/batchtools/rsTester/src/main/java/com/galois/fiveui/Result.java b/src/batchtools/rsTester/src/main/java/com/galois/fiveui/Result.java
index 6c83c7b..e6f2253 100644
--- a/src/batchtools/rsTester/src/main/java/com/galois/fiveui/Result.java
+++ b/src/batchtools/rsTester/src/main/java/com/galois/fiveui/Result.java
@@ -19,6 +19,9 @@ package com.galois.fiveui;
import org.openqa.selenium.WebDriver;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
/**
* A Result object encapsulates the result of running a rule set check on a URL
* with a WebDriver. Results are organized into four categories:
@@ -36,8 +39,9 @@ public class Result {
private transient WebDriver _driver;
private String _url;
private String _ruleName;
- private String _ruleDesc;
- private String _prob;
+ private String _ruleDesc;
+ private String _prob;
+ private String _xpath = null;
/**
* Construct a new result of one of the four types.
@@ -50,11 +54,12 @@ public class Result {
* @param ruleDesc rule description
* @param prob problem description
*/
- public Result(ResType type, WebDriver driver, String msg, String url,
- String ruleName, String ruleDesc, String prob) {
+ public Result(ResType type, WebDriver driver, String msg, String xpath,
+ String url, String ruleName, String ruleDesc, String prob) {
super();
_type = type;
_msg = msg;
+ _xpath = xpath;
_driver = driver;
_url = url;
_ruleName = ruleName;
@@ -207,7 +212,6 @@ public class Result {
}
public String getXpath() {
- // TODO Auto-generated method stub
- return null;
+ return _xpath;
}
}