/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 breezy/tests/test_bundle.py

  • Committer: Jelmer Vernooij
  • Date: 2019-06-03 23:48:08 UTC
  • mfrom: (7316 work)
  • mto: This revision was merged to the branch mainline in revision 7328.
  • Revision ID: jelmer@jelmer.uk-20190603234808-15yk5c7054tj8e2b
Merge trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
import bz2
18
18
from io import BytesIO
19
19
import os
20
 
try:
21
 
    import socketserver
22
 
except ImportError:
23
 
    import SocketServer as socketserver
24
20
import sys
25
21
 
26
22
from .. import (
36
32
    bzrdir,
37
33
    inventory,
38
34
    )
39
 
from ..bundle import read_mergeable_from_url
40
35
from ..bundle.apply_bundle import install_bundle, merge_bundle
41
36
from ..bundle.bundle_data import BundleTree
42
 
from ..directory_service import directories
43
37
from ..bundle.serializer import write_bundle, read_bundle, v09, v4
44
38
from ..bundle.serializer.v08 import BundleSerializerV08
45
39
from ..bundle.serializer.v09 import BundleSerializerV09
48
42
from . import (
49
43
    features,
50
44
    test_commit,
51
 
    test_read_bundle,
52
 
    test_server,
53
45
    )
54
46
from ..transform import TreeTransform
55
47
 
1836
1828
        self.assertEqual((None, {b'foo': b'bar', b'storage_kind': b'header'},
1837
1829
                          'info', None, None), record)
1838
1830
        self.assertRaises(errors.BadBundle, next, record_iter)
1839
 
 
1840
 
 
1841
 
class TestReadMergeableFromUrl(tests.TestCaseWithTransport):
1842
 
 
1843
 
    def test_read_mergeable_skips_local(self):
1844
 
        """A local bundle named like the URL should not be read.
1845
 
        """
1846
 
        out, wt = test_read_bundle.create_bundle_file(self)
1847
 
 
1848
 
        class FooService(object):
1849
 
            """A directory service that always returns source"""
1850
 
 
1851
 
            def look_up(self, name, url, purpose=None):
1852
 
                return 'source'
1853
 
        directories.register('foo:', FooService, 'Testing directory service')
1854
 
        self.addCleanup(directories.remove, 'foo:')
1855
 
        self.build_tree_contents([('./foo:bar', out.getvalue())])
1856
 
        self.assertRaises(errors.NotABundle, read_mergeable_from_url,
1857
 
                          'foo:bar')
1858
 
 
1859
 
    def test_infinite_redirects_are_not_a_bundle(self):
1860
 
        """If a URL causes TooManyRedirections then NotABundle is raised.
1861
 
        """
1862
 
        from .blackbox.test_push import RedirectingMemoryServer
1863
 
        server = RedirectingMemoryServer()
1864
 
        self.start_server(server)
1865
 
        url = server.get_url() + 'infinite-loop'
1866
 
        self.assertRaises(errors.NotABundle, read_mergeable_from_url, url)
1867
 
 
1868
 
    def test_smart_server_connection_reset(self):
1869
 
        """If a smart server connection fails during the attempt to read a
1870
 
        bundle, then the ConnectionReset error should be propagated.
1871
 
        """
1872
 
        # Instantiate a server that will provoke a ConnectionReset
1873
 
        sock_server = DisconnectingServer()
1874
 
        self.start_server(sock_server)
1875
 
        # We don't really care what the url is since the server will close the
1876
 
        # connection without interpreting it
1877
 
        url = sock_server.get_url()
1878
 
        self.assertRaises(errors.ConnectionReset, read_mergeable_from_url, url)
1879
 
 
1880
 
 
1881
 
class DisconnectingHandler(socketserver.BaseRequestHandler):
1882
 
    """A request handler that immediately closes any connection made to it."""
1883
 
 
1884
 
    def handle(self):
1885
 
        self.request.close()
1886
 
 
1887
 
 
1888
 
class DisconnectingServer(test_server.TestingTCPServerInAThread):
1889
 
 
1890
 
    def __init__(self):
1891
 
        super(DisconnectingServer, self).__init__(
1892
 
            ('127.0.0.1', 0),
1893
 
            test_server.TestingTCPServer,
1894
 
            DisconnectingHandler)
1895
 
 
1896
 
    def get_url(self):
1897
 
        """Return the url of the server"""
1898
 
        return "bzr://%s:%d/" % self.server.server_address