Index: third_party/buildbot_7_12/buildbot/test/test_svnpoller.py |
diff --git a/third_party/buildbot_7_12/buildbot/test/test_svnpoller.py b/third_party/buildbot_7_12/buildbot/test/test_svnpoller.py |
deleted file mode 100644 |
index 452a5146716517693f189a5bd708031409550eb0..0000000000000000000000000000000000000000 |
--- a/third_party/buildbot_7_12/buildbot/test/test_svnpoller.py |
+++ /dev/null |
@@ -1,476 +0,0 @@ |
-# -*- test-case-name: buildbot.test.test_svnpoller -*- |
- |
-import time |
-from twisted.internet import defer |
-from twisted.trial import unittest |
-from buildbot.changes.svnpoller import SVNPoller |
- |
-# this is the output of "svn info --xml |
-# svn+ssh://svn.twistedmatrix.com/svn/Twisted/trunk" |
-prefix_output = """\ |
-<?xml version="1.0"?> |
-<info> |
-<entry |
- kind="dir" |
- path="trunk" |
- revision="18354"> |
-<url>svn+ssh://svn.twistedmatrix.com/svn/Twisted/trunk</url> |
-<repository> |
-<root>svn+ssh://svn.twistedmatrix.com/svn/Twisted</root> |
-<uuid>bbbe8e31-12d6-0310-92fd-ac37d47ddeeb</uuid> |
-</repository> |
-<commit |
- revision="18352"> |
-<author>jml</author> |
-<date>2006-10-01T02:37:34.063255Z</date> |
-</commit> |
-</entry> |
-</info> |
-""" |
- |
-# and this is "svn info --xml svn://svn.twistedmatrix.com/svn/Twisted". I |
-# think this is kind of a degenerate case.. it might even be a form of error. |
-prefix_output_2 = """\ |
-<?xml version="1.0"?> |
-<info> |
-</info> |
-""" |
- |
-# this is the svn info output for a local repository, svn info --xml |
-# file:///home/warner/stuff/Projects/BuildBot/trees/svnpoller/_trial_temp/test_vc/repositories/SVN-Repository |
-prefix_output_3 = """\ |
-<?xml version="1.0"?> |
-<info> |
-<entry |
- kind="dir" |
- path="SVN-Repository" |
- revision="3"> |
-<url>file:///home/warner/stuff/Projects/BuildBot/trees/svnpoller/_trial_temp/test_vc/repositories/SVN-Repository</url> |
-<repository> |
-<root>file:///home/warner/stuff/Projects/BuildBot/trees/svnpoller/_trial_temp/test_vc/repositories/SVN-Repository</root> |
-<uuid>c0f47ff4-ba1e-0410-96b5-d44cc5c79e7f</uuid> |
-</repository> |
-<commit |
- revision="3"> |
-<author>warner</author> |
-<date>2006-10-01T07:37:04.182499Z</date> |
-</commit> |
-</entry> |
-</info> |
-""" |
- |
-# % svn info --xml file:///home/warner/stuff/Projects/BuildBot/trees/svnpoller/_trial_temp/test_vc/repositories/SVN-Repository/sample/trunk |
- |
-prefix_output_4 = """\ |
-<?xml version="1.0"?> |
-<info> |
-<entry |
- kind="dir" |
- path="trunk" |
- revision="3"> |
-<url>file:///home/warner/stuff/Projects/BuildBot/trees/svnpoller/_trial_temp/test_vc/repositories/SVN-Repository/sample/trunk</url> |
-<repository> |
-<root>file:///home/warner/stuff/Projects/BuildBot/trees/svnpoller/_trial_temp/test_vc/repositories/SVN-Repository</root> |
-<uuid>c0f47ff4-ba1e-0410-96b5-d44cc5c79e7f</uuid> |
-</repository> |
-<commit |
- revision="1"> |
-<author>warner</author> |
-<date>2006-10-01T07:37:02.286440Z</date> |
-</commit> |
-</entry> |
-</info> |
-""" |
- |
- |
- |
-class ComputePrefix(unittest.TestCase): |
- def test1(self): |
- base = "svn+ssh://svn.twistedmatrix.com/svn/Twisted/trunk" |
- s = SVNPoller(base + "/") |
- self.failUnlessEqual(s.svnurl, base) # certify slash-stripping |
- prefix = s.determine_prefix(prefix_output) |
- self.failUnlessEqual(prefix, "trunk") |
- self.failUnlessEqual(s._prefix, prefix) |
- |
- def test2(self): |
- base = "svn+ssh://svn.twistedmatrix.com/svn/Twisted" |
- s = SVNPoller(base) |
- self.failUnlessEqual(s.svnurl, base) |
- prefix = s.determine_prefix(prefix_output_2) |
- self.failUnlessEqual(prefix, "") |
- |
- def test3(self): |
- base = "file:///home/warner/stuff/Projects/BuildBot/trees/svnpoller/_trial_temp/test_vc/repositories/SVN-Repository" |
- s = SVNPoller(base) |
- self.failUnlessEqual(s.svnurl, base) |
- prefix = s.determine_prefix(prefix_output_3) |
- self.failUnlessEqual(prefix, "") |
- |
- def test4(self): |
- base = "file:///home/warner/stuff/Projects/BuildBot/trees/svnpoller/_trial_temp/test_vc/repositories/SVN-Repository/sample/trunk" |
- s = SVNPoller(base) |
- self.failUnlessEqual(s.svnurl, base) |
- prefix = s.determine_prefix(prefix_output_4) |
- self.failUnlessEqual(prefix, "sample/trunk") |
- |
-# output from svn log on .../SVN-Repository/sample |
-# (so it includes trunk and branches) |
-sample_base = "file:///usr/home/warner/stuff/Projects/BuildBot/trees/misc/_trial_temp/test_vc/repositories/SVN-Repository/sample" |
-sample_logentries = [None] * 6 |
- |
-sample_logentries[5] = """\ |
-<logentry |
- revision="6"> |
-<author>warner</author> |
-<date>2006-10-01T19:35:16.165664Z</date> |
-<paths> |
-<path |
- action="D">/sample/branch/version.c</path> |
-</paths> |
-<msg>revised_to_2</msg> |
-</logentry> |
-""" |
- |
-sample_logentries[4] = """\ |
-<logentry |
- revision="5"> |
-<author>warner</author> |
-<date>2006-10-01T19:35:16.165664Z</date> |
-<paths> |
-<path |
- action="D">/sample/branch</path> |
-</paths> |
-<msg>revised_to_2</msg> |
-</logentry> |
-""" |
- |
-sample_logentries[3] = """\ |
-<logentry |
- revision="4"> |
-<author>warner</author> |
-<date>2006-10-01T19:35:16.165664Z</date> |
-<paths> |
-<path |
- action="M">/sample/trunk/version.c</path> |
-</paths> |
-<msg>revised_to_2</msg> |
-</logentry> |
-""" |
- |
-sample_logentries[2] = """\ |
-<logentry |
- revision="3"> |
-<author>warner</author> |
-<date>2006-10-01T19:35:10.215692Z</date> |
-<paths> |
-<path |
- action="M">/sample/branch/main.c</path> |
-</paths> |
-<msg>commit_on_branch</msg> |
-</logentry> |
-""" |
- |
-sample_logentries[1] = """\ |
-<logentry |
- revision="2"> |
-<author>warner</author> |
-<date>2006-10-01T19:35:09.154973Z</date> |
-<paths> |
-<path |
- copyfrom-path="/sample/trunk" |
- copyfrom-rev="1" |
- action="A">/sample/branch</path> |
-</paths> |
-<msg>make_branch</msg> |
-</logentry> |
-""" |
- |
-sample_logentries[0] = """\ |
-<logentry |
- revision="1"> |
-<author>warner</author> |
-<date>2006-10-01T19:35:08.642045Z</date> |
-<paths> |
-<path |
- action="A">/sample</path> |
-<path |
- action="A">/sample/trunk</path> |
-<path |
- action="A">/sample/trunk/subdir/subdir.c</path> |
-<path |
- action="A">/sample/trunk/main.c</path> |
-<path |
- action="A">/sample/trunk/version.c</path> |
-<path |
- action="A">/sample/trunk/subdir</path> |
-</paths> |
-<msg>sample_project_files</msg> |
-</logentry> |
-""" |
- |
-sample_info_output = """\ |
-<?xml version="1.0"?> |
-<info> |
-<entry |
- kind="dir" |
- path="sample" |
- revision="4"> |
-<url>file:///usr/home/warner/stuff/Projects/BuildBot/trees/misc/_trial_temp/test_vc/repositories/SVN-Repository/sample</url> |
-<repository> |
-<root>file:///usr/home/warner/stuff/Projects/BuildBot/trees/misc/_trial_temp/test_vc/repositories/SVN-Repository</root> |
-<uuid>4f94adfc-c41e-0410-92d5-fbf86b7c7689</uuid> |
-</repository> |
-<commit |
- revision="4"> |
-<author>warner</author> |
-<date>2006-10-01T19:35:16.165664Z</date> |
-</commit> |
-</entry> |
-</info> |
-""" |
- |
- |
-changes_output_template = """\ |
-<?xml version="1.0"?> |
-<log> |
-%s</log> |
-""" |
- |
-def make_changes_output(maxrevision): |
- # return what 'svn log' would have just after the given revision was |
- # committed |
- logs = sample_logentries[0:maxrevision] |
- assert len(logs) == maxrevision |
- logs.reverse() |
- output = changes_output_template % ("".join(logs)) |
- return output |
- |
-def split_file(path): |
- pieces = path.split("/") |
- if pieces[0] == "branch": |
- return "branch", "/".join(pieces[1:]) |
- if pieces[0] == "trunk": |
- return None, "/".join(pieces[1:]) |
- raise RuntimeError("there shouldn't be any files like %s" % path) |
- |
-class MySVNPoller(SVNPoller): |
- def __init__(self, *args, **kwargs): |
- SVNPoller.__init__(self, *args, **kwargs) |
- self.pending_commands = [] |
- self.finished_changes = [] |
- |
- def getProcessOutput(self, args): |
- d = defer.Deferred() |
- self.pending_commands.append((args, d)) |
- return d |
- |
- def submit_changes(self, changes): |
- self.finished_changes.extend(changes) |
- |
-class ComputeChanges(unittest.TestCase): |
- def test1(self): |
- base = "file:///home/warner/stuff/Projects/BuildBot/trees/svnpoller/_trial_temp/test_vc/repositories/SVN-Repository/sample" |
- s = SVNPoller(base) |
- s._prefix = "sample" |
- output = make_changes_output(4) |
- doc = s.parse_logs(output) |
- |
- newlast, logentries = s._filter_new_logentries(doc, 4) |
- self.failUnlessEqual(newlast, 4) |
- self.failUnlessEqual(len(logentries), 0) |
- |
- newlast, logentries = s._filter_new_logentries(doc, 3) |
- self.failUnlessEqual(newlast, 4) |
- self.failUnlessEqual(len(logentries), 1) |
- |
- newlast, logentries = s._filter_new_logentries(doc, 1) |
- self.failUnlessEqual(newlast, 4) |
- self.failUnlessEqual(len(logentries), 3) |
- |
- newlast, logentries = s._filter_new_logentries(doc, None) |
- self.failUnlessEqual(newlast, 4) |
- self.failUnlessEqual(len(logentries), 0) |
- |
- def testChanges(self): |
- base = "file:///home/warner/stuff/Projects/BuildBot/trees/svnpoller/_trial_temp/test_vc/repositories/SVN-Repository/sample" |
- s = SVNPoller(base, split_file=split_file) |
- s._prefix = "sample" |
- doc = s.parse_logs(make_changes_output(3)) |
- newlast, logentries = s._filter_new_logentries(doc, 1) |
- # so we see revisions 2 and 3 as being new |
- self.failUnlessEqual(newlast, 3) |
- changes = s.create_changes(logentries) |
- self.failUnlessEqual(len(changes), 2) |
- self.failUnlessEqual(changes[0].branch, "branch") |
- self.failUnlessEqual(changes[0].revision, '2') |
- self.failUnlessEqual(changes[1].branch, "branch") |
- self.failUnlessEqual(changes[1].files, ["main.c"]) |
- self.failUnlessEqual(changes[1].revision, '3') |
- |
- # and now pull in r4 |
- doc = s.parse_logs(make_changes_output(4)) |
- newlast, logentries = s._filter_new_logentries(doc, newlast) |
- self.failUnlessEqual(newlast, 4) |
- # so we see revision 4 as being new |
- changes = s.create_changes(logentries) |
- self.failUnlessEqual(len(changes), 1) |
- self.failUnlessEqual(changes[0].branch, None) |
- self.failUnlessEqual(changes[0].revision, '4') |
- self.failUnlessEqual(changes[0].files, ["version.c"]) |
- |
- # and now pull in r5 (should *not* create a change as it's a |
- # branch deletion |
- doc = s.parse_logs(make_changes_output(5)) |
- newlast, logentries = s._filter_new_logentries(doc, newlast) |
- self.failUnlessEqual(newlast, 5) |
- # so we see revision 5 as being new |
- changes = s.create_changes(logentries) |
- self.failUnlessEqual(len(changes), 0) |
- |
- # and now pull in r6 (should create a change as it's not |
- # deleting an entire branch |
- doc = s.parse_logs(make_changes_output(6)) |
- newlast, logentries = s._filter_new_logentries(doc, newlast) |
- self.failUnlessEqual(newlast, 6) |
- # so we see revision 6 as being new |
- changes = s.create_changes(logentries) |
- self.failUnlessEqual(len(changes), 1) |
- self.failUnlessEqual(changes[0].branch, 'branch') |
- self.failUnlessEqual(changes[0].revision, '6') |
- self.failUnlessEqual(changes[0].files, ["version.c"]) |
- |
- def testFirstTime(self): |
- base = "file:///home/warner/stuff/Projects/BuildBot/trees/svnpoller/_trial_temp/test_vc/repositories/SVN-Repository/sample" |
- s = SVNPoller(base, split_file=split_file) |
- s._prefix = "sample" |
- doc = s.parse_logs(make_changes_output(4)) |
- logentries = s.get_new_logentries(doc) |
- # SVNPoller ignores all changes that happened before it was started |
- self.failUnlessEqual(len(logentries), 0) |
- self.failUnlessEqual(s.last_change, 4) |
- |
-class Misc(unittest.TestCase): |
- def testAlreadyWorking(self): |
- base = "file:///home/warner/stuff/Projects/BuildBot/trees/svnpoller/_trial_temp/test_vc/repositories/SVN-Repository/sample" |
- s = MySVNPoller(base) |
- d = s.checksvn() |
- # the SVNPoller is now waiting for its getProcessOutput to finish |
- self.failUnlessEqual(s.overrun_counter, 0) |
- d2 = s.checksvn() |
- self.failUnlessEqual(s.overrun_counter, 1) |
- self.failUnlessEqual(len(s.pending_commands), 1) |
- |
- def testGetRoot(self): |
- base = "svn+ssh://svn.twistedmatrix.com/svn/Twisted/trunk" |
- s = MySVNPoller(base) |
- d = s.checksvn() |
- # the SVNPoller is now waiting for its getProcessOutput to finish |
- self.failUnlessEqual(len(s.pending_commands), 1) |
- self.failUnlessEqual(s.pending_commands[0][0], |
- ["info", "--xml", "--non-interactive", base]) |
- |
-def makeTime(timestring): |
- datefmt = '%Y/%m/%d %H:%M:%S' |
- when = time.mktime(time.strptime(timestring, datefmt)) |
- return when |
- |
- |
-class Everything(unittest.TestCase): |
- def test1(self): |
- s = MySVNPoller(sample_base, split_file=split_file) |
- d = s.checksvn() |
- # the SVNPoller is now waiting for its getProcessOutput to finish |
- self.failUnlessEqual(len(s.pending_commands), 1) |
- self.failUnlessEqual(s.pending_commands[0][0], |
- ["info", "--xml", "--non-interactive", |
- sample_base]) |
- d = s.pending_commands[0][1] |
- s.pending_commands.pop(0) |
- d.callback(sample_info_output) |
- # now it should be waiting for the 'svn log' command |
- self.failUnlessEqual(len(s.pending_commands), 1) |
- self.failUnlessEqual(s.pending_commands[0][0], |
- ["log", "--xml", "--verbose", "--non-interactive", |
- "--limit=100", sample_base]) |
- d = s.pending_commands[0][1] |
- s.pending_commands.pop(0) |
- d.callback(make_changes_output(1)) |
- # the command ignores the first batch of changes |
- self.failUnlessEqual(len(s.finished_changes), 0) |
- self.failUnlessEqual(s.last_change, 1) |
- |
- # now fire it again, nothing changing |
- d = s.checksvn() |
- self.failUnlessEqual(s.pending_commands[0][0], |
- ["log", "--xml", "--verbose", "--non-interactive", |
- "--limit=100", sample_base]) |
- d = s.pending_commands[0][1] |
- s.pending_commands.pop(0) |
- d.callback(make_changes_output(1)) |
- # nothing has changed |
- self.failUnlessEqual(len(s.finished_changes), 0) |
- self.failUnlessEqual(s.last_change, 1) |
- |
- # and again, with r2 this time |
- d = s.checksvn() |
- self.failUnlessEqual(s.pending_commands[0][0], |
- ["log", "--xml", "--verbose", "--non-interactive", |
- "--limit=100", sample_base]) |
- d = s.pending_commands[0][1] |
- s.pending_commands.pop(0) |
- d.callback(make_changes_output(2)) |
- # r2 should appear |
- self.failUnlessEqual(len(s.finished_changes), 1) |
- self.failUnlessEqual(s.last_change, 2) |
- |
- c = s.finished_changes[0] |
- self.failUnlessEqual(c.branch, "branch") |
- self.failUnlessEqual(c.revision, '2') |
- self.failUnlessEqual(c.files, ['']) |
- # TODO: this is what creating the branch looks like: a Change with a |
- # zero-length file. We should decide if we want filenames like this |
- # in the Change (and make sure nobody else gets confused by it) or if |
- # we want to strip them out. |
- self.failUnlessEqual(c.comments, "make_branch") |
- |
- # and again at r2, so nothing should change |
- d = s.checksvn() |
- self.failUnlessEqual(s.pending_commands[0][0], |
- ["log", "--xml", "--verbose", "--non-interactive", |
- "--limit=100", sample_base]) |
- d = s.pending_commands[0][1] |
- s.pending_commands.pop(0) |
- d.callback(make_changes_output(2)) |
- # nothing has changed |
- self.failUnlessEqual(len(s.finished_changes), 1) |
- self.failUnlessEqual(s.last_change, 2) |
- |
- # and again with both r3 and r4 appearing together |
- d = s.checksvn() |
- self.failUnlessEqual(s.pending_commands[0][0], |
- ["log", "--xml", "--verbose", "--non-interactive", |
- "--limit=100", sample_base]) |
- d = s.pending_commands[0][1] |
- s.pending_commands.pop(0) |
- d.callback(make_changes_output(4)) |
- self.failUnlessEqual(len(s.finished_changes), 3) |
- self.failUnlessEqual(s.last_change, 4) |
- |
- c3 = s.finished_changes[1] |
- self.failUnlessEqual(c3.branch, "branch") |
- self.failUnlessEqual(c3.revision, '3') |
- self.failUnlessEqual(c3.files, ["main.c"]) |
- self.failUnlessEqual(c3.comments, "commit_on_branch") |
- |
- c4 = s.finished_changes[2] |
- self.failUnlessEqual(c4.branch, None) |
- self.failUnlessEqual(c4.revision, '4') |
- self.failUnlessEqual(c4.files, ["version.c"]) |
- self.failUnlessEqual(c4.comments, "revised_to_2") |
- self.failUnless(abs(c4.when - time.time()) < 60) |
- |
- |
-# TODO: |
-# get coverage of split_file returning None |
-# point at a live SVN server for a little while |