Skip to content

Commit fb24eea

Browse files
author
Xavier de Gaye
committed
Issue python#26856: Fix the tests assuming that the pwd module has getpwall() and
assuming some invariants about uids that are not valid for Android.
1 parent 3432f2f commit fb24eea

2 files changed

Lines changed: 22 additions & 6 deletions

File tree

Lib/test/test_pathlib.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2080,6 +2080,8 @@ def test_rglob(self):
20802080
self.assertEqual(given, expect)
20812081
self.assertEqual(set(p.rglob("FILEd*")), set())
20822082

2083+
@unittest.skipUnless(hasattr(pwd, 'getpwall'),
2084+
'pwd module does not expose getpwall()')
20832085
def test_expanduser(self):
20842086
P = self.cls
20852087
support.import_module('pwd')

Lib/test/test_pwd.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,19 @@
44

55
pwd = support.import_module('pwd')
66

7+
def _getpwall():
8+
# Android does not have getpwall.
9+
if hasattr(pwd, 'getpwall'):
10+
return pwd.getpwall()
11+
elif hasattr(pwd, 'getpwuid'):
12+
return [pwd.getpwuid(0)]
13+
else:
14+
return []
15+
716
class PwdTest(unittest.TestCase):
817

918
def test_values(self):
10-
entries = pwd.getpwall()
19+
entries = _getpwall()
1120

1221
for e in entries:
1322
self.assertEqual(len(e), 7)
@@ -33,7 +42,7 @@ def test_values(self):
3342
# and check afterwards (done in test_values_extended)
3443

3544
def test_values_extended(self):
36-
entries = pwd.getpwall()
45+
entries = _getpwall()
3746
entriesbyname = {}
3847
entriesbyuid = {}
3948

@@ -57,12 +66,13 @@ def test_errors(self):
5766
self.assertRaises(TypeError, pwd.getpwuid, 3.14)
5867
self.assertRaises(TypeError, pwd.getpwnam)
5968
self.assertRaises(TypeError, pwd.getpwnam, 42)
60-
self.assertRaises(TypeError, pwd.getpwall, 42)
69+
if hasattr(pwd, 'getpwall'):
70+
self.assertRaises(TypeError, pwd.getpwall, 42)
6171

6272
# try to get some errors
6373
bynames = {}
6474
byuids = {}
65-
for (n, p, u, g, gecos, d, s) in pwd.getpwall():
75+
for (n, p, u, g, gecos, d, s) in _getpwall():
6676
bynames[n] = u
6777
byuids[u] = n
6878

@@ -96,13 +106,17 @@ def test_errors(self):
96106
# loop, say), pwd.getpwuid() might still be able to find data for that
97107
# uid. Using sys.maxint may provoke the same problems, but hopefully
98108
# it will be a more repeatable failure.
109+
# Android accepts a very large span of uids including sys.maxsize and
110+
# -1; it raises KeyError with 1 or 2 for example.
99111
fakeuid = sys.maxsize
100112
self.assertNotIn(fakeuid, byuids)
101-
self.assertRaises(KeyError, pwd.getpwuid, fakeuid)
113+
if not support.is_android:
114+
self.assertRaises(KeyError, pwd.getpwuid, fakeuid)
102115

103116
# -1 shouldn't be a valid uid because it has a special meaning in many
104117
# uid-related functions
105-
self.assertRaises(KeyError, pwd.getpwuid, -1)
118+
if not support.is_android:
119+
self.assertRaises(KeyError, pwd.getpwuid, -1)
106120
# should be out of uid_t range
107121
self.assertRaises(KeyError, pwd.getpwuid, 2**128)
108122
self.assertRaises(KeyError, pwd.getpwuid, -2**128)

0 commit comments

Comments
 (0)