/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_remote.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2008-04-09 07:36:41 UTC
  • mfrom: (3297.3.7 unknown-response)
  • Revision ID: pqm@pqm.ubuntu.com-20080409073641-pvhyvdyt42fph5xf
Better infrastructure for dealing with 'bad request' responses from a
        smart server. (Andrew Bennetts)

Show diffs side-by-side

added added

removed removed

Lines of Context:
136
136
        """Create a FakeClient.
137
137
 
138
138
        :param responses: A list of response-tuple, body-data pairs to be sent
139
 
            back to callers.
 
139
            back to callers.  A special case is if the response-tuple is
 
140
            'unknown verb', then a UnknownSmartMethod will be raised for that
 
141
            call, using the second element of the tuple as the verb in the
 
142
            exception.
140
143
        """
141
144
        self.responses = responses
142
145
        self._calls = []
143
146
        self.expecting_body = False
144
147
        _SmartClient.__init__(self, FakeMedium(self._calls), fake_medium_base)
145
148
 
 
149
    def _get_next_response(self):
 
150
        response_tuple = self.responses.pop(0)
 
151
        if response_tuple[0][0] == 'unknown verb':
 
152
            raise errors.UnknownSmartMethod(response_tuple[0][1])
 
153
        return response_tuple
 
154
 
146
155
    def call(self, method, *args):
147
156
        self._calls.append(('call', method, args))
148
 
        return self.responses.pop(0)[0]
 
157
        return self._get_next_response()[0]
149
158
 
150
159
    def call_expecting_body(self, method, *args):
151
160
        self._calls.append(('call_expecting_body', method, args))
152
 
        result = self.responses.pop(0)
 
161
        result = self._get_next_response()
153
162
        self.expecting_body = True
154
163
        return result[0], FakeProtocol(result[1], self)
155
164
 
156
165
    def call_with_body_bytes_expecting_body(self, method, args, body):
157
166
        self._calls.append(('call_with_body_bytes_expecting_body', method,
158
167
            args, body))
159
 
        result = self.responses.pop(0)
 
168
        result = self._get_next_response()
160
169
        self.expecting_body = True
161
170
        return result[0], FakeProtocol(result[1], self)
162
171
 
315
324
            RemoteBzrDirFormat.probe_transport, OldServerTransport())
316
325
 
317
326
 
 
327
class TestBzrDirOpenRepository(tests.TestCase):
 
328
 
 
329
    def test_backwards_compat_1_2(self):
 
330
        transport = MemoryTransport()
 
331
        transport.mkdir('quack')
 
332
        transport = transport.clone('quack')
 
333
        client = FakeClient([
 
334
            (('unknown verb', 'RemoteRepository.find_repositoryV2'), ''),
 
335
            (('ok', '', 'no', 'no'), ''),],
 
336
            transport.base)
 
337
        bzrdir = RemoteBzrDir(transport, _client=client)
 
338
        repo = bzrdir.open_repository()
 
339
        self.assertEqual(
 
340
            [('call', 'BzrDir.find_repositoryV2', ('quack/',)),
 
341
             ('call', 'BzrDir.find_repository', ('quack/',))],
 
342
            client._calls)
 
343
 
 
344
 
318
345
class OldSmartClient(object):
319
346
    """A fake smart client for test_old_version that just returns a version one
320
347
    response to the 'hello' (query version) command.
536
563
        advisory anyway (a transport could be read-write, but then the
537
564
        underlying filesystem could be readonly anyway).
538
565
        """
539
 
        client = FakeClient([(
540
 
            ('error', "Generic bzr smart protocol error: "
541
 
                      "bad request 'Transport.is_readonly'"), '')])
542
 
        transport = RemoteTransport('bzr://example.com/', medium=False,
543
 
                                    _client=client)
544
 
        self.assertEqual(False, transport.is_readonly())
545
 
        self.assertEqual(
546
 
            [('call', 'Transport.is_readonly', ())],
547
 
            client._calls)
548
 
 
549
 
    def test_error_from_old_0_11_server(self):
550
 
        """Same as test_error_from_old_server, but with the slightly different
551
 
        error message from bzr 0.11 servers.
552
 
        """
553
 
        client = FakeClient([(
554
 
            ('error', "Generic bzr smart protocol error: "
555
 
                      "bad request u'Transport.is_readonly'"), '')])
 
566
        client = FakeClient([(('unknown verb', 'Transport.is_readonly'), '')])
556
567
        transport = RemoteTransport('bzr://example.com/', medium=False,
557
568
                                    _client=client)
558
569
        self.assertEqual(False, transport.is_readonly())
704
715
        repo.unlock()
705
716
 
706
717
    def test_get_parent_map_reconnects_if_unknown_method(self):
707
 
        error_msg = (
708
 
            "Generic bzr smart protocol error: "
709
 
            "bad request 'Repository.get_parent_map'")
710
718
        responses = [
711
 
            (('error', error_msg), ''),
 
719
            (('unknown verb', 'Repository.get_parent_map'), ''),
712
720
            (('ok',), '')]
713
721
        transport_path = 'quack'
714
722
        repo, client = self.setup_fake_client_and_repository(
715
723
            responses, transport_path)
716
724
        rev_id = 'revision-id'
717
 
        parents = repo.get_parent_map([rev_id])
 
725
        expected_deprecations = [
 
726
            'bzrlib.remote.RemoteRepository.get_revision_graph was deprecated '
 
727
            'in version 1.4.']
 
728
        parents = self.callDeprecated(
 
729
            expected_deprecations, repo.get_parent_map, [rev_id])
718
730
        self.assertEqual(
719
731
            [('call_with_body_bytes_expecting_body',
720
732
              'Repository.get_parent_map', ('quack/', rev_id), '\n\n0'),
996
1008
    
997
1009
    def test_backwards_compatibility(self):
998
1010
        """If the server doesn't recognise this request, fallback to VFS."""
999
 
        error_msg = (
1000
 
            "Generic bzr smart protocol error: "
1001
 
            "bad request 'Repository.stream_revisions_chunked'")
1002
1011
        responses = [
1003
 
            (('error', error_msg), '')]
 
1012
            (('unknown verb', 'Repository.stream_revisions_chunked'), '')]
1004
1013
        repo, client = self.setup_fake_client_and_repository(
1005
1014
            responses, 'path')
1006
1015
        self.mock_called = False