ยปCore Development>Code coverage>Lib/packaging/tests/test_pypi_server.py

Python code coverage for Lib/packaging/tests/test_pypi_server.py

#countcontent
1n/a"""Tests for packaging.command.bdist."""
2n/aimport urllib.request
3n/aimport urllib.parse
4n/aimport urllib.error
5n/a
6n/atry:
7n/a import threading
8n/a from packaging.tests.pypi_server import (
9n/a PyPIServer, PYPI_DEFAULT_STATIC_PATH)
10n/aexcept ImportError:
11n/a threading = None
12n/a PyPIServer = None
13n/a PYPI_DEFAULT_STATIC_PATH = None
14n/a
15n/afrom packaging.tests import unittest
16n/a
17n/a
18n/a@unittest.skipIf(threading is None, "Needs threading")
19n/aclass PyPIServerTest(unittest.TestCase):
20n/a
21n/a def test_records_requests(self):
22n/a # We expect that PyPIServer can log our requests
23n/a server = PyPIServer()
24n/a server.default_response_status = 200
25n/a
26n/a try:
27n/a server.start()
28n/a self.assertEqual(len(server.requests), 0)
29n/a
30n/a data = b'Rock Around The Bunker'
31n/a
32n/a headers = {"X-test-header": "Mister Iceberg"}
33n/a
34n/a request = urllib.request.Request(
35n/a server.full_address, data, headers)
36n/a urllib.request.urlopen(request)
37n/a self.assertEqual(len(server.requests), 1)
38n/a handler, request_data = server.requests[-1]
39n/a self.assertIn(data, request_data)
40n/a self.assertIn("x-test-header", handler.headers)
41n/a self.assertEqual(handler.headers["x-test-header"],
42n/a "Mister Iceberg")
43n/a
44n/a finally:
45n/a server.stop()
46n/a
47n/a def test_serve_static_content(self):
48n/a # PYPI Mocked server can serve static content from disk.
49n/a
50n/a def uses_local_files_for(server, url_path):
51n/a """Test that files are served statically (eg. the output from the
52n/a server is the same than the one made by a simple file read.
53n/a """
54n/a url = server.full_address + url_path
55n/a request = urllib.request.Request(url)
56n/a response = urllib.request.urlopen(request)
57n/a with open(PYPI_DEFAULT_STATIC_PATH + "/test_pypi_server"
58n/a + url_path) as file:
59n/a return response.read().decode() == file.read()
60n/a
61n/a server = PyPIServer(static_uri_paths=["simple", "external"],
62n/a static_filesystem_paths=["test_pypi_server"])
63n/a server.start()
64n/a try:
65n/a # the file does not exists on the disc, so it might not be served
66n/a url = server.full_address + "/simple/unexisting_page"
67n/a request = urllib.request.Request(url)
68n/a try:
69n/a urllib.request.urlopen(request)
70n/a except urllib.error.HTTPError as e:
71n/a self.assertEqual(e.code, 404)
72n/a
73n/a # now try serving a content that do exists
74n/a self.assertTrue(uses_local_files_for(server, "/simple/index.html"))
75n/a
76n/a # and another one in another root path
77n/a self.assertTrue(uses_local_files_for(server,
78n/a "/external/index.html"))
79n/a
80n/a finally:
81n/a server.stop()
82n/a
83n/a
84n/adef test_suite():
85n/a return unittest.makeSuite(PyPIServerTest)
86n/a
87n/aif __name__ == '__main__':
88n/a unittest.main(defaultTest="test_suite")