31
31
from bzrlib import bzrdir, errors, pack, smart, tests
32
from bzrlib.smart.request import SmartServerResponse
32
from bzrlib.smart.request import (
33
FailedSmartServerResponse,
35
SuccessfulSmartServerResponse,
33
37
import bzrlib.smart.bzrdir
34
38
import bzrlib.smart.branch
35
39
import bzrlib.smart.repository
821
class TestSmartServerRepositoryStreamRevisionsChunked(tests.TestCaseWithTransport):
823
def test_fetch_revisions(self):
824
backing = self.get_transport()
825
request = smart.repository.SmartServerRepositoryStreamRevisionsChunked(
827
tree = self.make_branch_and_memory_tree('.')
830
rev_id1_utf8 = u'\xc8'.encode('utf-8')
831
rev_id2_utf8 = u'\xc9'.encode('utf-8')
832
r1 = tree.commit('1st commit', rev_id=rev_id1_utf8)
833
r1 = tree.commit('2nd commit', rev_id=rev_id2_utf8)
836
response = request.execute(backing.local_abspath(''), rev_id2_utf8)
837
self.assertEqual(('ok',), response.args)
838
from cStringIO import StringIO
839
parser = pack.ContainerPushParser()
841
for stream_bytes in response.body_stream:
842
parser.accept_bytes(stream_bytes)
843
for [name], record_bytes in parser.read_pending_records():
845
# The bytes should be a valid bencoded string.
846
bencode.bdecode(record_bytes)
847
# XXX: assert that the bencoded knit records have the right
850
def test_no_such_revision_error(self):
851
backing = self.get_transport()
852
request = smart.repository.SmartServerRepositoryStreamRevisionsChunked(
854
repo = self.make_repository('.')
855
rev_id1_utf8 = u'\xc8'.encode('utf-8')
856
response = request.execute(backing.local_abspath(''), rev_id1_utf8)
857
# There's no error initially.
858
self.assertTrue(response.is_successful())
859
self.assertEqual(('ok',), response.args)
860
# We only get an error while streaming the body.
861
body = list(response.body_stream)
862
last_chunk = body[-1]
863
self.assertIsInstance(last_chunk, FailedSmartServerResponse)
866
FailedSmartServerResponse(('NoSuchRevision', rev_id1_utf8)))
817
869
class TestSmartServerIsReadonly(tests.TestCaseWithTransport):
819
871
def test_is_readonly_no(self):
881
933
smart.repository.SmartServerRepositoryLockWrite)
882
934
self.assertEqual(
883
935
smart.request.request_handlers.get(
884
'Repository.stream_knit_data_for_revisions'),
936
'Repository.chunked_stream_knit_data_for_revisions'),
885
937
smart.repository.SmartServerRepositoryStreamKnitDataForRevisions)
886
938
self.assertEqual(
887
939
smart.request.request_handlers.get('Repository.tarball'),