def testExtractErrorMessageUrl(self): error = { 'code': 8, 'message': 'error message', 'url': 'http://example.com' } message = requests.ExtractErrorMessage(error) self.assertEqual( 'Error Response: [8] error message\nhttp://example.com', message)
def testExtractErrorMessageDetails(self): error = { 'code': 8, 'message': 'error message', 'details': { 'data': 'data' } } message = requests.ExtractErrorMessage(error) self.assertEqual(('Error Response: [8] error message\n\n' 'Details: [\n {\n "data": "data"\n }\n]\n'), message)
def IsDone(self, operation): """Overrides.""" if operation.done: log.debug('Operation [{0}] complete. Result: {1}'.format( operation.name, json.dumps(encoding.MessageToDict(operation), indent=4))) if operation.error: raise OperationError(requests.ExtractErrorMessage( encoding.MessageToPyValue(operation.error))) return True log.debug('Operation [{0}] not complete. Waiting to retry.'.format( operation.name)) return False
def testExtractErrorMessageUrlAndDetailsUnicode(self): error = { 'code': 8, 'message': 'error Ṳᾔḯ¢◎ⅾℯ', 'url': 'http://example.com/Ṳᾔḯ¢◎ⅾℯ', 'details': { 'data': 'Ṳᾔḯ¢◎ⅾℯ' } } message = requests.ExtractErrorMessage(error) self.assertEqual(('Error Response: [8] error Ṳᾔḯ¢◎ⅾℯ\n' 'http://example.com/Ṳᾔḯ¢◎ⅾℯ\n\n' 'Details: [\n {\n "data": "Ṳᾔḯ¢◎ⅾℯ"\n }\n]\n'), message)
def WaitAndStreamLogs(self, build_op): """Wait for a Cloud Build to finish, streaming logs if possible.""" build_id = GetBuildProp(build_op, 'id', required=True) logs_uri = GetBuildProp(build_op, 'logUrl') logs_bucket = GetBuildProp(build_op, 'logsBucket') log.status.Print( 'Started cloud build [{build_id}].'.format(build_id=build_id)) log_loc = 'in the Cloud Console.' log_tailer = None if logs_bucket: log_object = self.CLOUDBUILD_LOGFILE_FMT_STRING.format( build_id=build_id) log_tailer = cloudbuild_logs.LogTailer(bucket=logs_bucket, obj=log_object) if logs_uri: log.status.Print('To see logs in the Cloud Console: ' + logs_uri) log_loc = 'at ' + logs_uri else: log.status.Print('Logs can be found in the Cloud Console.') callback = None if log_tailer: callback = log_tailer.Poll try: op = self.WaitForOperation(operation=build_op, retry_callback=callback) except OperationTimeoutError: log.debug('', exc_info=True) raise BuildFailedError('Cloud build timed out. Check logs ' + log_loc) # Poll the logs one final time to ensure we have everything. We know this # final poll will get the full log contents because GCS is strongly # consistent and Container Builder waits for logs to finish pushing before # marking the build complete. if log_tailer: log_tailer.Poll(is_last=True) final_status = _GetStatusFromOp(op) if final_status != self.CLOUDBUILD_SUCCESS: message = requests.ExtractErrorMessage( encoding.MessageToPyValue(op.error)) raise BuildFailedError('Cloud build failed. Check logs ' + log_loc + ' Failure status: ' + final_status + ': ' + message)
def testExtractErrorMessageSimple(self): error = {'code': 8, 'message': 'error message'} message = requests.ExtractErrorMessage(error) self.assertEqual('Error Response: [8] error message', message)
def testExtractErrorMessageBlank(self): error = {} message = requests.ExtractErrorMessage(error) self.assertEqual('Error Response: [UNKNOWN] ', message)