44
55pwd = 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+
716class 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