Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Unified Diff: third_party/buildbot_7_12/buildbot/test/test_status_push.py

Issue 12207158: Bye bye buildbot 0.7.12. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/build
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/buildbot_7_12/buildbot/test/test_status_push.py
diff --git a/third_party/buildbot_7_12/buildbot/test/test_status_push.py b/third_party/buildbot_7_12/buildbot/test/test_status_push.py
deleted file mode 100644
index de6b01025e0a83daee04a5001e9783fabf71302c..0000000000000000000000000000000000000000
--- a/third_party/buildbot_7_12/buildbot/test/test_status_push.py
+++ /dev/null
@@ -1,866 +0,0 @@
-# -*- test-case-name: buildbot.test.test_status_push -*-
-
-import re
-import os
-
-try:
- import simplejson as json
-except ImportError:
- import json
-
-from twisted.internet import defer, reactor
-from twisted.python import log
-from twisted.trial import unittest
-from twisted.web import server, resource
-from twisted.web.error import Error
-from zope.interface import implements, Interface
-
-from buildbot import master
-from buildbot.changes import changes
-from buildbot.slave import bot
-from buildbot.status import status_push
-from buildbot.status.persistent_queue import IQueue, ReadFile
-from buildbot.test.runutils import RunMixin
-from buildbot.test.status_push_server import EventsHandler
-
-
-config_base = """
-from buildbot.process import factory
-from buildbot.buildslave import BuildSlave
-from buildbot.config import BuilderConfig
-from buildbot.scheduler import Scheduler
-from buildbot.status.persistent_queue import IQueue
-from buildbot.status.status_push import StatusPush, HttpStatusPush
-from buildbot.steps import dummy
-
-BuildmasterConfig = c = {}
-
-c['slaves'] = [BuildSlave('bot1', 'sekrit')]
-c['schedulers'] = [Scheduler('dummy', None, 120, ['dummy'])]
-
-f1 = factory.QuickBuildFactory('fakerep', 'cvsmodule', configure=None)
-c['builders'] = [
- BuilderConfig(name='dummy', slavename='bot1', factory=f1,
- builddir='quickdir', slavebuilddir='slavequickdir'),
-]
-c['slavePortnum'] = 0
-c['projectUrl'] = 'example.com/yay'
-c['projectName'] = 'Pouet'
-c['buildbotURL'] = 'build.example.com/yo'
-
-def doNothing(self):
- # Creates self.fake_queue to store the object.
- assert IQueue.providedBy(self.queue)
- if not hasattr(self, 'fake_queue'):
- self.fake_queue = []
- items = self.queue.popChunk()
- self.fake_queue.extend(items)
- self.queueNextServerPush()
-"""
-
-config_no_http = (config_base + """
-c['status'] = [StatusPush(serverPushCb=doNothing)]
-""")
-
-config_http = (config_base + """
-c['status'] = [HttpStatusPush('http://127.0.0.1:<PORT>/receiver')]
-""")
-
-config_no_http_no_filter = (config_base + """
-c['status'] = [StatusPush(serverPushCb=doNothing, filter=False)]
-""")
-
-config_http_no_filter = (config_base + """
-c['status'] = [HttpStatusPush('http://127.0.0.1:<PORT>/receiver', filter=False)]
-""")
-
-EXPECTED = [
- {
- 'event': 'builderAdded',
- 'payload': {
- 'builder': {
- "category": None,
- "cachedBuilds": [],
- "basedir": "quickdir",
- "pendingBuilds": [],
- "state": "offline",
- "slaves": ["bot1"],
- "currentBuilds": []
- },
- 'builderName': 'dummy',
- }
- },
- {
- "event": "builderChangedState",
- "payload": {
- 'state': 'offline',
- 'builderName': 'dummy'
- }
- },
- {
- "event": "start",
- "payload": {
- 'status': {
- "buildbotURL": 'build.example.com/yo',
- "projectName": 'Pouet',
- 'projectURL': None,
- }
- }
- },
- {
- 'event': 'slaveConnected',
- 'payload': {
- 'slave': {
- 'access_uri': None,
- 'admin': 'one',
- 'connected': True,
- 'host': None,
- 'name': 'bot1',
- 'runningBuilds': [],
- 'version': '0.7.12'
- }
- }
- },
- {
- 'event': 'builderChangedState',
- 'payload': {
- 'state': 'idle',
- 'builderName': 'dummy'
- },
- },
- {
- "event": "changeAdded",
- "payload": {
- 'change': {
- "category": None,
- "files": ["Makefile", "foo/bar.c"],
- "who": "bob",
- "when": "n0w",
- "number": 1,
- "comments": "changed stuff",
- "branch": None,
- "revlink": "",
- "properties": [],
- "revision": None
- }
- }
- },
- {
- 'event': 'requestSubmitted',
- 'payload': {
- 'request': {
- 'builderName': 'test_builder',
- 'builds': [],
- 'source': {
- 'branch': None,
- 'changes': [],
- 'hasPatch': False,
- 'revision': None
- },
- 'submittedAt': 'yesterday',
- }
- }
- },
- {
- 'event': 'builderChangedState',
- 'payload': {
- 'state': 'building',
- 'builderName': 'dummy'
- }
- },
- {
- 'event': 'buildStarted',
- 'payload': {
- 'build': {
- 'blame': [],
- 'builderName': 'dummy',
- 'changes': [],
- 'currentStep': None,
- 'eta': None,
- 'number': 0,
- 'properties': [
- ['branch', None, 'Build'],
- ['buildername', 'dummy', 'Build'],
- ['buildnumber', 0, 'Build'],
- ['revision', None, 'Build'],
- ['slavename', 'bot1', 'BuildSlave']
- ],
- 'reason': 'forced build',
- 'requests': [
- {
- 'builderName': 'test_builder',
- 'builds': [],
- 'source': {
- 'branch': None,
- 'changes': [],
- 'hasPatch': False,
- 'revision': None
- },
- 'submittedAt': 'yesterday'
- }
- ],
- 'results': None,
- 'slave': 'bot1',
- 'sourceStamp': {
- 'branch': None,
- 'hasPatch': False,
- 'changes': [],
- 'revision': None
- },
- 'steps': [
- {
- 'eta': None,
- 'expectations': [],
- 'isFinished': False,
- 'isStarted': False,
- 'name': 'cvs',
- 'results': [[None, []], []],
- 'statistics': {},
- 'text': ['updating'],
- 'times': [None, None],
- 'urls': {}
- },
- {
- 'eta': None,
- 'expectations': [],
- 'isFinished': False,
- 'isStarted': False,
- 'name': 'compile',
- 'results': [[None, []], []],
- 'statistics': {},
- 'text': ['compiling'],
- 'times': [None, None],
- 'urls': {}
- },
- {
- 'eta': None,
- 'expectations': [],
- 'isFinished': False,
- 'isStarted': False,
- 'name': 'test',
- 'results': [[None, []], []],
- 'statistics': {},
- 'text': ['testing'],
- 'times': [None, None],
- 'urls': {}
- }
- ],
- 'text': [],
- 'times': [123, None]
- }
- }
- },
- {
- 'event': 'stepStarted',
- 'payload': {
- 'step': {
- 'eta': None,
- 'expectations': [],
- 'isFinished': False,
- 'isStarted': True,
- 'name': 'cvs',
- 'results': [[None, []], []],
- 'statistics': {},
- 'text': ['updating'],
- 'times': [123, None],
- 'urls': {}
- },
- 'properties': [
- ['branch', None, 'Build'],
- ['buildername', 'dummy', 'Build'],
- ['buildnumber', 0, 'Build'],
- ['revision', None, 'Build'],
- ['slavename', 'bot1', 'BuildSlave']
- ],
- }
- },
- {
- 'event': 'stepFinished',
- 'payload': {
- 'step': {
- 'eta': None,
- 'expectations': [],
- 'isFinished': True,
- 'isStarted': True,
- 'name': 'cvs',
- 'results': [2, ['cvs']],
- 'statistics': {},
- 'text': ['update', 'failed'],
- 'times': [123, None],
- 'urls': {}
- },
- 'properties': [
- ['branch', None, 'Build'],
- ['buildername', 'dummy', 'Build'],
- ['buildnumber', 0, 'Build'],
- ['revision', None, 'Build'],
- ['slavename', 'bot1', 'BuildSlave']
- ],
- }
- },
- {
- 'event': 'buildFinished',
- 'payload': {
- 'build': {
- 'blame': [],
- 'builderName': 'dummy',
- 'changes': [],
- 'currentStep': None,
- 'eta': None,
- 'number': 0,
- 'properties': [
- ['branch', None, 'Build'],
- ['buildername', 'dummy', 'Build'],
- ['buildnumber', 0, 'Build'],
- ['revision', None, 'Build'],
- ['slavename', 'bot1', 'BuildSlave']
- ],
- 'reason': 'forced build',
- 'requests': [
- {
- 'builderName': 'test_builder',
- 'builds': [0],
- 'source': {
- 'branch': None,
- 'hasPatch': False,
- 'changes': [],
- 'revision': None},
- 'submittedAt': 'yesterday'
- }
- ],
- 'results': 2,
- 'slave': 'bot1',
- 'sourceStamp': {
- 'branch': None,
- 'changes': [],
- 'hasPatch': False,
- 'revision': None
- },
- 'steps': [
- {
- 'eta': None,
- 'expectations': [],
- 'isFinished': True,
- 'isStarted': True,
- 'name': 'cvs',
- 'results': [2, ['cvs']],
- 'statistics': {},
- 'text': ['update', 'failed'],
- 'times': [345, None],
- 'urls': {}
- },
- {
- 'eta': None,
- 'expectations': [],
- 'isFinished': False,
- 'isStarted': False,
- 'name': 'compile',
- 'results': [[None, []], []],
- 'statistics': {},
- 'text': ['compiling'],
- 'times': [345, None],
- 'urls': {}
- },
- {
- 'eta': None,
- 'expectations': [],
- 'isFinished': False,
- 'isStarted': False,
- 'name': 'test',
- 'results': [[None, []], []],
- 'statistics': {},
- 'text': ['testing'],
- 'times': [345, None],
- 'urls': {}
- }
- ],
- 'text': ['failed', 'cvs'],
- 'times': [123, None]
- },
- }
- },
- {
- 'event': 'builderChangedState',
- 'payload': {
- 'state': 'idle',
- 'builderName': 'dummy'
- }
- },
- {
- 'event': 'slaveDisconnected',
- 'payload': {
- 'slavename': 'bot1'
- }
- },
- {
- 'event': 'builderChangedState',
- 'payload': {
- 'state': 'offline',
- 'builderName': 'dummy',
- }
- },
- {
- "event": "shutdown",
- "payload": {
- 'status': {
- "buildbotURL": 'build.example.com/yo',
- "projectName": 'Pouet',
- 'projectURL': None,
- }
- }
- },
-]
-
-EXPECTED_SHORT = [
- {
- 'event': 'builderAdded',
- 'payload': {
- 'builder': {
- "basedir": "quickdir",
- "state": "offline",
- "slaves": ["bot1"],
- },
- 'builderName': 'dummy',
- }
- },
- {
- "event": "builderChangedState",
- "payload": {
- 'state': 'offline',
- 'builderName': 'dummy'
- }
- },
- {
- "event": "start",
- "payload": {
- 'status': {
- "buildbotURL": 'build.example.com/yo',
- "projectName": 'Pouet',
- }
- }
- },
- {
- 'event': 'slaveConnected',
- 'payload': {
- 'slave': {
- 'admin': 'one',
- 'connected': True,
- 'name': 'bot1',
- 'version': '0.7.12'
- }
- }
- },
- {
- 'event': 'builderChangedState',
- 'payload': {
- 'state': 'idle',
- 'builderName': 'dummy'
- },
- },
- {
- "event": "changeAdded",
- "payload": {
- 'change': {
- "files": ["Makefile", "foo/bar.c"],
- "who": "bob",
- "when": "n0w",
- "number": 1,
- "comments": "changed stuff",
- }
- }
- },
- {
- 'event': 'requestSubmitted',
- 'payload': {
- 'request': {
- 'builderName': 'test_builder',
- 'submittedAt': 'yesterday',
- }
- }
- },
- {
- 'event': 'builderChangedState',
- 'payload': {
- 'state': 'building',
- 'builderName': 'dummy'
- }
- },
- {
- 'event': 'buildStarted',
- 'payload': {
- 'build': {
- 'builderName': 'dummy',
- 'properties': [
- ['branch', None, 'Build'],
- ['buildername', 'dummy', 'Build'],
- ['buildnumber', 0, 'Build'],
- ['revision', None, 'Build'],
- ['slavename', 'bot1', 'BuildSlave']
- ],
- 'reason': 'forced build',
- 'requests': [
- {
- 'builderName': 'test_builder',
- 'submittedAt': 'yesterday'
- }
- ],
- 'slave': 'bot1',
- 'steps': [
- {
- 'name': 'cvs',
- 'text': ['updating'],
- },
- {
- 'name': 'compile',
- 'text': ['compiling'],
- },
- {
- 'name': 'test',
- 'text': ['testing'],
- }
- ],
- 'times': [123, None]
- }
- }
- },
- {
- 'event': 'stepStarted',
- 'payload': {
- 'step': {
- 'isStarted': True,
- 'name': 'cvs',
- 'text': ['updating'],
- 'times': [123, None],
- },
- 'properties': [
- ['branch', None, 'Build'],
- ['buildername', 'dummy', 'Build'],
- ['buildnumber', 0, 'Build'],
- ['revision', None, 'Build'],
- ['slavename', 'bot1', 'BuildSlave']
- ],
- }
- },
- {
- 'event': 'stepFinished',
- 'payload': {
- 'step': {
- 'isFinished': True,
- 'isStarted': True,
- 'name': 'cvs',
- 'results': [2, ['cvs']],
- 'text': ['update', 'failed'],
- 'times': [123, None],
- },
- 'properties': [
- ['branch', None, 'Build'],
- ['buildername', 'dummy', 'Build'],
- ['buildnumber', 0, 'Build'],
- ['revision', None, 'Build'],
- ['slavename', 'bot1', 'BuildSlave']
- ],
- }
- },
- {
- 'event': 'buildFinished',
- 'payload': {
- 'build': {
- 'builderName': 'dummy',
- 'properties': [
- ['branch', None, 'Build'],
- ['buildername', 'dummy', 'Build'],
- ['buildnumber', 0, 'Build'],
- ['revision', None, 'Build'],
- ['slavename', 'bot1', 'BuildSlave']
- ],
- 'reason': 'forced build',
- 'requests': [
- {
- 'builderName': 'test_builder',
- 'submittedAt': 'yesterday'
- }
- ],
- 'results': 2,
- 'slave': 'bot1',
- 'steps': [
- {
- 'isFinished': True,
- 'isStarted': True,
- 'name': 'cvs',
- 'results': [2, ['cvs']],
- 'text': ['update', 'failed'],
- 'times': [345, None],
- },
- {
- 'name': 'compile',
- 'text': ['compiling'],
- },
- {
- 'name': 'test',
- 'text': ['testing'],
- }
- ],
- 'text': ['failed', 'cvs'],
- 'times': [123, None]
- },
- }
- },
- {
- 'event': 'builderChangedState',
- 'payload': {
- 'state': 'idle',
- 'builderName': 'dummy'
- }
- },
- {
- 'event': 'slaveDisconnected',
- 'payload': {
- 'slavename': 'bot1'
- }
- },
- {
- 'event': 'builderChangedState',
- 'payload': {
- 'state': 'offline',
- 'builderName': 'dummy',
- }
- },
- {
- "event": "shutdown",
- "payload": {
- 'status': {
- "buildbotURL": 'build.example.com/yo',
- "projectName": 'Pouet',
- }
- }
- },
-]
-
-class Receiver(resource.Resource):
- isLeaf = True
- def __init__(self):
- self.packets = []
-
- def render_POST(self, request):
- for packet in request.args['packets']:
- data = json.loads(packet)
- for p in data:
- self.packets.append(p)
- return "ok"
-
-
-class StatusPushTestBase(RunMixin, unittest.TestCase):
- def getStatusPush(self):
- for i in self.master.services:
- if isinstance(i, status_push.StatusPush):
- return i
-
- def init(self, config):
- # The master.
- self.master.loadConfig(config)
- self.master.readConfig = True
- self.assertTrue(self.getStatusPush())
- self.master.startService()
-
- def tearDown(self):
- """Similar to RunMixin.tearDown but skip over if self.master is None
- since we do test stopService."""
- log.msg("doing tearDown")
- if self.master:
- d = self.shutdownAllSlaves()
- d.addCallback(self._tearDown_1)
- d.addCallback(self._tearDown_2)
- return d
- else:
- return defer.succeed(None)
-
- def verifyItems(self, items, expected):
- def QuickFix(item, *args):
- """Strips time-specific values.
-
- None means an array.
- Anything else is a key to a dict."""
- args = list(args)
- value = args.pop()
-
- def Loop(item, value, *args):
- args = list(args)
- arg = args.pop(0)
- if isinstance(item, list) and arg is None:
- for i in item:
- Loop(i, value, *args)
- elif isinstance(item, dict):
- if len(args) == 0 and arg in item:
- item[arg] = value
- elif arg in item:
- Loop(item[arg], value, *args)
-
- Loop(item, value, *args)
-
- def FindItem(items, event, *args):
- for i in items:
- if i['event'] == event:
- QuickFix(i, *args)
-
- # Cleanup time dependent values. It'd be nice to mock datetime instead.
- for i in range(len(items)):
- item = items[i]
- del item['started']
- del item['timestamp']
- self.assertEqual('Pouet', item.pop('project'))
- self.assertEqual(i + 1, item.pop('id'))
-
- FindItem(items, 'changeAdded', 'payload', 'change', 'when',
- 'n0w')
- FindItem(items, 'requestSubmitted', 'payload', 'request',
- 'submittedAt', 'yesterday')
-
- FindItem(items, 'buildStarted', 'payload', 'build', 'requests',
- None, 'submittedAt', 'yesterday')
- FindItem(items, 'stepStarted', 'payload', 'build', 'requests',
- None, 'submittedAt', 'yesterday')
- FindItem(items, 'stepFinished', 'payload', 'build', 'requests',
- None, 'submittedAt', 'yesterday')
- FindItem(items, 'buildFinished', 'payload', 'build', 'requests',
- None, 'submittedAt', 'yesterday')
-
- FindItem(items, 'buildStarted', 'payload', 'build', 'times',
- [123, None])
- FindItem(items, 'stepStarted', 'payload', 'build', 'times',
- [123, None])
- FindItem(items, 'stepStarted', 'payload', 'step', 'times',
- [123, None])
- FindItem(items, 'stepFinished', 'payload', 'build', 'times',
- [123, None])
- FindItem(items, 'stepFinished', 'payload', 'step', 'times',
- [123, None])
- FindItem(items, 'buildFinished', 'payload', 'build', 'times',
- [123, None])
-
- FindItem(items, 'stepStarted', 'payload', 'build',
- 'current_step', 'times', [234, None])
- FindItem(items, 'stepFinished', 'payload', 'build',
- 'current_step', 'times', [234, None])
- FindItem(items, 'buildFinished', 'payload', 'build',
- 'current_step', 'times', [234, None])
-
- FindItem(items, 'stepStarted', 'payload', 'build', 'steps', None,
- 'times', [345, None])
- FindItem(items, 'stepFinished', 'payload', 'build', 'steps',
- None, 'times', [345, None])
- FindItem(items, 'buildFinished', 'payload', 'build', 'steps',
- None, 'times', [345, None])
-
- for i in range(min(len(expected), len(items))):
- self.assertEqual(expected[i], items[i], str(i))
- self.assertEqual(len(expected), len(items))
-
-
-class StatusPushTest(StatusPushTestBase):
- def testNotFiltered(self):
- self.expected = EXPECTED
- self.init(config_no_http_no_filter)
- d = self.connectSlave()
- d.addCallbacks(self._testPhase1)
- return d
-
- def testFiltered(self):
- self.expected = EXPECTED_SHORT
- self.init(config_no_http)
- d = self.connectSlave()
- d.addCallbacks(self._testPhase1)
- return d
-
- def _testPhase1(self, d):
- # Now the slave is connected, trigger a change.
- cm = self.master.change_svc
- c = changes.Change("bob", ["Makefile", "foo/bar.c"], "changed stuff")
- cm.addChange(c)
- d = self.requestBuild("dummy")
- d.addCallback(self._testPhase2)
- return d
-
- def _testPhase2(self, d):
- d = self.shutdownAllSlaves()
- d.addCallback(lambda x: self.master.stopService())
- d.addCallback(self._testPhase3)
- return d
-
- def _testPhase3(self, d):
- def TupleToList(items):
- if isinstance(items, (list, tuple)):
- return [TupleToList(i) for i in items]
- if isinstance(items, dict):
- return dict([(k, TupleToList(v))
- for (k, v) in items.iteritems()])
- else:
- return items
- self.assertEqual(0, self.getStatusPush().queue.nbItems())
- # Grabs fake_queue created in DoNothing().
- self.verifyItems(TupleToList(self.getStatusPush().fake_queue),
- self.expected)
- self.master = None
-
-
-class HttpStatusPushTest(StatusPushTestBase):
- def setUp(self):
- StatusPushTestBase.setUp(self)
- self.server = None
-
- def tearDown(self):
- StatusPushTestBase.tearDown(self)
- state_path = os.path.join(self.path, 'state')
- state = json.loads(ReadFile(state_path))
- del state['started']
- self.assertEqual({"last_id_pushed": 0, "next_id": 17, }, state)
- os.remove(state_path)
- self.assertEqual([], os.listdir(self.path))
-
- def testNotFiltered(self):
- self.expected = EXPECTED
- path = os.path.join(os.path.dirname(__file__), 'status_push_server.py')
- self.site = server.Site(Receiver())
- self.server = reactor.listenTCP(0, self.site)
- self.port = self.server.getHost().port
- self.init(config_http_no_filter.replace('<PORT>', str(self.port)))
- d = self.connectSlave()
- d.addCallbacks(self._testPhase1)
- return d
-
- def testFiltered(self):
- self.expected = EXPECTED_SHORT
- path = os.path.join(os.path.dirname(__file__), 'status_push_server.py')
- self.site = server.Site(Receiver())
- self.server = reactor.listenTCP(0, self.site)
- self.port = self.server.getHost().port
- self.init(config_http.replace('<PORT>', str(self.port)))
- d = self.connectSlave()
- d.addCallbacks(self._testPhase1)
- return d
-
- def _testPhase1(self, d):
- g = self.getStatusPush()
- self.path = g.path
- # Now the slave is connected, trigger a change.
- cm = self.master.change_svc
- c = changes.Change("bob", ["Makefile", "foo/bar.c"], "changed stuff")
- cm.addChange(c)
- d = self.requestBuild("dummy")
- d.addCallback(self._testPhase2)
- return d
-
- def _testPhase2(self, d):
- d = self.shutdownAllSlaves()
- d.addCallback(lambda x: self.master.stopService())
- d.addCallback(self._testPhase3)
- d.addCallback(lambda x: self.server.stopListening())
- return d
-
- def _testPhase3(self, d):
- g = self.getStatusPush()
- # Assert all the items were pushed.
- self.assertEqual(0, g.queue.nbItems())
- self.verifyItems(self.site.resource.packets, self.expected)
- self.master = None
-
-# vim: set ts=4 sts=4 sw=4 et:
« no previous file with comments | « third_party/buildbot_7_12/buildbot/test/test_status.py ('k') | third_party/buildbot_7_12/buildbot/test/test_steps.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698