/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_smart.py

  • Committer: Andrew Bennetts
  • Date: 2008-01-14 22:45:15 UTC
  • mfrom: (3179 +trunk)
  • mto: This revision was merged to the branch mainline in revision 3180.
  • Revision ID: andrew.bennetts@canonical.com-20080114224515-izp51fxci3hhopap
Merge from bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
29
29
import tarfile
30
30
 
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,
 
34
    SmartServerResponse,
 
35
    SuccessfulSmartServerResponse,
 
36
    )
33
37
import bzrlib.smart.bzrdir
34
38
import bzrlib.smart.branch
35
39
import bzrlib.smart.repository
814
818
            response)
815
819
 
816
820
 
 
821
class TestSmartServerRepositoryStreamRevisionsChunked(tests.TestCaseWithTransport):
 
822
 
 
823
    def test_fetch_revisions(self):
 
824
        backing = self.get_transport()
 
825
        request = smart.repository.SmartServerRepositoryStreamRevisionsChunked(
 
826
            backing)
 
827
        tree = self.make_branch_and_memory_tree('.')
 
828
        tree.lock_write()
 
829
        tree.add('')
 
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)
 
834
        tree.unlock()
 
835
 
 
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()
 
840
        names = []
 
841
        for stream_bytes in response.body_stream:
 
842
            parser.accept_bytes(stream_bytes)
 
843
            for [name], record_bytes in parser.read_pending_records():
 
844
                names.append(name)
 
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
 
848
                # contents?
 
849
        
 
850
    def test_no_such_revision_error(self):
 
851
        backing = self.get_transport()
 
852
        request = smart.repository.SmartServerRepositoryStreamRevisionsChunked(
 
853
            backing)
 
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)
 
864
        self.assertEqual(
 
865
            last_chunk,
 
866
            FailedSmartServerResponse(('NoSuchRevision', rev_id1_utf8)))
 
867
 
 
868
 
817
869
class TestSmartServerIsReadonly(tests.TestCaseWithTransport):
818
870
 
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'),