65
if features.pycurl.available():
66
65
from bzrlib.transport.http._pycurl import PyCurlTransport
67
except errors.DependencyNotPresent:
68
pycurl_present = False
69
71
def load_tests(standard_tests, module, loader):
82
84
_server=http_server.HttpServer_urllib,
83
85
_qualified_prefix='http+urllib',)),
85
if features.pycurl.available():
86
88
transport_scenarios.append(
87
89
('pycurl', dict(_transport=PyCurlTransport,
88
90
_server=http_server.HttpServer_PyCurl,
154
156
activity_scenarios.append(
155
157
('urllib,https', dict(_activity_server=ActivityHTTPSServer,
156
158
_transport=_urllib.HttpTransport_urllib,)),)
157
if features.pycurl.available():
158
160
activity_scenarios.append(
159
161
('pycurl,http', dict(_activity_server=ActivityHTTPServer,
160
162
_transport=PyCurlTransport,)),)
218
220
def get_url(self):
219
221
return '%s://%s:%s/' % (self.scheme, self.host, self.port)
221
def start_server(self):
222
224
self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
223
225
self._sock.bind(('127.0.0.1', 0))
224
226
self.host, self.port = self._sock.getsockname()
307
309
server = http_server.HttpServer(BogusRequestHandler)
309
self.assertRaises(httplib.UnknownProtocol, server.start_server)
311
self.assertRaises(httplib.UnknownProtocol, server.setUp)
312
314
self.fail('HTTP Server creation did not raise UnknownProtocol')
314
316
def test_force_invalid_protocol(self):
315
317
server = http_server.HttpServer(protocol_version='HTTP/0.1')
317
self.assertRaises(httplib.UnknownProtocol, server.start_server)
319
self.assertRaises(httplib.UnknownProtocol, server.setUp)
320
322
self.fail('HTTP Server creation did not raise UnknownProtocol')
322
324
def test_server_start_and_stop(self):
323
325
server = http_server.HttpServer()
324
server.start_server()
326
328
self.assertTrue(server._http_running)
329
331
self.assertFalse(server._http_running)
331
333
def test_create_http_server_one_zero(self):
374
376
"""Test case to inherit from if pycurl is present"""
376
378
def _get_pycurl_maybe(self):
377
self.requireFeature(features.pycurl)
378
return PyCurlTransport
380
from bzrlib.transport.http._pycurl import PyCurlTransport
381
return PyCurlTransport
382
except errors.DependencyNotPresent:
383
raise tests.TestSkipped('pycurl not present')
380
385
_transport = property(_get_pycurl_maybe)
391
396
self.assertEqual('http://example.com', url)
392
397
self.assertEqual(0, len(f.credentials))
393
398
url = http.extract_auth(
394
'http://user:pass@example.com/bzr/bzr.dev', f)
395
self.assertEqual('http://example.com/bzr/bzr.dev', url)
399
'http://user:pass@www.bazaar-vcs.org/bzr/bzr.dev', f)
400
self.assertEqual('http://www.bazaar-vcs.org/bzr/bzr.dev', url)
396
401
self.assertEqual(1, len(f.credentials))
397
self.assertEqual([None, 'example.com', 'user', 'pass'],
402
self.assertEqual([None, 'www.bazaar-vcs.org', 'user', 'pass'],
398
403
f.credentials[0])
428
433
def test_http_impl_urls(self):
429
434
"""There are servers which ask for particular clients to connect"""
430
435
server = self._server()
431
server.start_server()
433
438
url = server.get_url()
434
439
self.assertTrue(url.startswith('%s://' % self._qualified_prefix))
439
444
class TestHttps_pycurl(TestWithTransport_pycurl, tests.TestCase):
448
453
https by supplying a fake version_info that do not
451
self.requireFeature(features.pycurl)
452
# Import the module locally now that we now it's available.
453
pycurl = features.pycurl.module
459
raise tests.TestSkipped('pycurl not present')
455
self.overrideAttr(pycurl, 'version_info',
456
# Fake the pycurl version_info This was taken from
457
# a windows pycurl without SSL (thanks to bialix)
466
('ftp', 'gopher', 'telnet',
467
'dict', 'ldap', 'http', 'file'),
471
self.assertRaises(errors.DependencyNotPresent, self._transport,
472
'https://launchpad.net')
461
version_info_orig = pycurl.version_info
463
# Now that we have pycurl imported, we can fake its version_info
464
# This was taken from a windows pycurl without SSL
466
pycurl.version_info = lambda : (2,
474
('ftp', 'gopher', 'telnet',
475
'dict', 'ldap', 'http', 'file'),
479
self.assertRaises(errors.DependencyNotPresent, self._transport,
480
'https://launchpad.net')
482
# Restore the right function
483
pycurl.version_info = version_info_orig
475
486
class TestHTTPConnections(http_utils.TestCaseWithWebserver):
592
603
protocol_version=self._protocol_version)
594
605
def _testing_pycurl(self):
595
# TODO: This is duplicated for lots of the classes in this file
596
return (features.pycurl.available()
597
and self._transport == PyCurlTransport)
606
return pycurl_present and self._transport == PyCurlTransport
600
609
class WallRequestHandler(http_server.TestingHTTPRequestHandler):
709
718
_req_handler_class = BadProtocolRequestHandler
712
if self._testing_pycurl():
721
if pycurl_present and self._transport == PyCurlTransport:
713
722
raise tests.TestNotApplicable(
714
723
"pycurl doesn't check the protocol version")
715
724
super(TestBadProtocolServer, self).setUp()
759
768
self.assertEqual(None, server.host)
760
769
self.assertEqual(None, server.port)
762
def test_setUp_and_stop(self):
771
def test_setUp_and_tearDown(self):
763
772
server = RecordingServer(expect_body_tail=None)
764
server.start_server()
766
775
self.assertNotEqual(None, server.host)
767
776
self.assertNotEqual(None, server.port)
770
779
self.assertEqual(None, server.host)
771
780
self.assertEqual(None, server.port)
1178
1187
self._old_env = {}
1180
1189
def _testing_pycurl(self):
1181
# TODO: This is duplicated for lots of the classes in this file
1182
return (features.pycurl.available()
1183
and self._transport == PyCurlTransport)
1190
return pycurl_present and self._transport == PyCurlTransport
1185
1192
def create_transport_secondary_server(self):
1186
1193
"""Creates an http server that will serve files with
1362
1369
def install_redirected_request(test):
1363
test.overrideAttr(_urllib2_wrappers, 'Request', RedirectedRequest)
1370
test.original_class = _urllib2_wrappers.Request
1372
_urllib2_wrappers.Request = test.original_class
1373
_urllib2_wrappers.Request = RedirectedRequest
1374
test.addCleanup(restore)
1366
1377
class TestHTTPSilentRedirections(http_utils.TestCaseWithRedirectedWebserver):
1380
1391
def setUp(self):
1381
if (features.pycurl.available()
1382
and self._transport == PyCurlTransport):
1392
if pycurl_present and self._transport == PyCurlTransport:
1383
1393
raise tests.TestNotApplicable(
1384
1394
"pycurl doesn't redirect silently annymore")
1385
1395
super(TestHTTPSilentRedirections, self).setUp()
1497
1507
return self._auth_server(protocol_version=self._protocol_version)
1499
1509
def _testing_pycurl(self):
1500
# TODO: This is duplicated for lots of the classes in this file
1501
return (features.pycurl.available()
1502
and self._transport == PyCurlTransport)
1510
return pycurl_present and self._transport == PyCurlTransport
1504
1512
def get_user_url(self, user, password):
1505
1513
"""Build an url embedding user and password"""
1956
1964
def setUp(self):
1957
1965
tests.TestCase.setUp(self)
1958
1966
self.server = self._activity_server(self._protocol_version)
1959
self.server.start_server()
1960
1968
self.activities = {}
1961
1969
def report_activity(t, bytes, direction):
1962
1970
count = self.activities.get(direction, 0)
2097
2105
def setUp(self):
2098
2106
tests.TestCase.setUp(self)
2099
2107
self.server = self._activity_server(self._protocol_version)
2100
self.server.start_server()
2101
2109
self.activities = {}
2102
2110
def report_activity(t, bytes, direction):
2103
2111
count = self.activities.get(direction, 0)
2128
2136
self.server = ActivityHTTPServer('HTTP/1.1')
2129
2137
self._transport=_urllib.HttpTransport_urllib
2131
self.server.start_server()
2133
2141
# We override at class level because constructors may propagate the
2134
2142
# bound method and render instance overriding ineffective (an