Rev 56: Server tests passing with a first rough implementation. in file:///net/bigmamac/Volumes/home/vila/.bazaar/plugins/local_test_server/

Vincent Ladeuil v.ladeuil+lp at free.fr
Mon Feb 23 11:27:14 GMT 2009


At file:///net/bigmamac/Volumes/home/vila/.bazaar/plugins/local_test_server/

------------------------------------------------------------
revno: 56
revision-id: v.ladeuil+lp at free.fr-20090223112714-skdetd3uwoofskri
parent: v.ladeuil+lp at free.fr-20090223102417-v7kc6gbd9fab2tu4
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: local_test_server
timestamp: Mon 2009-02-23 12:27:14 +0100
message:
  Server tests passing with a first rough implementation.
  
  * tests/test_utils.py:
  (full_scenarios): We have a server now.
  
  * server.py:
  (Muddleftpd): New class.
  (_next_available_port, _max_available_port): Silly port check in
  muddleftpd forcing us to use ports less than 32768.
  
  * configs/muddleftpd.conf:
  (pidfile): Deleted, this is not supported anymore (and not
  mentioned in the doc either but instead in
  muddleftpd-1.3.13.1/NEWS ...).
  
  * config.py:
  (Muddleftpd.__init__): Needs a /var/lock directory.
-------------- next part --------------
=== modified file 'config.py'
--- a/config.py	2009-02-23 10:24:17 +0000
+++ b/config.py	2009-02-23 11:27:14 +0000
@@ -196,6 +196,10 @@
 
 class Muddleftpd(Config):
 
-    def __init__(self, _base_dir=None):
-        super(Muddleftpd, self).__init__('muddleftpd', _base_dir=_base_dir)
+    _required_dirs = dict(var_lock_dir='var/lock')
 
+    def __init__(self, name=None, required_dirs=None, _base_dir=None):
+        if name is None:
+            name = 'muddleftpd'
+        super(Muddleftpd, self).__init__(
+            name, required_dirs=self._required_dirs, _base_dir=_base_dir)

=== modified file 'configs/muddleftpd.conf'
--- a/configs/muddleftpd.conf	2009-02-23 10:24:17 +0000
+++ b/configs/muddleftpd.conf	2009-02-23 11:27:14 +0000
@@ -9,7 +9,6 @@
 maxusers 100
 timeout 300
 logfile %(log_file)s
-pidfile %(pid_file)s
 scratchfile %(var_lock_dir)s/muddleftpd.scratch
 
 # log everything except debugging logs

=== modified file 'server.py'
--- a/server.py	2009-02-20 15:57:48 +0000
+++ b/server.py	2009-02-23 11:27:14 +0000
@@ -695,8 +695,49 @@
             raise LTSCantStopError(self)
 
 
-_next_available_port = 49000
-_max_available_port = 49151
+class Muddleftpd(Server):
+
+    _server_command_name = 'muddleftpd'
+
+    def __init__(self, port, _conf=None):
+        if _conf is None:
+            _conf = config.Muddleftpd()
+        # FIXME: it's weird to reverse parameter order
+        super(Muddleftpd, self).__init__(_conf, port)
+        self.output_config_path = self.config.abspath('etc/muddleftpd.conf')
+
+    def _start(self):
+        # This is the best we can do: just spawn the process hoping nothing
+        # goes wrong during server launch...
+
+        # NOTE: muddleftpd uses a strange policy, the pidfile is not supported
+        # (it was in the past). Instead a scratchfile is used to synchronize
+        # communications between the various processes involved (muddleftpd,
+        # ftpwho). This sounds too complicated to respect, so we just spawn the
+        # server and handle the pidfile ourselve.
+        proc = subprocess.Popen([self._server_command_name,
+                                 '-c', self.output_config_path])
+        if proc.returncode is not None:
+            raise LTSCantStartError(self, 'return code: %s' % proc.returncode)
+        f = open(self.get_config_value('pid_file'), 'w')
+        try:
+            f.write('%s' % proc.pid)
+        finally:
+            f.close()
+
+    def _stop(self):
+        if not self._wait_for_server_process_death():
+            raise LTSCantStopError(self)
+        # We need to delete the pid file ourselves
+        osutils.delete_any(self.get_config_value('pid_file'))
+
+
+# For self tests we use a range of unassigned port numbers as described
+# in http://www.iana.org/assignments/port-numbers
+# We use the 29168-30000 range
+
+_next_available_port = 29168
+_max_available_port = 30000
 def _get_available_port():
     """Returns an hopefully available port for test purposes.
 
@@ -723,18 +764,20 @@
 
 # The test servers provided use a range of unassigned port numbers as described
 # in http://www.iana.org/assignments/port-numbers
+# We use the 25010-25792 range
 
 _servers = dict()
-_servers['apache2'] = Apache2(37000)
-_servers['cherokee'] = Cherokee(37001)
-_servers['lighttpd'] = Lighttpd(37002)
-_servers['apache2-dav'] = Apache2DAV(37003)
-_servers['lighttpd-dav'] = LighttpdDAV(37004)
-_servers['apache2-svn'] = Apache2SVN(37005)
-_servers['apache2-krb5'] = Apache2Kerberos(37006)
-_servers['vsftpd'] = Vsftpd(37006)
-_servers['proftpd'] = Proftpd(37007)
-_servers['apache2-https'] = Apache2HTTPS(37008)
+_servers['apache2'] = Apache2(25010)
+_servers['cherokee'] = Cherokee(25011)
+_servers['lighttpd'] = Lighttpd(25012)
+_servers['apache2-dav'] = Apache2DAV(25013)
+_servers['lighttpd-dav'] = LighttpdDAV(25014)
+_servers['apache2-svn'] = Apache2SVN(25015)
+_servers['apache2-krb5'] = Apache2Kerberos(25016)
+_servers['vsftpd'] = Vsftpd(25017)
+_servers['proftpd'] = Proftpd(25018)
+_servers['apache2-https'] = Apache2HTTPS(25019)
+_servers['muddleftpd'] = Muddleftpd(25020)
 
 
 def get_server(name):

=== modified file 'tests/test_utils.py'
--- a/tests/test_utils.py	2009-02-23 10:24:17 +0000
+++ b/tests/test_utils.py	2009-02-23 11:27:14 +0000
@@ -170,7 +170,7 @@
         ('muddleftpd', dict(
                 _server_name='muddleftpd',
                 _config_class=config.Muddleftpd,
-#                _server_class=server.Muddleftpd,
+                _server_class=server.Muddleftpd,
 #                _server_feature_class=test_server.MuddleftpdFeature,
 #                    _test_server_class=test_server.Muddleftpd,
                 )),



More information about the bazaar-commits mailing list