36
36
UnknownFormatError,
37
37
UnsupportedFormatError,
39
from bzrlib.tests import TestCase, TestCaseWithTransport, test_sftp_transport
39
from bzrlib.tests import (
41
TestCaseWithTransport,
40
44
from bzrlib.tests.HttpServer import HttpServer
45
from bzrlib.tests.HTTPTestUtil import (
46
TestCaseWithTwoWebservers,
47
HTTPServerRedirecting,
49
from bzrlib.tests.test_http import TestWithTransport_pycurl
41
50
from bzrlib.transport import get_transport
51
from bzrlib.transport.http._urllib import HttpTransport_urllib
42
52
from bzrlib.transport.memory import MemoryServer
43
53
from bzrlib.repofmt import knitrepo, weaverepo
764
774
checkout_format = my_bzrdir.checkout_metadir()
765
775
self.assertIsInstance(checkout_format.workingtree_format,
766
776
workingtree.WorkingTreeFormat3)
779
class TestHTTPRedirectionLoop(object):
780
"""Test redirection loop between two http servers.
782
This MUST be used by daughter classes that also inherit from
783
TestCaseWithTwoWebservers.
785
We can't inherit directly from TestCaseWithTwoWebservers or the
786
test framework will try to create an instance which cannot
787
run, its implementation being incomplete.
790
# Should be defined by daughter classes to ensure redirection
791
# still use the same transport implementation (not currently
792
# enforced as it's a bit tricky to get right (see the FIXME
793
# in BzrDir.open_from_transport for the unique use case so
797
def create_transport_readonly_server(self):
798
return HTTPServerRedirecting()
800
def create_transport_secondary_server(self):
801
return HTTPServerRedirecting()
804
# Both servers redirect to each server creating a loop
805
super(TestHTTPRedirectionLoop, self).setUp()
806
# The redirections will point to the new server
807
self.new_server = self.get_readonly_server()
808
# The requests to the old server will be redirected
809
self.old_server = self.get_secondary_server()
810
# Configure the redirections
811
self.old_server.redirect_to(self.new_server.host, self.new_server.port)
812
self.new_server.redirect_to(self.old_server.host, self.old_server.port)
814
def _qualified_url(self, host, port):
815
return 'http+%s://%s:%s' % (self._qualifier, host, port)
818
# Starting from either server should loop
819
old_url = self._qualified_url(self.old_server.host,
820
self.old_server.port)
821
oldt = self._transport(old_url)
822
self.assertRaises(errors.NotBranchError,
823
bzrdir.BzrDir.open_from_transport, oldt)
824
new_url = self._qualified_url(self.new_server.host,
825
self.new_server.port)
826
newt = self._transport(new_url)
827
self.assertRaises(errors.NotBranchError,
828
bzrdir.BzrDir.open_from_transport, newt)
831
class TestHTTPRedirections_urllib(TestHTTPRedirectionLoop,
832
TestCaseWithTwoWebservers):
833
"""Tests redirections for urllib implementation"""
835
_qualifier = 'urllib'
836
_transport = HttpTransport_urllib
840
class TestHTTPRedirections_pycurl(TestWithTransport_pycurl,
841
TestHTTPRedirectionLoop,
842
TestCaseWithTwoWebservers):
843
"""Tests redirections for pycurl implementation"""
845
_qualifier = 'pycurl'