170
171
self.assertRaises(
171
172
errors.PathNotChild, request.translate_client_path, 'bar/')
172
173
self.assertEqual('./baz', request.translate_client_path('foo/baz'))
174
e_acute = u'\N{LATIN SMALL LETTER E WITH ACUTE}'.encode('utf-8')
175
self.assertEqual('./' + urlutils.escape(e_acute),
176
request.translate_client_path('foo/' + e_acute))
178
def test_translate_client_path_vfs(self):
179
"""VfsRequests receive escaped paths rather than raw UTF-8."""
180
transport = self.get_transport()
181
request = smart.vfs.VfsRequest(transport, 'foo/')
182
e_acute = u'\N{LATIN SMALL LETTER E WITH ACUTE}'.encode('utf-8')
183
escaped = urlutils.escape('foo/' + e_acute)
184
self.assertEqual('./' + urlutils.escape(e_acute),
185
request.translate_client_path(escaped))
174
187
def test_transport_from_client_path(self):
175
188
transport = self.get_transport()
511
524
self.assertEqual(SmartServerResponse(('ok', reference_url)),
512
525
request.execute('reference'))
527
def test_notification_on_branch_from_repository(self):
528
"""When there is a repository, the error should return details."""
529
backing = self.get_transport()
530
request = smart.bzrdir.SmartServerRequestOpenBranch(backing)
531
repo = self.make_repository('.')
532
self.assertEqual(SmartServerResponse(('nobranch',)),
515
536
class TestSmartServerRequestOpenBranchV2(TestCaseWithChrootedTransport):
563
584
self.assertLength(1, opened_branches)
586
def test_notification_on_branch_from_repository(self):
587
"""When there is a repository, the error should return details."""
588
backing = self.get_transport()
589
request = smart.bzrdir.SmartServerRequestOpenBranchV2(backing)
590
repo = self.make_repository('.')
591
self.assertEqual(SmartServerResponse(('nobranch',)),
595
class TestSmartServerRequestOpenBranchV3(TestCaseWithChrootedTransport):
597
def test_no_branch(self):
598
"""When there is no branch, ('nobranch', ) is returned."""
599
backing = self.get_transport()
600
self.make_bzrdir('.')
601
request = smart.bzrdir.SmartServerRequestOpenBranchV3(backing)
602
self.assertEqual(SmartServerResponse(('nobranch',)),
605
def test_branch(self):
606
"""When there is a branch, 'ok' is returned."""
607
backing = self.get_transport()
608
expected = self.make_branch('.')._format.network_name()
609
request = smart.bzrdir.SmartServerRequestOpenBranchV3(backing)
610
self.assertEqual(SuccessfulSmartServerResponse(('branch', expected)),
613
def test_branch_reference(self):
614
"""When there is a branch reference, the reference URL is returned."""
615
self.vfs_transport_factory = local.LocalURLServer
616
backing = self.get_transport()
617
request = smart.bzrdir.SmartServerRequestOpenBranchV3(backing)
618
branch = self.make_branch('branch')
619
checkout = branch.create_checkout('reference',lightweight=True)
620
reference_url = BranchReferenceFormat().get_reference(checkout.bzrdir)
621
self.assertFileEqual(reference_url, 'reference/.bzr/branch/location')
622
self.assertEqual(SuccessfulSmartServerResponse(('ref', reference_url)),
623
request.execute('reference'))
625
def test_stacked_branch(self):
626
"""Opening a stacked branch does not open the stacked-on branch."""
627
trunk = self.make_branch('trunk')
628
feature = self.make_branch('feature')
629
feature.set_stacked_on_url(trunk.base)
631
Branch.hooks.install_named_hook('open', opened_branches.append, None)
632
backing = self.get_transport()
633
request = smart.bzrdir.SmartServerRequestOpenBranchV3(backing)
636
response = request.execute('feature')
638
request.teardown_jail()
639
expected_format = feature._format.network_name()
641
SuccessfulSmartServerResponse(('branch', expected_format)),
643
self.assertLength(1, opened_branches)
645
def test_notification_on_branch_from_repository(self):
646
"""When there is a repository, the error should return details."""
647
backing = self.get_transport()
648
request = smart.bzrdir.SmartServerRequestOpenBranchV3(backing)
649
repo = self.make_repository('.')
651
SmartServerResponse(('nobranch', 'location is a repository')),
566
655
class TestSmartServerRequestRevisionHistory(tests.TestCaseWithMemoryTransport):
1690
1779
self.assertEqual(SmartServerResponse(('ok',)), response)
1782
class TestSmartServerVfsGet(tests.TestCaseWithMemoryTransport):
1784
def test_unicode_path(self):
1785
"""VFS requests expect unicode paths to be escaped."""
1786
filename = u'foo\N{INTERROBANG}'
1787
filename_escaped = urlutils.escape(filename)
1788
backing = self.get_transport()
1789
request = smart.vfs.GetRequest(backing)
1790
backing.put_bytes_non_atomic(filename_escaped, 'contents')
1791
self.assertEqual(SmartServerResponse(('ok', ), 'contents'),
1792
request.execute(filename_escaped))
1693
1795
class TestHandlers(tests.TestCase):
1694
1796
"""Tests for the request.request_handlers object."""
1745
1847
smart.bzrdir.SmartServerRequestOpenBranch)
1746
1848
self.assertHandlerEqual('BzrDir.open_branchV2',
1747
1849
smart.bzrdir.SmartServerRequestOpenBranchV2)
1850
self.assertHandlerEqual('BzrDir.open_branchV3',
1851
smart.bzrdir.SmartServerRequestOpenBranchV3)
1748
1852
self.assertHandlerEqual('PackRepository.autopack',
1749
1853
smart.packrepository.SmartServerPackRepositoryAutopack)
1750
1854
self.assertHandlerEqual('Repository.gather_stats',