From be3497792545aaa825002e5c4ccf174456945978 Mon Sep 17 00:00:00 2001 From: pxin Date: Tue, 1 Dec 2020 15:48:18 +0800 Subject: [PATCH 1/4] run test_security(), test_file_not_found_in_home() and test_home_not_set() in temporary directory --- Lib/test/test_netrc.py | 102 ++++++++++++++++++++++------------------- 1 file changed, 54 insertions(+), 48 deletions(-) diff --git a/Lib/test/test_netrc.py b/Lib/test/test_netrc.py index 2bd46aa745ff23..8e1c408b46023d 100644 --- a/Lib/test/test_netrc.py +++ b/Lib/test/test_netrc.py @@ -109,62 +109,68 @@ def test_comment_at_end_of_machine_line_pass_has_hash(self): 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. - d = os_helper.TESTFN - os.mkdir(d) - self.addCleanup(os_helper.rmtree, d) - fn = os.path.join(d, '.netrc') - with open(fn, 'wt') as f: - f.write("""\ - machine foo.domain.com login bar password pass - default login foo password pass - """) - with os_helper.EnvironmentVarGuard() as environ: - environ.set('HOME', d) - os.chmod(fn, 0o600) - nrc = netrc.netrc() - self.assertEqual(nrc.hosts['foo.domain.com'], - ('bar', None, 'pass')) - os.chmod(fn, 0o622) - self.assertRaises(netrc.NetrcParseError, netrc.netrc) + with tempfile.TemporaryDirectory() as tmpdir: + with os_helper.change_cwd(tmpdir): + d = os_helper.TESTFN + os.mkdir(d) + self.addCleanup(os_helper.rmtree, d) + fn = os.path.join(d, '.netrc') + with open(fn, 'wt') as f: + f.write("""\ + machine foo.domain.com login bar password pass + default login foo password pass + """) + with os_helper.EnvironmentVarGuard() as environ: + environ.set('HOME', d) + os.chmod(fn, 0o600) + nrc = netrc.netrc() + self.assertEqual(nrc.hosts['foo.domain.com'], + ('bar', None, 'pass')) + os.chmod(fn, 0o622) + self.assertRaises(netrc.NetrcParseError, netrc.netrc) def test_file_not_found_in_home(self): - d = os_helper.TESTFN - os.mkdir(d) - self.addCleanup(os_helper.rmtree, d) - with os_helper.EnvironmentVarGuard() as environ: - environ.set('HOME', d) - self.assertRaises(FileNotFoundError, netrc.netrc) + with tempfile.TemporaryDirectory() as tmpdir: + with os_helper.change_cwd(tmpdir): + d = os_helper.TESTFN + os.mkdir(d) + self.addCleanup(os_helper.rmtree, d) + with os_helper.EnvironmentVarGuard() as environ: + environ.set('HOME', d) + self.assertRaises(FileNotFoundError, netrc.netrc) def test_file_not_found_explicit(self): self.assertRaises(FileNotFoundError, netrc.netrc, file='unlikely_netrc') def test_home_not_set(self): - fake_home = os_helper.TESTFN - os.mkdir(fake_home) - self.addCleanup(os_helper.rmtree, fake_home) - fake_netrc_path = os.path.join(fake_home, '.netrc') - with open(fake_netrc_path, 'w') as f: - f.write('machine foo.domain.com login bar password pass') - os.chmod(fake_netrc_path, 0o600) - - orig_expanduser = os.path.expanduser - called = [] - - def fake_expanduser(s): - called.append(s) - with os_helper.EnvironmentVarGuard() as environ: - environ.set('HOME', fake_home) - environ.set('USERPROFILE', fake_home) - result = orig_expanduser(s) - return result - - with support.swap_attr(os.path, 'expanduser', fake_expanduser): - nrc = netrc.netrc() - login, account, password = nrc.authenticators('foo.domain.com') - self.assertEqual(login, 'bar') - - self.assertTrue(called) + with tempfile.TemporaryDirectory() as tmpdir: + with os_helper.change_cwd(tmpdir): + fake_home = os_helper.TESTFN + os.mkdir(fake_home) + self.addCleanup(os_helper.rmtree, fake_home) + fake_netrc_path = os.path.join(fake_home, '.netrc') + with open(fake_netrc_path, 'w') as f: + f.write('machine foo.domain.com login bar password pass') + os.chmod(fake_netrc_path, 0o600) + + orig_expanduser = os.path.expanduser + called = [] + + def fake_expanduser(s): + called.append(s) + with os_helper.EnvironmentVarGuard() as environ: + environ.set('HOME', fake_home) + environ.set('USERPROFILE', fake_home) + result = orig_expanduser(s) + return result + + with support.swap_attr(os.path, 'expanduser', fake_expanduser): + nrc = netrc.netrc() + login, account, password = nrc.authenticators('foo.domain.com') + self.assertEqual(login, 'bar') + + self.assertTrue(called) if __name__ == "__main__": From fa9db85d7c03f11f5c17cecc312bc98b558f976a Mon Sep 17 00:00:00 2001 From: pxin Date: Tue, 1 Dec 2020 16:01:42 +0800 Subject: [PATCH 2/4] add news --- .../next/Tests/2020-12-01-15-51-19.bpo-31904.iwetj4.rst | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 Misc/NEWS.d/next/Tests/2020-12-01-15-51-19.bpo-31904.iwetj4.rst diff --git a/Misc/NEWS.d/next/Tests/2020-12-01-15-51-19.bpo-31904.iwetj4.rst b/Misc/NEWS.d/next/Tests/2020-12-01-15-51-19.bpo-31904.iwetj4.rst new file mode 100644 index 00000000000000..4c4002035899e1 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2020-12-01-15-51-19.bpo-31904.iwetj4.rst @@ -0,0 +1,5 @@ +Create fake home directory in temporary directory in test_security(), +test_file_not_found_in_home() and test_home_not_set() of test_netrc.py. +Previously fake home was created under the current directory. However, +if they are not run up by reression test, the current directory could +be not under /tmp, it probably has permission problem. From ba58d2307da61aa3c4418e11c83b60ea19cd18ec Mon Sep 17 00:00:00 2001 From: pxin Date: Tue, 1 Dec 2020 17:16:47 +0800 Subject: [PATCH 3/4] use temporary directory directly as fake home --- Lib/test/test_netrc.py | 96 ++++++++++++++++++------------------------ 1 file changed, 42 insertions(+), 54 deletions(-) diff --git a/Lib/test/test_netrc.py b/Lib/test/test_netrc.py index 8e1c408b46023d..90ef5cd363b3fb 100644 --- a/Lib/test/test_netrc.py +++ b/Lib/test/test_netrc.py @@ -109,68 +109,56 @@ def test_comment_at_end_of_machine_line_pass_has_hash(self): 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. - with tempfile.TemporaryDirectory() as tmpdir: - with os_helper.change_cwd(tmpdir): - d = os_helper.TESTFN - os.mkdir(d) - self.addCleanup(os_helper.rmtree, d) - fn = os.path.join(d, '.netrc') - with open(fn, 'wt') as f: - f.write("""\ - machine foo.domain.com login bar password pass - default login foo password pass - """) - with os_helper.EnvironmentVarGuard() as environ: - environ.set('HOME', d) - os.chmod(fn, 0o600) - nrc = netrc.netrc() - self.assertEqual(nrc.hosts['foo.domain.com'], - ('bar', None, 'pass')) - os.chmod(fn, 0o622) - self.assertRaises(netrc.NetrcParseError, netrc.netrc) + with os_helper.temp_cwd(None) as d: + fn = os.path.join(d, '.netrc') + with open(fn, 'wt') as f: + f.write("""\ + machine foo.domain.com login bar password pass + default login foo password pass + """) + with os_helper.EnvironmentVarGuard() as environ: + environ.set('HOME', d) + os.chmod(fn, 0o600) + nrc = netrc.netrc() + self.assertEqual(nrc.hosts['foo.domain.com'], + ('bar', None, 'pass')) + os.chmod(fn, 0o622) + self.assertRaises(netrc.NetrcParseError, netrc.netrc) def test_file_not_found_in_home(self): - with tempfile.TemporaryDirectory() as tmpdir: - with os_helper.change_cwd(tmpdir): - d = os_helper.TESTFN - os.mkdir(d) - self.addCleanup(os_helper.rmtree, d) - with os_helper.EnvironmentVarGuard() as environ: - environ.set('HOME', d) - self.assertRaises(FileNotFoundError, netrc.netrc) + with os_helper.temp_cwd(None) as d: + with os_helper.EnvironmentVarGuard() as environ: + environ.set('HOME', d) + self.assertRaises(FileNotFoundError, netrc.netrc) def test_file_not_found_explicit(self): self.assertRaises(FileNotFoundError, netrc.netrc, file='unlikely_netrc') def test_home_not_set(self): - with tempfile.TemporaryDirectory() as tmpdir: - with os_helper.change_cwd(tmpdir): - fake_home = os_helper.TESTFN - os.mkdir(fake_home) - self.addCleanup(os_helper.rmtree, fake_home) - fake_netrc_path = os.path.join(fake_home, '.netrc') - with open(fake_netrc_path, 'w') as f: - f.write('machine foo.domain.com login bar password pass') - os.chmod(fake_netrc_path, 0o600) - - orig_expanduser = os.path.expanduser - called = [] - - def fake_expanduser(s): - called.append(s) - with os_helper.EnvironmentVarGuard() as environ: - environ.set('HOME', fake_home) - environ.set('USERPROFILE', fake_home) - result = orig_expanduser(s) - return result - - with support.swap_attr(os.path, 'expanduser', fake_expanduser): - nrc = netrc.netrc() - login, account, password = nrc.authenticators('foo.domain.com') - self.assertEqual(login, 'bar') - - self.assertTrue(called) + with os_helper.temp_cwd(None) as fake_home: + fake_netrc_path = os.path.join(fake_home, '.netrc') + with open(fake_netrc_path, 'w') as f: + f.write('machine foo.domain.com login bar password pass') + os.chmod(fake_netrc_path, 0o600) + + orig_expanduser = os.path.expanduser + called = [] + + def fake_expanduser(s): + called.append(s) + with os_helper.EnvironmentVarGuard() as environ: + environ.set('HOME', fake_home) + environ.set('USERPROFILE', fake_home) + result = orig_expanduser(s) + return result + + with support.swap_attr(os.path, 'expanduser', fake_expanduser): + nrc = netrc.netrc() + login, account, password = nrc.authenticators('foo.domain.com') + self.assertEqual(login, 'bar') + + self.assertTrue(called) if __name__ == "__main__": From df74d792c56f5780c0b75618037109ecde9cd17e Mon Sep 17 00:00:00 2001 From: pxin Date: Tue, 1 Dec 2020 17:27:14 +0800 Subject: [PATCH 4/4] change news --- .../next/Tests/2020-12-01-15-51-19.bpo-31904.iwetj4.rst | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Misc/NEWS.d/next/Tests/2020-12-01-15-51-19.bpo-31904.iwetj4.rst b/Misc/NEWS.d/next/Tests/2020-12-01-15-51-19.bpo-31904.iwetj4.rst index 4c4002035899e1..49e9892e9ed7c0 100644 --- a/Misc/NEWS.d/next/Tests/2020-12-01-15-51-19.bpo-31904.iwetj4.rst +++ b/Misc/NEWS.d/next/Tests/2020-12-01-15-51-19.bpo-31904.iwetj4.rst @@ -1,5 +1 @@ -Create fake home directory in temporary directory in test_security(), -test_file_not_found_in_home() and test_home_not_set() of test_netrc.py. -Previously fake home was created under the current directory. However, -if they are not run up by reression test, the current directory could -be not under /tmp, it probably has permission problem. +Fix test_netrc on VxWorks: create temporary directories using temp_cwd().