コード例 #1
0
    def setUp(self):
        @implementer(interfaces.IProperties)
        class FakeProperties(Mock):
            pass
        FakeProperties.render = Mock(side_effect=lambda x: x)

        class FakeBuildStatus(Mock):
            pass
        r = FakeRequest()
        r.sources = [FakeSource()]
        r.sources[0].changes = [FakeChange()]
        r.sources[0].revision = "12345"
        self.master = fakemaster.make_master(wantData=True, testcase=self)
        self.worker = worker.FakeWorker(self.master)
        self.worker.attached(None)
        self.workerforbuilder = Mock(name='workerforbuilder')
        self.workerforbuilder.worker = self.worker
        self.build = Build([r])
        self.build.setStepFactories([])
        self.builder = FakeBuilder(
            fakemaster.make_master(wantData=True, testcase=self))
        self.build.setBuilder(self.builder)
        self.properties = self.build.properties = FakeProperties()
        self.build_status = FakeBuildStatus()
        self.build._flushProperties = Mock()
        self.build.startBuild(self.build_status, self.workerforbuilder)
コード例 #2
0
 def setUp(self):
     self.setUpTestReactor()
     self.master = fakemaster.make_master(self)
     # don't load by default
     self.patch(connector.DataConnector, 'submodules', [])
     self.data = connector.DataConnector()
     self.data.setServiceParent(self.master)
コード例 #3
0
ファイル: test_db_masters.py プロジェクト: buildbot/buildbot
 def setUp(self):
     self.setUpTestReactor()
     self.reactor.advance(SOMETIME)
     self.master = fakemaster.make_master(self, wantDb=True)
     self.db = self.master.db
     self.db.checkForeignKeys = True
     self.insertTestData = self.db.insertTestData
コード例 #4
0
    def setUp(self):
        self.setUpTestReactor()
        self.master = fakemaster.make_master(self, wantData=True, wantDb=True,
                                             wantMq=True)

        self.message = message.MessageFormatter()
        self.messageMissing = message.MessageFormatterMissingWorker()
コード例 #5
0
    def setUp(self):
        self.master = fakemaster.make_master(testcase=self, wantMq=True,
                                             wantData=True, wantDb=True)

        # set the worker port to a loopback address with unspecified
        # port
        self.pbmanager = self.master.pbmanager = pbmanager.PBManager()
        self.pbmanager.setServiceParent(self.master)

        # remove the fakeServiceParent from fake service hierarchy, and replace
        # by a real one
        yield self.master.workers.disownServiceParent()
        self.workers = self.master.workers = workermanager.WorkerManager(
            self.master)
        self.workers.setServiceParent(self.master)

        self.botmaster = botmaster.BotMaster()
        self.botmaster.setServiceParent(self.master)

        self.master.status = master.Status()
        self.master.status.setServiceParent(self.master)
        self.master.botmaster = self.botmaster
        self.master.data.updates.workerConfigured = lambda *a, **k: None
        yield self.master.startService()

        self.buildworker = None
        self.port = None
        self.workerworker = None
        self.connector = None
        self._detach_deferreds = []

        # patch in our FakeBuilder for the regular Builder class
        self.patch(botmaster, 'Builder', FakeBuilder)
コード例 #6
0
ファイル: test_worker_base.py プロジェクト: buildbot/buildbot
 def setUp(self):
     self.setUpTestReactor()
     self.master = fakemaster.make_master(self, wantDb=True, wantData=True)
     self.botmaster = self.master.botmaster
     self.master.workers.disownServiceParent()
     self.workers = self.master.workers = bworkermanager.FakeWorkerManager()
     self.workers.setServiceParent(self.master)
コード例 #7
0
ファイル: test_sourcestamp.py プロジェクト: 1stvamp/buildbot
 def test_fromSsdict_patch(self):
     master = fakemaster.make_master()
     master.db = fakedb.FakeDBConnector(self)
     master.db.insertTestData([
         fakedb.Patch(id=99, subdir='/foo', patchlevel=3,
                     patch_base64='LS0gKys=',
                     patch_author='Professor Chaos',
                     patch_comment='comment'),
         fakedb.SourceStamp(id=234, sourcestampsetid=234, branch='trunk', revision='9284',
                     repository='svn://...', codebase='cb', project='world-domination',
                     patchid=99),
     ])
     # use getSourceStamp to minimize the risk from changes to the format of
     # the ssdict
     d = master.db.sourcestamps.getSourceStamp(234)
     d.addCallback(lambda ssdict :
                 sourcestamp.SourceStamp.fromSsdict(master, ssdict))
     def check(ss):
         self.assertEqual(ss.ssid, 234)
         self.assertEqual(ss.branch, 'trunk')
         self.assertEqual(ss.revision, '9284')
         self.assertEqual(ss.patch, (3, '-- ++', '/foo'))
         self.assertEqual(ss.patch_info, ('Professor Chaos', 'comment'))
         self.assertEqual(ss.changes, ())
         self.assertEqual(ss.project, 'world-domination')
         self.assertEqual(ss.repository, 'svn://...')
         self.assertEqual(ss.codebase, 'cb')
     d.addCallback(check)
     return d
コード例 #8
0
ファイル: test_db_workers.py プロジェクト: buildbot/buildbot
 def setUp(self):
     self.setUpTestReactor()
     self.master = fakemaster.make_master(self)
     self.db = fakedb.FakeDBConnector(self)
     self.db.setServiceParent(self.master)
     self.db.checkForeignKeys = True
     self.insertTestData = self.db.insertTestData
コード例 #9
0
    def makeBuilder(self, name="bldr", patch_random=False, **config_kwargs):
        """Set up C{self.bldr}"""
        self.factory = factory.BuildFactory()
        self.master = fakemaster.make_master()
        # only include the necessary required config, plus user-requested
        config_args = dict(name=name, slavename="slv", builddir="bdir",
                     slavebuilddir="sbdir", factory=self.factory)
        config_args.update(config_kwargs)
        self.builder_config = config.BuilderConfig(**config_args)
        self.bldr = builder.Builder(self.builder_config.name, _addServices=False)
        self.master.db = self.db = fakedb.FakeDBConnector(self)
        self.bldr.master = self.master
        self.bldr.botmaster = self.master.botmaster

        # patch into the _startBuildsFor method
        self.builds_started = []
        def _startBuildFor(slavebuilder, buildrequests):
            self.builds_started.append((slavebuilder, buildrequests))
            return defer.succeed(True)
        self.bldr._startBuildFor = _startBuildFor

        if patch_random:
            # patch 'random.choice' to always take the slave that sorts
            # last, based on its name
            self.patch(random, "choice",
                    lambda lst : sorted(lst, key=lambda m : m.name)[-1])

        self.bldr.startService()

        mastercfg = config.MasterConfig()
        mastercfg.builders = [ self.builder_config ]
        return self.bldr.reconfigService(mastercfg)
コード例 #10
0
    def setUpRequest(self, args, options=True, activate=True):
        self.request = FakeRequest(args=args)
        self.request.uri = b"/change_hook/poller"
        self.request.method = b"GET"
        www = self.request.site.master.www
        self.master = master = self.request.site.master = fakemaster.make_master(
            testcase=self, wantData=True)
        master.www = www
        yield self.master.startService()
        self.changeHook = change_hook.ChangeHookResource(
            dialects={'poller': options}, master=master)
        master.change_svc = ChangeManager()
        yield master.change_svc.setServiceParent(master)
        self.changesrc = self.Subclass(21, name='example')
        yield self.changesrc.setServiceParent(master.change_svc)

        self.otherpoller = self.Subclass(22, name="otherpoller")
        yield self.otherpoller.setServiceParent(master.change_svc)

        anotherchangesrc = base.ChangeSource(name='notapoller')
        anotherchangesrc.setName(u"notapoller")
        yield anotherchangesrc.setServiceParent(master.change_svc)

        yield self.request.test_render(self.changeHook)
        yield util.asyncSleep(0.1)
コード例 #11
0
    def setUp(self):
        self.botmaster = mock.Mock(name='botmaster')
        self.botmaster.builders = {}
        self.builders = {}

        def prioritizeBuilders(master, builders):
            # simple sort-by-name by default
            return sorted(builders, lambda b1, b2: cmp(b1.name, b2.name))
        self.master = self.botmaster.master = fakemaster.make_master(testcase=self,
                                                                     wantData=True, wantDb=True)
        self.master.caches = fakemaster.FakeCaches()
        self.master.config.prioritizeBuilders = prioritizeBuilders
        self.brd = buildrequestdistributor.BuildRequestDistributor(self.botmaster)
        self.brd.startService()

        # TODO: this is a terrible way to detect the "end" of the test -
        # it regularly completes too early after a simple modification of
        # a test.  Is there a better way?
        self.quiet_deferred = defer.Deferred()

        def _quiet():
            if self.quiet_deferred:
                d, self.quiet_deferred = self.quiet_deferred, None
                d.callback(None)
            else:
                self.fail("loop has already gone quiet once")
        self.brd._quiet = _quiet

        # a collection of rows that would otherwise clutter up every test
        self.base_rows = [
            fakedb.SourceStamp(id=21),
            fakedb.Builder(id=77, name='A'),
            fakedb.Buildset(id=11, reason='because'),
            fakedb.BuildsetSourceStamp(sourcestampid=21, buildsetid=11),
        ]
コード例 #12
0
 def setUp(self):
     self.master = fakemaster.make_master(testcase=self, wantMq=True,
                                          wantData=True)
     self.master.mq = self.master.mq
     self.botmaster = BotMaster(self.master)
     self.new_config = mock.Mock()
     self.botmaster.startService()
コード例 #13
0
    def makeBuilder(self, patch_random=False, **config_kwargs):
        """Set up C{self.bldr}"""
        self.bstatus = mock.Mock()
        self.factory = mock.Mock()
        self.master = fakemaster.make_master()
        # only include the necessary required config, plus user-requested
        config = dict(name="bldr", slavename="slv", builddir="bdir",
                     slavebuilddir="sbdir", factory=self.factory)
        config.update(config_kwargs)
        self.bldr = builder.Builder(config, self.bstatus)
        self.master.db = self.db = db = fakedb.FakeDBConnector(self)
        self.master.master_name = db.buildrequests.MASTER_NAME
        self.master.master_incarnation = db.buildrequests.MASTER_INCARNATION
        self.bldr.master = self.master
        self.bldr.botmaster = self.master.botmaster

        # patch into the _startBuildsFor method
        self.builds_started = []
        def _startBuildFor(slavebuilder, buildrequests):
            self.builds_started.append((slavebuilder, buildrequests))
            return defer.succeed(None)
        self.bldr._startBuildFor = _startBuildFor

        if patch_random:
            # patch 'random.choice' to always take the slave that sorts
            # last, based on its name
            self.patch(random, "choice",
                    lambda lst : sorted(lst, key=lambda m : m.name)[-1])

        # we don't want the reclaim service running during tests..
        self.bldr.reclaim_svc.disownServiceParent()

        self.bldr.startService()
コード例 #14
0
    def setupStep(self, *args, **kwargs):
        steps.BuildStepMixin.setupStep(self, *args, **kwargs)

        # This step reaches deeply into a number of parts of Buildbot.  That
        # should be fixed!

        # set up a buildmaster that knows about two fake schedulers, a and b
        self.build.builder.botmaster.parent = m = fakemaster.make_master()
        self.scheduler_a = a = FakeTriggerable(name='a', builderNames=['A'])
        self.scheduler_b = b = FakeTriggerable(name='b', builderNames=['B'])
        def allSchedulers():
            return [ a, b ]
        m.allSchedulers = allSchedulers

        # the build has a getSourceStamp method
        def getSourceStamp():
            return FakeSourceStamp(self.THIS_SSID)
        self.build.getSourceStamp = getSourceStamp

        # the db has a addSourceStamp method
        def addSourceStamp(**kwargs):
            self.addSourceStamp_kwargs = kwargs
            return defer.succeed(self.NEW_SSID)
        m.db.sourcestamps.addSourceStamp = addSourceStamp

        self.exp_add_sourcestamp = None
        self.exp_a_trigger = None
        self.exp_b_trigger = None
コード例 #15
0
ファイル: endpoint.py プロジェクト: BenjamenMeyer/buildbot
    def setUpEndpoint(self):
        self.master = fakemaster.make_master(wantMq=True, wantDb=True,
                                             wantData=True, testcase=self)
        self.db = self.master.db
        self.mq = self.master.mq
        self.data = self.master.data
        self.matcher = pathmatch.Matcher()

        rtype = self.rtype = self.resourceTypeClass(self.master)
        setattr(self.data.rtypes, rtype.name, rtype)

        self.ep = self.endpointClass(rtype, self.master)

        # this usually fails when a single-element pathPattern does not have a
        # trailing comma
        pathPatterns = self.ep.pathPatterns.split()
        for pp in pathPatterns:
            if pp == '/':
                continue
            if not pp.startswith('/') or pp.endswith('/'):
                raise AssertionError("invalid pattern %r" % (pp,))
        pathPatterns = [tuple(pp.split('/')[1:])
                        for pp in pathPatterns]
        for pp in pathPatterns:
            self.matcher[pp] = self.ep

        self.pathArgs = [
            set([arg.split(':', 1)[1] for arg in pp if ':' in arg])
            for pp in pathPatterns if pp is not None]
コード例 #16
0
ファイル: test_process_debug.py プロジェクト: Cray/buildbot
    def test_reconfigService_manhole(self):
        master = fakemaster.make_master()
        ds = debug.DebugServices()
        ds.setServiceParent(master)
        yield master.startService()

        # start off with no manhole
        yield ds.reconfigServiceWithBuildbotConfig(self.config)

        # set a manhole, fire it up
        self.config.manhole = manhole = FakeManhole()
        yield ds.reconfigServiceWithBuildbotConfig(self.config)

        self.assertTrue(manhole.running)
        self.assertIdentical(manhole.master, master)

        # unset it, see it stop
        self.config.manhole = None
        yield ds.reconfigServiceWithBuildbotConfig(self.config)

        self.assertFalse(manhole.running)
        self.assertIdentical(manhole.master, None)

        # re-start to test stopService
        self.config.manhole = manhole
        yield ds.reconfigServiceWithBuildbotConfig(self.config)

        # disown the service, and see that it unregisters
        yield ds.disownServiceParent()

        self.assertFalse(manhole.running)
        self.assertIdentical(manhole.master, None)
コード例 #17
0
 def setupWorker(self, *args, **kwargs):
     worker = dockerworker.DockerLatentWorker(*args, **kwargs)
     master = fakemaster.make_master(testcase=self, wantData=True)
     worker.setServiceParent(master)
     self.successResultOf(master.startService())
     self.addCleanup(master.stopService)
     return worker
コード例 #18
0
    def setUp(self):
        self.master = fakemaster.make_master(wantDb=True, testcase=self)
        self.botmaster = FakeBotMaster(self.master)

        self.clock = task.Clock()
        self.patch(reactor, 'callLater', self.clock.callLater)
        self.patch(reactor, 'seconds', self.clock.seconds)
コード例 #19
0
    def setUp(self):
        # ignore config error if txrequests is not installed
        self.patch(config, '_errors', Mock())
        self.master = fakemaster.make_master(
            testcase=self, wantData=True, wantDb=True, wantMq=True)

        yield self.master.startService()
コード例 #20
0
    def test_fromBrdict_multiple_sourcestamps(self):
        master = fakemaster.make_master()
        master.db = fakedb.FakeDBConnector(self)
        master.db.insertTestData([
            fakedb.SourceStampSet(id=234),

            fakedb.Change(changeid=13, branch='trunk', revision='9283',
                          repository='svn://a..', codebase='A',
                          project='world-domination'),
            fakedb.SourceStamp(id=234, sourcestampsetid=234, branch='trunk',
                               revision='9283', repository='svn://a..',
                               codebase='A', project='world-domination'),
            fakedb.SourceStampChange(sourcestampid=234, changeid=13),

            fakedb.Change(changeid=14, branch='trunk', revision='9284',
                          repository='svn://b..', codebase='B',
                          project='world-domination'),
            fakedb.SourceStamp(id=235, sourcestampsetid=234, branch='trunk',
                               revision='9284', repository='svn://b..',
                               codebase='B', project='world-domination'),
            fakedb.SourceStampChange(sourcestampid=235, changeid=14),

            fakedb.Buildset(id=539, reason='triggered', sourcestampsetid=234),
            fakedb.BuildsetProperty(buildsetid=539, property_name='x',
                                    property_value='[1, "X"]'),
            fakedb.BuildsetProperty(buildsetid=539, property_name='y',
                                    property_value='[2, "Y"]'),
            fakedb.BuildRequest(id=288, buildsetid=539, buildername='bldr',
                                priority=13, submitted_at=1200000000),
        ])
        # use getBuildRequest to minimize the risk from changes to the format
        # of the brdict
        d = master.db.buildrequests.getBuildRequest(288)
        d.addCallback(lambda brdict:
                      buildrequest.BuildRequest.fromBrdict(master, brdict))

        def check(br):
            # check enough of the source stamp to verify it found the changes

            # Test the single-sourcestamp interface
            self.assertEqual(br.source.ssid, 234)

            # Test the multiple sourcestamp interface
            self.assertEqual(br.sources['A'].ssid, 234)
            self.assertEqual(br.sources['B'].ssid, 235)

            self.assertEqual([ch.number for ch in br.sources['A'].changes], [13])
            self.assertEqual([ch.number for ch in br.sources['B'].changes], [14])

            self.assertEqual(br.reason, 'triggered')

            self.assertEqual(br.properties.getProperty('x'), 1)
            self.assertEqual(br.properties.getProperty('y'), 2)
            self.assertEqual(br.submittedAt, 1200000000)
            self.assertEqual(br.buildername, 'bldr')
            self.assertEqual(br.priority, 13)
            self.assertEqual(br.id, 288)
            self.assertEqual(br.bsid, 539)
        d.addCallback(check)
        return d
コード例 #21
0
 def setUp(self):
     self.master = master = fakemaster.make_master(
         testcase=self, wantData=True)
     self.botmaster = BotMaster()
     self.botmaster.setServiceParent(master)
     self.reactor = mock.Mock()
     self.botmaster.startService()
コード例 #22
0
ファイル: test_upgrade.py プロジェクト: Callek/buildbot
    def setUpUpgradeTest(self):
        self.basedir = None

        if self.source_tarball:
            tarball = util.sibpath(__file__, self.source_tarball)
            if not os.path.exists(tarball):
                raise unittest.SkipTest(
                    "'%s' not found (normal when not building from Git)"
                    % tarball)

            tf = tarfile.open(tarball)
            prefixes = set()
            for inf in tf:
                tf.extract(inf)
                prefixes.add(inf.name.split('/', 1)[0])
            # (note that tf.extractall isn't available in py2.4)

            # get the top-level dir from the tarball
            assert len(prefixes) == 1, "tarball has multiple top-level dirs!"
            self.basedir = prefixes.pop()
        else:
            if not os.path.exists("basedir"):
                os.makedirs("basedir")
            self.basedir = os.path.abspath("basedir")

        master = fakemaster.make_master()
        master.config.db['db_url'] = self.db_url
        self.db = connector.DBConnector(master, self.basedir)
        d = self.db.setup(check_version=False)
        @d.addCallback
        def setup_logging(_):
            querylog.log_from_engine(self.db.pool.engine)
        return d
コード例 #23
0
ファイル: test_db_masters.py プロジェクト: 595796726/buildbot
 def setUp(self):
     self.clock = task.Clock()
     self.clock.advance(SOMETIME)
     self.master = fakemaster.make_master(wantDb=True, testcase=self)
     self.db = self.master.db
     self.db.checkForeignKeys = True
     self.insertTestData = self.db.insertTestData
コード例 #24
0
 def setUp(self):
     self.setUpTestReactor()
     self.master = fakemaster.make_master(self, wantDb=True)
     self.db = self.master.db
     self.db.checkForeignKeys = True
     self.insertTestData = self.db.insertTestData
     return self.setUpTests()
コード例 #25
0
    def setUp(self):
        self.setUpTestReactor()
        self.botmaster = mock.Mock(name='botmaster')
        self.botmaster.builders = {}
        self.builders = {}

        def prioritizeBuilders(master, builders):
            # simple sort-by-name by default
            return sorted(builders, key=lambda b1: b1.name)
        self.master = self.botmaster.master = \
            fakemaster.make_master(self, wantData=True, wantDb=True)
        self.master.caches = fakemaster.FakeCaches()
        self.master.config.prioritizeBuilders = prioritizeBuilders
        self.brd = buildrequestdistributor.BuildRequestDistributor(
            self.botmaster)
        self.brd.parent = self.botmaster
        self.brd.startService()

        # a collection of rows that would otherwise clutter up every test
        self.base_rows = [
            fakedb.SourceStamp(id=21),
            fakedb.Builder(id=77, name='A'),
            fakedb.Buildset(id=11, reason='because'),
            fakedb.BuildsetSourceStamp(sourcestampid=21, buildsetid=11),
        ]
コード例 #26
0
 def setUp(self):
     self.setUpTestReactor()
     master = fakemaster.make_master(self)
     self.connector = TestedWampConnector()
     yield self.connector.setServiceParent(master)
     yield master.startService()
     yield self.connector.reconfigServiceWithBuildbotConfig(FakeConfig())
コード例 #27
0
    def setUp(self):
        self.master = fakemaster.make_master(testcase=self, wantMq=True,
                                             wantData=True, wantDb=True)

        # set the slave port to a loopback address with unspecified
        # port
        self.pbmanager = self.master.pbmanager = pbmanager.PBManager()
        self.pbmanager.setServiceParent(self.master)

        self.buildslaves = self.master.buildslaves = bslavemanager.BuildslaveManager(self.master)
        self.buildslaves.setServiceParent(self.master)

        self.botmaster = botmaster.BotMaster(self.master)
        self.botmaster.setServiceParent(self.master)

        self.master.status = master.Status(self.master)
        self.master.botmaster = self.botmaster
        self.master.data.updates.buildslaveConfigured = lambda *a, **k: None
        yield self.master.startService()

        self.buildslave = None
        self.port = None
        self.slavebuildslave = None
        self.connector = None
        self._detach_deferreds = []

        # patch in our FakeBuilder for the regular Builder class
        self.patch(botmaster, 'Builder', FakeBuilder)
コード例 #28
0
 def setUp(self):
     self.clock = task.Clock()
     self.clock.advance(SOMETIME)
     self.master = fakemaster.make_master()
     self.db = fakedb.FakeDBConnector(self.master, self)
     self.db.checkForeignKeys = True
     self.insertTestData = self.db.insertTestData
コード例 #29
0
 def setUp(self):
     self.setUpTestReactor()
     self.master = fakemaster.make_master(self, wantData=True, wantDb=True)
     self.master.botmaster = mock.Mock(name='botmaster')
     self.master.botmaster.builders = {}
     self.builders = {}
     self.bldr = yield self.createBuilder('A', builderid=77)
コード例 #30
0
 def setUp(self):
     self.setUpTestReactor()
     self.master = fakemaster.make_master(self, wantData=True)
     self.cm = manager.ChangeManager()
     self.master.startService()
     self.cm.setServiceParent(self.master)
     self.new_config = mock.Mock()
コード例 #31
0
 def setUp(self):
     self.master = fakemaster.make_master(wantDb=True,
                                          wantData=True,
                                          testcase=self)
     self.botmaster = self.master.botmaster
     self.workers = self.master.workers
コード例 #32
0
 def make_dbc(_):
     master = fakemaster.make_master()
     self.db = connector.DBConnector(master, self.basedir)
     return self.db.setup(check_version=False)
コード例 #33
0
ファイル: test_base.py プロジェクト: pmisik/buildbot
 def setUp(self):
     self.setup_test_reactor()
     self.master = fakemaster.make_master(self)
     self.wrk = worker.FakeWorker(self.master)
コード例 #34
0
 def __init__(self, user):
     self.user = user
     self.master = fakemaster.make_master(wantDb=True, testcase=self)
コード例 #35
0
 def setUp(self):
     self.master = fakemaster.make_master(testcase=self)
     self.sl = worker.FakeWorker(self.master)
コード例 #36
0
    def test_canBeCollapsed_different_codebases_raises_error(self):
        """ This testcase has two buildrequests
            Request Change Codebase   Revision Comment
            ----------------------------------------------------------------------
            288     17     C          1800     request 1 has repo not in request 2
            289     18     D          2100     request 2 has repo not in request 1
            --------------------------------
            Merge cannot be performd and raises error:
              Merging requests requires both requests to have the same codebases
        """
        brDicts = []  # list of buildrequests dictionnary
        master = fakemaster.make_master(testcase=self,
                                        wantData=True,
                                        wantDb=True)
        master.db.insertTestData([
            fakedb.Builder(id=77, name='bldr'),
            fakedb.SourceStamp(id=238,
                               branch='trunk',
                               revision='1800',
                               repository='svn://c..',
                               codebase='C',
                               project='world-domination'),
            fakedb.Change(changeid=17,
                          branch='trunk',
                          revision='1800',
                          repository='svn://c..',
                          codebase='C',
                          project='world-domination',
                          sourcestampid=238),
            fakedb.SourceStamp(id=239,
                               branch='trunk',
                               revision='2100',
                               repository='svn://d..',
                               codebase='D',
                               project='world-domination'),
            fakedb.Change(changeid=18,
                          branch='trunk',
                          revision='2100',
                          repository='svn://d..',
                          codebase='D',
                          project='world-domination',
                          sourcestampid=239),
            fakedb.Buildset(id=539, reason='triggered'),
            fakedb.BuildsetSourceStamp(buildsetid=539, sourcestampid=238),
            fakedb.BuildRequest(id=288, buildsetid=539, builderid=77),
            fakedb.Buildset(id=540, reason='triggered'),
            fakedb.BuildsetSourceStamp(buildsetid=540, sourcestampid=239),
            fakedb.BuildRequest(id=289, buildsetid=540, builderid=77),
        ])
        # use getBuildRequest to minimize the risk from changes to the format
        # of the brdict
        d = master.db.buildrequests.getBuildRequest(288)
        d.addCallback(lambda brdict: brDicts.append(brdict))
        d.addCallback(lambda _: master.db.buildrequests.getBuildRequest(289))
        d.addCallback(lambda brdict: brDicts.append(brdict))
        d.addCallback(lambda _: buildrequest.BuildRequest.canBeCollapsed(
            master, brDicts[0], brDicts[1]))

        def check(canBeCollapsed):
            self.assertEqual(canBeCollapsed, False)

        d.addCallback(check)
        return d
コード例 #37
0
    def test_mergeSourceStampsWith_common_codebases(self):
        """ This testcase has two buildrequests
            Request Change Codebase Revision Comment
            ----------------------------------------------------------------------
            288     13     A        9283
            289     15     A        9284
            288     14     B        9200
            289     16     B        9201
            --------------------------------
            After merged in Build:
            Source1 has rev 9284 and contains changes 13 and 15 from repository svn://a
            Source2 has rev 9201 and contains changes 14 and 16 from repository svn://b
        """
        brs = []  # list of buildrequests
        master = fakemaster.make_master(testcase=self,
                                        wantData=True,
                                        wantDb=True)
        master.db.insertTestData([
            fakedb.Builder(id=77, name='bldr'),
            fakedb.SourceStamp(id=234,
                               branch='trunk',
                               revision='9283',
                               repository='svn://a..',
                               codebase='A',
                               project='world-domination'),
            fakedb.Change(changeid=13,
                          branch='trunk',
                          revision='9283',
                          repository='svn://a..',
                          codebase='A',
                          project='world-domination',
                          sourcestampid=234),
            fakedb.SourceStamp(id=235,
                               branch='trunk',
                               revision='9200',
                               repository='svn://b..',
                               codebase='B',
                               project='world-domination'),
            fakedb.Change(changeid=14,
                          branch='trunk',
                          revision='9200',
                          repository='svn://b..',
                          codebase='A',
                          project='world-domination',
                          sourcestampid=235),
            fakedb.SourceStamp(id=236,
                               branch='trunk',
                               revision='9284',
                               repository='svn://a..',
                               codebase='A',
                               project='world-domination'),
            fakedb.Change(changeid=15,
                          branch='trunk',
                          revision='9284',
                          repository='svn://a..',
                          codebase='A',
                          project='world-domination',
                          sourcestampid=236),
            fakedb.SourceStamp(id=237,
                               branch='trunk',
                               revision='9201',
                               repository='svn://b..',
                               codebase='B',
                               project='world-domination'),
            fakedb.Change(changeid=16,
                          branch='trunk',
                          revision='9201',
                          repository='svn://b..',
                          codebase='B',
                          project='world-domination',
                          sourcestampid=237),
            fakedb.Buildset(id=539, reason='triggered'),
            fakedb.BuildsetSourceStamp(buildsetid=539, sourcestampid=234),
            fakedb.BuildsetSourceStamp(buildsetid=539, sourcestampid=235),
            fakedb.BuildRequest(id=288, buildsetid=539, builderid=77),
            fakedb.Buildset(id=540, reason='triggered'),
            fakedb.BuildsetSourceStamp(buildsetid=540, sourcestampid=236),
            fakedb.BuildsetSourceStamp(buildsetid=540, sourcestampid=237),
            fakedb.BuildRequest(id=289, buildsetid=540, builderid=77),
        ])
        # use getBuildRequest to minimize the risk from changes to the format
        # of the brdict
        d = master.db.buildrequests.getBuildRequest(288)
        d.addCallback(lambda brdict: buildrequest.BuildRequest.fromBrdict(
            master, brdict))
        d.addCallback(lambda br: brs.append(br))
        d.addCallback(lambda _: master.db.buildrequests.getBuildRequest(289))
        d.addCallback(lambda brdict: buildrequest.BuildRequest.fromBrdict(
            master, brdict))
        d.addCallback(lambda br: brs.append(br))

        def check(_):
            sources = brs[0].mergeSourceStampsWith(brs[1:])

            source1 = source2 = None
            for source in sources:
                if source.codebase == 'A':
                    source1 = source
                if source.codebase == 'B':
                    source2 = source

            self.assertFalse(source1 is None)
            self.assertEqual(source1.revision, '9284')

            self.assertFalse(source2 is None)
            self.assertEqual(source2.revision, '9201')

        d.addCallback(check)
        return d
コード例 #38
0
    def test_fromBrdict_multiple_sourcestamps(self):
        master = fakemaster.make_master(testcase=self,
                                        wantData=True,
                                        wantDb=True)
        master.db.insertTestData([
            fakedb.Builder(id=77, name='bldr'),
            fakedb.SourceStamp(id=234,
                               branch='trunk',
                               revision='9283',
                               repository='svn://a..',
                               codebase='A',
                               project='world-domination'),
            fakedb.Change(changeid=13,
                          branch='trunk',
                          revision='9283',
                          repository='svn://a..',
                          codebase='A',
                          project='world-domination',
                          sourcestampid=234),
            fakedb.SourceStamp(id=235,
                               branch='trunk',
                               revision='9284',
                               repository='svn://b..',
                               codebase='B',
                               project='world-domination'),
            fakedb.Change(changeid=14,
                          branch='trunk',
                          revision='9284',
                          repository='svn://b..',
                          codebase='B',
                          project='world-domination',
                          sourcestampid=235),
            fakedb.Buildset(id=539, reason='triggered'),
            fakedb.BuildsetSourceStamp(buildsetid=539, sourcestampid=234),
            fakedb.BuildsetProperty(buildsetid=539,
                                    property_name='x',
                                    property_value='[1, "X"]'),
            fakedb.BuildsetProperty(buildsetid=539,
                                    property_name='y',
                                    property_value='[2, "Y"]'),
            fakedb.BuildRequest(id=288,
                                buildsetid=539,
                                builderid=77,
                                priority=13,
                                submitted_at=1200000000),
        ])
        # use getBuildRequest to minimize the risk from changes to the format
        # of the brdict
        d = master.db.buildrequests.getBuildRequest(288)
        d.addCallback(lambda brdict: buildrequest.BuildRequest.fromBrdict(
            master, brdict))

        def check(br):
            self.assertEqual(br.reason, 'triggered')

            self.assertEqual(br.properties.getProperty('x'), 1)
            self.assertEqual(br.properties.getProperty('y'), 2)
            self.assertEqual(br.submittedAt, 1200000000)
            self.assertEqual(br.buildername, 'bldr')
            self.assertEqual(br.priority, 13)
            self.assertEqual(br.id, 288)
            self.assertEqual(br.bsid, 539)

        d.addCallback(check)
        return d
コード例 #39
0
ファイル: steps.py プロジェクト: pabloschu1/buildbot
    def setupStep(self, step, worker_version=None, worker_env=None,
                  buildFiles=None, wantDefaultWorkdir=True, wantData=True,
                  wantDb=False, wantMq=False):
        """
        Set up C{step} for testing.  This begins by using C{step} as a factory
        to create a I{new} step instance, thereby testing that the factory
        arguments are handled correctly.  It then creates a comfortable
        environment for the worker to run in, replete with a fake build and a
        fake worker.

        As a convenience, it can set the step's workdir with C{'wkdir'}.

        @param worker_version: worker version to present, as a dictionary mapping
            command name to version.  A command name of '*' will apply for all
            commands.

        @param worker_env: environment from the worker at worker startup

        @param wantData(bool): Set to True to add data API connector to master.
            Default value: True.

        @param wantDb(bool): Set to True to add database connector to master.
            Default value: False.

        @param wantMq(bool): Set to True to add mq connector to master.
            Default value: False.
        """
        if worker_version is None:
            worker_version = {
                '*': '99.99'
            }

        if worker_env is None:
            worker_env = dict()

        if buildFiles is None:
            buildFiles = list()

        factory = interfaces.IBuildStepFactory(step)

        step = self.step = factory.buildStep()
        self.master = fakemaster.make_master(self, wantData=wantData,
                                             wantDb=wantDb, wantMq=wantMq)

        # mock out the reactor for updateSummary's debouncing
        self.debounceClock = task.Clock()
        self.master.reactor = self.debounceClock

        # set defaults
        if wantDefaultWorkdir:
            step.workdir = step._workdir or 'wkdir'

        # step.build

        b = self.build = fakebuild.FakeBuild(master=self.master)
        b.allFiles = lambda: buildFiles
        b.master = self.master

        def getWorkerVersion(cmd, oldversion):
            if cmd in worker_version:
                return worker_version[cmd]
            if '*' in worker_version:
                return worker_version['*']
            return oldversion
        b.getWorkerCommandVersion = getWorkerVersion
        b.workerEnvironment = worker_env.copy()
        step.setBuild(b)

        # watch for properties being set
        self.properties = interfaces.IProperties(b)

        # step.progress

        step.progress = mock.Mock(name="progress")

        # step.worker

        self.worker = step.worker = worker.FakeWorker(self.master)
        self.worker.attached(None)

        # step overrides

        def addLog(name, type='s', logEncoding=None):
            _log = logfile.FakeLogFile(name, step)
            self.step.logs[name] = _log
            return defer.succeed(_log)
        step.addLog = addLog
        step.addLog_newStyle = addLog

        def addHTMLLog(name, html):
            _log = logfile.FakeLogFile(name, step)
            html = bytes2unicode(html)
            _log.addStdout(html)
            return defer.succeed(None)
        step.addHTMLLog = addHTMLLog

        def addCompleteLog(name, text):
            _log = logfile.FakeLogFile(name, step)
            self.step.logs[name] = _log
            _log.addStdout(text)
            return defer.succeed(None)
        step.addCompleteLog = addCompleteLog

        step.logobservers = self.logobservers = {}

        def addLogObserver(logname, observer):
            self.logobservers.setdefault(logname, []).append(observer)
            observer.step = step
        step.addLogObserver = addLogObserver

        # add any observers defined in the constructor, before this
        # monkey-patch
        for n, o in step._pendingLogObservers:
            addLogObserver(n, o)

        # expectations

        self.exp_result = None
        self.exp_state_string = None
        self.exp_properties = {}
        self.exp_missing_properties = []
        self.exp_logfiles = {}
        self.exp_hidden = False
        self.exp_exception = None

        # check that the step's name is not None
        self.assertNotEqual(step.name, None)

        return step
コード例 #40
0
 def test_constructor(self):
     self.setUpTestReactor()
     master = fakemaster.make_master(self)
     listener = base.Listener()
     yield listener.setServiceParent(master)
     self.assertEqual(listener.master, master)
コード例 #41
0
 def setUp(self):
     self.master = fakemaster.make_master()
     self.mqconfig = self.master.config.mq = {}
     self.conn = connector.MQConnector()
     self.conn.setServiceParent(self.master)
コード例 #42
0
 def setUp(self):
     self.master = fakemaster.make_master()
     self.db = fakedb.FakeDBConnector(self)
     self.db.setServiceParent(self.master)
     self.db.checkForeignKeys = True
     self.insertTestData = self.db.insertTestData
コード例 #43
0
 def setUp(self):
     self.master = fakemaster.make_master(testcase=self,
                                          wantDb=True, wantData=True)
コード例 #44
0
 def setUp(self):
     self.master = fakemaster.make_master()
     self.botmaster = BotMaster(self.master)
     self.new_config = mock.Mock()
     self.botmaster.startService()
コード例 #45
0
ファイル: test_util_codebase.py プロジェクト: zmadi1/buildbot
 def setUp(self):
     self.setUpTestReactor()
     self.master = fakemaster.make_master(self, wantDb=True, wantData=True)
     self.db = self.master.db
     self.object = FakeObject(self.master, self.codebases)
コード例 #46
0
 def setUp(self):
     self.master = fakemaster.make_master(wantDb=True, testcase=self)
     self.db = self.master.db
     self.db.checkForeignKeys = True
     self.insertTestData = self.db.insertTestData
コード例 #47
0
ファイル: test_worker_local.py プロジェクト: zmadi1/buildbot
 def setUp(self):
     self.setUpTestReactor()
     self.master = fakemaster.make_master(self, wantDb=True, wantData=True)
     self.botmaster = self.master.botmaster
     self.workers = self.master.workers
コード例 #48
0
ファイル: test_mq_wamp.py プロジェクト: winksaville/buildbot
 def setUp(self):
     self.master = fakemaster.make_master()
     self.master.wamp = FakeWampConnector()
     self.mq = wamp.WampMQ()
     self.mq.setServiceParent(self.master)
コード例 #49
0
ファイル: test_state.py プロジェクト: levitte/buildbot
 def setUp(self):
     self.setUpTestReactor()
     self.master = fakemaster.make_master(self, wantDb=True)
     self.object = FakeObject(self.master)
コード例 #50
0
 def run_prepare_gsp(self, gsp):
     gsp.master = fakemaster.make_master()
     gsp.master_status = gsp.master.status
コード例 #51
0
 def setUp(self):
     self.master = fakemaster.make_master(testcase=self, wantMq=True)
     self.data = connector.DataConnector()
     self.data.setServiceParent(self.master)
コード例 #52
0
 def setUp(self):
     self.master = fakemaster.make_master()
     # don't load by default
     self.patch(connector.DataConnector, 'submodules', [])
     self.data = connector.DataConnector()
     self.data.setServiceParent(self.master)
コード例 #53
0
 def setUp(self):
     self.setUpTestReactor()
     self.master = fakemaster.make_master(self, wantMq=True)
     self.mq = self.master.mq
     self.mq.verifyMessages = False
コード例 #54
0
 def setUp(self):
     self.setUpTestReactor()
     self.master = fakemaster.make_master(self)
     self.mq = simple.SimpleMQ()
     self.mq.setServiceParent(self.master)
コード例 #55
0
    def setUp(self):
        table_names = [
            'objects', 'object_state', 'masters',
            'workers', 'configured_workers', 'connected_workers',
            'builder_masters', 'builders'
        ]

        master = fakemaster.make_master(self, wantRealReactor=True)

        yield self.setUpRealDatabaseWithConnector(master, table_names=table_names,
                                                  sqlite_memory=False)

        master.data = dataconnector.DataConnector()
        yield master.data.setServiceParent(master)

        master.config.mq = dict(type='simple')
        master.mq = mqconnector.MQConnector()
        yield master.mq.setServiceParent(master)
        yield master.mq.setup()
        yield master.mq.startService()

        master.config.www = dict(
            port='tcp:0:interface=127.0.0.1',
            debug=True,
            auth=auth.NoAuth(),
            authz=authz.Authz(),
            avatar_methods=[],
            logfileName='http.log')
        master.www = wwwservice.WWWService()
        yield master.www.setServiceParent(master)
        yield master.www.startService()
        yield master.www.reconfigServiceWithBuildbotConfig(master.config)
        session = mock.Mock()
        session.uid = "0"
        master.www.site.sessionFactory = mock.Mock(return_value=session)

        # now that we have a port, construct the real URL and insert it into
        # the config.  The second reconfig isn't really required, but doesn't
        # hurt.
        self.url = 'http://127.0.0.1:%d/' % master.www.getPortnum()
        self.url = unicode2bytes(self.url)
        master.config.buildbotURL = self.url
        yield master.www.reconfigServiceWithBuildbotConfig(master.config)

        self.master = master

        self.agent = client.Agent(reactor)

        # create a telegram bot service
        tb = master.config.services['TelegramBot'] = telegram.TelegramBot(
            bot_token='12345:secret', useWebhook=True,
            chat_ids=[-123456], notify_events=['worker']
        )
        tb._get_http = self.get_http
        yield tb.setServiceParent(self.master)
        self.bot_url = self.url + b"telegram12345:secret"

        yield tb.startService()

        self.sent_messages = []

        def send_message(chat, message, **kwargs):
            self.sent_messages.append((chat, message))
        tb.bot.send_message = send_message
コード例 #56
0
 def setUp(self):
     self.master = fakemaster.make_master(testcase=self)
コード例 #57
0
 def setUp(self):
     self.master = fakemaster.make_master(testcase=self)
     self.createKube()
     self.kube.setServiceParent(self.master)
     return self.master.startService()
コード例 #58
0
ファイル: test_notifier.py プロジェクト: taiyeoguns/buildbot
 def setUp(self):
     self.setUpTestReactor()
     self.master = fakemaster.make_master(self,
                                          wantData=True,
                                          wantDb=True,
                                          wantMq=True)
コード例 #59
0
 def setUp(self):
     self.master = fakemaster.make_master(wantMq=True,
                                          wantDb=True,
                                          wantData=True,
                                          testcase=self)
     self.rtype = schedulers.Scheduler(self.master)
コード例 #60
0
 def make_dbc(_):
     master = fakemaster.make_master()
     master.config.db['db_url'] = self.db_url
     self.db = DBConnector(master, self.basedir)
     return self.db.setup(check_version=False)