Example #1
0
def _StartTestLevelCheckForFirstFailure(master_name, builder_name,
                                        build_number, step_name, failed_step,
                                        http_client):
    """Downloads test results and initiates first failure info at test level."""
    list_isolated_data = failed_step.list_isolated_data
    list_isolated_data = (list_isolated_data.ToSerializable()
                          if list_isolated_data else [])
    result_log = swarmed_test_util.RetrieveShardedTestResultsFromIsolatedServer(
        list_isolated_data, http_client)

    test_results_object = test_results_util.GetTestResultObject(result_log)

    if not test_results_object or not step_util.IsStepSupportedByFindit(
            test_results_object,
            step_util.GetCanonicalStepName(master_name, builder_name,
                                           build_number, step_name),
            master_name):
        return False

    failed_test_log, reliable_failed_tests = (
        test_results_service.GetFailedTestsInformationFromTestResult(
            test_results_object))

    _SaveIsolatedResultToStep(master_name, builder_name, build_number,
                              step_name, failed_test_log)
    return _InitiateTestLevelFirstFailure(reliable_failed_tests, failed_step)
Example #2
0
 def testGetFailedTestsInformationFromTestResultNoTestLocation(
         self, mock_i, _):
     failed_test_log = {}
     reliable_failed_tests = {'test1': 'test1', 'test2': 'test2'}
     mock_i.return_value = (failed_test_log, reliable_failed_tests)
     self.assertEqual(
         {},
         test_results_service.GetFailedTestsInformationFromTestResult(
             _GTEST_RESULT)[0])
Example #3
0
 def testUseTestLocationAsTestFailureLogAllWithLog(self, mock_tl, mock_i):
     failed_test_log = {'test1': 'somelog', 'test2': 'somelog'}
     reliable_failed_tests = {'test1': 'test1', 'test2': 'test2'}
     mock_i.return_value = (failed_test_log, reliable_failed_tests)
     expected_test_results = {'test1': 'somelog', 'test2': 'somelog'}
     self.assertEqual(
         expected_test_results,
         test_results_service.GetFailedTestsInformationFromTestResult(
             _GTEST_RESULT)[0])
     self.assertFalse(mock_tl.called)
Example #4
0
def _GetTestLevelLogForAStep(master_name, builder_name, build_number,
                             step_name, http_client):
    """Downloads swarming test results for a step from a build and returns logs
    for failed tests.

  Returns:
    A dict of failure logs for each failed test.
  """

    step = WfStep.Get(master_name, builder_name, build_number, step_name)

    if (step and step.isolated and step.log_data
            and step.log_data != constants.TOO_LARGE_LOG):
        # Test level log has been saved for this step.
        try:
            if step.log_data == constants.FLAKY_FAILURE_LOG:
                return {}
            return json.loads(step.log_data)
        except ValueError:
            logging.error(
                'log_data %s of step %s/%s/%d/%s is not json loadable.' %
                (step.log_data, master_name, builder_name, build_number,
                 step_name))
            return None

    # Sends request to swarming server for isolated data.
    step_isolated_data = swarming.GetIsolatedDataForStep(
        master_name, builder_name, build_number, step_name, http_client)

    if not step_isolated_data:
        logging.warning(
            'Failed to get step_isolated_data for build %s/%s/%d/%s.' %
            (master_name, builder_name, build_number, step_name))
        return None

    result_log = swarmed_test_util.RetrieveShardedTestResultsFromIsolatedServer(
        step_isolated_data, http_client)
    test_results = test_results_util.GetTestResultObject(result_log)

    if not test_results:
        logging.warning(
            'Failed to get swarming test results for build %s/%s/%d/%s.' %
            (master_name, builder_name, build_number, step_name))
        return None

    failed_test_log, _ = (
        test_results_service.GetFailedTestsInformationFromTestResult(
            test_results))
    return failed_test_log
Example #5
0
    def testGetFailedTestsInformationFromTestResult(self):
        test_results_json = {
            'seconds_since_epoch': 1522268603,
            'tests': {
                'bluetooth/requestDevice/chooser/new-scan-device-changed.html':
                {
                    'expected': 'PASS',
                    'actual': 'FAIL',
                    'time': 0.1
                },
                'virtual/spv2/fast/css/error-in-last-decl.html': {
                    'expected': 'PASS',
                    'actual': 'FAIL',
                    'bugs': ['crbug.com/537409']
                },
                'virtual/high-contrast-mode/paint/high-contrast-mode/image-filter'
                '-none/gradient-noinvert.html': {
                    'expected': 'PASS',
                    'actual': 'TEXT',
                    'time': 0.3
                },
                'bluetooth/requestDevice/chooser/new-scan-device-added.html': {
                    'expected': 'PASS',
                    'time': 1.1,
                    'actual': 'CRASH FAIL',
                    'has_stderr': True,
                    'is_unexpected': True
                },
                'bluetooth/requestDevice/chooser/unknown-status-test.html': {
                    'expected': 'PASS',
                    'time': 1.1,
                    'actual': 'FAIL',
                    'has_stderr': True,
                    'is_unexpected': True
                },
                'virtual/high-contrast-mode/paint/high-contrast-mode/'
                'image-filter-all/text-on-backgrounds.html': {
                    'expected': 'PASS',
                    'actual': 'FAIL',
                    'has_stderr': True,
                    'time': 0.3
                }
            },
        }
        test_results = WebkitLayoutTestResults(test_results_json)

        expected_failed_test_log = {
            'bluetooth/requestDevice/chooser/new-scan-device-changed.html':
            (base64.b64encode('third_party/blink/web_tests/bluetooth/request'
                              'Device/chooser/new-scan-device-changed.html')),
            'virtual/spv2/fast/css/error-in-last-decl.html':
            base64.b64encode('third_party/blink/web_tests/fast/css/'
                             'error-in-last-decl.html'),
            'virtual/high-contrast-mode/paint/high-contrast-mode/image-filter-none/'
            'gradient-noinvert.html':
            base64.b64encode(
                'third_party/blink/web_tests/paint/high-contrast-mode/'
                'image-filter-none/gradient-noinvert.html'),
            'bluetooth/requestDevice/chooser/new-scan-device-added.html':
            (base64.b64encode('third_party/blink/web_tests/bluetooth/request'
                              'Device/chooser/new-scan-device-added.html')),
            'bluetooth/requestDevice/chooser/unknown-status-test.html':
            (base64.b64encode('third_party/blink/web_tests/bluetooth/request'
                              'Device/chooser/unknown-status-test.html')),
            'virtual/high-contrast-mode/paint/high-contrast-mode/'
            'image-filter-all/text-on-backgrounds.html':
            base64.b64encode(
                'third_party/blink/web_tests/paint/high-contrast-mode/'
                'image-filter-all/text-on-backgrounds.html')
        }

        self.assertEqual(
            expected_failed_test_log,
            test_results_service.GetFailedTestsInformationFromTestResult(
                test_results)[0])