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]
Пример #2
0
    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)
Пример #3
0
    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)
Пример #4
0
    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])
Пример #5
0
    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)
Пример #8
0
    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)
Пример #10
0
    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)
Пример #13
0
    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)
Пример #14
0
  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)
Пример #15
0
    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)
Пример #16
0
    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')
Пример #21
0
    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)
Пример #23
0
    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()
Пример #24
0
    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()
Пример #25
0
    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()
Пример #28
0
    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'])
Пример #29
0
 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()
Пример #30
0
 def setUp(self):
     self.fake_db = fake_cidb.FakeCIDBConnection()