def setUp(self): self.db = fake_cidb.FakeCIDBConnection() self.master_build_id = 0 self.site_config = config_lib.GetConfig() self.config = self.site_config['master-paladin'] self.metadata = metadata_lib.CBuildbotMetadata() self.db = fake_cidb.FakeCIDBConnection() self.buildbucket_client = mock.Mock() self.slave_1 = 'cyan-paladin' self.slave_2 = 'auron-paladin' self.builders_array = [self.slave_1, self.slave_2]
def testReportStageFailureOnPackageBuildFailure(self): """Test ReportStageFailure On PackageBuildFailure.""" fake_db = fake_cidb.FakeCIDBConnection() msg = 'run command error' short_name = 'short name' failed_packages = ['chromeos-base/autotest', 'chromeos-base/telemetry'] error = cros_build_lib.RunCommandError(msg, cros_build_lib.CommandResult()) build_failure = failures_lib.PackageBuildFailure( error, short_name, failed_packages) mock_build_stage_id = 1 failure_id = failures_lib.ReportStageFailure(fake_db, mock_build_stage_id, build_failure) extra_info_json_string = json.dumps({ 'shortname': short_name, 'failed_packages': failed_packages }) self.assertEqual(len(fake_db.failureTable), 1) values = fake_db.failureTable[failure_id] self.assertEqual(values['exception_message'], str(build_failure)) self.assertEqual(values['outer_failure_id'], None) self.assertEqual(values['extra_info'], extra_info_json_string) self.assertEqual( json.loads(values['extra_info'])['failed_packages'], failed_packages)
def testReportStageFailureOnCompoundFailure(self): """Tests ReportStageFailure on CompoundFailure.""" fake_db = fake_cidb.FakeCIDBConnection() inner_exception_1 = failures_lib.TestLabFailure() inner_exception_2 = TypeError() exc_infos = failures_lib.CreateExceptInfo(inner_exception_1, None) exc_infos += failures_lib.CreateExceptInfo(inner_exception_2, None) outer_exception = failures_lib.GoBFailure(exc_infos=exc_infos) mock_build_stage_id = 9345 outer_failure_id = failures_lib.ReportStageFailure( fake_db, mock_build_stage_id, outer_exception) self.assertEqual(3, len(fake_db.failureTable)) for failure_id, failure in fake_db.failureTable.iteritems(): self.assertEqual(failure['build_stage_id'], mock_build_stage_id) self.assertIsNone(failure['extra_info']) if failure_id == outer_failure_id: self.assertEqual(failure_id, outer_failure_id) self.assertEqual(failure['exception_message'], outer_exception.ToSummaryString()) elif failure[ 'exception_type'] == failures_lib.TestLabFailure.__name__: self.assertEqual(failure['outer_failure_id'], outer_failure_id) self.assertEqual(failure['exception_category'], constants.EXCEPTION_CATEGORY_LAB) elif failure['exception_type'] == TypeError.__name__: self.assertEqual(failure['outer_failure_id'], outer_failure_id) self.assertEqual(failure['exception_category'], constants.EXCEPTION_CATEGORY_UNKNOWN)
def testHandleCommitQueueFailureWithFailedHWtests(self): """Test _HandleCommitQueueFailure with failed HWtests.""" stage = self.ConstructStage() self._MockPartialSubmit(stage) master_build_id = stage._run.attrs.metadata.GetValue('build_id') db = fake_cidb.FakeCIDBConnection() slave_build_id = db.InsertBuild('slave_1', waterfall.WATERFALL_INTERNAL, 1, 'slave_1', 'bot_hostname', master_build_id=master_build_id, buildbucket_id='123') cidb.CIDBConnectionFactory.SetupMockCidb(db) mock_failed_hwtests = mock.Mock() mock_get_hwtests = self.PatchObject(hwtest_results.HWTestResultManager, 'GetFailedHWTestsFromCIDB', return_value=mock_failed_hwtests) self.PatchObject(tree_status, 'WaitForTreeStatus', return_value=constants.TREE_OPEN) self.PatchObject(generic_stages.BuilderStage, 'GetScheduledSlaveBuildbucketIds', return_value=['123']) stage._HandleCommitQueueFailure(set(['test1']), set(), set(), False) stage.sync_stage.pool.handle_failure_mock.assert_called_once_with( mock.ANY, sanity=True, no_stat=set(), changes=self.changes, failed_hwtests=mock_failed_hwtests) mock_get_hwtests.assert_called_once_with(db, [slave_build_id])
def testGetBuildFailureMessageFromCIDB(self): """Test GetBuildFailureMessageFromCIDB.""" db = fake_cidb.FakeCIDBConnection() cidb.CIDBConnectionFactory.SetupMockCidb(db) build_id = db.InsertBuild('lumpy-pre-cq', waterfall.WATERFALL_INTERNAL, 1, 'lumpy-pre-cq', 'bot_hostname', status=constants.BUILDER_STATUS_INFLIGHT) stage_id = db.InsertBuildStage(build_id, 'BuildPackages', status='fail') db.InsertFailure( stage_id, 'PackageBuildFailure', 'Packages failed in ./build_packages: sys-apps/flashrom', exception_category='build', extra_info={ "shortname": "./build_packages", "failed_packages": ["sys-apps/flashrom"] }) self._Prepare(build_id=build_id) stage = self.ConstructStage() message = stage.GetBuildFailureMessageFromCIDB(build_id, db) self.assertFalse( message.MatchesExceptionCategories( {constants.EXCEPTION_CATEGORY_LAB})) self.assertTrue( message.MatchesExceptionCategories( {constants.EXCEPTION_CATEGORY_BUILD}))
def setUp(self): self.PatchObject(cros_sdk_lib, 'GetChrootVersion', return_value='12') self.cros_sdk = os.path.join(self.tempdir, 'buildroot', constants.CHROMITE_BIN_SUBDIR, 'cros_sdk') self.fake_db = fake_cidb.FakeCIDBConnection() self.buildstore = FakeBuildStore(self.fake_db) cidb.CIDBConnectionFactory.SetupMockCidb(self.fake_db)
def setUp(self): self.uprev_mock = self.PatchObject(commands, 'UprevPackages') self._Prepare() self.fake_db = fake_cidb.FakeCIDBConnection() self.buildstore = FakeBuildStore(self.fake_db) cidb.CIDBConnectionFactory.SetupMockCidb(self.fake_db)
def setUp(self): self.PatchObject(buildbucket_lib, 'GetServiceAccount', return_value=True) self.PatchObject(auth.AuthorizedHttp, '__init__', return_value=None) self.PatchObject(buildbucket_lib.BuildbucketClient, '_GetHost', return_value=buildbucket_lib.BUILDBUCKET_TEST_HOST) self.fake_db = fake_cidb.FakeCIDBConnection() cidb.CIDBConnectionFactory.SetupMockCidb(self.fake_db) self.fake_db.InsertBuild('test_builder', waterfall.WATERFALL_TRYBOT, 666, 'test_config', 'test_hostname', status=constants.BUILDER_STATUS_INFLIGHT, timeout_seconds=23456, buildbucket_id='100') self.fake_db.InsertBuild('test_builder', waterfall.WATERFALL_TRYBOT, 666, 'test_config', 'test_hostname', status=constants.BUILDER_STATUS_INFLIGHT, timeout_seconds=23456, buildbucket_id='200') self._Prepare(extra_config={'chroot_use_image': False})
def setUp(self): self._release_tag = None self._update_metadata = False self._mock_configurator = None self.PatchObject(commands, 'ExtractDependencies', return_value=dict()) self.fake_db = fake_cidb.FakeCIDBConnection() self.buildstore = FakeBuildStore(self.fake_db) cidb.CIDBConnectionFactory.SetupMockCidb(self.fake_db)
def setUp(self): self._patch_factory = patch_unittest.MockPatchFactory() self.changes = self._patch_factory.GetPatches(how_many=2) self._Prepare() self.fake_db = fake_cidb.FakeCIDBConnection() cidb.CIDBConnectionFactory.SetupMockCidb(self.fake_db) build_id = self.fake_db.InsertBuild('test-paladin', 'chromeos', 1, 'test-paladin', 'bot_hostname') self._run.attrs.metadata.UpdateWithDict({'build_id': build_id})
def setUp(self): self.setup_toolchains_mock = self.PatchObject(commands, 'SetupToolchains') self.fake_db = fake_cidb.FakeCIDBConnection() self.buildstore = FakeBuildStore(self.fake_db) cidb.CIDBConnectionFactory.SetupMockCidb(self.fake_db) # Prevent the setup_board tempdir path from being translated because it # ends up raising an error when that path can't be found in the chroot. self.PatchObject(path_util, 'ToChrootPath', side_effect=lambda x: x) self.setup_board = os.path.join(self.tempdir, 'buildroot', constants.CHROMITE_BIN_SUBDIR, 'setup_board')
def setUp(self): self.db = fake_cidb.FakeCIDBConnection() cidb.CIDBConnectionFactory.SetupMockCidb(self.db) retry_stats.SetupStats() os.environ['BUILDBOT_MASTERNAME'] = constants.WATERFALL_EXTERNAL master_build_id = self.db.InsertBuild('master_build', constants.WATERFALL_EXTERNAL, 1, 'master_build_config', 'bot_hostname') self._Prepare(build_id=None, master_build_id=master_build_id)
def setUp(self): self.db = fake_cidb.FakeCIDBConnection() self.buildstore = FakeBuildStore(self.db) cidb.CIDBConnectionFactory.SetupMockCidb(self.db) retry_stats.SetupStats() master_build_id = self.db.InsertBuild('master_build', 1, 'master_build_config', 'bot_hostname') self.PatchObject(toolchain, 'GetToolchainsForBoard') self.PatchObject(toolchain, 'GetArchForTarget', return_value='x86') self._Prepare(build_id=None, master_build_id=master_build_id)
def testReportHWTestResults(self): """Test ReportHWTestResults.""" stage = self.ConstructStage() json_str = """ { "tests":{ "Suite job":{ "status":"FAIL" }, "cheets_CTS.com.android.cts.dram":{ "status":"FAIL" }, "cheets_ContainerSmokeTest":{ "status":"GOOD" }, "cheets_DownloadsFilesystem":{ "status":"ABORT" }, "cheets_KeyboardTest":{ "status":"UNKNOWN" } } } """ json_dump_dict = json.loads(json_str) db = fake_cidb.FakeCIDBConnection() build_id = db.InsertBuild('build_1', waterfall.WATERFALL_INTERNAL, 1, 'build_1', 'bot_hostname') # When json_dump_dict is None self.assertIsNone(stage.ReportHWTestResults(None, build_id, db)) # When db is None self.assertIsNone(stage.ReportHWTestResults(json_dump_dict, build_id, None)) # When results are successfully reported stage.ReportHWTestResults(json_dump_dict, build_id, db) results = db.GetHWTestResultsForBuilds([build_id]) result_dict = {x.test_name: x.status for x in results} expect_dict = { 'cheets_DownloadsFilesystem': constants.HWTEST_STATUS_ABORT, 'cheets_KeyboardTest': constants.HWTEST_STATUS_OTHER, 'Suite job': constants.HWTEST_STATUS_FAIL, 'cheets_CTS.com.android.cts.dram': constants.HWTEST_STATUS_FAIL, 'cheets_ContainerSmokeTest': constants.HWTEST_STATUS_PASS } self.assertItemsEqual(expect_dict, result_dict) self.assertEqual(len(results), 5)
def setUp(self): self.db = fake_cidb.FakeCIDBConnection() cidb.CIDBConnectionFactory.SetupMockCidb(self.db) retry_stats.SetupStats() os.environ['BUILDBOT_MASTERNAME'] = waterfall.WATERFALL_EXTERNAL master_build_id = self.db.InsertBuild('master_build', waterfall.WATERFALL_EXTERNAL, 1, 'master_build_config', 'bot_hostname') self.PatchObject(toolchain, 'GetToolchainsForBoard') self.PatchObject(toolchain, 'GetArchForTarget', return_value='x86') self._Prepare(build_id=None, master_build_id=master_build_id)
def testGetBuildFailureMessageWithoutDB(self): """Test GetBuildFailureMessage without DB instance.""" db = fake_cidb.FakeCIDBConnection() cidb.CIDBConnectionFactory.SetupMockCidb(db) stage = self.ConstructStage() master_build_id = stage._run.attrs.metadata.GetValue('build_id') message = 'foo' get_msg_from_cidb = self.PatchObject(stage, 'GetBuildFailureMessageFromCIDB', return_value=message) get_msg_from_results = self.PatchObject( stage, 'GetBuildFailureMessageFromResults', return_value=message) stage.GetBuildFailureMessage() get_msg_from_cidb.assert_called_once_with(master_build_id, db) get_msg_from_results.assert_not_called()
def testGetSlavesAbortedBySelfDestructedMaster(self): """Test GetSlavesAbortedBySelfDestructedMaster with aborted slaves.""" db = fake_cidb.FakeCIDBConnection() buildstore = FakeBuildStore(db) cidb.CIDBConnectionFactory.SetupMockCidb(db) master_build_id = db.InsertBuild('master', 1, 'master', 'bot_hostname', buildbucket_id=1234) master_build_identifier = BuildIdentifier(cidb_id=master_build_id, buildbucket_id=1234) self.assertEqual( set(), builder_status_lib.GetSlavesAbortedBySelfDestructedMaster( master_build_identifier, buildstore)) db.InsertBuild('slave_1', 1, 'slave_1', 'bot_hostname', master_build_id=master_build_id, buildbucket_id=12) db.InsertBuild('slave_2', 2, 'slave_2', 'bot_hostname', master_build_id=master_build_id, buildbucket_id=23) db.InsertBuild('slave_3', 3, 'slave_3', 'bot_hostname', master_build_id=master_build_id, buildbucket_id=34) for slave_build_id in (12, 23): db.InsertBuildMessage( master_build_id, message_type=constants.MESSAGE_TYPE_IGNORED_REASON, message_subtype=constants.MESSAGE_SUBTYPE_SELF_DESTRUCTION, message_value=str(slave_build_id)) self.assertEqual( {'slave_1', 'slave_2'}, builder_status_lib.GetSlavesAbortedBySelfDestructedMaster( BuildIdentifier(cidb_id=master_build_id, buildbucket_id=1234), buildstore))
def test_RunParallelStages(self): """test _RunParallelStages.""" fake_db = fake_cidb.FakeCIDBConnection() build_id = fake_db.InsertBuild('test_build', 1, 'test_build', 'hostname') cidb.CIDBConnectionFactory.SetupMockCidb(mock_cidb=fake_db) parallel_ex = parallel.UnexpectedException('run parallel exception') self.PatchObject(parallel, 'RunParallelSteps', side_effect=parallel_ex) results_lib.Results.Record('stage_0', results_lib.Results.SKIPPED) fake_db.InsertBuildStage(build_id, 'stage_0', status=constants.BUILDER_STATUS_SKIPPED) results_lib.Results.Record('stage_1', results_lib.Results.FORGIVEN) fake_db.InsertBuildStage(build_id, 'stage_1', status=constants.BUILDER_STATUS_FORGIVEN) results_lib.Results.Record('stage_2', results_lib.Results.SUCCESS) fake_db.InsertBuildStage(build_id, 'stage_2', status=constants.BUILDER_STATUS_PASSED) # build stage status for stage_3 is in completed status fake_db.InsertBuildStage(build_id, 'stage_3', status=constants.BUILDER_STATUS_INFLIGHT) # build stage status for stage_4 is failed but no entry in failureTable fake_db.InsertBuildStage(build_id, 'stage_4', status=constants.BUILDER_STATUS_FAILED) # no build stage status found for stage_5 stage_objs = [] for i in range(0, 6): stage_mock = mock.Mock() stage_mock.GetStageNames.return_value = ['stage_%s' % i] stage_mock.GetBuildStageIDs.return_value = [i] stage_mock.StageNamePrefix.return_value = 'stage_prefix' stage_objs.append(stage_mock) self.assertRaises(parallel.UnexpectedException, generic_builders.Builder._RunParallelStages, stage_objs) self.assertTrue(results_lib.Results.StageHasResults('stage_3')) self.assertTrue(results_lib.Results.StageHasResults('stage_4')) for r in results_lib.Results.Get(): if r.name in ('stage_3', 'stage_4'): self.assertEqual(r.prefix, 'stage_prefix')
def testGetSlavesAbortedBySelfDestructedMaster(self): """Test GetSlavesAbortedBySelfDestructedMaster with aborted slaves.""" db = fake_cidb.FakeCIDBConnection() cidb.CIDBConnectionFactory.SetupMockCidb(db) master_build_id = db.InsertBuild('master', waterfall.WATERFALL_INTERNAL, 1, 'master', 'bot_hostname', buildbucket_id='0') self.assertEqual( set(), builder_status_lib.GetSlavesAbortedBySelfDestructedMaster( master_build_id, db)) slave_build_id_1 = db.InsertBuild('slave_1', waterfall.WATERFALL_INTERNAL, 1, 'slave_1', 'bot_hostname', master_build_id=master_build_id, buildbucket_id='1') slave_build_id_2 = db.InsertBuild('slave_2', waterfall.WATERFALL_INTERNAL, 2, 'slave_2', 'bot_hostname', master_build_id=master_build_id, buildbucket_id='2') db.InsertBuild('slave_3', waterfall.WATERFALL_INTERNAL, 3, 'slave_3', 'bot_hostname', master_build_id=master_build_id, buildbucket_id='3') for slave_build_id in (slave_build_id_1, slave_build_id_2): db.InsertBuildMessage( master_build_id, message_type=constants.MESSAGE_TYPE_IGNORED_REASON, message_subtype=constants.MESSAGE_SUBTYPE_SELF_DESTRUCTION, message_value=str(slave_build_id)) self.assertEqual( {'slave_1', 'slave_2'}, builder_status_lib.GetSlavesAbortedBySelfDestructedMaster( master_build_id, db))
def setUp(self): self.fake_db = fake_cidb.FakeCIDBConnection() cidb.CIDBConnectionFactory.SetupMockCidb(self.fake_db) build_id = self.fake_db.InsertBuild('builder name', 'waterfall', 1, 'build config', 'bot hostname') self._Prepare(build_id=build_id) release_tag = '4815.0.0-rc1' self._run.attrs.release_tag = '4815.0.0-rc1' fake_versioninfo = manifest_version.VersionInfo(release_tag, '39') self.gs_mock = self.StartPatcher(gs_unittest.GSContextMock()) self.gs_mock.SetDefaultCmdResult() self.PatchObject(cbuildbot_run._BuilderRunBase, 'GetVersionInfo', return_value=fake_versioninfo) self.PatchObject(toolchain, 'GetToolchainsForBoard')
def setUp(self): self.PatchObject(buildbucket_lib, 'GetServiceAccount', return_value='server_account') self.PatchObject(auth.AuthorizedHttp, '__init__', return_value=None) self.PatchObject(buildbucket_lib.BuildbucketClient, '_GetHost', return_value=buildbucket_lib.BUILDBUCKET_TEST_HOST) self.PatchObject(buildbucket_lib.BuildbucketClient, 'SendBuildbucketRequest', return_value=None) # Create and set up a fake cidb instance. self.fake_db = fake_cidb.FakeCIDBConnection() cidb.CIDBConnectionFactory.SetupMockCidb(self.fake_db) self.sync_stage = mock.Mock() self._Prepare()
def setUp(self): self.PatchObject(buildbucket_lib, 'GetServiceAccount', return_value=True) self.PatchObject(auth.AuthorizedHttp, '__init__', return_value=None) self.PatchObject( buildbucket_lib.BuildbucketClient, '_GetHost', return_value=buildbucket_lib.BUILDBUCKET_TEST_HOST) # Mock out the active APIs for both testing and safety. self.cancelMock = self.PatchObject(builder_status_lib, 'CancelBuilds') self.searchMock = self.PatchObject(buildbucket_lib.BuildbucketClient, 'SearchAllBuilds') self._Prepare(extra_config={'chroot_use_image': False}) self.fake_db = fake_cidb.FakeCIDBConnection() self.buildstore = FakeBuildStore(self.fake_db) cidb.CIDBConnectionFactory.SetupMockCidb(self.fake_db)
def setUp(self): # Always stub RunCommmand out as we use it in every method. self._bot_id = 'amd64-generic-paladin' self.buildstore = FakeBuildStore() site_config = config_lib_unittest.MockSiteConfig() build_config = site_config[self._bot_id] self.build_root = '/fake_root' # This test compares log output from the stages, so turn on buildbot # logging. logging.EnableBuildbotMarkers() self.db = fake_cidb.FakeCIDBConnection() cidb.CIDBConnectionFactory.SetupMockCidb(self.db) # Create a class to hold class Options(object): """Dummy class to hold option values.""" options = Options() options.archive_base = 'gs://dontcare' options.buildroot = self.build_root options.debug = False options.prebuilts = False options.clobber = False options.nosdk = False options.remote_trybot = False options.latest_toolchain = False options.buildnumber = 1234 options.android_rev = None options.chrome_rev = None options.branch = 'dontcare' options.chrome_root = False options.build_config_name = '' self._manager = parallel.Manager() # Pylint-1.9 has a false positive on this for some reason. self._manager.__enter__() # pylint: disable=no-value-for-parameter self._run = cbuildbot_run.BuilderRun(options, site_config, build_config, self._manager) results_lib.Results.Clear()
def setUp(self): self.PatchObject(buildbucket_lib, 'GetServiceAccount', return_value='server_account') self.PatchObject(auth.AuthorizedHttp, '__init__', return_value=None) self.PatchObject(buildbucket_lib.BuildbucketClient, '_GetHost', return_value=buildbucket_lib.BUILDBUCKET_TEST_HOST) self.PatchObject(buildbucket_lib.BuildbucketClient, 'SendBuildbucketRequest', return_value=None) # pylint: disable=protected-access self.PatchObject(cbuildbot_run._BuilderRunBase, 'GetVersion', return_value='R84-13099.77.0') # Create and set up a fake cidb instance. self.fake_db = fake_cidb.FakeCIDBConnection() cidb.CIDBConnectionFactory.SetupMockCidb(self.fake_db) self.sync_stage = mock.Mock() self._Prepare()
def testReportStageFailureOnBuildScriptFailure(self): """Test ReportStageFailure On BuildScriptFailure.""" fake_db = fake_cidb.FakeCIDBConnection() msg = 'run command error' short_name = 'short name' error = cros_build_lib.RunCommandError(msg, cros_build_lib.CommandResult()) build_failure = failures_lib.BuildScriptFailure(error, short_name) mock_build_stage_id = 1 failure_id = failures_lib.ReportStageFailure(fake_db, mock_build_stage_id, build_failure) extra_info_json_string = json.dumps({'shortname': short_name}) self.assertEqual(len(fake_db.failureTable), 1) values = fake_db.failureTable[failure_id] self.assertEqual(values['exception_message'], msg) self.assertEqual(values['outer_failure_id'], None) self.assertEqual(values['extra_info'], extra_info_json_string) self.assertEqual( json.loads(values['extra_info'])['shortname'], short_name)
def setUp(self): """Setup""" self.source_repo = 'ssh://source/repo' self.manifest_version_url = 'fake manifest url' self.branch = 'master' self.build_name = 'master-mst-android-pfq' self.incr_type = 'branch' self.next_version = 'next_version' self.sync_stage = None self.repo = repository.RepoRepository(self.source_repo, self.tempdir, self.branch) # Create and set up a fake cidb instance. self.fake_db = fake_cidb.FakeCIDBConnection() self.buildstore = FakeBuildStore(self.fake_db) cidb.CIDBConnectionFactory.SetupMockCidb(self.fake_db) self.manager = lkgm_manager.LKGMManager( source_repo=self.repo, manifest_repo=self.manifest_version_url, build_names=[self.build_name], build_type=constants.ANDROID_PFQ_TYPE, incr_type=self.incr_type, force=False, branch=self.branch, buildstore=self.buildstore, dry_run=True) self.PatchObject(buildbucket_lib, 'GetServiceAccount', return_value=True) self.PatchObject(auth.AuthorizedHttp, '__init__', return_value=None) self.PatchObject(buildbucket_lib.BuildbucketClient, '_GetHost', return_value=buildbucket_lib.BUILDBUCKET_TEST_HOST) self._Prepare()
def testGetBuildFailureMessageWithBuildStore(self): """Test GetBuildFailureMessage with working BuildStore.""" db = fake_cidb.FakeCIDBConnection() cidb.CIDBConnectionFactory.SetupMockCidb(db) stage = self.ConstructStage() message = 'foo' get_msg_from_cidb = self.PatchObject( stage, 'GetBuildFailureMessageFromBuildStore', return_value=message) self.PatchObject(FakeBuildStore, 'AreClientsReady', return_value=True) get_msg_from_results = self.PatchObject( stage, 'GetBuildFailureMessageFromResults', return_value=message) build_identifier = BuildIdentifier(cidb_id=constants.MOCK_BUILD_ID, buildbucket_id=None) self.PatchObject(stage._run, 'GetCIDBHandle', return_value=[build_identifier, None]) stage.GetBuildFailureMessage() get_msg_from_cidb.assert_called_once_with(self.buildstore, build_identifier) get_msg_from_results.assert_not_called()
def testReportStageFailureToCIDB(self): """Tests that the reporting fuction reports all included exceptions.""" fake_db = fake_cidb.FakeCIDBConnection() inner_exception_1 = failures_lib.TestLabFailure() inner_exception_2 = TypeError() exc_infos = failures_lib.CreateExceptInfo(inner_exception_1, None) exc_infos += failures_lib.CreateExceptInfo(inner_exception_2, None) outer_exception = failures_lib.GoBFailure(exc_infos=exc_infos) mock_build_stage_id = 9345 failures_lib.ReportStageFailureToCIDB(fake_db, mock_build_stage_id, outer_exception) self.assertEqual(3, len(fake_db.failureTable)) self.assertEqual( set([mock_build_stage_id]), set([x['build_stage_id'] for x in fake_db.failureTable.values()])) self.assertEqual( set([ constants.EXCEPTION_CATEGORY_INFRA, constants.EXCEPTION_CATEGORY_UNKNOWN, constants.EXCEPTION_CATEGORY_LAB ]), set([ x['exception_category'] for x in fake_db.failureTable.values() ])) # Find the outer failure id. for failure_id, failure in fake_db.failureTable.iteritems(): if failure['outer_failure_id'] is None: outer_failure_id = failure_id break # Now verify inner failures reference this failure. for failure_id, failure in fake_db.failureTable.iteritems(): if failure_id != outer_failure_id: self.assertEqual(outer_failure_id, failure['outer_failure_id'])
def __init__(self, fake_cidb_conn=None): super(FakeBuildStore, self).__init__() if fake_cidb_conn: self.fake_cidb = fake_cidb_conn else: self.fake_cidb = fake_cidb.FakeCIDBConnection()
def setUp(self): self.fake_db = fake_cidb.FakeCIDBConnection()