[Python-checkins] cpython (merge 3.4 -> default): Issue #19925: Added tests for the spwd module. Original patch by Vajrasky Kok.

serhiy.storchaka python-checkins at python.org
Sun May 25 15:24:13 CEST 2014


http://hg.python.org/cpython/rev/4b187f5aa960
changeset:   90826:4b187f5aa960
parent:      90823:9724eb19f6d0
parent:      90825:9bdbe0b08dff
user:        Serhiy Storchaka <storchaka at gmail.com>
date:        Sun May 25 16:22:20 2014 +0300
summary:
  Issue #19925: Added tests for the spwd module. Original patch by Vajrasky Kok.

files:
  Lib/test/test_spwd.py |  60 +++++++++++++++++++++++++++++++
  Misc/NEWS             |   2 +
  2 files changed, 62 insertions(+), 0 deletions(-)


diff --git a/Lib/test/test_spwd.py b/Lib/test/test_spwd.py
new file mode 100644
--- /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')
+
+
+ at 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()
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -15,6 +15,8 @@
   time issue noticeable when compiling code with a large number of "and"
   and "or" operators.
 
+- Issue #19925: Added tests for the spwd module. Original patch by Vajrasky Kok.
+
 - Issue #21418: Fix a crash in the builtin function super() when called without
   argument and without current frame (ex: embedded Python).
 

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list