[Buildbot-commits] buildbot/buildbot/test test_vc.py,1.83,1.84
Brian Warner
warner at users.sourceforge.net
Sat Mar 22 22:14:14 UTC 2008
Update of /cvsroot/buildbot/buildbot/buildbot/test
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv20427/buildbot/test
Modified Files:
test_vc.py
Log Message:
[project @ test_vc.Mercurial: wait for 'hg serve' to get running before starting the test]
Original author: warner at lothar.com
Date: 2008-03-22 21:51:14+00:00
Index: test_vc.py
===================================================================
RCS file: /cvsroot/buildbot/buildbot/buildbot/test/test_vc.py,v
retrieving revision 1.83
retrieving revision 1.84
diff -u -d -r1.83 -r1.84
--- test_vc.py 18 Mar 2008 19:56:51 -0000 1.83
+++ test_vc.py 22 Mar 2008 22:14:12 -0000 1.84
@@ -5,9 +5,10 @@
from cStringIO import StringIO
from twisted.trial import unittest
-from twisted.internet import defer, reactor, utils, protocol, error
+from twisted.internet import defer, reactor, utils, protocol, task, error
from twisted.python import failure
from twisted.python.procutils import which
+from twisted.web import client
#defer.Deferred.debug = True
@@ -2445,7 +2446,6 @@
class MercurialServerPP(protocol.ProcessProtocol):
def outReceived(self, data):
- #print "HG-SERVE-STDOUT:", data
log.msg("hg-serve-stdout: %s" % (data,))
def errReceived(self, data):
print "HG-SERVE-STDERR:", data
@@ -2460,6 +2460,7 @@
vctype_try = "hg"
has_got_revision = True
_hg_server = None
+ _wait_for_server_poller = None
def testCheckout(self):
self.helper.vcargs = { 'repourl': self.helper.rep_trunk }
@@ -2495,15 +2496,37 @@
self.httpPort = 8300 + (os.getpid() % 200)
args = [self.helper.vcexe,
"serve", "--port", str(self.httpPort), "--verbose"]
+
+ # in addition, hg doesn't flush its stdout, so we can't wait for the
+ # "listening at" message to know when it's safe to start the test.
+ # Instead, poll every second until a getPage works.
+
pp = MercurialServerPP() # logs+discards everything
# this serves one tree at a time, so we serve trunk. TODO: test hg's
# in-repo branches, for which a single tree will hold all branches.
self._hg_server = reactor.spawnProcess(pp, self.helper.vcexe, args,
os.environ,
self.helper.rep_trunk)
- time.sleep(1) # give it a moment to get started
+ log.msg("waiting for hg serve to start")
+ done_d = defer.Deferred()
+ def poll():
+ d = client.getPage("http://localhost:%d/" % self.httpPort)
+ def success(res):
+ log.msg("hg serve appears to have started")
+ self._wait_for_server_poller.stop()
+ done_d.callback(None)
+ def ignore_connection_refused(f):
+ f.trap(error.ConnectionRefusedError)
+ d.addCallbacks(success, ignore_connection_refused)
+ d.addErrback(done_d.errback)
+ self._wait_for_server_poller = task.LoopingCall(poll)
+ self._wait_for_server_poller.start(0.5, True)
+ return done_d
def tearDown(self):
+ if self._wait_for_server_poller:
+ if self._wait_for_server_poller.running:
+ self._wait_for_server_poller.stop()
if self._hg_server:
try:
self._hg_server.signalProcess("KILL")
@@ -2513,10 +2536,12 @@
return VCBase.tearDown(self)
def testCheckoutHTTP(self):
- self.serveHTTP()
- repourl = "http://localhost:%d/" % self.httpPort
- self.helper.vcargs = { 'repourl': repourl }
- d = self.do_vctest(testRetry=False)
+ d = self.serveHTTP()
+ def _started(res):
+ repourl = "http://localhost:%d/" % self.httpPort
+ self.helper.vcargs = { 'repourl': repourl }
+ return self.do_vctest(testRetry=False)
+ d.addCallback(_started)
return d
def testTry(self):
More information about the Commits
mailing list