Clarify portability and main program.
[python/dscho.git] / Lib / test / test_pwd.py
blob79bf866994c11ad4078e972232cd7e9003294482
1 from test_support import verbose
2 import pwd
3 import string
5 print 'pwd.getpwall()'
6 entries = pwd.getpwall()
8 for e in entries:
9 name = e[0]
10 uid = e[2]
11 if verbose:
12 print name, uid
13 print 'pwd.getpwuid()'
14 dbuid = pwd.getpwuid(uid)
15 if dbuid[0] <> name:
16 print 'Mismatch in pwd.getpwuid()'
17 print 'pwd.getpwnam()'
18 dbname = pwd.getpwnam(name)
19 if dbname[2] <> uid:
20 print 'Mismatch in pwd.getpwnam()'
21 else:
22 print 'name matches uid'
23 break
25 # try to get some errors
26 bynames = {}
27 byuids = {}
28 for n, p, u, g, gecos, d, s in entries:
29 bynames[n] = u
30 byuids[u] = n
32 allnames = bynames.keys()
33 namei = 0
34 fakename = allnames[namei]
35 while bynames.has_key(fakename):
36 chars = map(None, fakename)
37 for i in range(len(chars)):
38 if chars[i] == 'z':
39 chars[i] = 'A'
40 break
41 elif chars[i] == 'Z':
42 continue
43 else:
44 chars[i] = chr(ord(chars[i]) + 1)
45 break
46 else:
47 namei = namei + 1
48 try:
49 fakename = allnames[namei]
50 except IndexError:
51 # should never happen... if so, just forget it
52 break
53 fakename = string.join(map(None, chars), '')
55 try:
56 pwd.getpwnam(fakename)
57 except KeyError:
58 print 'caught expected exception'
59 else:
60 print 'fakename', fakename, 'did not except pwd.getpwnam()'
62 # Choose a non-existant uid.
63 fakeuid = 4127
64 while byuids.has_key(fakeuid):
65 fakeuid = (fakeuid * 3) % 0x10000
67 try:
68 pwd.getpwuid(fakeuid)
69 except KeyError:
70 print 'caught expected exception'
71 else:
72 print 'fakeuid', fakeuid, 'did not except pwd.getpwuid()'