| OLD | NEW |
| (Empty) |
| 1 # -*- test-case-name: buildbot.test.test_web_status_json -*- | |
| 2 # -*- coding: utf-8 -*- | |
| 3 | |
| 4 import os, shutil | |
| 5 | |
| 6 from twisted.python import components | |
| 7 from twisted.trial import unittest | |
| 8 from twisted.web import client, error | |
| 9 | |
| 10 from buildbot import master, interfaces | |
| 11 from buildbot.status import html | |
| 12 from buildbot.status.web.status_json import JsonStatusResource | |
| 13 | |
| 14 try: | |
| 15 import simplejson as json | |
| 16 except ImportError: | |
| 17 import json | |
| 18 | |
| 19 | |
| 20 class ConfiguredMaster(master.BuildMaster): | |
| 21 """This BuildMaster variant has a static config file, provided as a | |
| 22 string when it is created.""" | |
| 23 | |
| 24 def __init__(self, basedir, config): | |
| 25 self.config = config | |
| 26 master.BuildMaster.__init__(self, basedir) | |
| 27 | |
| 28 def loadTheConfigFile(self): | |
| 29 self.loadConfig(self.config) | |
| 30 | |
| 31 | |
| 32 components.registerAdapter(master.Control, ConfiguredMaster, | |
| 33 interfaces.IControl) | |
| 34 | |
| 35 | |
| 36 base_config = """ | |
| 37 from buildbot.changes.pb import PBChangeSource | |
| 38 from buildbot.status import html | |
| 39 from buildbot.buildslave import BuildSlave | |
| 40 from buildbot.scheduler import Scheduler | |
| 41 from buildbot.process.factory import BuildFactory | |
| 42 from buildbot.config import BuilderConfig | |
| 43 | |
| 44 BuildmasterConfig = c = { | |
| 45 'change_source': PBChangeSource(), | |
| 46 'slaves': [BuildSlave('bot1name', 'bot1passwd')], | |
| 47 'schedulers': [Scheduler('name', None, 60, ['builder1'])], | |
| 48 'slavePortnum': 0, | |
| 49 } | |
| 50 c['builders'] = [ | |
| 51 BuilderConfig(name='builder1', slavename='bot1name', factory=BuildFactory())
, | |
| 52 ] | |
| 53 c['slavePortnum'] = 0 | |
| 54 c['projectUrl'] = 'example.com/yay' | |
| 55 c['projectName'] = 'Pouet' | |
| 56 c['buildbotURL'] = 'build.example.com/yo' | |
| 57 """ | |
| 58 | |
| 59 | |
| 60 class TestStatusJson(unittest.TestCase): | |
| 61 def setUp(self): | |
| 62 config = base_config + "c['status'] = [html.WebStatus(http_port=0)]\n" | |
| 63 if os.path.isdir('test_web1'): | |
| 64 shutil.rmtree('test_web1') | |
| 65 os.mkdir('test_web1') | |
| 66 self.master = ConfiguredMaster('test_web1', config) | |
| 67 self.master.startService() | |
| 68 self.web_status = self.find(html.WebStatus) | |
| 69 self.status_json = self.find( | |
| 70 JsonStatusResource, | |
| 71 self.web_status.site.resource.children.itervalues()) | |
| 72 # Hack to find out what randomly-assigned port it is listening on. | |
| 73 self.port = self.web_status.getPortnum() | |
| 74 | |
| 75 def tearDown(self): | |
| 76 self.master.stopService() | |
| 77 shutil.rmtree('test_web1') | |
| 78 | |
| 79 def find(self, type=None, obj=None): | |
| 80 obj = obj or self.master | |
| 81 for child in list(obj): | |
| 82 if isinstance(child, type): | |
| 83 return child | |
| 84 self.assertTrue(False) | |
| 85 | |
| 86 def getPage(self, url, cb=None, err=None): | |
| 87 d = client.getPage('http://localhost:%d%s' % (self.port, url)) | |
| 88 if cb: | |
| 89 d.addCallback(cb) | |
| 90 if err: | |
| 91 d.addErrback(err) | |
| 92 return d | |
| 93 | |
| 94 def testPresence(self): | |
| 95 def _check(page): | |
| 96 data = json.loads(page) | |
| 97 EXPECTED = { | |
| 98 'builders': { | |
| 99 'builder1': { | |
| 100 'basedir': 'builder1', | |
| 101 'cachedBuilds': [], | |
| 102 'category': None, | |
| 103 'currentBuilds': [], | |
| 104 'pendingBuilds': [], | |
| 105 'slaves': ['bot1name'], | |
| 106 'state': 'offline' | |
| 107 } | |
| 108 }, | |
| 109 'change_sources': { | |
| 110 '0': { | |
| 111 'description': 'PBChangeSource listener on all-purpose s
laveport' | |
| 112 } | |
| 113 }, | |
| 114 'project': { | |
| 115 'buildbotURL': 'build.example.com/yo', | |
| 116 'projectName': 'Pouet', | |
| 117 'projectURL': None | |
| 118 }, | |
| 119 'slaves': { | |
| 120 'bot1name': { | |
| 121 'access_uri': None, | |
| 122 'admin': None, | |
| 123 'builders': {u'builder1': []}, | |
| 124 'connected': False, | |
| 125 'host': None, | |
| 126 'name': u'bot1name', | |
| 127 'runningBuilds': [], | |
| 128 'version': None | |
| 129 } | |
| 130 } | |
| 131 } | |
| 132 self.assertEqual(EXPECTED, data) | |
| 133 return self.getPage('/json', _check) | |
| 134 | |
| 135 def testHelp(self): | |
| 136 def _check(page): | |
| 137 self.failUnless(page) | |
| 138 return self.getPage('/json/help', _check) | |
| 139 | |
| 140 def testNonPresence(self): | |
| 141 def _checkOk(page): | |
| 142 self.assertFalse(page) | |
| 143 def _checkFail(result): | |
| 144 self.assertEqual(result.type, error.Error) | |
| 145 return self.getPage('/json2', _checkOk, _checkFail) | |
| 146 | |
| 147 # vim: set ts=4 sts=4 sw=4 et: | |
| OLD | NEW |