Rev 5277: Create the ssh host key only once for a given sftp test server. in file:///home/vila/src/bzr/experimental/leaking-tests/

Vincent Ladeuil v.ladeuil+lp at free.fr
Thu Jul 1 16:14:35 BST 2010


At file:///home/vila/src/bzr/experimental/leaking-tests/

------------------------------------------------------------
revno: 5277
revision-id: v.ladeuil+lp at free.fr-20100701151435-zx8e875m4wgjte8o
parent: v.ladeuil+lp at free.fr-20100701145336-b2801jng3dqi3tyg
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: sftp-leaks
timestamp: Thu 2010-07-01 17:14:35 +0200
message:
  Create the ssh host key only once for a given sftp test server.
  
  * bzrlib/tests/stub_sftp.py:
  (TestingSFTPConnectionHandler.setup): Get the host key from the
  test case so it's created only once.
  (SFTPServer.get_host_key): Create the host key.
  (SFTPServerWithoutSSH.get_host_key): No ssh ? No host key.
-------------- next part --------------
=== modified file 'bzrlib/tests/stub_sftp.py'
--- a/bzrlib/tests/stub_sftp.py	2010-06-23 16:05:14 +0000
+++ b/bzrlib/tests/stub_sftp.py	2010-07-01 15:14:35 +0000
@@ -345,14 +345,7 @@
         self.wrap_for_latency()
         tcs = self.server.test_case_server
         ssh_server = paramiko.Transport(self.request)
-        # FIXME: The server key file should be created only once, not for each
-        # connection -- vila 20100623
-        key_file = osutils.pathjoin(tcs._homedir, 'test_rsa.key')
-        f = open(key_file, 'w')
-        f.write(STUB_SERVER_KEY)
-        f.close()
-        host_key = paramiko.RSAKey.from_private_key_file(key_file)
-        ssh_server.add_server_key(host_key)
+        ssh_server.add_server_key(tcs.get_host_key())
         ssh_server.set_subsystem_handler('sftp', paramiko.SFTPServer,
                                          StubSFTPServer, root=tcs._root,
                                          home=tcs._server_homedir)
@@ -442,6 +435,7 @@
         self._original_vendor = None
         self._vendor = ssh.ParamikoVendor()
         self._server_interface = server_interface
+        self._host_key = None
         self.logs = []
         self.add_latency = 0
         self._homedir = None
@@ -462,6 +456,17 @@
                                    self)
         return server
 
+    def get_host_key(self):
+        if self._host_key is None:
+            key_file = osutils.pathjoin(self._homedir, 'test_rsa.key')
+            f = open(key_file, 'w')
+            try:
+                f.write(STUB_SERVER_KEY)
+            finally:
+                f.close()
+            self._host_key = paramiko.RSAKey.from_private_key_file(key_file)
+        return self._host_key
+
     def start_server(self, backing_server=None):
         # XXX: TODO: make sftpserver back onto backing_server rather than local
         # disk.
@@ -523,6 +528,9 @@
         self._vendor = ssh.LoopbackVendor()
         self.request_handler_class = TestingSFTPWithoutSSHConnectionHandler
 
+    def get_host_key():
+        return None
+
 
 class SFTPAbsoluteServer(SFTPServerWithoutSSH):
     """A test server for sftp transports, using absolute urls."""



More information about the bazaar-commits mailing list