363
363
def test_abspath(self):
364
364
# The abspath is always relative to the chroot_url.
365
365
server = ChrootServer(get_transport('memory:///foo/bar/'))
366
self.start_server(server)
367
367
transport = get_transport(server.get_url())
368
368
self.assertEqual(server.get_url(), transport.abspath('/'))
370
370
subdir_transport = transport.clone('subdir')
371
371
self.assertEqual(server.get_url(), subdir_transport.abspath('/'))
374
373
def test_clone(self):
375
374
server = ChrootServer(get_transport('memory:///foo/bar/'))
375
self.start_server(server)
377
376
transport = get_transport(server.get_url())
378
377
# relpath from root and root path are the same
379
378
relpath_cloned = transport.clone('foo')
380
379
abspath_cloned = transport.clone('/foo')
381
380
self.assertEqual(server, relpath_cloned.server)
382
381
self.assertEqual(server, abspath_cloned.server)
385
383
def test_chroot_url_preserves_chroot(self):
386
384
"""Calling get_transport on a chroot transport's base should produce a
393
391
new_transport = get_transport(parent_url)
395
393
server = ChrootServer(get_transport('memory:///path/subpath'))
394
self.start_server(server)
397
395
transport = get_transport(server.get_url())
398
396
new_transport = get_transport(transport.base)
399
397
self.assertEqual(transport.server, new_transport.server)
400
398
self.assertEqual(transport.base, new_transport.base)
403
400
def test_urljoin_preserves_chroot(self):
404
401
"""Using urlutils.join(url, '..') on a chroot URL should not produce a
410
407
new_transport = get_transport(parent_url)
412
409
server = ChrootServer(get_transport('memory:///path/'))
410
self.start_server(server)
414
411
transport = get_transport(server.get_url())
415
412
self.assertRaises(
416
413
InvalidURLJoin, urlutils.join, transport.base, '..')
420
416
class ChrootServerTest(TestCase):
428
424
backing_transport = MemoryTransport()
429
425
server = ChrootServer(backing_transport)
431
self.assertTrue(server.scheme in _get_protocol_handlers().keys())
428
self.assertTrue(server.scheme in _get_protocol_handlers().keys())
433
432
def test_tearDown(self):
434
433
backing_transport = MemoryTransport()
441
440
backing_transport = MemoryTransport()
442
441
server = ChrootServer(backing_transport)
444
self.assertEqual('chroot-%d:///' % id(server), server.get_url())
444
self.assertEqual('chroot-%d:///' % id(server), server.get_url())
448
449
class ReadonlyDecoratorTransportTest(TestCase):
460
461
import bzrlib.transport.readonly as readonly
461
462
# connect to '.' via http which is not listable
462
463
server = HttpServer()
465
transport = get_transport('readonly+' + server.get_url())
466
self.failUnless(isinstance(transport,
467
readonly.ReadonlyTransportDecorator))
468
self.assertEqual(False, transport.listable())
469
self.assertEqual(True, transport.is_readonly())
464
self.start_server(server)
465
transport = get_transport('readonly+' + server.get_url())
466
self.failUnless(isinstance(transport,
467
readonly.ReadonlyTransportDecorator))
468
self.assertEqual(False, transport.listable())
469
self.assertEqual(True, transport.is_readonly())
474
472
class FakeNFSDecoratorTests(TestCaseInTempDir):
492
490
from bzrlib.tests.http_server import HttpServer
493
491
# connect to '.' via http which is not listable
494
492
server = HttpServer()
497
transport = self.get_nfs_transport(server.get_url())
498
self.assertIsInstance(
499
transport, bzrlib.transport.fakenfs.FakeNFSTransportDecorator)
500
self.assertEqual(False, transport.listable())
501
self.assertEqual(True, transport.is_readonly())
493
self.start_server(server)
494
transport = self.get_nfs_transport(server.get_url())
495
self.assertIsInstance(
496
transport, bzrlib.transport.fakenfs.FakeNFSTransportDecorator)
497
self.assertEqual(False, transport.listable())
498
self.assertEqual(True, transport.is_readonly())
505
500
def test_fakenfs_server_default(self):
506
501
# a FakeNFSServer() should bring up a local relpath server for itself
507
502
import bzrlib.transport.fakenfs as fakenfs
508
503
server = fakenfs.FakeNFSServer()
511
# the url should be decorated appropriately
512
self.assertStartsWith(server.get_url(), 'fakenfs+')
513
# and we should be able to get a transport for it
514
transport = get_transport(server.get_url())
515
# which must be a FakeNFSTransportDecorator instance.
516
self.assertIsInstance(
517
transport, fakenfs.FakeNFSTransportDecorator)
504
self.start_server(server)
505
# the url should be decorated appropriately
506
self.assertStartsWith(server.get_url(), 'fakenfs+')
507
# and we should be able to get a transport for it
508
transport = get_transport(server.get_url())
509
# which must be a FakeNFSTransportDecorator instance.
510
self.assertIsInstance(transport, fakenfs.FakeNFSTransportDecorator)
521
512
def test_fakenfs_rename_semantics(self):
522
513
# a FakeNFS transport must mangle the way rename errors occur to
588
579
super(TestTransportImplementation, self).setUp()
589
580
self._server = self.transport_server()
591
self.addCleanup(self._server.tearDown)
581
self.start_server(self._server)
593
583
def get_transport(self, relpath=None):
594
584
"""Return a connected transport to the local directory.