~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_sftp.py

[merge] bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
import os
18
18
import socket
19
19
import threading
20
 
import unittest
21
20
 
22
 
from bzrlib.selftest import TestCaseInTempDir
23
 
from bzrlib.selftest.testtransport import TestTransportMixIn
 
21
from bzrlib.tests import TestCaseInTempDir, TestCase
 
22
from bzrlib.tests.test_transport import TestTransportMixIn
24
23
 
25
24
try:
26
25
    import paramiko
29
28
except ImportError:
30
29
    paramiko_loaded = False
31
30
 
 
31
# XXX: 20051124 jamesh
 
32
# The tests currently pop up a password prompt when an external ssh
 
33
# is used.  This forces the use of the paramiko implementation.
 
34
import bzrlib.transport.sftp
 
35
bzrlib.transport.sftp._ssh_vendor = 'none'
 
36
 
32
37
 
33
38
STUB_SERVER_KEY = """
34
39
-----BEGIN RSA PRIVATE KEY-----
97
102
    def setUp(self):
98
103
        TestCaseInTempDir.setUp(self)
99
104
        self._root = self.test_dir
 
105
        self._is_setup = False
100
106
 
 
107
    def delayed_setup(self):
 
108
        # some tests are just stubs that call setUp and then immediately call
 
109
        # tearDwon.  so don't create the port listener until get_transport is
 
110
        # called and we know we're in an actual test.
 
111
        if self._is_setup:
 
112
            return
101
113
        self._listener = SingleListener(self._run_server)
102
114
        self._listener.setDaemon(True)
103
115
        self._listener.start()        
104
116
        self._sftp_url = 'sftp://foo:bar@localhost:%d/' % (self._listener.port,)
 
117
        self._is_setup = True
105
118
        
106
119
    def tearDown(self):
107
120
        try:
125
138
            self.sftplogs.append(args[0])
126
139
 
127
140
    def get_transport(self):
 
141
        self.delayed_setup()
128
142
        from bzrlib.transport.sftp import SFTPTransport
129
143
        url = self._sftp_url
130
144
        return SFTPTransport(url)
172
186
fake = FakeSFTPTransport()
173
187
 
174
188
 
175
 
class SFTPNonServerTest (unittest.TestCase):
 
189
class SFTPNonServerTest(TestCase):
176
190
    def test_parse_url(self):
177
191
        from bzrlib.transport.sftp import SFTPTransport
178
192
        s = SFTPTransport('sftp://simple.example.com/%2fhome/source', clone_from=fake)
187
201
        self.assertEquals(s._username, 'robey')
188
202
        self.assertEquals(s._password, 'h@t')
189
203
        self.assertEquals(s._path, 'relative')
190
 
        
 
204
 
 
205
    def test_parse_invalid_url(self):
 
206
        from bzrlib.transport.sftp import SFTPTransport, SFTPTransportError
 
207
        try:
 
208
            s = SFTPTransport('sftp://lilypond.org:~janneke/public_html/bzr/gub',
 
209
                              clone_from=fake)
 
210
            self.fail('expected exception not raised')
 
211
        except SFTPTransportError, e:
 
212
            self.assertEquals(str(e), 
 
213
                    '~janneke: invalid port number')
 
214
 
191
215
 
192
216
class SFTPBranchTest(TestCaseWithSFTPServer):
193
217
    """Test some stuff when accessing a bzr Branch over sftp"""
196
220
        """Make sure that a Branch accessed over sftp tries to lock itself."""
197
221
        from bzrlib.branch import Branch
198
222
 
 
223
        self.delayed_setup()
199
224
        b = Branch.initialize(self._sftp_url)
200
225
        self.failUnlessExists('.bzr/')
201
226
        self.failUnlessExists('.bzr/branch-format')