Index: third_party/buildbot_7_12/buildbot/test/test_runner.py |
diff --git a/third_party/buildbot_7_12/buildbot/test/test_runner.py b/third_party/buildbot_7_12/buildbot/test/test_runner.py |
deleted file mode 100644 |
index 6457081ebbddd8e692d64508f0d1e82cb700063e..0000000000000000000000000000000000000000 |
--- a/third_party/buildbot_7_12/buildbot/test/test_runner.py |
+++ /dev/null |
@@ -1,394 +0,0 @@ |
- |
-# this file tests the 'buildbot' command, with its various sub-commands |
- |
-from twisted.trial import unittest |
-from twisted.python import usage |
-import os, shutil, shlex |
-import sets |
- |
-from buildbot.scripts import runner, tryclient |
- |
-class Options(unittest.TestCase): |
- optionsFile = "SDFsfsFSdfsfsFSD" |
- |
- def make(self, d, key): |
- # we use a wacky filename here in case the test code discovers the |
- # user's real ~/.buildbot/ directory |
- if not os.path.isdir(os.sep.join(d + [".buildbot"])): |
- os.makedirs(os.sep.join(d + [".buildbot"])) |
- f = open(os.sep.join(d + [".buildbot", self.optionsFile]), "w") |
- f.write("key = '%s'\n" % key) |
- f.close() |
- |
- def check(self, d, key): |
- basedir = os.sep.join(d) |
- options = runner.loadOptionsFile(self.optionsFile, here=basedir, |
- home=self.home) |
- if key is None: |
- self.failIf(options.has_key('key')) |
- else: |
- self.failUnlessEqual(options['key'], key) |
- |
- def testFindOptions(self): |
- self.make(["home", "dir1", "dir2", "dir3"], "one") |
- self.make(["home", "dir1", "dir2"], "two") |
- self.make(["home"], "home") |
- self.home = os.path.abspath("home") |
- |
- self.check(["home", "dir1", "dir2", "dir3"], "one") |
- self.check(["home", "dir1", "dir2"], "two") |
- self.check(["home", "dir1"], "home") |
- |
- self.home = os.path.abspath("nothome") |
- if not os.path.isdir(os.sep.join(["nothome", "dir1"])): |
- os.makedirs(os.sep.join(["nothome", "dir1"])) |
- self.check(["nothome", "dir1"], None) |
- |
- def doForce(self, args, expected): |
- o = runner.ForceOptions() |
- o.parseOptions(args) |
- self.failUnlessEqual(o.keys(), expected.keys()) |
- for k in o.keys(): |
- self.failUnlessEqual(o[k], expected[k], |
- "[%s] got %s instead of %s" % (k, o[k], |
- expected[k])) |
- |
- def testForceOptions(self): |
- if not hasattr(shlex, "split"): |
- raise unittest.SkipTest("need python>=2.3 for shlex.split") |
- |
- exp = {"builder": "b1", "reason": "reason", |
- "branch": None, "revision": None} |
- self.doForce(shlex.split("b1 reason"), exp) |
- self.doForce(shlex.split("b1 'reason'"), exp) |
- self.failUnlessRaises(usage.UsageError, self.doForce, |
- shlex.split("--builder b1 'reason'"), exp) |
- self.doForce(shlex.split("--builder b1 --reason reason"), exp) |
- self.doForce(shlex.split("--builder b1 --reason 'reason'"), exp) |
- self.doForce(shlex.split("--builder b1 --reason \"reason\""), exp) |
- |
- exp['reason'] = "longer reason" |
- self.doForce(shlex.split("b1 'longer reason'"), exp) |
- self.doForce(shlex.split("b1 longer reason"), exp) |
- self.doForce(shlex.split("--reason 'longer reason' b1"), exp) |
- |
- |
-class Create(unittest.TestCase): |
- def failUnlessIn(self, substring, string, msg=None): |
- # trial provides a version of this that requires python-2.3 to test |
- # strings. |
- self.failUnless(string.find(substring) != -1, msg) |
- def failUnlessExists(self, filename): |
- self.failUnless(os.path.exists(filename), "%s should exist" % filename) |
- def failIfExists(self, filename): |
- self.failIf(os.path.exists(filename), "%s should not exist" % filename) |
- |
- def setUp(self): |
- self.cwd = os.getcwd() |
- |
- def tearDown(self): |
- os.chdir(self.cwd) |
- |
- def testMaster(self): |
- basedir = "test_runner.master" |
- options = runner.MasterOptions() |
- options.parseOptions(["-q", basedir]) |
- cwd = os.getcwd() |
- runner.createMaster(options) |
- os.chdir(cwd) |
- |
- tac = os.path.join(basedir, "buildbot.tac") |
- self.failUnless(os.path.exists(tac)) |
- tacfile = open(tac,"rt").read() |
- self.failUnlessIn("basedir", tacfile) |
- self.failUnlessIn("configfile = r'master.cfg'", tacfile) |
- self.failUnlessIn("BuildMaster(basedir, configfile)", tacfile) |
- |
- cfg = os.path.join(basedir, "master.cfg") |
- self.failIfExists(cfg) |
- samplecfg = os.path.join(basedir, "master.cfg.sample") |
- self.failUnlessExists(samplecfg) |
- cfgfile = open(samplecfg,"rt").read() |
- self.failUnlessIn("This is a sample buildmaster config file", cfgfile) |
- |
- makefile = os.path.join(basedir, "Makefile.sample") |
- self.failUnlessExists(makefile) |
- |
- # now verify that running it a second time (with the same options) |
- # does the right thing: nothing changes |
- runner.createMaster(options) |
- os.chdir(cwd) |
- |
- self.failIfExists(os.path.join(basedir, "buildbot.tac.new")) |
- self.failUnlessExists(os.path.join(basedir, "master.cfg.sample")) |
- |
- oldtac = open(os.path.join(basedir, "buildbot.tac"), "rt").read() |
- |
- # mutate Makefile.sample, since it should be rewritten |
- f = open(os.path.join(basedir, "Makefile.sample"), "rt") |
- oldmake = f.read() |
- f = open(os.path.join(basedir, "Makefile.sample"), "wt") |
- f.write(oldmake) |
- f.write("# additional line added\n") |
- f.close() |
- |
- # also mutate master.cfg.sample |
- f = open(os.path.join(basedir, "master.cfg.sample"), "rt") |
- oldsamplecfg = f.read() |
- f = open(os.path.join(basedir, "master.cfg.sample"), "wt") |
- f.write(oldsamplecfg) |
- f.write("# additional line added\n") |
- f.close() |
- |
- # now run it again (with different options) |
- options = runner.MasterOptions() |
- options.parseOptions(["-q", "--config", "other.cfg", basedir]) |
- runner.createMaster(options) |
- os.chdir(cwd) |
- |
- tac = open(os.path.join(basedir, "buildbot.tac"), "rt").read() |
- self.failUnlessEqual(tac, oldtac, "shouldn't change existing .tac") |
- self.failUnlessExists(os.path.join(basedir, "buildbot.tac.new")) |
- |
- make = open(os.path.join(basedir, "Makefile.sample"), "rt").read() |
- self.failUnlessEqual(make, oldmake, "*should* rewrite Makefile.sample") |
- |
- samplecfg = open(os.path.join(basedir, "master.cfg.sample"), |
- "rt").read() |
- self.failUnlessEqual(samplecfg, oldsamplecfg, |
- "*should* rewrite master.cfg.sample") |
- |
- def testUpgradeMaster(self): |
- # first, create a master, run it briefly, then upgrade it. Nothing |
- # should change. |
- basedir = "test_runner.master2" |
- options = runner.MasterOptions() |
- options.parseOptions(["-q", basedir]) |
- cwd = os.getcwd() |
- runner.createMaster(options) |
- os.chdir(cwd) |
- |
- f = open(os.path.join(basedir, "master.cfg"), "w") |
- f.write(open(os.path.join(basedir, "master.cfg.sample"), "r").read()) |
- f.close() |
- |
- # the upgrade process (specifically the verify-master.cfg step) will |
- # create any builder status directories that weren't already created. |
- # Create those ahead of time. |
- os.mkdir(os.path.join(basedir, "full")) |
- |
- files1 = self.record_files(basedir) |
- |
- # upgrade it |
- options = runner.UpgradeMasterOptions() |
- options.parseOptions(["--quiet", basedir]) |
- cwd = os.getcwd() |
- runner.upgradeMaster(options) |
- os.chdir(cwd) |
- |
- files2 = self.record_files(basedir) |
- self.failUnlessSameFiles(files1, files2) |
- |
- # now make it look like the one that 0.7.5 creates: no public_html |
- for fn in os.listdir(os.path.join(basedir, "public_html")): |
- os.unlink(os.path.join(basedir, "public_html", fn)) |
- os.rmdir(os.path.join(basedir, "public_html")) |
- |
- # and make sure that upgrading it re-populates public_html |
- options = runner.UpgradeMasterOptions() |
- options.parseOptions(["-q", basedir]) |
- cwd = os.getcwd() |
- runner.upgradeMaster(options) |
- os.chdir(cwd) |
- |
- files3 = self.record_files(basedir) |
- self.failUnlessSameFiles(files1, files3) |
- |
- # now induce an error in master.cfg and make sure that upgrade |
- # notices it. |
- f = open(os.path.join(basedir, "master.cfg"), "a") |
- f.write("raise RuntimeError('catch me please')\n") |
- f.close() |
- |
- options = runner.UpgradeMasterOptions() |
- options.parseOptions(["-q", basedir]) |
- cwd = os.getcwd() |
- rc = runner.upgradeMaster(options) |
- os.chdir(cwd) |
- self.failUnless(rc != 0, rc) |
- # TODO: change the way runner.py works to let us pass in a stderr |
- # filehandle, and use a StringIO to capture its output, and make sure |
- # the right error messages appear therein. |
- |
- |
- def failUnlessSameFiles(self, files1, files2): |
- f1 = sets.Set(files1.keys()) |
- f2 = sets.Set(files2.keys()) |
- msg = "" |
- if f2 - f1: |
- msg += "Missing from files1: %s\n" % (list(f2-f1),) |
- if f1 - f2: |
- msg += "Missing from files2: %s\n" % (list(f1-f2),) |
- if msg: |
- self.fail(msg) |
- |
- def record_files(self, basedir): |
- allfiles = {} |
- for root, dirs, files in os.walk(basedir): |
- for f in files: |
- fn = os.path.join(root, f) |
- allfiles[fn] = ("FILE", open(fn,"rb").read()) |
- for d in dirs: |
- allfiles[os.path.join(root, d)] = ("DIR",) |
- return allfiles |
- |
- |
- def testSlave(self): |
- basedir = "test_runner.slave" |
- options = runner.SlaveOptions() |
- options.parseOptions(["-q", basedir, "buildmaster:1234", |
- "botname", "passwd"]) |
- cwd = os.getcwd() |
- runner.createSlave(options) |
- os.chdir(cwd) |
- |
- tac = os.path.join(basedir, "buildbot.tac") |
- self.failUnless(os.path.exists(tac)) |
- tacfile = open(tac,"rt").read() |
- self.failUnlessIn("basedir", tacfile) |
- self.failUnlessIn("buildmaster_host = 'buildmaster'", tacfile) |
- self.failUnlessIn("port = 1234", tacfile) |
- self.failUnlessIn("slavename = 'botname'", tacfile) |
- self.failUnlessIn("passwd = 'passwd'", tacfile) |
- self.failUnlessIn("keepalive = 600", tacfile) |
- self.failUnlessIn("BuildSlave(buildmaster_host, port, slavename", |
- tacfile) |
- |
- makefile = os.path.join(basedir, "Makefile.sample") |
- self.failUnlessExists(makefile) |
- |
- self.failUnlessExists(os.path.join(basedir, "info", "admin")) |
- self.failUnlessExists(os.path.join(basedir, "info", "host")) |
- # edit one to make sure the later install doesn't change it |
- f = open(os.path.join(basedir, "info", "admin"), "wt") |
- f.write("updated@buildbot.example.org\n") |
- f.close() |
- |
- # now verify that running it a second time (with the same options) |
- # does the right thing: nothing changes |
- runner.createSlave(options) |
- os.chdir(cwd) |
- |
- self.failIfExists(os.path.join(basedir, "buildbot.tac.new")) |
- admin = open(os.path.join(basedir, "info", "admin"), "rt").read() |
- self.failUnlessEqual(admin, "updated@buildbot.example.org\n") |
- |
- |
- # mutate Makefile.sample, since it should be rewritten |
- oldmake = open(os.path.join(basedir, "Makefile.sample"), "rt").read() |
- f = open(os.path.join(basedir, "Makefile.sample"), "wt") |
- f.write(oldmake) |
- f.write("# additional line added\n") |
- f.close() |
- oldtac = open(os.path.join(basedir, "buildbot.tac"), "rt").read() |
- |
- # now run it again (with different options) |
- options = runner.SlaveOptions() |
- options.parseOptions(["-q", "--keepalive", "30", |
- basedir, "buildmaster:9999", |
- "newbotname", "passwd"]) |
- runner.createSlave(options) |
- os.chdir(cwd) |
- |
- tac = open(os.path.join(basedir, "buildbot.tac"), "rt").read() |
- self.failUnlessEqual(tac, oldtac, "shouldn't change existing .tac") |
- self.failUnlessExists(os.path.join(basedir, "buildbot.tac.new")) |
- tacfile = open(os.path.join(basedir, "buildbot.tac.new"),"rt").read() |
- self.failUnlessIn("basedir", tacfile) |
- self.failUnlessIn("buildmaster_host = 'buildmaster'", tacfile) |
- self.failUnlessIn("port = 9999", tacfile) |
- self.failUnlessIn("slavename = 'newbotname'", tacfile) |
- self.failUnlessIn("passwd = 'passwd'", tacfile) |
- self.failUnlessIn("keepalive = 30", tacfile) |
- self.failUnlessIn("BuildSlave(buildmaster_host, port, slavename", |
- tacfile) |
- |
- make = open(os.path.join(basedir, "Makefile.sample"), "rt").read() |
- self.failUnlessEqual(make, oldmake, "*should* rewrite Makefile.sample") |
- |
-class Try(unittest.TestCase): |
- # test some aspects of the 'buildbot try' command |
- def makeOptions(self, contents): |
- if os.path.exists(".buildbot"): |
- shutil.rmtree(".buildbot") |
- os.mkdir(".buildbot") |
- open(os.path.join(".buildbot", "options"), "w").write(contents) |
- |
- def testGetopt1(self): |
- opts = "try_connect = 'ssh'\n" + "try_builders = ['a']\n" |
- self.makeOptions(opts) |
- config = runner.TryOptions() |
- config.parseOptions([]) |
- t = tryclient.Try(config) |
- self.failUnlessEqual(t.connect, "ssh") |
- self.failUnlessEqual(t.builderNames, ['a']) |
- |
- def testGetopt2(self): |
- opts = "" |
- self.makeOptions(opts) |
- config = runner.TryOptions() |
- config.parseOptions(['--connect=ssh', '--builder', 'a']) |
- t = tryclient.Try(config) |
- self.failUnlessEqual(t.connect, "ssh") |
- self.failUnlessEqual(t.builderNames, ['a']) |
- |
- def testGetopt3(self): |
- opts = "" |
- self.makeOptions(opts) |
- config = runner.TryOptions() |
- config.parseOptions(['--connect=ssh', |
- '--builder', 'a', '--builder=b']) |
- t = tryclient.Try(config) |
- self.failUnlessEqual(t.connect, "ssh") |
- self.failUnlessEqual(t.builderNames, ['a', 'b']) |
- |
- def testGetopt4(self): |
- opts = "try_connect = 'ssh'\n" + "try_builders = ['a']\n" |
- self.makeOptions(opts) |
- config = runner.TryOptions() |
- config.parseOptions(['--builder=b']) |
- t = tryclient.Try(config) |
- self.failUnlessEqual(t.connect, "ssh") |
- self.failUnlessEqual(t.builderNames, ['b']) |
- |
- def testGetTopdir(self): |
- os.mkdir("gettopdir") |
- os.mkdir(os.path.join("gettopdir", "foo")) |
- os.mkdir(os.path.join("gettopdir", "foo", "bar")) |
- open(os.path.join("gettopdir", "1"),"w").write("1") |
- open(os.path.join("gettopdir", "foo", "2"),"w").write("2") |
- open(os.path.join("gettopdir", "foo", "bar", "3"),"w").write("3") |
- |
- target = os.path.abspath("gettopdir") |
- t = tryclient.getTopdir("1", "gettopdir") |
- self.failUnlessEqual(os.path.abspath(t), target) |
- t = tryclient.getTopdir("1", os.path.join("gettopdir", "foo")) |
- self.failUnlessEqual(os.path.abspath(t), target) |
- t = tryclient.getTopdir("1", os.path.join("gettopdir", "foo", "bar")) |
- self.failUnlessEqual(os.path.abspath(t), target) |
- |
- target = os.path.abspath(os.path.join("gettopdir", "foo")) |
- t = tryclient.getTopdir("2", os.path.join("gettopdir", "foo")) |
- self.failUnlessEqual(os.path.abspath(t), target) |
- t = tryclient.getTopdir("2", os.path.join("gettopdir", "foo", "bar")) |
- self.failUnlessEqual(os.path.abspath(t), target) |
- |
- target = os.path.abspath(os.path.join("gettopdir", "foo", "bar")) |
- t = tryclient.getTopdir("3", os.path.join("gettopdir", "foo", "bar")) |
- self.failUnlessEqual(os.path.abspath(t), target) |
- |
- nonexistent = "nonexistent\n29fis3kq\tBAR" |
- # hopefully there won't be a real file with that name between here |
- # and the filesystem root. |
- self.failUnlessRaises(ValueError, tryclient.getTopdir, nonexistent) |
- |