From eee8ee81c683169914ed9dd8f6c514eab7811214 Mon Sep 17 00:00:00 2001 From: Jesse Hallett Date: Fri, 3 Jan 2014 13:26:24 -0800 Subject: 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 --- .../main/java/com/galois/fiveui/BatchRunner.java | 41 +++++++++++++++------- .../test/java/com/galois/fiveui/ReporterTest.java | 32 ++++++++--------- .../src/main/java/com/galois/fiveui/Result.java | 16 +++++---- 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>> results = (List) res; + List>> 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> r : results) { - Map problem = r.get("payload"); + for (Map> r : results) { + Map 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 // 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 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 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; } } -- cgit v1.2.3