Rev 52: Make test pass even if kerberos is not available. in file:///net/bigmamac/Volumes/home/vila/.bazaar/plugins/local_test_server/

Vincent Ladeuil v.ladeuil+lp at free.fr
Fri Feb 20 15:20:05 GMT 2009


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

------------------------------------------------------------
revno: 52
revision-id: v.ladeuil+lp at free.fr-20090220152004-h64ikv1stmq5bmzx
parent: v.ladeuil+lp at free.fr-20090220143505-lvmblqzl569358ah
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: local_test_server
timestamp: Fri 2009-02-20 16:20:04 +0100
message:
  Make test pass even if kerberos is not available.
  
  * tests/test_utils.py:
  (TestLocalServer._get_server): Push install verification into a
  server method.
  
  * test_server.py:
  (LocalTestServerFeature._probe): The server can't be running if
  it's not installed.
  (get_test_permutations): Put kerberos import in server.py since
  it's needed there too.
  
  * server.py:
  (Server.is_installed): Start implementing installation
  verification.
  (Apache2Kerberos.is_installed): Requires kerberos in addition to
  apache2.
-------------- next part --------------
=== modified file 'server.py'
--- a/server.py	2009-02-17 15:10:08 +0000
+++ b/server.py	2009-02-20 15:20:04 +0000
@@ -18,6 +18,12 @@
 The classes described here provide an interface with the real servers.
 """
 
+try:
+    import kerberos
+    has_kerberos = True
+except ImportError:
+    has_kerberos = False
+
 from bzrlib.lazy_import import lazy_import
 lazy_import(globals(), """
 import errno
@@ -134,6 +140,19 @@
         config.values.update(host=self.host, port=self.port)
         self.config = config
 
+    def is_installed(self):
+        """Is the server installed.
+
+        This should be redefined by daughter classes. They should check that
+        trying to start the server will not fail in horrible ways. This
+        includes checking that the needed commands are available at least.
+        """
+        installed = True
+        if (self._server_command_name is not None
+            and locate_program(self._server_command_name) is None):
+            installed = False
+        return installed
+
     def start(self):
         if self.is_running():
             raise LTSAlreadyRunningError(self)
@@ -288,6 +307,7 @@
             sig = signal.SIGTERM
         if kill is None:
             kill = self._kill_server
+
         if interval is None:
             interval = 500.0
         def server_is_dead():
@@ -495,6 +515,11 @@
         super(Apache2Kerberos, self).__init__(port, _conf=_conf)
         self.output_config_path = self.config.abspath('etc/apache2-krb5.conf')
 
+    def is_installed(self):
+        if not has_kerberos: # FIXME: incomplete but enough for now
+            return False
+        return super(Apache2Kerberos, self).is_installed()
+
 
 class Cherokee(Server):
 
@@ -673,8 +698,8 @@
     This function returns an available port in a range chosen in unassigned
     ones as described in http://www.iana.org/assignments/port-numbers
     """
-    # FIXME: Yeah, that's nice, but is the url above really implemented where
-    # *we* run ?
+    # FIXME: Yeah, that's nice, but is the url above really implemented by the
+    # OSes we want to support...
     global _next_available_port
     global _max_available_port
     port = _next_available_port

=== modified file 'test_server.py'
--- a/test_server.py	2009-02-17 16:47:04 +0000
+++ b/test_server.py	2009-02-20 15:20:04 +0000
@@ -57,7 +57,7 @@
         return self._server_name
 
     def _probe(self):
-        return self.server.is_running()
+        return self.server.is_installed() and self.server.is_running()
 
 
 class Apache2Feature(LocalTestServerFeature):
@@ -84,6 +84,11 @@
 
     _server_name = 'apache2-krb5'
 
+    def _probe(self):
+        if not server.has_kerberos:
+            return False
+        return super(Apache2KerberosFeature, self)._probe()
+
 
 class CherokeeFeature(LocalTestServerFeature):
 
@@ -346,12 +351,6 @@
     except errors.DependencyNotPresent:
         webdav_present = False
 
-    try:
-        import kerberos
-        kerberos_present = True
-    except ImportError:
-        kerberos_present = False
-
     permutations = []
     if Apache2Feature().available():
         permutations.append((HttpTransport_urllib, Apache2_urllib))
@@ -384,9 +383,9 @@
         if LighttpdDAVFeature().available():
             permutations.append((webdav.HttpDavTransport, LighttpdDAV))
 
-    if kerberos_present:
-        if Apache2KerberosFeature().available():
-            permutations.append((HttpTransport_urllib, Apache2Kerberos))
+    if Apache2KerberosFeature().available():
+        # FIXME: pycurl support missing
+        permutations.append((HttpTransport_urllib, Apache2Kerberos))
 
 #    if VsftpdFeature().available():
 #        permutations.append((FtpTransport, Vsftpd))

=== modified file 'tests/test_utils.py'
--- a/tests/test_utils.py	2009-02-17 15:10:08 +0000
+++ b/tests/test_utils.py	2009-02-20 15:20:04 +0000
@@ -58,14 +58,11 @@
 
     def _get_server(self):
         klass = self._server_class
-        if klass._server_command_name is not None:
-            if server.locate_program(klass._server_command_name) is None:
-                # Don't even try to start the server if its associated command
-                # can't be found.
-                # FIXME: we should handle that as part as installation
-                # verification.
-                raise tests.UnavailableFeature(klass)
-        return klass(server._get_available_port(), self._get_config())
+        s = klass(server._get_available_port(), self._get_config())
+        if not s.is_installed():
+            # Don't even try to start the server if it's not installed
+            raise tests.UnavailableFeature(s.get_config_value('server_name'))
+        return s
 
 
 class TestLocalTestServer(TestLocalServer):



More information about the bazaar-commits mailing list