Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/buildbot/buildbot/test/test_webparts.py
diff options
context:
space:
mode:
Diffstat (limited to 'buildbot/buildbot/test/test_webparts.py')
-rw-r--r--buildbot/buildbot/test/test_webparts.py141
1 files changed, 141 insertions, 0 deletions
diff --git a/buildbot/buildbot/test/test_webparts.py b/buildbot/buildbot/test/test_webparts.py
new file mode 100644
index 0000000..71dd59e
--- /dev/null
+++ b/buildbot/buildbot/test/test_webparts.py
@@ -0,0 +1,141 @@
+
+import os
+from twisted.trial import unittest
+from twisted.internet import defer
+from twisted.web import client
+from twisted.web.error import Error as WebError
+from buildbot.slave.commands import rmdirRecursive
+from buildbot.status import html
+from test_web import BaseWeb, base_config, ConfiguredMaster
+from buildbot.scripts import runner
+
+class Webparts(BaseWeb, unittest.TestCase):
+
+ def find_webstatus(self, master):
+ return filter(lambda child: isinstance(child, html.WebStatus),
+ list(master))
+
+ def startMaster(self, extraconfig):
+ config = base_config + extraconfig
+ rmdirRecursive("test_webparts")
+ os.mkdir("test_webparts")
+ runner.upgradeMaster({'basedir': "test_webparts",
+ 'quiet': True,
+ })
+ self.master = m = ConfiguredMaster("test_webparts", config)
+ m.startService()
+ # hack to find out what randomly-assigned port it is listening on
+ port = list(self.find_webstatus(m)[0])[0]._port.getHost().port
+ self.baseurl = "http://localhost:%d/" % port
+
+ def reconfigMaster(self, extraconfig):
+ config = base_config + extraconfig
+ d = self.master.loadConfig(config)
+ def _done(res):
+ m = self.master
+ port = list(self.find_webstatus(m)[0])[0]._port.getHost().port
+ self.baseurl = "http://localhost:%d/" % port
+ d.addCallback(_done)
+ return d
+
+ def getAndCheck(self, url, substring, show=False):
+ d = client.getPage(url)
+ def _show_weberror(why):
+ why.trap(WebError)
+ self.fail("error for %s: %s" % (url, why))
+ d.addErrback(_show_weberror)
+ d.addCallback(self._getAndCheck, substring, show)
+ return d
+ def _getAndCheck(self, page, substring, show):
+ if show:
+ print page
+ self.failUnlessIn(substring, page,
+ "Couldn't find substring '%s' in page:\n%s" %
+ (substring, page))
+
+ def testInit(self):
+ extraconfig = """
+from twisted.web import static
+ws = html.WebStatus(http_port=0)
+c['status'] = [ws]
+ws.putChild('child.html', static.Data('I am the child', 'text/plain'))
+"""
+ self.startMaster(extraconfig)
+ d = self.getAndCheck(self.baseurl + "child.html",
+ "I am the child")
+ return d
+ testInit.timeout = 10
+
+ def testStatic(self):
+ extraconfig = """
+from twisted.web import static
+ws = html.WebStatus(http_port=0)
+c['status'] = [ws]
+ws.putChild('child.html', static.Data('I am the child', 'text/plain'))
+"""
+ self.startMaster(extraconfig)
+ os.mkdir(os.path.join("test_webparts", "public_html", "subdir"))
+ f = open(os.path.join("test_webparts", "public_html", "foo.html"), "wt")
+ f.write("see me foo\n")
+ f.close()
+ f = open(os.path.join("test_webparts", "public_html", "subdir",
+ "bar.html"), "wt")
+ f.write("see me subdir/bar\n")
+ f.close()
+ d = self.getAndCheck(self.baseurl + "child.html", "I am the child")
+ d.addCallback(lambda res:
+ self.getAndCheck(self.baseurl+"foo.html",
+ "see me foo"))
+ d.addCallback(lambda res:
+ self.getAndCheck(self.baseurl+"subdir/bar.html",
+ "see me subdir/bar"))
+ return d
+
+ def _check(self, res, suburl, substring, show=False):
+ d = self.getAndCheck(self.baseurl + suburl, substring, show)
+ return d
+
+ def testPages(self):
+ extraconfig = """
+ws = html.WebStatus(http_port=0)
+c['status'] = [ws]
+"""
+ self.startMaster(extraconfig)
+ d = defer.succeed(None)
+ d.addCallback(self._do_page_tests)
+ extraconfig2 = """
+ws = html.WebStatus(http_port=0, allowForce=True)
+c['status'] = [ws]
+"""
+ d.addCallback(lambda res: self.reconfigMaster(extraconfig2))
+ d.addCallback(self._do_page_tests)
+ return d
+
+ def _do_page_tests(self, res):
+ d = defer.succeed(None)
+ d.addCallback(self._check, "", "Welcome to the Buildbot")
+ d.addCallback(self._check, "waterfall", "current activity")
+ d.addCallback(self._check, "about", "Buildbot is a free software")
+ d.addCallback(self._check, "changes", "PBChangeSource listener")
+ d.addCallback(self._check, "buildslaves", "Build Slaves")
+ d.addCallback(self._check, "one_line_per_build",
+ "Last 20 finished builds")
+ d.addCallback(self._check, "one_box_per_builder", "Latest builds")
+ d.addCallback(self._check, "builders", "Builders")
+ d.addCallback(self._check, "builders/builder1", "Builder: builder1")
+ d.addCallback(self._check, "builders/builder1/builds", "") # dummy
+ # TODO: the pages beyond here would be great to test, but that would
+ # require causing a build to complete.
+ #d.addCallback(self._check, "builders/builder1/builds/1", "")
+ # it'd be nice to assert that the Build page has a "Stop Build" button
+ #d.addCallback(self._check, "builders/builder1/builds/1/steps", "")
+ #d.addCallback(self._check,
+ # "builders/builder1/builds/1/steps/compile", "")
+ #d.addCallback(self._check,
+ # "builders/builder1/builds/1/steps/compile/logs", "")
+ #d.addCallback(self._check,
+ # "builders/builder1/builds/1/steps/compile/logs/stdio","")
+ #d.addCallback(self._check,
+ # "builders/builder1/builds/1/steps/compile/logs/stdio/text", "")
+ return d
+