test_register.py (5901B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\stdlib\distutils\tests\test_register.py 2 import sys 3 import os 4 import unittest 5 import getpass 6 import urllib2 7 import warnings 8 from test.test_support import check_warnings 9 from distutils.command import register as register_module 10 from distutils.command.register import register 11 from distutils.core import Distribution 12 from distutils.errors import DistutilsSetupError 13 from distutils.tests import support 14 from distutils.tests.test_config import PYPIRC, PyPIRCCommandTestCase 15 PYPIRC_NOPASSWORD = '[distutils]\n\nindex-servers =\n server1\n\n[server1]\nusername:me\n' 16 WANTED_PYPIRC = '[distutils]\nindex-servers =\n pypi\n\n[pypi]\nusername:tarek\npassword:password\n' 17 18 class RawInputs(object): 19 20 def __init__(self, *answers): 21 self.answers = answers 22 self.index = 0 23 24 def __call__(self, prompt = ''): 25 try: 26 return self.answers[self.index] 27 finally: 28 self.index += 1 29 30 31 class FakeOpener(object): 32 33 def __init__(self): 34 self.reqs = [] 35 36 def __call__(self, *args): 37 return self 38 39 def open(self, req): 40 self.reqs.append(req) 41 return self 42 43 def read(self): 44 return 'xxx' 45 46 47 class RegisterTestCase(PyPIRCCommandTestCase): 48 49 def setUp(self): 50 super(RegisterTestCase, self).setUp() 51 self._old_getpass = getpass.getpass 52 53 def _getpass(prompt): 54 return 'password' 55 56 getpass.getpass = _getpass 57 self.old_opener = urllib2.build_opener 58 self.conn = urllib2.build_opener = FakeOpener() 59 60 def tearDown(self): 61 getpass.getpass = self._old_getpass 62 urllib2.build_opener = self.old_opener 63 super(RegisterTestCase, self).tearDown() 64 65 def _get_cmd(self, metadata = None): 66 if metadata is None: 67 metadata = {'url': 'xxx', 68 'author': 'xxx', 69 'author_email': 'xxx', 70 'name': 'xxx', 71 'version': 'xxx'} 72 pkg_info, dist = self.create_dist(**metadata) 73 return register(dist) 74 75 def test_create_pypirc(self): 76 cmd = self._get_cmd() 77 self.assertTrue(not os.path.exists(self.rc)) 78 inputs = RawInputs('1', 'tarek', 'y') 79 register_module.raw_input = inputs.__call__ 80 try: 81 cmd.run() 82 finally: 83 del register_module.raw_input 84 85 self.assertTrue(os.path.exists(self.rc)) 86 f = open(self.rc) 87 try: 88 content = f.read() 89 self.assertEqual(content, WANTED_PYPIRC) 90 finally: 91 f.close() 92 93 def _no_way(prompt = ''): 94 raise AssertionError(prompt) 95 96 register_module.raw_input = _no_way 97 cmd.show_response = 1 98 cmd.run() 99 self.assertTrue(self.conn.reqs, 2) 100 req1 = dict(self.conn.reqs[0].headers) 101 req2 = dict(self.conn.reqs[1].headers) 102 self.assertEqual(req2['Content-length'], req1['Content-length']) 103 self.assertTrue('xxx' in self.conn.reqs[1].data) 104 105 def test_password_not_in_file(self): 106 self.write_file(self.rc, PYPIRC_NOPASSWORD) 107 cmd = self._get_cmd() 108 cmd._set_config() 109 cmd.finalize_options() 110 cmd.send_metadata() 111 self.assertEqual(cmd.distribution.password, 'password') 112 113 def test_registering(self): 114 cmd = self._get_cmd() 115 inputs = RawInputs('2', 'tarek', 'tarek@ziade.org') 116 register_module.raw_input = inputs.__call__ 117 try: 118 cmd.run() 119 finally: 120 del register_module.raw_input 121 122 self.assertTrue(self.conn.reqs, 1) 123 req = self.conn.reqs[0] 124 headers = dict(req.headers) 125 self.assertEqual(headers['Content-length'], '608') 126 self.assertTrue('tarek' in req.data) 127 128 def test_password_reset(self): 129 cmd = self._get_cmd() 130 inputs = RawInputs('3', 'tarek@ziade.org') 131 register_module.raw_input = inputs.__call__ 132 try: 133 cmd.run() 134 finally: 135 del register_module.raw_input 136 137 self.assertTrue(self.conn.reqs, 1) 138 req = self.conn.reqs[0] 139 headers = dict(req.headers) 140 self.assertEqual(headers['Content-length'], '290') 141 self.assertTrue('tarek' in req.data) 142 143 def test_strict(self): 144 cmd = self._get_cmd({}) 145 cmd.ensure_finalized() 146 cmd.strict = 1 147 self.assertRaises(DistutilsSetupError, cmd.run) 148 try: 149 import docutils 150 except ImportError: 151 return 152 153 metadata = {'url': 'xxx', 154 'author': 'xxx', 155 'author_email': u'\xc3\xa9x\xc3\xa9x\xc3\xa9', 156 'name': 'xxx', 157 'version': 'xxx', 158 'long_description': 'title\n==\n\ntext'} 159 cmd = self._get_cmd(metadata) 160 cmd.ensure_finalized() 161 cmd.strict = 1 162 self.assertRaises(DistutilsSetupError, cmd.run) 163 metadata['long_description'] = 'title\n=====\n\ntext' 164 cmd = self._get_cmd(metadata) 165 cmd.ensure_finalized() 166 cmd.strict = 1 167 inputs = RawInputs('1', 'tarek', 'y') 168 register_module.raw_input = inputs.__call__ 169 try: 170 cmd.run() 171 finally: 172 del register_module.raw_input 173 174 cmd = self._get_cmd() 175 cmd.ensure_finalized() 176 inputs = RawInputs('1', 'tarek', 'y') 177 register_module.raw_input = inputs.__call__ 178 try: 179 cmd.run() 180 finally: 181 del register_module.raw_input 182 183 def test_check_metadata_deprecated(self): 184 cmd = self._get_cmd() 185 with check_warnings() as w: 186 warnings.simplefilter('always') 187 cmd.check_metadata() 188 self.assertEqual(len(w.warnings), 1) 189 190 191 def test_suite(): 192 return unittest.makeSuite(RegisterTestCase) 193 194 195 if __name__ == '__main__': 196 unittest.main(defaultTest='test_suite')