From ba22def54686f46962962d4e3b1f5cc511330a30 Mon Sep 17 00:00:00 2001
From: Julien Muchembled <jm@nexedi.com>
Date: Thu, 18 Nov 2010 17:53:52 +0000
Subject: [PATCH] Unit tests: start webdav server

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@40394 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5Type/tests/ERP5TypeTestCase.py    |  2 +-
 .../ERP5Type/tests/ProcessingNodeTestCase.py  | 10 ++++++++-
 product/ERP5Type/tests/utils.py               | 22 ++++++++++++-------
 3 files changed, 24 insertions(+), 10 deletions(-)

diff --git a/product/ERP5Type/tests/ERP5TypeTestCase.py b/product/ERP5Type/tests/ERP5TypeTestCase.py
index d9749aa6b1..13c359b137 100644
--- a/product/ERP5Type/tests/ERP5TypeTestCase.py
+++ b/product/ERP5Type/tests/ERP5TypeTestCase.py
@@ -917,7 +917,7 @@ class ERP5TypeTestCase(ProcessingNodeTestCase, PortalTestCase):
                 from Products import DeadlockDebugger
               except ImportError:
                 pass
-              self.serverhost, self.serverport = self.startZServer()
+              self.serverhost, self.serverport = self.startZServer(verbose=True)
               self._registerNode(distributing=1, processing=1)
 
             self._updateConnectionStrings()
diff --git a/product/ERP5Type/tests/ProcessingNodeTestCase.py b/product/ERP5Type/tests/ProcessingNodeTestCase.py
index 9fe916b54e..a3db118419 100644
--- a/product/ERP5Type/tests/ProcessingNodeTestCase.py
+++ b/product/ERP5Type/tests/ProcessingNodeTestCase.py
@@ -85,16 +85,24 @@ class ProcessingNodeTestCase(backportUnittest.TestCase, ZopeTestCase.TestCase):
       pass
     Lifetime.graceful_shutdown_loop()
 
-  def startZServer(self):
+  def startZServer(self, verbose=False):
     """Start HTTP ZServer in background"""
     utils = ZopeTestCase.utils
     if utils._Z2HOST is None:
+      _print = lambda hs: verbose and ZopeTestCase._print(
+        "Running %s server at %s:%s\n" % (
+          hs.server_protocol, hs.server_name, hs.server_port))
       try:
         hs = createZServer()
       except RuntimeError, e:
         ZopeTestCase._print(str(e))
       else:
         utils._Z2HOST, utils._Z2PORT = hs.server_name, hs.server_port
+        _print(hs)
+        try:
+          _print(createZServer(zserver_type='webdav'))
+        except RuntimeError, e:
+          ZopeTestCase._print(str(e))
         t = Thread(target=Lifetime.loop)
         t.setDaemon(1)
         t.start()
diff --git a/product/ERP5Type/tests/utils.py b/product/ERP5Type/tests/utils.py
index 1e88df213f..15a76ff50a 100644
--- a/product/ERP5Type/tests/utils.py
+++ b/product/ERP5Type/tests/utils.py
@@ -297,19 +297,25 @@ def parseListeningAddress(host_port=None, default_host='127.0.0.1'):
   raise RuntimeError("Can't find free port (tried ports %s)\n"
                      % ', '.join(map(str, port_list)))
 
-def createZServer(log=os.devnull):
-  from ZServer import logger, zhttp_server, zhttp_handler
-  lg = logger.file_logger(log)
-  class new_zhttp_server:
+def createZServer(log=os.devnull, zserver_type='http'):
+  import ZServer
+  if zserver_type == 'http':
+    zserver_class, zhandler_class = ZServer.zhttp_server, ZServer.zhttp_handler
+  elif zserver_type == 'webdav':
+    from ZServer.HTTPServer import zwebdav_server as zserver_class
+    from ZServer.WebDAVSrcHandler import WebDAVSrcHandler as zhandler_class
+  else:
+    raise NotImplementedError
+  lg = ZServer.logger.file_logger(log)
+  class new_zserver(zserver_class):
     # I can't use __new__ because zhttp_handler is an old-style class :(
     def __init__(self):
-      self.__class__ = zhttp_server
+      self.__class__, = self.__class__.__bases__
   for ip, port in parseListeningAddress(os.environ.get('zserver')):
-    hs = new_zhttp_server()
+    hs = new_zserver()
     try:
       hs.__init__(ip, port, resolver=None, logger_object=lg)
-      hs.install_handler(zhttp_handler(module='Zope2', uri_base=''))
-      sys.stderr.write("Running ZServer at %s:%s\n" % (ip, port))
+      hs.install_handler(zhandler_class(module='Zope2', uri_base=''))
       return hs
     except socket.error, e:
       if e[0] != errno.EADDRINUSE:
-- 
2.30.9