import netrc, os, unittest, sys from test import test_support TEST_NETRC = """ machine foo login log1 password pass1 account acct1 macdef macro1 line1 line2 macdef macro2 line3 line4 default login log2 password pass2 """ temp_filename = test_support.TESTFN class NetrcTestCase(unittest.TestCase): def setUp (self): mode = 'w' if sys.platform not in ['cygwin']: mode += 't' fp = open(temp_filename, mode) fp.write(TEST_NETRC) fp.close() self.netrc = netrc.netrc(temp_filename) def tearDown (self): del self.netrc test_support.unlink(temp_filename) def test_case_1(self): self.assert_(self.netrc.macros == {'macro1':['line1\n', 'line2\n'], 'macro2':['line3\n', 'line4\n']} ) self.assert_(self.netrc.hosts['foo'] == ('log1', 'acct1', 'pass1')) self.assert_(self.netrc.hosts['default'] == ('log2', None, 'pass2')) if os.name == 'posix': def test_security(self): # This test is incomplete since we are normally not run as root and # therefore can't test the file ownership being wrong. os.unlink(temp_filename) d = test_support.TESTFN try: os.mkdir(d) fn = os.path.join(d, '.netrc') with open(fn, 'wt') as f: f.write(TEST_NETRC) with test_support.EnvironmentVarGuard() as environ: environ.set('HOME', d) os.chmod(fn, 0600) self.netrc = netrc.netrc() self.test_case_1() os.chmod(fn, 0622) self.assertRaises(netrc.NetrcParseError, netrc.netrc) finally: test_support.rmtree(d) def test_main(): test_support.run_unittest(NetrcTestCase) if __name__ == "__main__": test_main()