Exemplo n.º 1
0
    def setUp(self):
        self.setup_test_reactor()
        self.setUpLogging()
        self.basedir = os.path.abspath('basedir')
        yield self.setUpDirs(self.basedir)

        # don't create child services
        self.patch(master.BuildMaster, 'create_child_services',
                   lambda self: None)

        # patch out a few other annoying things the master likes to do
        self.patch(monkeypatches, 'patch_all', lambda: None)
        self.patch(signal, 'signal', lambda sig, hdlr: None)

        master.BuildMaster.masterHeartbeatService = mock.Mock()
        self.master = master.BuildMaster(self.basedir,
                                         reactor=self.reactor,
                                         config_loader=DefaultLoader())
        self.master.sendBuildbotNetUsageData = mock.Mock()
        self.master.botmaster = FakeBotMaster()
        self.db = self.master.db = fakedb.FakeDBConnector(self)
        yield self.db.setServiceParent(self.master)
        self.mq = self.master.mq = fakemq.FakeMQConnector(self)
        yield self.mq.setServiceParent(self.master)
        self.data = self.master.data = fakedata.FakeDataConnector(
            self.master, self)
        yield self.data.setServiceParent(self.master)
Exemplo n.º 2
0
 def setUp(self):
     self.slaves = {}
     self.rmtree("basedir")
     os.mkdir("basedir")
     self.master = master.BuildMaster("basedir")
     self.status = self.master.getStatus()
     self.control = interfaces.IControl(self.master)
Exemplo n.º 3
0
 def test_configfile_default(self):
     """
     If neither configfile nor config_loader are specified, The default config_loader is a
     `FileLoader` pointing at `"master.cfg"`.
     """
     m = master.BuildMaster(".", reactor=reactor)
     self.assertEqual(m.config_loader, FileLoader(".", "master.cfg"))
        def make_master(_):
            # don't create child services
            self.patch(master.BuildMaster, 'create_child_services',
                       lambda self: None)

            # patch out a few other annoying things the master likes to do
            self.patch(monkeypatches, 'patch_all', lambda: None)
            self.patch(signal, 'signal', lambda sig, hdlr: None)
            # XXX temporary
            self.patch(master, 'Status', lambda master: mock.Mock())

            master.BuildMaster.masterHeartbeatService = mock.Mock()
            self.reactor = self.make_reactor()
            self.master = master.BuildMaster(self.basedir,
                                             reactor=self.reactor,
                                             config_loader=DefaultLoader())
            self.master.sendBuildbotNetUsageData = mock.Mock()
            self.master.botmaster = FakeBotMaster()
            self.db = self.master.db = fakedb.FakeDBConnector(self)
            self.db.setServiceParent(self.master)
            self.mq = self.master.mq = fakemq.FakeMQConnector(self)
            self.mq.setServiceParent(self.master)
            self.data = self.master.data = fakedata.FakeDataConnector(
                self.master, self)
            self.data.setServiceParent(self.master)
Exemplo n.º 5
0
 def test_configfile_configloader_conflict(self):
     """
     If both configfile and config_loader are specified, a configuration
     error is raised.
     """
     with self.assertRaises(config.ConfigErrors):
         master.BuildMaster(".", "master.cfg",
                            reactor=reactor, config_loader=DefaultLoader())
Exemplo n.º 6
0
 def setUp(self):
     self.master = None
     self.slave = None
     self.rmtree("control_basedir")
     os.mkdir("control_basedir")
     self.master = master.BuildMaster("control_basedir")
     self.slavebase = os.path.abspath("control_slavebase")
     self.rmtree(self.slavebase)
     os.mkdir("control_slavebase")
Exemplo n.º 7
0
    def testGetBuilderNames(self):
        os.mkdir("bnames")
        m = master.BuildMaster("bnames")
        s = m.getStatus()

        m.loadConfig(config_3)
        m.readConfig = True

        self.failUnlessEqual(s.getBuilderNames(),
                             ["dummy", "testdummy", "adummy", "bdummy"])
        self.failUnlessEqual(s.getBuilderNames(categories=['test']),
                             ["testdummy", "bdummy"])
        def loadcfg(_):
            # Use a temporary directory since loadConfig() creates a bunch of
            # builder directories
            self.tempdir = mkdtemp()
            copy(self.configFileName, self.tempdir)

            os.chdir(self.tempdir)
            # Add the original directory to the library path so local module
            # imports work
            sys.path.append(self.basedir)

            bmaster = master.BuildMaster(self.basedir, self.configFileName)
            return bmaster.loadConfig(open(self.configFileName, "r"),
                                      checkOnly=True)
Exemplo n.º 9
0
        def set_master(_):
            self.master = master.BuildMaster(basedir)

            self.db = self.master.db = fakedb.FakeDBConnector(self)

            self.master.db_poll_interval = 10

            # overridesubscription callbacks
            self.master._change_subs = sub = mock.Mock()
            sub.deliver = self.deliverChange
            self.master._new_buildset_subs = sub = mock.Mock()
            sub.deliver = self.deliverBuildsetAddition
            self.master._complete_buildset_subs = sub = mock.Mock()
            sub.deliver = self.deliverBuildsetCompletion
Exemplo n.º 10
0
        def make_master(_):
            # don't create child services
            self.patch(master.BuildMaster, 'create_child_services',
                    lambda self : None)

            # patch out a few other annoying things the msater likes to do
            self.patch(monkeypatches, 'patch_all', lambda : None)
            self.patch(signal, 'signal', lambda sig, hdlr : None)
            self.patch(master, 'Status', lambda master : mock.Mock()) # XXX temporary
            self.patch(config.MasterConfig, 'loadConfig',
                    classmethod(lambda cls, b, f : cls()))

            self.master = master.BuildMaster(self.basedir)
            self.db = self.master.db = fakedb.FakeDBConnector(self)
Exemplo n.º 11
0
    def startMaster(self, sch, startWorker=False):
        BuildmasterConfig['schedulers'] = [sch]
        self.sch = sch

        BuildmasterConfig['status'] = []

        # create the master and set its config
        m = self.master = master.BuildMaster(self.basedir, self.configfile)
        m.config = config.MasterConfig.loadConfig(self.basedir,
                                                  self.configfile)

        # set up the db
        yield m.db.setup(check_version=False)
        yield m.db.model.create()

        # stub out m.db.setup since it was already called above
        m.db.setup = lambda: None

        # mock reactor.stop (which trial *really* doesn't
        # like test code to call!)
        mock_reactor = mock.Mock(spec=reactor)
        mock_reactor.callWhenRunning = reactor.callWhenRunning
        mock_reactor.getThreadPool = reactor.getThreadPool
        mock_reactor.callFromThread = reactor.callFromThread

        # start the service
        yield m.startService(_reactor=mock_reactor)
        self.failIf(mock_reactor.stop.called,
                    "startService tried to stop the reactor; check logs")

        # wait until the scheduler is active
        yield waitFor(lambda: self.sch.active)

        # and, for Try_Userpass, until it's registered its port
        if isinstance(self.sch, trysched.Try_Userpass):

            def getSchedulerPort():
                if not self.sch.registrations:
                    return
                self.serverPort = self.sch.registrations[0].getPort()
                log.msg("Scheduler registered at port %d" % self.serverPort)
                return True

            yield waitFor(getSchedulerPort)

        # now start the fake worker
        if startWorker:
            self.worker = FakeRemoteWorker(self.serverPort)
            yield self.worker.start()
Exemplo n.º 12
0
    def testSender(self):
        basedir = "changes/Sender/sender"
        if not os.path.exists(basedir):
            os.makedirs(basedir)
        spec = dbspec.DBSpec("sqlite3", os.path.join(basedir, "state.sqlite"))

        sm = schema.DBSchemaManager(spec, basedir)
        sm.upgrade()

        self.master = master.BuildMaster(basedir, db_spec=spec)
        self.master.readConfig = True
        self.master.startService()
        d = self.master.loadConfig(config_sender)
        d.addCallback(self._testSender_1)
        return d
Exemplo n.º 13
0
 def testMaster(self):
     self.rmtree("basedir")
     os.mkdir("basedir")
     m = master.BuildMaster("basedir")
     m.loadConfig(config_run)
     m.readConfig = True
     m.startService()
     cm = m.change_svc
     c = changes.Change("bob", ["Makefile", "foo/bar.c"], "changed stuff")
     cm.addChange(c)
     # verify that the Scheduler is now waiting
     s = m.allSchedulers()[0]
     self.failUnless(s.timer)
     # halting the service will also stop the timer
     d = defer.maybeDeferred(m.stopService)
     return d
Exemplo n.º 14
0
    def startMaster(self, sch, startSlave=False, wantPBListener=False):
        BuildmasterConfig['schedulers'] = [sch]
        self.sch = sch

        if wantPBListener:
            self.pblistener = client.PBListener(0)
            BuildmasterConfig['status'] = [self.pblistener]
        else:
            BuildmasterConfig['status'] = []

        # create the master and set its config
        m = self.master = master.BuildMaster(self.basedir, self.configfile)
        m.config = config.MasterConfig.loadConfig(
            self.basedir, self.configfile)

        # set up the db
        yield m.db.setup(check_version=False)
        yield m.db.model.create()

        # stub out m.db.setup since it was already called above
        m.db.setup = lambda: None

        # mock reactor.stop (which trial *really* doesn't
        # like test code to call!)
        mock_reactor = mock.Mock(spec=reactor)
        mock_reactor.callWhenRunning = reactor.callWhenRunning

        # start the service
        yield m.startService(_reactor=mock_reactor)
        self.failIf(mock_reactor.stop.called,
                    "startService tried to stop the reactor; check logs")

        # hang out until the scheduler has registered its PB port
        if isinstance(self.sch, trysched.Try_Userpass):
            def getSchedulerPort():
                if not self.sch.registrations:
                    return
                self.serverPort = self.sch.registrations[0].getPort()
                log.msg("Scheduler registered at port %d" % self.serverPort)
                return True
            yield waitFor(getSchedulerPort)

        # now start the fake slave
        if startSlave:
            self.slave = FakeRemoteSlave(self.serverPort)
            yield self.slave.start()
Exemplo n.º 15
0
        def loadcfg(_):
            # Use a temporary directory since loadConfig() creates a bunch of
            # directories and compiles .py files
            self.tempdir = mkdtemp()
            copy(self.configFileName, self.tempdir)
            for entry in os.listdir("."):
                # Any code in a subdirectory will _not_ be copied! This is a bug
                if isfile(entry) and not entry.startswith("twistd.log"):
                    copy(entry, self.tempdir)

            os.chdir(self.tempdir)
            # Add the temp directory to the library path so local modules work
            sys.path.append(self.tempdir)

            bmaster = master.BuildMaster(self.basedir, self.configFileName)
            return bmaster.loadConfig(open(self.configFileName, "r"),
                                      checkOnly=True)
Exemplo n.º 16
0
    def setUp(self):
        self.patch(master.BuildMaster, 'create_child_services',
                   lambda self: None)
        self.master = master.BuildMaster(basedir=None)

        self.master.data = fakedata.FakeDataConnector(self.master, self)
        self.master.db = fakedb.FakeDBConnector(self.master, self)
        self.master.db.insertTestData([
            fakedb.Change(changeid=1, author='this is a test'),
        ])

        self.fake_Change = mock.Mock(name='fake_Change')

        def fromChdict(master, chdict):
            if chdict['author'] != 'this is a test':
                raise AssertionError("did not get expected chdict")
            return defer.succeed(self.fake_Change)
        self.patch(Change, 'fromChdict', staticmethod(fromChdict))
Exemplo n.º 17
0
    def create_master(self, **kwargs):
        assert not self.master, "you called create_master twice"
        # probably because you subclassed RunMixin instead of MasterMixin
        self.slaves = {}
        if self.basedir is None:
            self.basedir = self.mktemp()
        basedir = self.basedir
        os.makedirs(basedir)
        self.master = master.BuildMaster(basedir, **kwargs)
        spec = dbspec.DBSpec.from_url("sqlite:///state.sqlite",
                                      basedir=basedir)

        sm = schema.DBSchemaManager(spec, basedir)
        sm.upgrade(quiet=True)

        self.master.loadDatabase(spec)
        self.master.readConfig = True
        self.master.startService()
        self.status = self.master.getStatus()
        self.control = interfaces.IControl(self.master)
Exemplo n.º 18
0
 def set_master(_):
     self.master = master.BuildMaster(basedir)
     self.master.db_poll_interval = None
Exemplo n.º 19
0
        def loadcfg(_):
            sys.path.append(self.basedir)

            bmaster = master.BuildMaster(self.basedir, self.configFileName)
            return bmaster.loadConfig(open(self.configFileName, "r"),
                                      checkOnly=True)
Exemplo n.º 20
0
 def set_master(_):
     self.master = master.BuildMaster(basedir)
     self.master.config.db['db_poll_interval'] = None
 def setUp(self):
     self.master = master.BuildMaster(".")