From 1f94efc6265c77e9b45058a88eb86f8d49c2c7c7 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 25 May 2014 16:21:32 +0300 Subject: [PATCH] Issue #19925: Added tests for the spwd module. Original patch by Vajrasky Kok. --- Lib/test/test_spwd.py | 62 +++++++++++++++++++++++++++++++++++++++++++ Misc/NEWS | 2 ++ 2 files changed, 64 insertions(+) create mode 100644 Lib/test/test_spwd.py diff --git a/Lib/test/test_spwd.py b/Lib/test/test_spwd.py new file mode 100644 index 0000000000..b637da2de8 --- /dev/null +++ b/Lib/test/test_spwd.py @@ -0,0 +1,62 @@ +import os +import unittest +from test import test_support + +spwd = test_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_nam + entry = spwd.getspnam(random_name) + self.assertIsInstance(entry, spwd.struct_spwd) + self.assertEqual(entry.sp_nam, random_name) + self.assertEqual(entry.sp_nam, entry[0]) + self.assertIsInstance(entry.sp_pwd, str) + self.assertEqual(entry.sp_pwd, entry[1]) + 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) + if test_support.have_unicode: + try: + unicode_name = unicode(random_name) + except UnicodeDecodeError: + pass + else: + self.assertEqual(spwd.getspnam(unicode_name), entry) + + +def test_main(): + test_support.run_unittest(TestSpwdRoot) + +if __name__ == "__main__": + test_main() diff --git a/Misc/NEWS b/Misc/NEWS index aedc1d7a6f..d46d1d3063 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -21,6 +21,8 @@ Library Tests ----- +- Issue #19925: Added tests for the spwd module. Original patch by Vajrasky Kok. + - Issue #21522: Added Tkinter tests for Listbox.itemconfigure(), PanedWindow.paneconfigure(), and Menu.entryconfigure(). -- 2.50.1