|
| 1 | +import tempfile |
1 | 2 | import unittest
|
2 | 3 | from test import test_support
|
| 4 | +from test.test_urllib2net import skip_ftp_test_on_travis |
3 | 5 |
|
4 | 6 | import socket
|
5 | 7 | import urllib
|
@@ -213,14 +215,49 @@ def test_context_argument(self):
|
213 | 215 | self.assertIn("Python", response.read())
|
214 | 216 |
|
215 | 217 |
|
| 218 | +class urlopen_FTPTest(unittest.TestCase): |
| 219 | + FTP_TEST_FILE = 'ftp://www.pythontest.net/README' |
| 220 | + NUM_FTP_RETRIEVES = 3 |
| 221 | + |
| 222 | + @skip_ftp_test_on_travis |
| 223 | + def test_multiple_ftp_retrieves(self): |
| 224 | + |
| 225 | + with test_support.transient_internet(self.FTP_TEST_FILE): |
| 226 | + try: |
| 227 | + for _ in range(self.NUM_FTP_RETRIEVES): |
| 228 | + with tempfile.NamedTemporaryFile() as fp: |
| 229 | + urllib.FancyURLopener().retrieve(self.FTP_TEST_FILE, fp.name) |
| 230 | + except IOError as e: |
| 231 | + self.fail("Failed FTP retrieve while accessing ftp url " |
| 232 | + "multiple times.\n Error message was : %s" % e) |
| 233 | + |
| 234 | + @skip_ftp_test_on_travis |
| 235 | + def test_multiple_ftp_urlopen_same_host(self): |
| 236 | + with test_support.transient_internet(self.FTP_TEST_FILE): |
| 237 | + ftp_fds_to_close = [] |
| 238 | + try: |
| 239 | + for _ in range(self.NUM_FTP_RETRIEVES): |
| 240 | + fd = urllib.urlopen(self.FTP_TEST_FILE) |
| 241 | + # test ftp open without closing fd as a supported scenario. |
| 242 | + ftp_fds_to_close.append(fd) |
| 243 | + except IOError as e: |
| 244 | + self.fail("Failed FTP binary file open. " |
| 245 | + "Error message was: %s" % e) |
| 246 | + finally: |
| 247 | + # close the open fds |
| 248 | + for fd in ftp_fds_to_close: |
| 249 | + fd.close() |
| 250 | + |
| 251 | + |
216 | 252 | def test_main():
|
217 | 253 | test_support.requires('network')
|
218 | 254 | with test_support.check_py3k_warnings(
|
219 | 255 | ("urllib.urlopen.. has been removed", DeprecationWarning)):
|
220 | 256 | test_support.run_unittest(URLTimeoutTest,
|
221 | 257 | urlopenNetworkTests,
|
222 | 258 | urlretrieveNetworkTests,
|
223 |
| - urlopen_HttpsTests) |
| 259 | + urlopen_HttpsTests, |
| 260 | + urlopen_FTPTest) |
224 | 261 |
|
225 | 262 | if __name__ == "__main__":
|
226 | 263 | test_main()
|
0 commit comments