Kaydet (Commit) fb24eead authored tarafından Xavier de Gaye's avatar Xavier de Gaye

Issue #26856: Fix the tests assuming that the pwd module has getpwall() and

assuming some invariants about uids that are not valid for Android.
üst 3432f2f4
...@@ -2080,6 +2080,8 @@ class PosixPathTest(_BasePathTest, unittest.TestCase): ...@@ -2080,6 +2080,8 @@ class PosixPathTest(_BasePathTest, unittest.TestCase):
self.assertEqual(given, expect) self.assertEqual(given, expect)
self.assertEqual(set(p.rglob("FILEd*")), set()) self.assertEqual(set(p.rglob("FILEd*")), set())
@unittest.skipUnless(hasattr(pwd, 'getpwall'),
'pwd module does not expose getpwall()')
def test_expanduser(self): def test_expanduser(self):
P = self.cls P = self.cls
support.import_module('pwd') support.import_module('pwd')
......
...@@ -4,10 +4,19 @@ from test import support ...@@ -4,10 +4,19 @@ from test import support
pwd = support.import_module('pwd') pwd = support.import_module('pwd')
def _getpwall():
# Android does not have getpwall.
if hasattr(pwd, 'getpwall'):
return pwd.getpwall()
elif hasattr(pwd, 'getpwuid'):
return [pwd.getpwuid(0)]
else:
return []
class PwdTest(unittest.TestCase): class PwdTest(unittest.TestCase):
def test_values(self): def test_values(self):
entries = pwd.getpwall() entries = _getpwall()
for e in entries: for e in entries:
self.assertEqual(len(e), 7) self.assertEqual(len(e), 7)
...@@ -33,7 +42,7 @@ class PwdTest(unittest.TestCase): ...@@ -33,7 +42,7 @@ class PwdTest(unittest.TestCase):
# and check afterwards (done in test_values_extended) # and check afterwards (done in test_values_extended)
def test_values_extended(self): def test_values_extended(self):
entries = pwd.getpwall() entries = _getpwall()
entriesbyname = {} entriesbyname = {}
entriesbyuid = {} entriesbyuid = {}
...@@ -57,12 +66,13 @@ class PwdTest(unittest.TestCase): ...@@ -57,12 +66,13 @@ class PwdTest(unittest.TestCase):
self.assertRaises(TypeError, pwd.getpwuid, 3.14) self.assertRaises(TypeError, pwd.getpwuid, 3.14)
self.assertRaises(TypeError, pwd.getpwnam) self.assertRaises(TypeError, pwd.getpwnam)
self.assertRaises(TypeError, pwd.getpwnam, 42) self.assertRaises(TypeError, pwd.getpwnam, 42)
self.assertRaises(TypeError, pwd.getpwall, 42) if hasattr(pwd, 'getpwall'):
self.assertRaises(TypeError, pwd.getpwall, 42)
# try to get some errors # try to get some errors
bynames = {} bynames = {}
byuids = {} byuids = {}
for (n, p, u, g, gecos, d, s) in pwd.getpwall(): for (n, p, u, g, gecos, d, s) in _getpwall():
bynames[n] = u bynames[n] = u
byuids[u] = n byuids[u] = n
...@@ -96,13 +106,17 @@ class PwdTest(unittest.TestCase): ...@@ -96,13 +106,17 @@ class PwdTest(unittest.TestCase):
# loop, say), pwd.getpwuid() might still be able to find data for that # loop, say), pwd.getpwuid() might still be able to find data for that
# uid. Using sys.maxint may provoke the same problems, but hopefully # uid. Using sys.maxint may provoke the same problems, but hopefully
# it will be a more repeatable failure. # it will be a more repeatable failure.
# Android accepts a very large span of uids including sys.maxsize and
# -1; it raises KeyError with 1 or 2 for example.
fakeuid = sys.maxsize fakeuid = sys.maxsize
self.assertNotIn(fakeuid, byuids) self.assertNotIn(fakeuid, byuids)
self.assertRaises(KeyError, pwd.getpwuid, fakeuid) if not support.is_android:
self.assertRaises(KeyError, pwd.getpwuid, fakeuid)
# -1 shouldn't be a valid uid because it has a special meaning in many # -1 shouldn't be a valid uid because it has a special meaning in many
# uid-related functions # uid-related functions
self.assertRaises(KeyError, pwd.getpwuid, -1) if not support.is_android:
self.assertRaises(KeyError, pwd.getpwuid, -1)
# should be out of uid_t range # should be out of uid_t range
self.assertRaises(KeyError, pwd.getpwuid, 2**128) self.assertRaises(KeyError, pwd.getpwuid, 2**128)
self.assertRaises(KeyError, pwd.getpwuid, -2**128) self.assertRaises(KeyError, pwd.getpwuid, -2**128)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment