def testParseGTestJSON_skippedTest_example(self): raw_json = """ { "tests": { "mojom_tests": { "parse": { "ast_unittest": { "ASTTest": { "testNodeBase": { "expected": "SKIP", "actual": "SKIP" } } } } } }, "interrupted": false, "path_delimiter": ".", "version": 3, "seconds_since_epoch": 1406662283.764424, "num_failures_by_type": { "SKIP": 1 } }""" actual = gtest_test_instance.ParseGTestJSON(raw_json) self.assertEqual(1, len(actual)) self.assertEqual('mojom_tests.parse.ast_unittest.ASTTest.testNodeBase', actual[0].GetName()) self.assertEqual(base_test_result.ResultType.SKIP, actual[0].GetType())
def testParseGTestJSON_example(self): raw_json = """ { "tests": { "mojom_tests": { "parse": { "ast_unittest": { "ASTTest": { "testNodeBase": { "expected": "PASS", "actual": "PASS", "artifacts": { "screenshot": ["screenshots/page.png"] } } } } } } }, "interrupted": false, "path_delimiter": ".", "version": 3, "seconds_since_epoch": 1406662283.764424, "num_failures_by_type": { "FAIL": 0, "PASS": 1 }, "artifact_types": { "screenshot": "image/png" } }""" actual = gtest_test_instance.ParseGTestJSON(raw_json) self.assertEquals(1, len(actual)) self.assertEquals( 'mojom_tests.parse.ast_unittest.ASTTest.testNodeBase', actual[0].GetName()) self.assertEquals(base_test_result.ResultType.PASS, actual[0].GetType())
def _RunTest(self, device, test): # Run the test. timeout = (self._test_instance.shard_timeout * self.GetTool(device).GetTimeoutScale()) if self._test_instance.wait_for_java_debugger: timeout = None if self._test_instance.store_tombstones: tombstones.ClearAllTombstones(device) test_perf_output_filename = next(self._test_perf_output_filenames) if self._test_instance.isolated_script_test_output: suffix = '.json' else: suffix = '.xml' with device_temp_file.DeviceTempFile( adb=device.adb, dir=self._delegate.ResultsDirectory(device), suffix=suffix) as device_tmp_results_file: with contextlib_ext.Optional( device_temp_file.NamedDeviceTemporaryDirectory( adb=device.adb, dir='/sdcard/'), self._test_instance. gs_test_artifacts_bucket) as test_artifacts_dir: with (contextlib_ext.Optional( device_temp_file.DeviceTempFile( adb=device.adb, dir=self._delegate.ResultsDirectory(device)), test_perf_output_filename) ) as isolated_script_test_perf_output: with contextlib_ext.Optional( device_temp_file.NamedDeviceTemporaryDirectory( adb=device.adb, dir='/sdcard/'), self._test_instance.render_test_output_dir ) as render_test_output_dir: flags = list(self._test_instance.flags) if self._test_instance.enable_xml_result_parsing: flags.append('--gtest_output=xml:%s' % device_tmp_results_file.name) if self._test_instance.gs_test_artifacts_bucket: flags.append('--test_artifacts_dir=%s' % test_artifacts_dir.name) if self._test_instance.isolated_script_test_output: flags.append('--isolated-script-test-output=%s' % device_tmp_results_file.name) if test_perf_output_filename: flags.append( '--isolated_script_test_perf_output=%s' % isolated_script_test_perf_output.name) if self._test_instance.render_test_output_dir: flags.append('--render-test-output-dir=%s' % render_test_output_dir.name) logging.info('flags:') for f in flags: logging.info(' %s', f) with self._ArchiveLogcat(device, test) as logcat_file: output = self._delegate.Run(test, device, flags=' '.join(flags), timeout=timeout, retries=0) if self._test_instance.enable_xml_result_parsing: try: gtest_xml = device.ReadFile( device_tmp_results_file.name) except device_errors.CommandFailedError: logging.exception( 'Failed to pull gtest results XML file %s', device_tmp_results_file.name) gtest_xml = None if self._test_instance.isolated_script_test_output: try: gtest_json = device.ReadFile( device_tmp_results_file.name) except device_errors.CommandFailedError: logging.exception( 'Failed to pull gtest results JSON file %s', device_tmp_results_file.name) gtest_json = None if test_perf_output_filename: try: device.PullFile( isolated_script_test_perf_output.name, test_perf_output_filename) except device_errors.CommandFailedError: logging.exception( 'Failed to pull chartjson results %s', isolated_script_test_perf_output.name) test_artifacts_url = self._UploadTestArtifacts( device, test_artifacts_dir) if render_test_output_dir: self._PullRenderTestOutput( device, render_test_output_dir.name) for s in self._servers[str(device)]: s.Reset() if self._test_instance.app_files: self._delegate.PullAppFiles(device, self._test_instance.app_files, self._test_instance.app_file_dir) if not self._env.skip_clear_data: self._delegate.Clear(device) for l in output: logging.info(l) # Parse the output. # TODO(jbudorick): Transition test scripts away from parsing stdout. if self._test_instance.enable_xml_result_parsing: results = gtest_test_instance.ParseGTestXML(gtest_xml) elif self._test_instance.isolated_script_test_output: results = gtest_test_instance.ParseGTestJSON(gtest_json) else: results = gtest_test_instance.ParseGTestOutput( output, self._test_instance.symbolizer, device.product_cpu_abi) tombstones_url = None for r in results: if logcat_file: r.SetLink('logcat', logcat_file.Link()) if self._test_instance.gs_test_artifacts_bucket: r.SetLink('test_artifacts', test_artifacts_url) if r.GetType() == base_test_result.ResultType.CRASH: self._crashes.add(r.GetName()) if self._test_instance.store_tombstones: if not tombstones_url: resolved_tombstones = tombstones.ResolveTombstones( device, resolve_all_tombstones=True, include_stack_symbols=False, wipe_tombstones=True) stream_name = 'tombstones_%s_%s' % (time.strftime( '%Y%m%dT%H%M%S', time.localtime()), device.serial) tombstones_url = logdog_helper.text( stream_name, '\n'.join(resolved_tombstones)) r.SetLink('tombstones', tombstones_url) tests_stripped_disabled_prefix = set() for t in test: tests_stripped_disabled_prefix.add( gtest_test_instance.TestNameWithoutDisabledPrefix(t)) not_run_tests = tests_stripped_disabled_prefix.difference( set(r.GetName() for r in results)) return results, list(not_run_tests) if results else None
def testParseGTestJSON_none(self): actual = gtest_test_instance.ParseGTestJSON(None) self.assertEquals([], actual)