def testGetBuildStages(self):
     """Test the GetBuildStages functionality."""
     bbv2 = buildbucket_v2.BuildbucketV2()
     start_time = Timestamp()
     start_time.GetCurrentTime()
     step = step_pb2.Step(name='stage_name',
                          start_time=start_time,
                          status=2)
     build_with_steps = build_pb2.Build(steps=[step])
     get_build_fn = self.PatchObject(bbv2,
                                     'GetBuild',
                                     return_value=build_with_steps)
     get_build_status_fn = self.PatchObject(
         bbv2,
         'GetBuildStatus',
         return_value={'build_config': 'something-paladin'})
     expected_result = [{
         'name':
         'stage_name',
         'start_time':
         datetime.fromtimestamp(start_time.seconds),
         'finish_time':
         None,
         'buildbucket_id':
         1234,
         'status':
         constants.BUILDER_STATUS_INFLIGHT,
         'build_config':
         'something-paladin'
     }]
     self.assertEqual(bbv2.GetBuildStages(1234), expected_result)
     get_build_fn.assert_called_once_with(1234, properties='steps')
     get_build_status_fn.assert_called_once_with(1234)
 def testGetBuildStatusWithInvalidId(self):
     """Test the function for an ID that doesn't exist in Buildbucket."""
     expected_invalid_status = {
         'build_config': None,
         'start_time': None,
         'finish_time': None,
         'status': None,
         'id': None,
         'chrome_version': None,
         'platform_version': None,
         'milestone_version': None,
         'full_version': None,
         'important': None,
         'buildbucket_id': 0,
         'summary': None,
         'master_build_id': None,
         'bot_hostname': None,
         'builder_name': None,
         'build_number': None,
         'buildbot_generation': None,
         'waterfall': None,
         'deadline': None,
         'build_type': None,
         'metadata_url': None,
         'toolchain_url': None,
         'branch': None
     }
     self.PatchObject(buildbucket_v2.BuildbucketV2,
                      'GetBuild',
                      side_effect=ProtocolError)
     bbv2 = buildbucket_v2.BuildbucketV2()
     status = bbv2.GetBuildStatus(0)
     self.assertEqual(status, expected_invalid_status)
Пример #3
0
 def testGetKilledChildBuildsWithInvalidId(self):
   """Test an unsuccessful query."""
   bbv2 = buildbucket_v2.BuildbucketV2()
   buildbucket_id = 1234
   self.PatchObject(buildbucket_v2.BuildbucketV2, 'GetBuild',
                    side_effect=ProtocolError)
   builds = bbv2.GetKilledChildBuilds(buildbucket_id)
   self.assertIsNone(builds)
 def testGetBuildStatusWithValidId(self):
     """Tests for GetBuildStatus with a valid ID."""
     properties_dict = {
         'cidb_id': '1234',
         'bot_id': 'swarm-cros-34',
         'cbb_branch': 'master',
         'cbb_config': 'sludge-paladin-tryjob',
         'cbb_master_build_id': '4321',
         'platform_version': '11721.0.0',
         'milestone_version': '74',
         'full_version': 'R74-11721.0.0-b3457724',
         'critical': '1',
         'build_type': 'Try',
     }
     start_time = Timestamp()
     start_time.GetCurrentTime()
     fake_properties = Struct(
         fields={
             key: Value(string_value=value)
             for key, value in properties_dict.items()
         })
     fake_output = build_pb2.Build.Output(properties=fake_properties)
     fake_build = build_pb2.Build(id=1234,
                                  start_time=start_time,
                                  status=2,
                                  output=fake_output)
     self.PatchObject(buildbucket_v2.BuildbucketV2,
                      'GetBuild',
                      return_value=fake_build)
     expected_valid_status = {
         'build_config': 'sludge-paladin-tryjob',
         'start_time': datetime.fromtimestamp(start_time.seconds),
         'finish_time': None,
         'id': 1234,
         'status': constants.BUILDER_STATUS_INFLIGHT,
         'chrome_version': None,
         'platform_version': '11721.0.0',
         'milestone_version': '74',
         'full_version': 'R74-11721.0.0-b3457724',
         'important': 1,
         'buildbucket_id': 1234,
         'summary': None,
         'master_build_id': 4321,
         'bot_hostname': 'swarm-cros-34',
         'builder_name': None,
         'build_number': None,
         'buildbot_generation': None,
         'waterfall': None,
         'deadline': None,
         'build_type': 'Try',
         'metadata_url': None,
         'toolchain_url': None,
         'branch': 'master'
     }
     bbv2 = buildbucket_v2.BuildbucketV2()
     status = bbv2.GetBuildStatus(1234)
     self.assertEqual(status, expected_valid_status)
 def testGetBuildWithoutProperties(self):
     fake_get_build_request = object()
     bbv2 = buildbucket_v2.BuildbucketV2()
     client = bbv2.client
     self.get_build_request_fn = self.PatchObject(
         rpc_pb2, 'GetBuildRequest', return_value=fake_get_build_request)
     self.get_build_function = self.PatchObject(client, 'GetBuild')
     bbv2.GetBuild('some-id')
     self.get_build_request_fn.assert_called_with(id='some-id')
     self.get_build_function.assert_called_with(fake_get_build_request)
 def testGetBuildWithProperties(self):
     fake_field_mask = field_mask_pb2.FieldMask(paths=['properties'])
     fake_get_build_request = object()
     bbv2 = buildbucket_v2.BuildbucketV2()
     client = bbv2.client
     self.get_build_request_fn = self.PatchObject(
         rpc_pb2, 'GetBuildRequest', return_value=fake_get_build_request)
     self.get_build_function = self.PatchObject(client, 'GetBuild')
     bbv2.GetBuild('some-id', 'properties')
     self.get_build_request_fn.assert_called_with(id='some-id',
                                                  fields=fake_field_mask)
     self.get_build_function.assert_called_with(fake_get_build_request)
 def testSearchBuildExceptionCases(self):
     """Test scenarios where SearchBuild raises an Exception."""
     bbv2 = buildbucket_v2.BuildbucketV2()
     builder = build_pb2.BuilderID(project='chromeos', bucket='general')
     tag = common_pb2.StringPair(key='cbb_master_buildbucket_id',
                                 value=str(1234))
     build_predicate = rpc_pb2.BuildPredicate(builder=builder, tags=[tag])
     with self.assertRaises(AssertionError):
         bbv2.SearchBuild(None, None, 100)
     with self.assertRaises(AssertionError):
         bbv2.SearchBuild(build_predicate, None, None)
     with self.assertRaises(AssertionError):
         bbv2.SearchBuild(build_predicate, 'str_fields', 100)
Пример #8
0
 def testSearchBuild(self):
   """Test redirection to the underlying RPC call."""
   bbv2 = buildbucket_v2.BuildbucketV2()
   builder = build_pb2.BuilderID(project='chromeos', bucket='general')
   tag = common_pb2.StringPair(key='cbb_master_buildbucket_id',
                               value=str(1234))
   build_predicate = rpc_pb2.BuildPredicate(
       builder=builder, tags=[tag])
   fields = field_mask_pb2.FieldMask()
   search_builds_fn = self.PatchObject(bbv2.client, 'SearchBuilds')
   bbv2.SearchBuild(build_predicate, fields=fields, page_size=123)
   search_builds_fn.assert_called_once_with(rpc_pb2.SearchBuildsRequest(
       predicate=build_predicate, fields=fields, page_size=123))
Пример #9
0
 def testGetKilledChildBuildsWithValidId(self):
   """Test a valid query flow."""
   bbv2 = buildbucket_v2.BuildbucketV2()
   buildbucket_id = 1234
   expected_child_builds = [8921795536486453568, 8921795536486453567]
   fake_properties = Struct(fields={
       'killed_child_builds': Value(string_value=str(expected_child_builds))
   })
   fake_output = build_pb2.Build.Output(properties=fake_properties)
   fake_build = build_pb2.Build(id=1234, output=fake_output)
   self.PatchObject(buildbucket_v2.BuildbucketV2, 'GetBuild',
                    return_value=fake_build)
   builds = bbv2.GetKilledChildBuilds(buildbucket_id)
   self.assertEqual(builds, expected_child_builds)
Пример #10
0
 def testGetChildStatusesSuccess(self):
   """Test GetChildStatuses when RPC succeeds."""
   bbv2 = buildbucket_v2.BuildbucketV2()
   fake_search_build_response = rpc_pb2.SearchBuildsResponse()
   self.PatchObject(bbv2, 'SearchBuild',
                    return_value=fake_search_build_response)
   self.assertEqual(bbv2.GetChildStatuses(1234), [])
   fake_build = build_pb2.Build(id=2341)
   fake_search_build_response = rpc_pb2.SearchBuildsResponse(
       builds=[fake_build])
   self.PatchObject(bbv2, 'SearchBuild',
                    return_value=fake_search_build_response)
   get_build_status = self.PatchObject(bbv2, 'GetBuildStatus')
   bbv2.GetChildStatuses(1234)
   get_build_status.assert_called_once_with(2341)
Пример #11
0
 def testGetBuildHistoryIgnoreIdWithoutId(self):
   """Test GetBuildHistory ignore_build_id logic when ID is absent."""
   bbv2 = buildbucket_v2.BuildbucketV2()
   builder = build_pb2.BuilderID(project='chromeos', bucket='general')
   tags = [common_pb2.StringPair(key='cbb_config',
                                 value='something-paladin')]
   build_list = [build_pb2.Build(id=1234),
                 build_pb2.Build(id=2341)]
   search_fn = self.PatchObject(
       bbv2, 'SearchBuild',
       return_value=rpc_pb2.SearchBuildsResponse(builds=build_list))
   status_fn = self.PatchObject(bbv2, 'GetBuildStatus')
   bbv2.GetBuildHistory('something-paladin', 1, ignore_build_id=1000)
   fake_predicate = rpc_pb2.BuildPredicate(
       builder=builder, tags=tags, create_time=None, build=None)
   search_fn.assert_called_with(fake_predicate, page_size=2)
   status_fn.assert_called_with(1234)
Пример #12
0
 def testGetBuildHistoryOtherArgs(self):
   """Test GetBuildHistory's processing of (args - ignore_build_id)."""
   builder = build_pb2.BuilderID(project='chromeos', bucket='general')
   tags = [common_pb2.StringPair(key='cbb_config',
                                 value='something-paladin'),
           common_pb2.StringPair(key='cbb_branch',
                                 value='master')]
   start_date = date(2019, 4, 16)
   create_time = buildbucket_v2.DateToTimeRange(start_date)
   fake_build = rpc_pb2.BuildRange(start_build_id=1234)
   fake_predicate = rpc_pb2.BuildPredicate(
       builder=builder, tags=tags, create_time=create_time, build=fake_build)
   bbv2 = buildbucket_v2.BuildbucketV2()
   search_fn = self.PatchObject(bbv2, 'SearchBuild')
   self.PatchObject(bbv2, 'GetBuildStatus')
   bbv2.GetBuildHistory('something-paladin', 10, start_date=start_date,
                        branch='master', start_build_id=1234)
   search_fn.assert_called_once_with(fake_predicate, page_size=10)
Пример #13
0
 def testGetStageFailures(self):
   """Test GetStageFailures logic."""
   bbv2 = buildbucket_v2.BuildbucketV2()
   fake_build_status = {'buildbucket_id': 1234,
                        'status': 'Passed!!',
                        'build_config': 'something-paladin',
                        'important': True}
   fake_stages = [
       {'name': 'stage_1', 'status':constants.BUILDER_STATUS_PASSED},
       {'name': 'stage_2', 'status':constants.BUILDER_STATUS_FAILED},
       {'name': 'stage_3', 'status':constants.BUILDER_STATUS_FORGIVEN},
   ]
   self.PatchObject(bbv2, 'GetBuildStatus', return_value=fake_build_status)
   self.PatchObject(bbv2, 'GetBuildStages', return_value=fake_stages)
   expected_answer = [
       {'stage_name': 'stage_2',
        'stage_status': constants.BUILDER_STATUS_FAILED,
        'buildbucket_id': 1234,
        'build_config': 'something-paladin',
        'build_status': 'Passed!!',
        'important': True}
   ]
   self.assertEqual(bbv2.GetStageFailures(1234), expected_answer)
Пример #14
0
    def InitializeClients(self):
        """Check if underlying clients are initialized.

    Returns:
      A boolean indicating the client statuses.
    """
        pid_mismatch = (self.process_id != os.getpid())
        if self._IsCIDBClientMissing() or pid_mismatch:
            self.process_id = os.getpid()
            if self.cidb_creds:
                for_service = self.for_service if self.for_service else False
                self.cidb_conn = cidb.CIDBConnection(self.cidb_creds,
                                                     for_service=for_service)
            elif not cidb.CIDBConnectionFactory.IsCIDBSetup():
                self.cidb_conn = None
            else:
                self.cidb_conn = (
                    cidb.CIDBConnectionFactory.GetCIDBConnectionForBuilder())

        if self._IsBuildbucketClientMissing() or pid_mismatch:
            self.bb_client = buildbucket_v2.BuildbucketV2()

        return not (self._IsCIDBClientMissing()
                    or self._IsBuildbucketClientMissing())
 def testCreatesClient(self):
     ret = buildbucket_v2.BuildbucketV2(test_env=True)
     self.assertIsInstance(ret.client, Client)