blob: 4e8af0fc6e01e33e3497648ce3720ab3dc5283dc [file] [log] [blame]
Andrew M. Kuchlingaac5c862008-05-11 14:00:00 +00001"""Tests for distutils.pypirc.pypirc."""
2import sys
3import os
4import unittest
Tarek Ziadé13699002009-02-14 14:10:23 +00005import tempfile
6import shutil
Andrew M. Kuchlingaac5c862008-05-11 14:00:00 +00007
8from distutils.core import PyPIRCCommand
9from distutils.core import Distribution
Tarek Ziadée4c75bb2008-12-24 19:10:05 +000010from distutils.log import set_threshold
11from distutils.log import WARN
Andrew M. Kuchlingaac5c862008-05-11 14:00:00 +000012
13from distutils.tests import support
Éric Araujo54274ad2011-02-03 00:12:18 +000014from test.test_support import run_unittest
Andrew M. Kuchlingaac5c862008-05-11 14:00:00 +000015
16PYPIRC = """\
17[distutils]
18
19index-servers =
20 server1
21 server2
22
23[server1]
24username:me
25password:secret
26
27[server2]
28username:meagain
29password: secret
30realm:acme
31repository:http://another.pypi/
32"""
33
34PYPIRC_OLD = """\
35[server-login]
36username:tarek
37password:secret
38"""
39
Tarek Ziadée4c75bb2008-12-24 19:10:05 +000040WANTED = """\
41[distutils]
42index-servers =
43 pypi
44
45[pypi]
46username:tarek
47password:xxx
48"""
49
50
Tarek Ziadé1a1158f2009-03-31 20:56:11 +000051class PyPIRCCommandTestCase(support.TempdirManager,
52 support.LoggingSilencer,
Tarek Ziadé450ca112009-05-10 12:17:30 +000053 support.EnvironGuard,
Tarek Ziadé1a1158f2009-03-31 20:56:11 +000054 unittest.TestCase):
Andrew M. Kuchlingaac5c862008-05-11 14:00:00 +000055
56 def setUp(self):
57 """Patches the environment."""
Tarek Ziadée3bc0ef2009-02-25 22:29:27 +000058 super(PyPIRCCommandTestCase, self).setUp()
Tarek Ziadé13699002009-02-14 14:10:23 +000059 self.tmp_dir = self.mkdtemp()
Tarek Ziadé2b06d422009-10-18 09:28:26 +000060 os.environ['HOME'] = self.tmp_dir
Tarek Ziadé13699002009-02-14 14:10:23 +000061 self.rc = os.path.join(self.tmp_dir, '.pypirc')
Andrew M. Kuchlingaac5c862008-05-11 14:00:00 +000062 self.dist = Distribution()
63
64 class command(PyPIRCCommand):
65 def __init__(self, dist):
66 PyPIRCCommand.__init__(self, dist)
67 def initialize_options(self):
68 pass
69 finalize_options = initialize_options
70
71 self._cmd = command
Tarek Ziadée4c75bb2008-12-24 19:10:05 +000072 self.old_threshold = set_threshold(WARN)
Andrew M. Kuchlingaac5c862008-05-11 14:00:00 +000073
74 def tearDown(self):
75 """Removes the patch."""
Tarek Ziadée4c75bb2008-12-24 19:10:05 +000076 set_threshold(self.old_threshold)
Tarek Ziadée3bc0ef2009-02-25 22:29:27 +000077 super(PyPIRCCommandTestCase, self).tearDown()
Andrew M. Kuchlingaac5c862008-05-11 14:00:00 +000078
79 def test_server_registration(self):
80 # This test makes sure PyPIRCCommand knows how to:
81 # 1. handle several sections in .pypirc
82 # 2. handle the old format
83
84 # new format
Tarek Ziadé450ca112009-05-10 12:17:30 +000085 self.write_file(self.rc, PYPIRC)
Andrew M. Kuchlingaac5c862008-05-11 14:00:00 +000086 cmd = self._cmd(self.dist)
87 config = cmd._read_pypirc()
88
89 config = config.items()
90 config.sort()
91 waited = [('password', 'secret'), ('realm', 'pypi'),
Donald Stufft692497a2016-08-03 18:58:12 -040092 ('repository', 'https://upload.pypi.org/legacy/'),
Andrew M. Kuchlingaac5c862008-05-11 14:00:00 +000093 ('server', 'server1'), ('username', 'me')]
Ezio Melotti2623a372010-11-21 13:34:58 +000094 self.assertEqual(config, waited)
Andrew M. Kuchlingaac5c862008-05-11 14:00:00 +000095
96 # old format
Tarek Ziadé450ca112009-05-10 12:17:30 +000097 self.write_file(self.rc, PYPIRC_OLD)
Andrew M. Kuchlingaac5c862008-05-11 14:00:00 +000098 config = cmd._read_pypirc()
99 config = config.items()
100 config.sort()
101 waited = [('password', 'secret'), ('realm', 'pypi'),
Donald Stufft692497a2016-08-03 18:58:12 -0400102 ('repository', 'https://upload.pypi.org/legacy/'),
Andrew M. Kuchlingaac5c862008-05-11 14:00:00 +0000103 ('server', 'server-login'), ('username', 'tarek')]
Ezio Melotti2623a372010-11-21 13:34:58 +0000104 self.assertEqual(config, waited)
Andrew M. Kuchlingaac5c862008-05-11 14:00:00 +0000105
Tarek Ziadée4c75bb2008-12-24 19:10:05 +0000106 def test_server_empty_registration(self):
Tarek Ziadée4c75bb2008-12-24 19:10:05 +0000107 cmd = self._cmd(self.dist)
108 rc = cmd._get_rc_file()
Serhiy Storchaka25a23ef2013-11-17 00:29:27 +0200109 self.assertFalse(os.path.exists(rc))
Tarek Ziadée4c75bb2008-12-24 19:10:05 +0000110 cmd._store_pypirc('tarek', 'xxx')
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000111 self.assertTrue(os.path.exists(rc))
Éric Araujod1feff72010-11-06 04:06:18 +0000112 f = open(rc)
113 try:
114 content = f.read()
Ezio Melotti2623a372010-11-21 13:34:58 +0000115 self.assertEqual(content, WANTED)
Éric Araujod1feff72010-11-06 04:06:18 +0000116 finally:
117 f.close()
Tarek Ziadée4c75bb2008-12-24 19:10:05 +0000118
Andrew M. Kuchlingaac5c862008-05-11 14:00:00 +0000119def test_suite():
120 return unittest.makeSuite(PyPIRCCommandTestCase)
121
122if __name__ == "__main__":
Éric Araujo54274ad2011-02-03 00:12:18 +0000123 run_unittest(test_suite())