1 /* 2 * Copyright (C) 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License 15 */ 16 package com.android.compatibility.common.util; 17 18 import com.android.tradefed.util.FileUtil; 19 import com.android.tradefed.util.AbiUtils; 20 21 import junit.framework.TestCase; 22 23 import java.io.File; 24 import java.io.FileWriter; 25 import java.io.IOException; 26 import java.net.InetAddress; 27 import java.net.UnknownHostException; 28 import java.util.Arrays; 29 import java.util.List; 30 import java.util.Map; 31 import java.util.Set; 32 33 /** 34 * Unit tests for {@link ResultHandler} 35 */ 36 public class ResultHandlerTest extends TestCase { 37 38 private static final String SUITE_NAME = "CTS"; 39 private static final String SUITE_VERSION = "5.0"; 40 private static final String SUITE_PLAN = "cts"; 41 private static final String SUITE_BUILD = "12345"; 42 private static final String REPORT_VERSION = "5.0"; 43 private static final String OS_NAME = System.getProperty("os.name"); 44 private static final String OS_VERSION = System.getProperty("os.version"); 45 private static final String OS_ARCH = System.getProperty("os.arch"); 46 private static final String JAVA_VENDOR = System.getProperty("java.vendor"); 47 private static final String JAVA_VERSION = System.getProperty("java.version"); 48 private static final String NAME_A = "ModuleA"; 49 private static final String NAME_B = "ModuleB"; 50 private static final String DONE_A = "false"; 51 private static final String DONE_B = "true"; 52 private static final String RUNTIME_A = "100"; 53 private static final String RUNTIME_B = "200"; 54 private static final String ABI = "mips64"; 55 private static final String ID_A = AbiUtils.createId(ABI, NAME_A); 56 private static final String ID_B = AbiUtils.createId(ABI, NAME_B); 57 58 private static final String BUILD_FINGERPRINT = "build_fingerprint"; 59 private static final String BUILD_FINGERPRINT_UNALTERED = "build_fingerprint_unaltered"; 60 private static final String BUILD_ID = "build_id"; 61 private static final String BUILD_PRODUCT = "build_product"; 62 private static final String EXAMPLE_BUILD_ID = "XYZ"; 63 private static final String EXAMPLE_BUILD_PRODUCT = "wolverine"; 64 private static final String EXAMPLE_BUILD_FINGERPRINT = "example_build_fingerprint"; 65 private static final String EXAMPLE_BUILD_FINGERPRINT_UNALTERED = "example_build_fingerprint_unaltered"; 66 67 private static final String DEVICE_A = "device123"; 68 private static final String DEVICE_B = "device456"; 69 private static final String DEVICES = "device456,device123"; 70 private static final String CLASS_A = "android.test.Foor"; 71 private static final String CLASS_B = "android.test.Bar"; 72 private static final String METHOD_1 = "testBlah1"; 73 private static final String METHOD_2 = "testBlah2"; 74 private static final String METHOD_3 = "testBlah3"; 75 private static final String METHOD_4 = "testBlah4"; 76 private static final String METHOD_5 = "testBlah5"; 77 private static final String SUMMARY_SOURCE = String.format("%s#%s:20", CLASS_B, METHOD_4); 78 private static final String SUMMARY_MESSAGE = "Headline"; 79 private static final double SUMMARY_VALUE = 9001; 80 private static final String MESSAGE = "Something small is not alright"; 81 private static final String STACK_TRACE = "Something small is not alright\n " + 82 "at four.big.insects.Marley.sing(Marley.java:10)"; 83 private static final String BUG_REPORT = "https://cnsviewer.corp.google.com/cns/bugreport.txt"; 84 private static final String LOGCAT = "https://cnsviewer.corp.google.com/cns/logcat.gz"; 85 private static final String SCREENSHOT = "https://cnsviewer.corp.google.com/screenshot.png"; 86 private static final long START_MS = 1431586801000L; 87 private static final long END_MS = 1431673199000L; 88 private static final String START_DISPLAY = "Fri Aug 20 15:13:03 PDT 2010"; 89 private static final String END_DISPLAY = "Fri Aug 20 15:13:04 PDT 2010"; 90 91 private static final String REFERENCE_URL="http://android.com"; 92 private static final String LOG_URL ="file:///path/to/logs"; 93 private static final String COMMAND_LINE_ARGS = "cts -m CtsMyModuleTestCases"; 94 private static final String XML_BASE = 95 "<?xml version='1.0' encoding='UTF-8' standalone='no' ?>" + 96 "<?xml-stylesheet type=\"text/xsl\" href=\"compatibility_result.xsl\"?>\n" + 97 "<Result start=\"%d\" end=\"%d\" start_display=\"%s\"" + 98 "end_display=\"%s\" suite_name=\"%s\" suite_version=\"%s\" " + 99 "suite_plan=\"%s\" suite_build_number=\"%s\" report_version=\"%s\" " + 100 "devices=\"%s\" host_name=\"%s\"" + 101 "os_name=\"%s\" os_version=\"%s\" os_arch=\"%s\" java_vendor=\"%s\"" + 102 "java_version=\"%s\" reference_url=\"%s\" log_url=\"%s\"" + 103 "command_line_args=\"%s\">\n" + 104 "%s%s%s" + 105 "</Result>"; 106 private static final String XML_BUILD_INFO = 107 " <Build " + 108 BUILD_FINGERPRINT + "=\"%s\" " + 109 BUILD_ID + "=\"%s\" " + 110 BUILD_PRODUCT + "=\"%s\" " + 111 " />\n"; 112 private static final String XML_BUILD_INFO_WITH_UNALTERED_BUILD_FINGERPRINT = 113 " <Build " + 114 BUILD_FINGERPRINT + "=\"%s\" " + 115 BUILD_FINGERPRINT_UNALTERED + "=\"%s\" " + 116 BUILD_ID + "=\"%s\" " + 117 BUILD_PRODUCT + "=\"%s\" " + 118 " />\n"; 119 private static final String XML_SUMMARY = 120 " <Summary pass=\"%d\" failed=\"%d\" " + 121 "modules_done=\"1\" modules_total=\"1\" />\n"; 122 private static final String XML_MODULE = 123 " <Module name=\"%s\" abi=\"%s\" device=\"%s\" runtime=\"%s\" done=\"%s\">\n" + 124 "%s" + 125 " </Module>\n"; 126 private static final String XML_CASE = 127 " <TestCase name=\"%s\">\n" + 128 "%s" + 129 " </TestCase>\n"; 130 private static final String XML_TEST_PASS = 131 " <Test result=\"pass\" name=\"%s\"/>\n"; 132 private static final String XML_TEST_SKIP = 133 " <Test result=\"pass\" name=\"%s\" skipped=\"true\"/>\n"; 134 private static final String XML_TEST_FAIL = 135 " <Test result=\"fail\" name=\"%s\">\n" + 136 " <Failure message=\"%s\">\n" + 137 " <StackTrace>%s</StackTrace>\n" + 138 " </Failure>\n" + 139 " <BugReport>%s</BugReport>\n" + 140 " <Logcat>%s</Logcat>\n" + 141 " <Screenshot>%s</Screenshot>\n" + 142 " </Test>\n"; 143 private static final String XML_TEST_RESULT = 144 " <Test result=\"pass\" name=\"%s\">\n" + 145 " <Summary>\n" + 146 " <Metric source=\"%s\" message=\"%s\" score_type=\"%s\" score_unit=\"%s\">\n" + 147 " <Value>%s</Value>\n" + 148 " </Metric>\n" + 149 " </Summary>\n" + 150 " </Test>\n"; 151 private static final String NEW_XML_TEST_RESULT = 152 " <Test result=\"pass\" name=\"%s\">\n" 153 + " <Metric key=\"%s\">%s</Metric>\n" 154 + " </Test>\n"; 155 156 private File resultsDir = null; 157 private File resultDir = null; 158 159 @Override setUp()160 public void setUp() throws Exception { 161 resultsDir = FileUtil.createTempDir("results"); 162 resultDir = FileUtil.createTempDir("12345", resultsDir); 163 } 164 165 @Override tearDown()166 public void tearDown() throws Exception { 167 FileUtil.recursiveDelete(resultsDir); 168 } 169 testSerialization()170 public void testSerialization() throws Exception { 171 IInvocationResult result = new InvocationResult(); 172 result.setStartTime(START_MS); 173 result.setTestPlan(SUITE_PLAN); 174 result.addDeviceSerial(DEVICE_A); 175 result.addDeviceSerial(DEVICE_B); 176 result.addInvocationInfo(BUILD_FINGERPRINT, EXAMPLE_BUILD_FINGERPRINT); 177 result.addInvocationInfo(BUILD_ID, EXAMPLE_BUILD_ID); 178 result.addInvocationInfo(BUILD_PRODUCT, EXAMPLE_BUILD_PRODUCT); 179 // Module A: test1 passes, test2 not executed 180 IModuleResult moduleA = result.getOrCreateModule(ID_A); 181 moduleA.setDone(false); 182 moduleA.addRuntime(Integer.parseInt(RUNTIME_A)); 183 ICaseResult moduleACase = moduleA.getOrCreateResult(CLASS_A); 184 ITestResult moduleATest1 = moduleACase.getOrCreateResult(METHOD_1); 185 moduleATest1.setResultStatus(TestStatus.PASS); 186 ITestResult moduleATest2 = moduleACase.getOrCreateResult(METHOD_2); 187 moduleATest2.setResultStatus(null); // not executed test 188 // Module B: test3 fails, test4 passes with report log, test5 passes with skip 189 IModuleResult moduleB = result.getOrCreateModule(ID_B); 190 moduleB.setDone(true); 191 moduleB.addRuntime(Integer.parseInt(RUNTIME_B)); 192 ICaseResult moduleBCase = moduleB.getOrCreateResult(CLASS_B); 193 ITestResult moduleBTest3 = moduleBCase.getOrCreateResult(METHOD_3); 194 moduleBTest3.setResultStatus(TestStatus.FAIL); 195 moduleBTest3.setMessage(MESSAGE); 196 moduleBTest3.setStackTrace(STACK_TRACE); 197 moduleBTest3.setBugReport(BUG_REPORT); 198 moduleBTest3.setLog(LOGCAT); 199 moduleBTest3.setScreenshot(SCREENSHOT); 200 ITestResult moduleBTest4 = moduleBCase.getOrCreateResult(METHOD_4); 201 moduleBTest4.setResultStatus(TestStatus.PASS); 202 ReportLog report = new ReportLog(); 203 ReportLog.Metric summary = new ReportLog.Metric(SUMMARY_SOURCE, SUMMARY_MESSAGE, 204 SUMMARY_VALUE, ResultType.HIGHER_BETTER, ResultUnit.SCORE); 205 report.setSummary(summary); 206 moduleBTest4.setReportLog(report); 207 ITestResult moduleBTest5 = moduleBCase.getOrCreateResult(METHOD_5); 208 moduleBTest5.skipped(); 209 210 // Serialize to file 211 ResultHandler.writeResults(SUITE_NAME, SUITE_VERSION, SUITE_PLAN, SUITE_BUILD, 212 result, resultDir, START_MS, END_MS, REFERENCE_URL, LOG_URL, 213 COMMAND_LINE_ARGS); 214 215 // Parse the results and assert correctness 216 checkResult(ResultHandler.getResultFromDir(resultDir), false); 217 } 218 testParsing()219 public void testParsing() throws Exception { 220 File resultDir = writeResultDir(resultsDir, false); 221 // Parse the results and assert correctness 222 checkResult(ResultHandler.getResultFromDir(resultDir), false); 223 } 224 testParsing_newTestFormat()225 public void testParsing_newTestFormat() throws Exception { 226 File resultDir = writeResultDir(resultsDir, true); 227 // Parse the results and assert correctness 228 checkResult(ResultHandler.getResultFromDir(resultDir), true); 229 } 230 testParsing_usesUnalteredBuildFingerprintWhenPresent()231 public void testParsing_usesUnalteredBuildFingerprintWhenPresent() throws Exception { 232 String buildInfo = String.format(XML_BUILD_INFO_WITH_UNALTERED_BUILD_FINGERPRINT, 233 EXAMPLE_BUILD_FINGERPRINT, EXAMPLE_BUILD_FINGERPRINT_UNALTERED, 234 EXAMPLE_BUILD_ID, EXAMPLE_BUILD_PRODUCT); 235 File resultDir = writeResultDir(resultsDir, buildInfo, false); 236 checkResult( 237 ResultHandler.getResultFromDir(resultDir), 238 EXAMPLE_BUILD_FINGERPRINT_UNALTERED, 239 false); 240 } 241 testParsing_whenUnalteredBuildFingerprintIsEmpty_usesRegularBuildFingerprint()242 public void testParsing_whenUnalteredBuildFingerprintIsEmpty_usesRegularBuildFingerprint() throws Exception { 243 String buildInfo = String.format(XML_BUILD_INFO_WITH_UNALTERED_BUILD_FINGERPRINT, 244 EXAMPLE_BUILD_FINGERPRINT, "", EXAMPLE_BUILD_ID, EXAMPLE_BUILD_PRODUCT); 245 File resultDir = writeResultDir(resultsDir, buildInfo, false); 246 checkResult(ResultHandler.getResultFromDir(resultDir), EXAMPLE_BUILD_FINGERPRINT, false); 247 } 248 testGetLightResults()249 public void testGetLightResults() throws Exception { 250 File resultDir = writeResultDir(resultsDir, false); 251 List<IInvocationResult> lightResults = ResultHandler.getLightResults(resultsDir); 252 assertEquals("Expected one result", 1, lightResults.size()); 253 IInvocationResult lightResult = lightResults.get(0); 254 checkLightResult(lightResult); 255 } 256 writeResultDir(File resultsDir, boolean newTestFormat)257 static File writeResultDir(File resultsDir, boolean newTestFormat) throws IOException { 258 String buildInfo = String.format(XML_BUILD_INFO, EXAMPLE_BUILD_FINGERPRINT, 259 EXAMPLE_BUILD_ID, EXAMPLE_BUILD_PRODUCT); 260 return writeResultDir(resultsDir, buildInfo, newTestFormat); 261 } 262 263 /* 264 * Helper to write a result to the results dir, for testing. 265 * @return the written resultDir 266 */ writeResultDir(File resultsDir, String buildInfo, boolean newTestFormat)267 static File writeResultDir(File resultsDir, String buildInfo, boolean newTestFormat) 268 throws IOException { 269 File resultDir = null; 270 FileWriter writer = null; 271 try { 272 resultDir = FileUtil.createTempDir("12345", resultsDir); 273 // Create the result file 274 File resultFile = new File(resultDir, ResultHandler.TEST_RESULT_FILE_NAME); 275 writer = new FileWriter(resultFile); 276 String summary = String.format(XML_SUMMARY, 2, 1); 277 String moduleATest = String.format(XML_TEST_PASS, METHOD_1); 278 String moduleACases = String.format(XML_CASE, CLASS_A, moduleATest); 279 String moduleA = String.format(XML_MODULE, NAME_A, ABI, DEVICE_A, RUNTIME_A, DONE_A, 280 moduleACases); 281 String moduleBTest3 = String.format(XML_TEST_FAIL, METHOD_3, MESSAGE, STACK_TRACE, 282 BUG_REPORT, LOGCAT, SCREENSHOT); 283 String moduleBTest4 = ""; 284 if (newTestFormat) { 285 moduleBTest4 = 286 String.format( 287 NEW_XML_TEST_RESULT, 288 METHOD_4, 289 SUMMARY_MESSAGE, 290 Double.toString(SUMMARY_VALUE)); 291 } else { 292 moduleBTest4 = 293 String.format( 294 XML_TEST_RESULT, 295 METHOD_4, 296 SUMMARY_SOURCE, 297 SUMMARY_MESSAGE, 298 ResultType.HIGHER_BETTER.toReportString(), 299 ResultUnit.SCORE.toReportString(), 300 Double.toString(SUMMARY_VALUE)); 301 } 302 303 String moduleBTest5 = String.format(XML_TEST_SKIP, METHOD_5); 304 String moduleBTests = String.join("", moduleBTest3, moduleBTest4, moduleBTest5); 305 String moduleBCases = String.format(XML_CASE, CLASS_B, moduleBTests); 306 String moduleB = String.format(XML_MODULE, NAME_B, ABI, DEVICE_B, RUNTIME_B, DONE_B, 307 moduleBCases); 308 String modules = String.join("", moduleA, moduleB); 309 String hostName = ""; 310 try { 311 hostName = InetAddress.getLocalHost().getHostName(); 312 } catch (UnknownHostException ignored) {} 313 String output = String.format(XML_BASE, START_MS, END_MS, START_DISPLAY, END_DISPLAY, 314 SUITE_NAME, SUITE_VERSION, SUITE_PLAN, SUITE_BUILD, REPORT_VERSION, DEVICES, 315 hostName, OS_NAME, OS_VERSION, OS_ARCH, JAVA_VENDOR, 316 JAVA_VERSION, REFERENCE_URL, LOG_URL, COMMAND_LINE_ARGS, 317 buildInfo, summary, modules); 318 writer.write(output); 319 writer.flush(); 320 } finally { 321 if (writer != null) { 322 writer.close(); 323 } 324 } 325 return resultDir; 326 } 327 checkLightResult(IInvocationResult lightResult)328 static void checkLightResult(IInvocationResult lightResult) throws Exception { 329 assertEquals("Expected 3 passes", 3, lightResult.countResults(TestStatus.PASS)); 330 assertEquals("Expected 1 failure", 1, lightResult.countResults(TestStatus.FAIL)); 331 332 Map<String, String> buildInfo = lightResult.getInvocationInfo(); 333 assertEquals("Incorrect Build ID", EXAMPLE_BUILD_ID, buildInfo.get(BUILD_ID)); 334 assertEquals("Incorrect Build Product", 335 EXAMPLE_BUILD_PRODUCT, buildInfo.get(BUILD_PRODUCT)); 336 337 Set<String> serials = lightResult.getDeviceSerials(); 338 assertTrue("Missing device", serials.contains(DEVICE_A)); 339 assertTrue("Missing device", serials.contains(DEVICE_B)); 340 assertEquals("Expected 2 devices", 2, serials.size()); 341 assertTrue("Incorrect devices", serials.contains(DEVICE_A) && serials.contains(DEVICE_B)); 342 assertEquals("Incorrect start time", START_MS, lightResult.getStartTime()); 343 assertEquals("Incorrect test plan", SUITE_PLAN, lightResult.getTestPlan()); 344 List<IModuleResult> modules = lightResult.getModules(); 345 assertEquals("Expected 1 completed module", 1, lightResult.getModuleCompleteCount()); 346 assertEquals("Expected 2 total modules", 2, modules.size()); 347 } 348 checkResult(IInvocationResult result, boolean newTestFormat)349 static void checkResult(IInvocationResult result, boolean newTestFormat) throws Exception { 350 checkResult(result, EXAMPLE_BUILD_FINGERPRINT, newTestFormat); 351 } 352 checkResult( IInvocationResult result, String expectedBuildFingerprint, boolean newTestFormat)353 static void checkResult( 354 IInvocationResult result, String expectedBuildFingerprint, boolean newTestFormat) 355 throws Exception { 356 assertEquals("Expected 3 passes", 3, result.countResults(TestStatus.PASS)); 357 assertEquals("Expected 1 failure", 1, result.countResults(TestStatus.FAIL)); 358 359 Map<String, String> buildInfo = result.getInvocationInfo(); 360 assertEquals("Incorrect Build Fingerprint", expectedBuildFingerprint, result.getBuildFingerprint()); 361 assertEquals("Incorrect Build ID", EXAMPLE_BUILD_ID, buildInfo.get(BUILD_ID)); 362 assertEquals("Incorrect Build Product", 363 EXAMPLE_BUILD_PRODUCT, buildInfo.get(BUILD_PRODUCT)); 364 365 Set<String> serials = result.getDeviceSerials(); 366 assertTrue("Missing device", serials.contains(DEVICE_A)); 367 assertTrue("Missing device", serials.contains(DEVICE_B)); 368 assertEquals("Expected 2 devices", 2, serials.size()); 369 assertTrue("Incorrect devices", serials.contains(DEVICE_A) && serials.contains(DEVICE_B)); 370 assertEquals("Incorrect start time", START_MS, result.getStartTime()); 371 assertEquals("Incorrect test plan", SUITE_PLAN, result.getTestPlan()); 372 373 List<IModuleResult> modules = result.getModules(); 374 assertEquals("Expected 2 modules", 2, modules.size()); 375 376 IModuleResult moduleA = modules.get(0); 377 assertEquals("Expected 1 pass", 1, moduleA.countResults(TestStatus.PASS)); 378 assertEquals("Expected 0 failures", 0, moduleA.countResults(TestStatus.FAIL)); 379 assertEquals("Incorrect ABI", ABI, moduleA.getAbi()); 380 assertEquals("Incorrect name", NAME_A, moduleA.getName()); 381 assertEquals("Incorrect ID", ID_A, moduleA.getId()); 382 assertEquals("Incorrect runtime", Integer.parseInt(RUNTIME_A), moduleA.getRuntime()); 383 List<ICaseResult> moduleACases = moduleA.getResults(); 384 assertEquals("Expected 1 test case", 1, moduleACases.size()); 385 ICaseResult moduleACase = moduleACases.get(0); 386 assertEquals("Incorrect name", CLASS_A, moduleACase.getName()); 387 List<ITestResult> moduleAResults = moduleACase.getResults(); 388 assertEquals("Expected 1 result", 1, moduleAResults.size()); 389 ITestResult moduleATest1 = moduleAResults.get(0); 390 assertEquals("Incorrect name", METHOD_1, moduleATest1.getName()); 391 assertEquals("Incorrect result", TestStatus.PASS, moduleATest1.getResultStatus()); 392 assertNull("Unexpected bugreport", moduleATest1.getBugReport()); 393 assertNull("Unexpected log", moduleATest1.getLog()); 394 assertNull("Unexpected screenshot", moduleATest1.getScreenshot()); 395 assertNull("Unexpected message", moduleATest1.getMessage()); 396 assertNull("Unexpected stack trace", moduleATest1.getStackTrace()); 397 assertNull("Unexpected report", moduleATest1.getReportLog()); 398 399 IModuleResult moduleB = modules.get(1); 400 assertEquals("Expected 2 passes", 2, moduleB.countResults(TestStatus.PASS)); 401 assertEquals("Expected 1 failure", 1, moduleB.countResults(TestStatus.FAIL)); 402 assertEquals("Incorrect ABI", ABI, moduleB.getAbi()); 403 assertEquals("Incorrect name", NAME_B, moduleB.getName()); 404 assertEquals("Incorrect ID", ID_B, moduleB.getId()); 405 assertEquals("Incorrect runtime", Integer.parseInt(RUNTIME_B), moduleB.getRuntime()); 406 List<ICaseResult> moduleBCases = moduleB.getResults(); 407 assertEquals("Expected 1 test case", 1, moduleBCases.size()); 408 ICaseResult moduleBCase = moduleBCases.get(0); 409 assertEquals("Incorrect name", CLASS_B, moduleBCase.getName()); 410 List<ITestResult> moduleBResults = moduleBCase.getResults(); 411 assertEquals("Expected 3 results", 3, moduleBResults.size()); 412 ITestResult moduleBTest3 = moduleBResults.get(0); 413 assertEquals("Incorrect name", METHOD_3, moduleBTest3.getName()); 414 assertEquals("Incorrect result", TestStatus.FAIL, moduleBTest3.getResultStatus()); 415 assertEquals("Incorrect bugreport", BUG_REPORT, moduleBTest3.getBugReport()); 416 assertEquals("Incorrect log", LOGCAT, moduleBTest3.getLog()); 417 assertEquals("Incorrect screenshot", SCREENSHOT, moduleBTest3.getScreenshot()); 418 assertEquals("Incorrect message", MESSAGE, moduleBTest3.getMessage()); 419 assertEquals("Incorrect stack trace", STACK_TRACE, moduleBTest3.getStackTrace()); 420 assertNull("Unexpected report", moduleBTest3.getReportLog()); 421 ITestResult moduleBTest4 = moduleBResults.get(1); 422 assertEquals("Incorrect name", METHOD_4, moduleBTest4.getName()); 423 assertEquals("Incorrect result", TestStatus.PASS, moduleBTest4.getResultStatus()); 424 assertNull("Unexpected bugreport", moduleBTest4.getBugReport()); 425 assertNull("Unexpected log", moduleBTest4.getLog()); 426 assertNull("Unexpected screenshot", moduleBTest4.getScreenshot()); 427 assertNull("Unexpected message", moduleBTest4.getMessage()); 428 assertNull("Unexpected stack trace", moduleBTest4.getStackTrace()); 429 if (!newTestFormat) { 430 ReportLog report = moduleBTest4.getReportLog(); 431 assertNotNull("Expected report", report); 432 ReportLog.Metric summary = report.getSummary(); 433 assertNotNull("Expected report summary", summary); 434 assertEquals("Incorrect source", SUMMARY_SOURCE, summary.getSource()); 435 assertEquals("Incorrect message", SUMMARY_MESSAGE, summary.getMessage()); 436 assertEquals("Incorrect type", ResultType.HIGHER_BETTER, summary.getType()); 437 assertEquals("Incorrect unit", ResultUnit.SCORE, summary.getUnit()); 438 assertTrue( 439 "Incorrect values", 440 Arrays.equals(new double[] {SUMMARY_VALUE}, summary.getValues())); 441 } 442 ITestResult moduleBTest5 = moduleBResults.get(2); 443 assertEquals("Incorrect name", METHOD_5, moduleBTest5.getName()); 444 assertEquals("Incorrect result", TestStatus.PASS, moduleBTest5.getResultStatus()); 445 assertTrue("Expected skipped", moduleBTest5.isSkipped()); 446 assertNull("Unexpected bugreport", moduleBTest5.getBugReport()); 447 assertNull("Unexpected log", moduleBTest5.getLog()); 448 assertNull("Unexpected screenshot", moduleBTest5.getScreenshot()); 449 assertNull("Unexpected message", moduleBTest5.getMessage()); 450 assertNull("Unexpected stack trace", moduleBTest5.getStackTrace()); 451 assertNull("Unexpected report", moduleBTest5.getReportLog()); 452 } 453 } 454