»Core Development>Code coverage>Lib/packaging/tests/test_command_upload.py

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

#countcontent
1n/a"""Tests for packaging.command.upload."""
2n/aimport os
3n/a
4n/afrom packaging.command.upload import upload
5n/afrom packaging.dist import Distribution
6n/afrom packaging.errors import PackagingOptionError
7n/a
8n/afrom packaging.tests import unittest, support
9n/atry:
10n/a import threading
11n/a from packaging.tests.pypi_server import PyPIServerTestCase
12n/aexcept ImportError:
13n/a threading = None
14n/a PyPIServerTestCase = unittest.TestCase
15n/a
16n/a
17n/aPYPIRC_NOPASSWORD = """\
18n/a[distutils]
19n/a
20n/aindex-servers =
21n/a server1
22n/a
23n/a[server1]
24n/ausername:me
25n/a"""
26n/a
27n/aPYPIRC = """\
28n/a[distutils]
29n/a
30n/aindex-servers =
31n/a server1
32n/a server2
33n/a
34n/a[server1]
35n/ausername:me
36n/apassword:secret
37n/a
38n/a[server2]
39n/ausername:meagain
40n/apassword: secret
41n/arealm:acme
42n/arepository:http://another.pypi/
43n/a"""
44n/a
45n/a
46n/a@unittest.skipIf(threading is None, 'needs threading')
47n/aclass UploadTestCase(support.TempdirManager, support.EnvironRestorer,
48n/a support.LoggingCatcher, PyPIServerTestCase):
49n/a
50n/a restore_environ = ['HOME']
51n/a
52n/a def setUp(self):
53n/a super(UploadTestCase, self).setUp()
54n/a self.tmp_dir = self.mkdtemp()
55n/a self.rc = os.path.join(self.tmp_dir, '.pypirc')
56n/a os.environ['HOME'] = self.tmp_dir
57n/a
58n/a def test_finalize_options(self):
59n/a # new format
60n/a self.write_file(self.rc, PYPIRC)
61n/a dist = Distribution()
62n/a cmd = upload(dist)
63n/a cmd.finalize_options()
64n/a for attr, expected in (('username', 'me'), ('password', 'secret'),
65n/a ('realm', 'pypi'),
66n/a ('repository', 'http://pypi.python.org/pypi')):
67n/a self.assertEqual(getattr(cmd, attr), expected)
68n/a
69n/a def test_finalize_options_unsigned_identity_raises_exception(self):
70n/a self.write_file(self.rc, PYPIRC)
71n/a dist = Distribution()
72n/a cmd = upload(dist)
73n/a cmd.identity = True
74n/a cmd.sign = False
75n/a self.assertRaises(PackagingOptionError, cmd.finalize_options)
76n/a
77n/a def test_saved_password(self):
78n/a # file with no password
79n/a self.write_file(self.rc, PYPIRC_NOPASSWORD)
80n/a
81n/a # make sure it passes
82n/a dist = Distribution()
83n/a cmd = upload(dist)
84n/a cmd.ensure_finalized()
85n/a self.assertEqual(cmd.password, None)
86n/a
87n/a # make sure we get it as well, if another command
88n/a # initialized it at the dist level
89n/a dist.password = 'xxx'
90n/a cmd = upload(dist)
91n/a cmd.finalize_options()
92n/a self.assertEqual(cmd.password, 'xxx')
93n/a
94n/a def test_upload_without_files_raises_exception(self):
95n/a dist = Distribution()
96n/a cmd = upload(dist)
97n/a self.assertRaises(PackagingOptionError, cmd.run)
98n/a
99n/a def test_upload(self):
100n/a path = os.path.join(self.tmp_dir, 'xxx')
101n/a self.write_file(path)
102n/a command, pyversion, filename = 'xxx', '3.3', path
103n/a dist_files = [(command, pyversion, filename)]
104n/a
105n/a # let's run it
106n/a dist = self.create_dist(dist_files=dist_files, author='dédé')[1]
107n/a cmd = upload(dist)
108n/a cmd.ensure_finalized()
109n/a cmd.repository = self.pypi.full_address
110n/a cmd.run()
111n/a
112n/a # what did we send?
113n/a handler, request_data = self.pypi.requests[-1]
114n/a headers = handler.headers
115n/a self.assertIn('dédé'.encode('utf-8'), request_data)
116n/a self.assertIn(b'xxx', request_data)
117n/a
118n/a self.assertEqual(int(headers['content-length']), len(request_data))
119n/a self.assertLess(int(headers['content-length']), 2500)
120n/a self.assertTrue(headers['content-type'].startswith(
121n/a 'multipart/form-data'))
122n/a self.assertEqual(handler.command, 'POST')
123n/a self.assertNotIn('\n', headers['authorization'])
124n/a
125n/a def test_upload_docs(self):
126n/a path = os.path.join(self.tmp_dir, 'xxx')
127n/a self.write_file(path)
128n/a command, pyversion, filename = 'xxx', '3.3', path
129n/a dist_files = [(command, pyversion, filename)]
130n/a docs_path = os.path.join(self.tmp_dir, "build", "docs")
131n/a os.makedirs(docs_path)
132n/a self.write_file((docs_path, "index.html"), "yellow")
133n/a self.write_file(self.rc, PYPIRC)
134n/a
135n/a # let's run it
136n/a dist = self.create_dist(dist_files=dist_files, author='dédé')[1]
137n/a
138n/a cmd = upload(dist)
139n/a cmd.get_finalized_command("build").run()
140n/a cmd.upload_docs = True
141n/a cmd.ensure_finalized()
142n/a cmd.repository = self.pypi.full_address
143n/a os.chdir(self.tmp_dir)
144n/a cmd.run()
145n/a
146n/a handler, request_data = self.pypi.requests[-1]
147n/a action, name, content = request_data.split(
148n/a "----------------GHSKFJDLGDS7543FJKLFHRE75642756743254"
149n/a .encode())[1:4]
150n/a
151n/a self.assertIn(b'name=":action"', action)
152n/a self.assertIn(b'doc_upload', action)
153n/a
154n/a
155n/adef test_suite():
156n/a return unittest.makeSuite(UploadTestCase)
157n/a
158n/aif __name__ == "__main__":
159n/a unittest.main(defaultTest="test_suite")