~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/stub_sftp.py

  • Committer: Andrea Corbellini
  • Date: 2010-09-04 15:34:10 UTC
  • mfrom: (5409 +trunk)
  • mto: This revision was merged to the branch mainline in revision 5416.
  • Revision ID: corbellini.andrea@gmail.com-20100904153410-yybczvr4j1tmztdy
Merge with trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
344
344
    def setup(self):
345
345
        self.wrap_for_latency()
346
346
        tcs = self.server.test_case_server
347
 
        ssh_server = paramiko.Transport(self.request)
348
 
        ssh_server.add_server_key(tcs.get_host_key())
349
 
        ssh_server.set_subsystem_handler('sftp', paramiko.SFTPServer,
350
 
                                         StubSFTPServer, root=tcs._root,
351
 
                                         home=tcs._server_homedir)
 
347
        ptrans = paramiko.Transport(self.request)
 
348
        self.paramiko_transport = ptrans
 
349
        # Set it to a channel under 'bzr' so that we get debug info
 
350
        ptrans.set_log_channel('bzr.paramiko.transport')
 
351
        ptrans.add_server_key(tcs.get_host_key())
 
352
        ptrans.set_subsystem_handler('sftp', paramiko.SFTPServer,
 
353
                                     StubSFTPServer, root=tcs._root,
 
354
                                     home=tcs._server_homedir)
352
355
        server = tcs._server_interface(tcs)
353
 
        ssh_server.start_server(None, server)
354
 
        # FIXME: Long story short:
355
 
        # bt.test_transport.TestSSHConnections.test_bzr_connect_to_bzr_ssh
356
 
        # fails if we wait less than 0.2 seconds... paramiko uses a lot of
357
 
        # timeouts internally which probably mask a synchronisation
358
 
        # problem. Note that this is the only test that requires this hack and
359
 
        # the test may need to be fixed instead, but it's late and the test is
360
 
        # horrible as mentioned in its comments :) -- vila 20100623
361
 
        import time
362
 
        time.sleep(0.2)
 
356
        # This blocks until the key exchange has been done
 
357
        ptrans.start_server(None, server)
 
358
 
 
359
    def finish(self):
 
360
        # Wait for the conversation to finish, when the paramiko.Transport
 
361
        # thread finishes
 
362
        # TODO: Consider timing out after XX seconds rather than hanging.
 
363
        #       Also we could check paramiko_transport.active and possibly
 
364
        #       paramiko_transport.getException().
 
365
        self.paramiko_transport.join()
363
366
 
364
367
    def wrap_for_latency(self):
365
368
        tcs = self.server.test_case_server
380
383
            def get_transport(self):
381
384
                return self
382
385
            def get_log_channel(self):
383
 
                return 'paramiko'
 
386
                return 'bzr.paramiko'
384
387
            def get_name(self):
385
388
                return '1'
386
389
            def get_hexdump(self):
389
392
                pass
390
393
 
391
394
        tcs = self.server.test_case_server
392
 
        server = paramiko.SFTPServer(
 
395
        sftp_server = paramiko.SFTPServer(
393
396
            FakeChannel(), 'sftp', StubServer(tcs), StubSFTPServer,
394
397
            root=tcs._root, home=tcs._server_homedir)
 
398
        self.sftp_server = sftp_server
 
399
        sys_stderr = sys.stderr # Used in error reporting during shutdown
395
400
        try:
396
 
            server.start_subsystem(
 
401
            sftp_server.start_subsystem(
397
402
                'sftp', None, ssh.SocketAsChannelAdapter(self.request))
398
403
        except socket.error, e:
399
404
            if (len(e.args) > 0) and (e.args[0] == errno.EPIPE):
409
414
            # seems to be the best we can do.
410
415
            # FIXME: All interpreter shutdown errors should have been related
411
416
            # to daemon threads, cleanup needed -- vila 20100623
412
 
            import sys
413
 
            sys.stderr.write('\nEXCEPTION %r: ' % (e.__class__,))
414
 
            sys.stderr.write('%s\n\n' % (e,))
415
 
        server.finish_subsystem()
 
417
            sys_stderr.write('\nEXCEPTION %r: ' % (e.__class__,))
 
418
            sys_stderr.write('%s\n\n' % (e,))
 
419
 
 
420
    def finish(self):
 
421
        self.sftp_server.finish_subsystem()
416
422
 
417
423
 
418
424
class TestingSFTPServer(test_server.TestingThreadingTCPServer):