Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
 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)
Exemplo n.º 3
0
 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
Exemplo n.º 4
0
 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)
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
 def testExtractErrorMessageSimple(self):
     error = {'code': 8, 'message': 'error message'}
     message = requests.ExtractErrorMessage(error)
     self.assertEqual('Error Response: [8] error message', message)
Exemplo n.º 7
0
 def testExtractErrorMessageBlank(self):
     error = {}
     message = requests.ExtractErrorMessage(error)
     self.assertEqual('Error Response: [UNKNOWN] ', message)