14710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm"""Tests for distutils.pypirc.pypirc."""
24710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport sys
34710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport os
44710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport unittest
54710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport tempfile
64710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport shutil
74710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
84710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom distutils.core import PyPIRCCommand
94710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom distutils.core import Distribution
104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom distutils.log import set_threshold
114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom distutils.log import WARN
124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom distutils.tests import support
144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom test.test_support import run_unittest
154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmPYPIRC = """\
174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm[distutils]
184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmindex-servers =
204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    server1
214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    server2
224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm[server1]
244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmusername:me
254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmpassword:secret
264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm[server2]
284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmusername:meagain
294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmpassword: secret
304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmrealm:acme
314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmrepository:http://another.pypi/
324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm"""
334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmPYPIRC_OLD = """\
354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm[server-login]
364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmusername:tarek
374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmpassword:secret
384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm"""
394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmWANTED = """\
414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm[distutils]
424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmindex-servers =
434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    pypi
444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm[pypi]
464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmusername:tarek
474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmpassword:xxx
484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm"""
494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass PyPIRCCommandTestCase(support.TempdirManager,
524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                            support.LoggingSilencer,
534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                            support.EnvironGuard,
544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                            unittest.TestCase):
554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def setUp(self):
574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        """Patches the environment."""
584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        super(PyPIRCCommandTestCase, self).setUp()
594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.tmp_dir = self.mkdtemp()
604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        os.environ['HOME'] = self.tmp_dir
614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.rc = os.path.join(self.tmp_dir, '.pypirc')
624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.dist = Distribution()
634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        class command(PyPIRCCommand):
654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            def __init__(self, dist):
664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                PyPIRCCommand.__init__(self, dist)
674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            def initialize_options(self):
684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                pass
694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            finalize_options = initialize_options
704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self._cmd = command
724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.old_threshold = set_threshold(WARN)
734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def tearDown(self):
754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        """Removes the patch."""
764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        set_threshold(self.old_threshold)
774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        super(PyPIRCCommandTestCase, self).tearDown()
784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def test_server_registration(self):
804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # This test makes sure PyPIRCCommand knows how to:
814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # 1. handle several sections in .pypirc
824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # 2. handle the old format
834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # new format
854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.write_file(self.rc, PYPIRC)
864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        cmd = self._cmd(self.dist)
874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        config = cmd._read_pypirc()
884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        config = config.items()
904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        config.sort()
914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        waited = [('password', 'secret'), ('realm', 'pypi'),
924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                  ('repository', 'http://pypi.python.org/pypi'),
934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                  ('server', 'server1'), ('username', 'me')]
944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(config, waited)
954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # old format
974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.write_file(self.rc, PYPIRC_OLD)
984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        config = cmd._read_pypirc()
994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        config = config.items()
1004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        config.sort()
1014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        waited = [('password', 'secret'), ('realm', 'pypi'),
1024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                  ('repository', 'http://pypi.python.org/pypi'),
1034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                  ('server', 'server-login'), ('username', 'tarek')]
1044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(config, waited)
1054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
1064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def test_server_empty_registration(self):
1074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        cmd = self._cmd(self.dist)
1084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        rc = cmd._get_rc_file()
1094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertTrue(not os.path.exists(rc))
1104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        cmd._store_pypirc('tarek', 'xxx')
1114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertTrue(os.path.exists(rc))
1124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        f = open(rc)
1134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        try:
1144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            content = f.read()
1154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            self.assertEqual(content, WANTED)
1164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        finally:
1174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            f.close()
1184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
1194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef test_suite():
1204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    return unittest.makeSuite(PyPIRCCommandTestCase)
1214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
1224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmif __name__ == "__main__":
1234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    run_unittest(test_suite())
124