summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2014-05-25 13:22:20 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2014-05-25 13:22:20 (GMT)
commit89b49a9e30ce941fdbf3832bebaf5cfbff930675 (patch)
tree56876c0e8b8c5eb7ffffa10133e008b22cdd5a95 /Lib
parenta924fc7abc2d8788a4a9fa2cbef2caa5c5992ebd (diff)
parent7df417d50a6c849987d745453fcf6d0786d41ca4 (diff)
downloadcpython-89b49a9e30ce941fdbf3832bebaf5cfbff930675.zip
cpython-89b49a9e30ce941fdbf3832bebaf5cfbff930675.tar.gz
cpython-89b49a9e30ce941fdbf3832bebaf5cfbff930675.tar.bz2
Issue #19925: Added tests for the spwd module. Original patch by Vajrasky Kok.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_spwd.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/Lib/test/test_spwd.py b/Lib/test/test_spwd.py
new file mode 100644
index 0000000..bea7ab1
--- /dev/null
+++ b/Lib/test/test_spwd.py
@@ -0,0 +1,60 @@
+import os
+import unittest
+from test import support
+
+spwd = support.import_module('spwd')
+
+
+@unittest.skipUnless(hasattr(os, 'geteuid') and os.geteuid() == 0,
+ 'root privileges required')
+class TestSpwdRoot(unittest.TestCase):
+
+ def test_getspall(self):
+ entries = spwd.getspall()
+ self.assertIsInstance(entries, list)
+ for entry in entries:
+ self.assertIsInstance(entry, spwd.struct_spwd)
+
+ def test_getspnam(self):
+ entries = spwd.getspall()
+ if not entries:
+ self.skipTest('empty shadow password database')
+ random_name = entries[0].sp_namp
+ entry = spwd.getspnam(random_name)
+ self.assertIsInstance(entry, spwd.struct_spwd)
+ self.assertEqual(entry.sp_namp, random_name)
+ self.assertEqual(entry.sp_namp, entry[0])
+ self.assertEqual(entry.sp_namp, entry.sp_nam)
+ self.assertIsInstance(entry.sp_pwdp, str)
+ self.assertEqual(entry.sp_pwdp, entry[1])
+ self.assertEqual(entry.sp_pwdp, entry.sp_pwd)
+ self.assertIsInstance(entry.sp_lstchg, int)
+ self.assertEqual(entry.sp_lstchg, entry[2])
+ self.assertIsInstance(entry.sp_min, int)
+ self.assertEqual(entry.sp_min, entry[3])
+ self.assertIsInstance(entry.sp_max, int)
+ self.assertEqual(entry.sp_max, entry[4])
+ self.assertIsInstance(entry.sp_warn, int)
+ self.assertEqual(entry.sp_warn, entry[5])
+ self.assertIsInstance(entry.sp_inact, int)
+ self.assertEqual(entry.sp_inact, entry[6])
+ self.assertIsInstance(entry.sp_expire, int)
+ self.assertEqual(entry.sp_expire, entry[7])
+ self.assertIsInstance(entry.sp_flag, int)
+ self.assertEqual(entry.sp_flag, entry[8])
+ with self.assertRaises(KeyError) as cx:
+ spwd.getspnam('invalid user name')
+ self.assertEqual(str(cx.exception), "'getspnam(): name not found'")
+ self.assertRaises(TypeError, spwd.getspnam)
+ self.assertRaises(TypeError, spwd.getspnam, 0)
+ self.assertRaises(TypeError, spwd.getspnam, random_name, 0)
+ try:
+ bytes_name = os.fsencode(random_name)
+ except UnicodeEncodeError:
+ pass
+ else:
+ self.assertRaises(TypeError, spwd.getspnam, bytes_name)
+
+
+if __name__ == "__main__":
+ unittest.main()