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())
예제 #2
0
 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())
예제 #3
0
    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
예제 #4
0
 def testParseGTestJSON_none(self):
     actual = gtest_test_instance.ParseGTestJSON(None)
     self.assertEquals([], actual)