| Index: third_party/buildbot_7_12/buildbot/test/test_bonsaipoller.py
|
| diff --git a/third_party/buildbot_7_12/buildbot/test/test_bonsaipoller.py b/third_party/buildbot_7_12/buildbot/test/test_bonsaipoller.py
|
| deleted file mode 100644
|
| index f4ca23348b4c2977fa4c5f2133964f6aa7c2baf3..0000000000000000000000000000000000000000
|
| --- a/third_party/buildbot_7_12/buildbot/test/test_bonsaipoller.py
|
| +++ /dev/null
|
| @@ -1,244 +0,0 @@
|
| -# -*- test-case-name: buildbot.test.test_bonsaipoller -*-
|
| -
|
| -from twisted.trial import unittest
|
| -from buildbot.changes.bonsaipoller import FileNode, CiNode, BonsaiResult, \
|
| - BonsaiParser, BonsaiPoller, InvalidResultError, EmptyResult
|
| -from buildbot.changes.changes import ChangeMaster
|
| -
|
| -from copy import deepcopy
|
| -import re
|
| -
|
| -log1 = "Add Bug 338541a"
|
| -who1 = "sar@gmail.com"
|
| -date1 = 1161908700
|
| -log2 = "bug 357427 add static ctor/dtor methods"
|
| -who2 = "aarrg@ooacm.org"
|
| -date2 = 1161910620
|
| -log3 = "Testing log #3 lbah blah"
|
| -who3 = "huoents@hueont.net"
|
| -date3 = 1889822728
|
| -rev1 = "1.8"
|
| -file1 = "mozilla/testing/mochitest/tests/index.html"
|
| -rev2 = "1.1"
|
| -file2 = "mozilla/testing/mochitest/tests/test_bug338541.xhtml"
|
| -rev3 = "1.1812"
|
| -file3 = "mozilla/xpcom/threads/nsAutoLock.cpp"
|
| -rev4 = "1.3"
|
| -file4 = "mozilla/xpcom/threads/nsAutoLock.h"
|
| -rev5 = "2.4"
|
| -file5 = "mozilla/xpcom/threads/test.cpp"
|
| -
|
| -nodes = []
|
| -files = []
|
| -files.append(FileNode(rev1,file1))
|
| -nodes.append(CiNode(log1, who1, date1, files))
|
| -
|
| -files = []
|
| -files.append(FileNode(rev2, file2))
|
| -files.append(FileNode(rev3, file3))
|
| -nodes.append(CiNode(log2, who2, date2, files))
|
| -
|
| -nodes.append(CiNode(log3, who3, date3, []))
|
| -
|
| -goodParsedResult = BonsaiResult(nodes)
|
| -
|
| -goodUnparsedResult = """\
|
| -<?xml version="1.0"?>
|
| -<queryResults>
|
| -<ci who="%s" date="%d">
|
| - <log>%s</log>
|
| - <files>
|
| - <f rev="%s">%s</f>
|
| - </files>
|
| -</ci>
|
| -<ci who="%s" date="%d">
|
| - <log>%s</log>
|
| - <files>
|
| - <f rev="%s">%s</f>
|
| - <f rev="%s">%s</f>
|
| - </files>
|
| -</ci>
|
| -<ci who="%s" date="%d">
|
| - <log>%s</log>
|
| - <files>
|
| - </files>
|
| -</ci>
|
| -</queryResults>
|
| -""" % (who1, date1, log1, rev1, file1,
|
| - who2, date2, log2, rev2, file2, rev3, file3,
|
| - who3, date3, log3)
|
| -
|
| -badUnparsedResult = deepcopy(goodUnparsedResult)
|
| -badUnparsedResult = badUnparsedResult.replace("</queryResults>", "")
|
| -
|
| -invalidDateResult = deepcopy(goodUnparsedResult)
|
| -invalidDateResult = invalidDateResult.replace(str(date1), "foobar")
|
| -
|
| -missingFilenameResult = deepcopy(goodUnparsedResult)
|
| -missingFilenameResult = missingFilenameResult.replace(file2, "")
|
| -
|
| -duplicateLogResult = deepcopy(goodUnparsedResult)
|
| -duplicateLogResult = re.sub("<log>"+log1+"</log>",
|
| - "<log>blah</log><log>blah</log>",
|
| - duplicateLogResult)
|
| -
|
| -duplicateFilesResult = deepcopy(goodUnparsedResult)
|
| -duplicateFilesResult = re.sub("<files>\s*</files>",
|
| - "<files></files><files></files>",
|
| - duplicateFilesResult)
|
| -
|
| -missingCiResult = deepcopy(goodUnparsedResult)
|
| -r = re.compile("<ci.*</ci>", re.DOTALL | re.MULTILINE)
|
| -missingCiResult = re.sub(r, "", missingCiResult)
|
| -
|
| -badResultMsgs = { 'badUnparsedResult':
|
| - "BonsaiParser did not raise an exception when given a bad query",
|
| - 'invalidDateResult':
|
| - "BonsaiParser did not raise an exception when given an invalid date",
|
| - 'missingRevisionResult':
|
| - "BonsaiParser did not raise an exception when a revision was missing",
|
| - 'missingFilenameResult':
|
| - "BonsaiParser did not raise an exception when a filename was missing",
|
| - 'duplicateLogResult':
|
| - "BonsaiParser did not raise an exception when there was two <log> tags",
|
| - 'duplicateFilesResult':
|
| - "BonsaiParser did not raise an exception when there was two <files> tags",
|
| - 'missingCiResult':
|
| - "BonsaiParser did not raise an exception when there was no <ci> tags"
|
| -}
|
| -
|
| -noCheckinMsgResult = """\
|
| -<?xml version="1.0"?>
|
| -<queryResults>
|
| -<ci who="johndoe@domain.tld" date="12345678">
|
| - <log></log>
|
| - <files>
|
| - <f rev="1.1">first/file.ext</f>
|
| - </files>
|
| -</ci>
|
| -<ci who="johndoe@domain.tld" date="12345678">
|
| - <log></log>
|
| - <files>
|
| - <f rev="1.2">second/file.ext</f>
|
| - </files>
|
| -</ci>
|
| -<ci who="johndoe@domain.tld" date="12345678">
|
| - <log></log>
|
| - <files>
|
| - <f rev="1.3">third/file.ext</f>
|
| - </files>
|
| -</ci>
|
| -</queryResults>
|
| -"""
|
| -
|
| -noCheckinMsgRef = [dict(filename="first/file.ext",
|
| - revision="1.1"),
|
| - dict(filename="second/file.ext",
|
| - revision="1.2"),
|
| - dict(filename="third/file.ext",
|
| - revision="1.3")]
|
| -
|
| -class FakeChangeMaster(ChangeMaster):
|
| - def __init__(self):
|
| - ChangeMaster.__init__(self)
|
| -
|
| - def addChange(self, change):
|
| - pass
|
| -
|
| -class FakeBonsaiPoller(BonsaiPoller):
|
| - def __init__(self):
|
| - BonsaiPoller.__init__(self, "fake url", "fake module", "fake branch")
|
| - self.parent = FakeChangeMaster()
|
| -
|
| -class TestBonsaiPoller(unittest.TestCase):
|
| - def testFullyFormedResult(self):
|
| - br = BonsaiParser(goodUnparsedResult)
|
| - result = br.getData()
|
| - # make sure the result is a BonsaiResult
|
| - self.failUnless(isinstance(result, BonsaiResult))
|
| - # test for successful parsing
|
| - self.failUnlessEqual(goodParsedResult, result,
|
| - "BonsaiParser did not return the expected BonsaiResult")
|
| -
|
| - def testBadUnparsedResult(self):
|
| - try:
|
| - BonsaiParser(badUnparsedResult)
|
| - self.fail(badResultMsgs["badUnparsedResult"])
|
| - except InvalidResultError:
|
| - pass
|
| -
|
| - def testInvalidDateResult(self):
|
| - try:
|
| - BonsaiParser(invalidDateResult)
|
| - self.fail(badResultMsgs["invalidDateResult"])
|
| - except InvalidResultError:
|
| - pass
|
| -
|
| - def testMissingFilenameResult(self):
|
| - try:
|
| - BonsaiParser(missingFilenameResult)
|
| - self.fail(badResultMsgs["missingFilenameResult"])
|
| - except InvalidResultError:
|
| - pass
|
| -
|
| - def testDuplicateLogResult(self):
|
| - try:
|
| - BonsaiParser(duplicateLogResult)
|
| - self.fail(badResultMsgs["duplicateLogResult"])
|
| - except InvalidResultError:
|
| - pass
|
| -
|
| - def testDuplicateFilesResult(self):
|
| - try:
|
| - BonsaiParser(duplicateFilesResult)
|
| - self.fail(badResultMsgs["duplicateFilesResult"])
|
| - except InvalidResultError:
|
| - pass
|
| -
|
| - def testMissingCiResult(self):
|
| - try:
|
| - BonsaiParser(missingCiResult)
|
| - self.fail(badResultMsgs["missingCiResult"])
|
| - except EmptyResult:
|
| - pass
|
| -
|
| - def testChangeNotSubmitted(self):
|
| - "Make sure a change is not submitted if the BonsaiParser fails"
|
| - poller = FakeBonsaiPoller()
|
| - lastChangeBefore = poller.lastChange
|
| - poller._process_changes(badUnparsedResult)
|
| - # self.lastChange will not be updated if the change was not submitted
|
| - self.failUnlessEqual(lastChangeBefore, poller.lastChange)
|
| -
|
| - def testParserWorksAfterInvalidResult(self):
|
| - """Make sure the BonsaiPoller still works after catching an
|
| - InvalidResultError"""
|
| -
|
| - poller = FakeBonsaiPoller()
|
| -
|
| - lastChangeBefore = poller.lastChange
|
| - # generate an exception first. pretend that we're doing a poll and
|
| - # increment the timestamp, otherwise the failIfEqual test at the
|
| - # bottom will depend upon there being a noticeable difference between
|
| - # two successive calls to time.time().
|
| - poller.lastPoll += 1.0
|
| - poller._process_changes(badUnparsedResult)
|
| - # now give it a valid one...
|
| - poller.lastPoll += 1.0
|
| - poller._process_changes(goodUnparsedResult)
|
| - # if poller.lastChange has not been updated then the good result
|
| - # was not parsed
|
| - self.failIfEqual(lastChangeBefore, poller.lastChange)
|
| -
|
| - def testMergeEmptyLogMsg(self):
|
| - """Ensure that BonsaiPoller works around the bonsai xml output
|
| - issue when the check-in comment is empty"""
|
| - bp = BonsaiParser(noCheckinMsgResult)
|
| - result = bp.getData()
|
| - self.failUnlessEqual(len(result.nodes), 1)
|
| - self.failUnlessEqual(result.nodes[0].who, "johndoe@domain.tld")
|
| - self.failUnlessEqual(result.nodes[0].date, 12345678)
|
| - self.failUnlessEqual(result.nodes[0].log, "")
|
| - for file, ref in zip(result.nodes[0].files, noCheckinMsgRef):
|
| - self.failUnlessEqual(file.filename, ref['filename'])
|
| - self.failUnlessEqual(file.revision, ref['revision'])
|
|
|