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)
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])
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)
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
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])