~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/blackbox/test_serve.py

  • Committer: Robert Collins
  • Date: 2009-09-22 04:25:05 UTC
  • mfrom: (4708 +trunk)
  • mto: This revision was merged to the branch mainline in revision 4710.
  • Revision ID: robertc@robertcollins.net-20090922042505-bo5m0b5uuajl2igj
Merge trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
"""Tests of the bzr serve command."""
19
19
 
20
20
import os
 
21
import os.path
21
22
import signal
22
23
import subprocess
23
24
import sys
25
26
import threading
26
27
 
27
28
from bzrlib import (
28
 
    config,
 
29
    builtins,
29
30
    errors,
30
31
    osutils,
31
32
    revision as _mod_revision,
32
 
    transport,
33
33
    )
34
34
from bzrlib.branch import Branch
35
35
from bzrlib.bzrdir import BzrDir
36
36
from bzrlib.smart import client, medium
37
 
from bzrlib.smart.server import SmartTCPServer
38
 
from bzrlib.tests import ParamikoFeature, TestCaseWithTransport, TestSkipped
 
37
from bzrlib.smart.server import BzrServerFactory, SmartTCPServer
 
38
from bzrlib.tests import (
 
39
    ParamikoFeature,
 
40
    TestCaseWithMemoryTransport,
 
41
    TestCaseWithTransport,
 
42
    TestSkipped,
 
43
    )
39
44
from bzrlib.trace import mutter
40
45
from bzrlib.transport import get_transport, remote
41
46
 
235
240
        client_medium.disconnect()
236
241
 
237
242
 
 
243
class TestUserdirExpansion(TestCaseWithMemoryTransport):
 
244
 
 
245
    def fake_expanduser(self, path):
 
246
        """A simple, environment-independent, function for the duration of this
 
247
        test.
 
248
 
 
249
        Paths starting with a path segment of '~user' will expand to start with
 
250
        '/home/user/'.  Every other path will be unchanged.
 
251
        """
 
252
        if path.split('/', 1)[0] == '~user':
 
253
            return '/home/user' + path[len('~user'):]
 
254
        return path
 
255
 
 
256
    def make_test_server(self, base_path='/'):
 
257
        """Make and setUp a BzrServerFactory, backed by a memory transport, and
 
258
        creat '/home/user' in that transport.
 
259
        """
 
260
        bzr_server = BzrServerFactory(
 
261
            self.fake_expanduser, lambda t: base_path)
 
262
        mem_transport = self.get_transport()
 
263
        mem_transport.mkdir_multi(['home', 'home/user'])
 
264
        bzr_server.set_up(mem_transport, None, None, inet=True)
 
265
        self.addCleanup(bzr_server.tear_down)
 
266
        return bzr_server
 
267
 
 
268
    def test_bzr_serve_expands_userdir(self):
 
269
        bzr_server = self.make_test_server()
 
270
        self.assertTrue(bzr_server.smart_server.backing_transport.has('~user'))
 
271
 
 
272
    def test_bzr_serve_does_not_expand_userdir_outside_base(self):
 
273
        bzr_server = self.make_test_server('/foo')
 
274
        self.assertFalse(bzr_server.smart_server.backing_transport.has('~user'))
 
275
 
 
276
    def test_get_base_path(self):
 
277
        """cmd_serve will turn the --directory option into a LocalTransport
 
278
        (optionally decorated with 'readonly+').  BzrServerFactory can
 
279
        determine the original --directory from that transport.
 
280
        """
 
281
        # Define a fake 'protocol' to capture the transport that cmd_serve
 
282
        # passes to serve_bzr.
 
283
        def capture_transport(transport, host, port, inet):
 
284
            self.bzr_serve_transport = transport
 
285
        cmd = builtins.cmd_serve()
 
286
        # Read-only
 
287
        cmd.run(directory='/a/b/c', protocol=capture_transport)
 
288
        server_maker = BzrServerFactory()
 
289
        self.assertEqual(
 
290
            'readonly+file:///a/b/c/', self.bzr_serve_transport.base)
 
291
        self.assertEqual(
 
292
            u'/a/b/c/', server_maker.get_base_path(self.bzr_serve_transport))
 
293
        # Read-write
 
294
        cmd.run(directory='/a/b/c', protocol=capture_transport,
 
295
            allow_writes=True)
 
296
        server_maker = BzrServerFactory()
 
297
        self.assertEqual('file:///a/b/c/', self.bzr_serve_transport.base)
 
298
        self.assertEqual(
 
299
            u'/a/b/c/', server_maker.get_base_path(self.bzr_serve_transport))
238
300