From 68b86c63a9f2f51c975846c3c5d4febd14f0e966 Mon Sep 17 00:00:00 2001 From: Benji York Date: Mon, 5 Jun 2006 03:34:01 +0000 Subject: [PATCH] add a test layer that sets up a server on a known port --- ftests/reallayer.py | 38 ++++++++++++++++++++++++++++++++++++++ ftests/testdoc.py | 2 ++ real.txt | 19 ++++++++----------- realproxy.py | 12 ++++++++---- 4 files changed, 56 insertions(+), 15 deletions(-) create mode 100644 ftests/reallayer.py diff --git a/ftests/reallayer.py b/ftests/reallayer.py new file mode 100644 index 0000000..2e61e1a --- /dev/null +++ b/ftests/reallayer.py @@ -0,0 +1,38 @@ +from zope.app.server.main import setup, load_options, run +import ThreadedAsync.LoopCallback +import threading +from zope.testbrowser.realproxy import TARGET_PORT + +class TestbrowserRealClass: + + __bases__ = () + + def __init__(self): + self.__name__ = self.__class__.__name__[:-5] + self.__module__ = self.__class__.__module__ + + def setUp(self): + self.startZope() + + def tearDown(self): + self.stopZope() + + def startZope(self, fg=None): + """start Zope in a daemon thread""" + def go(): + # force the server to run on a known port + args = ['-X', 'server/address=%s' % TARGET_PORT, + '-X', 'site-definition=ftesting.zcml'] + setup(load_options(args)) + run() + + self.zope_thread = threading.Thread(target=go) + self.zope_thread.setDaemon(True) + self.zope_thread.start() + + def stopZope(self): + """tell Zope to stop and wait for it to do so""" + ThreadedAsync.LoopCallback.exit_status = 0 + self.zope_thread.join() + +TestbrowserReal = TestbrowserRealClass() diff --git a/ftests/testdoc.py b/ftests/testdoc.py index d7f0661..1f8de52 100644 --- a/ftests/testdoc.py +++ b/ftests/testdoc.py @@ -18,12 +18,14 @@ import unittest import doctest from zope.app.testing.functional import FunctionalDocFileSuite +from reallayer import TestbrowserReal def test_suite(): flags = doctest.NORMALIZE_WHITESPACE | doctest.ELLIPSIS readme = FunctionalDocFileSuite('../README.txt', optionflags=flags) real = doctest.DocFileSuite('../real.txt', optionflags=flags) real.level = 2 + real.layer = TestbrowserReal wire = FunctionalDocFileSuite('../over_the_wire.txt', optionflags=flags) wire.level = 2 return unittest.TestSuite((readme, wire, real)) diff --git a/real.txt b/real.txt index 9447623..d82a56d 100644 --- a/real.txt +++ b/real.txt @@ -8,11 +8,14 @@ the testbrowser API. First, instantiate a Browser object. >>> from zope.testbrowser.real import Browser >>> browser = Browser() -We can open pages. +We can open pages and look at their contents. >>> browser.open('http://localhost/') - >>> browser.getLink('buddies') - + >>> browser.contents + u'......' + + >>> browser.getLink('[top]', index=0) + If a link doesn't exist, we get an exception. @@ -23,18 +26,12 @@ If a link doesn't exist, we get an exception. Links can be clicked. - >>> browser.getLink('buddies').click() + >>> browser.getLink('[top]', index=0).click() We can retrieve the current address. >>> browser.url - u'http://localhost:8000/buddies' - -We can also view the contents of the page. - - >>> browser.getLink('brian').click() - >>> browser.contents - u'......' + u'http://localhost:23123/' When we're done with the browser we have to close it. diff --git a/realproxy.py b/realproxy.py index 991f78a..ec299d7 100644 --- a/realproxy.py +++ b/realproxy.py @@ -12,7 +12,10 @@ base_dir = os.path.dirname(__file__) allowed_resources = ['MochiKit', 'shim.js', 'commands.js', 'start.html'] -PROXY_PORT = 8000 + +PROXY_PORT = 23123 +PROXY_HOST = '127.0.0.1' +TARGET_PORT = 23124 class Constant(object): def __init__(self, name): @@ -26,7 +29,7 @@ def __str__(self): class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): # server_version = "TinyHTTPProxy/" + __version__ rbufsize = 0 - remote_host = 'localhost:8080' # TODO needs to be configurable + remote_host = 'localhost:%d' % TARGET_PORT def __init__(self, request, client_address, server): self.command_queue = server.command_queue @@ -195,8 +198,9 @@ def process_request_thread(self, request, client_address): class ServerManager(object): def __init__(self): + self.host = PROXY_HOST self.port = PROXY_PORT - self.server = HttpServer(('127.0.0.1', self.port), RequestHandler) + self.server = HttpServer((self.host, self.port), RequestHandler) def start(self): self.server_thread = threading.Thread( @@ -206,7 +210,7 @@ def start(self): def stop(self): self.executeCommand('stop') - conn = httplib.HTTPConnection('localhost:%d' % self.port) + conn = httplib.HTTPConnection('%s:%d' % (self.host, self.port)) conn.request('NOOP', '/') conn.getresponse()