~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_http.py

Rework the http tests with overrideEnv.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1073
1073
    Only the urllib implementation is tested here.
1074
1074
    """
1075
1075
 
1076
 
    def setUp(self):
1077
 
        tests.TestCase.setUp(self)
1078
 
        self._old_env = {}
1079
 
        self.addCleanup(self._restore_env)
1080
 
 
1081
 
    def _install_env(self, env):
1082
 
        for name, value in env.iteritems():
1083
 
            self._old_env[name] = osutils.set_or_unset_env(name, value)
1084
 
 
1085
 
    def _restore_env(self):
1086
 
        for name, value in self._old_env.iteritems():
1087
 
            osutils.set_or_unset_env(name, value)
1088
 
 
1089
1076
    def _proxied_request(self):
1090
1077
        handler = _urllib2_wrappers.ProxyHandler()
1091
1078
        request = _urllib2_wrappers.Request('GET','http://baz/buzzle')
1093
1080
        return request
1094
1081
 
1095
1082
    def test_empty_user(self):
1096
 
        self._install_env({'http_proxy': 'http://bar.com'})
 
1083
        self.overrideEnv('http_proxy', 'http://bar.com')
1097
1084
        request = self._proxied_request()
1098
1085
        self.assertFalse(request.headers.has_key('Proxy-authorization'))
1099
1086
 
1100
1087
    def test_invalid_proxy(self):
1101
1088
        """A proxy env variable without scheme"""
1102
 
        self._install_env({'http_proxy': 'host:1234'})
 
1089
        self.overrideEnv('http_proxy', 'host:1234')
1103
1090
        self.assertRaises(errors.InvalidURL, self._proxied_request)
1104
1091
 
1105
1092
 
1136
1123
            self.no_proxy_host = self.server_host_port
1137
1124
        # The secondary server is the proxy
1138
1125
        self.proxy_url = self.get_secondary_url()
1139
 
        self._old_env = {}
1140
1126
 
1141
1127
    def _testing_pycurl(self):
1142
1128
        # TODO: This is duplicated for lots of the classes in this file
1143
1129
        return (features.pycurl.available()
1144
1130
                and self._transport == PyCurlTransport)
1145
1131
 
1146
 
    def _install_env(self, env):
1147
 
        for name, value in env.iteritems():
1148
 
            self._old_env[name] = osutils.set_or_unset_env(name, value)
1149
 
 
1150
 
    def _restore_env(self):
1151
 
        for name, value in self._old_env.iteritems():
1152
 
            osutils.set_or_unset_env(name, value)
1153
 
 
1154
 
    def proxied_in_env(self, env):
1155
 
        self._install_env(env)
1156
 
        t = self.get_readonly_transport()
1157
 
        try:
1158
 
            self.assertEqual('proxied contents of foo\n', t.get('foo').read())
1159
 
        finally:
1160
 
            self._restore_env()
1161
 
 
1162
 
    def not_proxied_in_env(self, env):
1163
 
        self._install_env(env)
1164
 
        t = self.get_readonly_transport()
1165
 
        try:
1166
 
            self.assertEqual('contents of foo\n', t.get('foo').read())
1167
 
        finally:
1168
 
            self._restore_env()
 
1132
    def assertProxied(self):
 
1133
        t = self.get_readonly_transport()
 
1134
        self.assertEqual('proxied contents of foo\n', t.get('foo').read())
 
1135
 
 
1136
    def assertNotProxied(self):
 
1137
        t = self.get_readonly_transport()
 
1138
        self.assertEqual('contents of foo\n', t.get('foo').read())
1169
1139
 
1170
1140
    def test_http_proxy(self):
1171
 
        self.proxied_in_env({'http_proxy': self.proxy_url})
 
1141
        self.overrideEnv('http_proxy', self.proxy_url)
 
1142
        self.assertProxied()
1172
1143
 
1173
1144
    def test_HTTP_PROXY(self):
1174
1145
        if self._testing_pycurl():
1177
1148
            # about. Should we ?)
1178
1149
            raise tests.TestNotApplicable(
1179
1150
                'pycurl does not check HTTP_PROXY for security reasons')
1180
 
        self.proxied_in_env({'HTTP_PROXY': self.proxy_url})
 
1151
        self.overrideEnv('HTTP_PROXY', self.proxy_url)
 
1152
        self.assertProxied()
1181
1153
 
1182
1154
    def test_all_proxy(self):
1183
 
        self.proxied_in_env({'all_proxy': self.proxy_url})
 
1155
        self.overrideEnv('all_proxy', self.proxy_url)
 
1156
        self.assertProxied()
1184
1157
 
1185
1158
    def test_ALL_PROXY(self):
1186
 
        self.proxied_in_env({'ALL_PROXY': self.proxy_url})
 
1159
        self.overrideEnv('ALL_PROXY', self.proxy_url)
 
1160
        self.assertProxied()
1187
1161
 
1188
1162
    def test_http_proxy_with_no_proxy(self):
1189
 
        self.not_proxied_in_env({'http_proxy': self.proxy_url,
1190
 
                                 'no_proxy': self.no_proxy_host})
 
1163
        self.overrideEnv('no_proxy', self.no_proxy_host)
 
1164
        self.overrideEnv('http_proxy', self.proxy_url)
 
1165
        self.assertNotProxied()
1191
1166
 
1192
1167
    def test_HTTP_PROXY_with_NO_PROXY(self):
1193
1168
        if self._testing_pycurl():
1194
1169
            raise tests.TestNotApplicable(
1195
1170
                'pycurl does not check HTTP_PROXY for security reasons')
1196
 
        self.not_proxied_in_env({'HTTP_PROXY': self.proxy_url,
1197
 
                                 'NO_PROXY': self.no_proxy_host})
 
1171
        self.overrideEnv('NO_PROXY', self.no_proxy_host)
 
1172
        self.overrideEnv('HTTP_PROXY', self.proxy_url)
 
1173
        self.assertNotProxied()
1198
1174
 
1199
1175
    def test_all_proxy_with_no_proxy(self):
1200
 
        self.not_proxied_in_env({'all_proxy': self.proxy_url,
1201
 
                                 'no_proxy': self.no_proxy_host})
 
1176
        self.overrideEnv('no_proxy', self.no_proxy_host)
 
1177
        self.overrideEnv('all_proxy', self.proxy_url)
 
1178
        self.assertNotProxied()
1202
1179
 
1203
1180
    def test_ALL_PROXY_with_NO_PROXY(self):
1204
 
        self.not_proxied_in_env({'ALL_PROXY': self.proxy_url,
1205
 
                                 'NO_PROXY': self.no_proxy_host})
 
1181
        self.overrideEnv('NO_PROXY', self.no_proxy_host)
 
1182
        self.overrideEnv('ALL_PROXY', self.proxy_url)
 
1183
        self.assertNotProxied()
1206
1184
 
1207
1185
    def test_http_proxy_without_scheme(self):
 
1186
        self.overrideEnv('http_proxy', self.server_host_port)
1208
1187
        if self._testing_pycurl():
1209
1188
            # pycurl *ignores* invalid proxy env variables. If that ever change
1210
1189
            # in the future, this test will fail indicating that pycurl do not
1211
1190
            # ignore anymore such variables.
1212
 
            self.not_proxied_in_env({'http_proxy': self.server_host_port})
 
1191
            self.assertNotProxied()
1213
1192
        else:
1214
 
            self.assertRaises(errors.InvalidURL,
1215
 
                              self.proxied_in_env,
1216
 
                              {'http_proxy': self.server_host_port})
 
1193
            self.assertRaises(errors.InvalidURL, self.assertProxied)
1217
1194
 
1218
1195
 
1219
1196
class TestRanges(http_utils.TestCaseWithWebserver):
1707
1684
 
1708
1685
    def setUp(self):
1709
1686
        super(TestProxyAuth, self).setUp()
1710
 
        self._old_env = {}
1711
 
        self.addCleanup(self._restore_env)
1712
1687
        # Override the contents to avoid false positives
1713
1688
        self.build_tree_contents([('a', 'not proxied contents of a\n'),
1714
1689
                                  ('b', 'not proxied contents of b\n'),
1717
1692
                                  ])
1718
1693
 
1719
1694
    def get_user_transport(self, user, password):
1720
 
        self._install_env({'all_proxy': self.get_user_url(user, password)})
 
1695
        self.overrideEnv('all_proxy', self.get_user_url(user, password))
1721
1696
        return TestAuth.get_user_transport(self, user, password)
1722
1697
 
1723
 
    def _install_env(self, env):
1724
 
        for name, value in env.iteritems():
1725
 
            self._old_env[name] = osutils.set_or_unset_env(name, value)
1726
 
 
1727
 
    def _restore_env(self):
1728
 
        for name, value in self._old_env.iteritems():
1729
 
            osutils.set_or_unset_env(name, value)
1730
 
 
1731
1698
    def test_empty_pass(self):
1732
1699
        if self._testing_pycurl():
1733
1700
            import pycurl