1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
import unittest
import kdumpfile
import sys
def get_attr_item(attr, key):
return attr[key]
def get_ostype_attr(attr):
return attr.addrxlat.ostype
def iter_search_subkey(attr_dir, name):
found = False
for key in attr_dir:
if key == name:
found = True
return found
class TestContext(unittest.TestCase):
err_msg = 'Custom error message'
err_msg2 = 'Another error'
def test_err(self):
ctx = kdumpfile.Context()
self.assertIsNone(ctx.get_err())
ctx.err(kdumpfile.OK, self.err_msg)
self.assertIsNone(ctx.get_err())
ctx.err(kdumpfile.ERR_NOTIMPL, self.err_msg)
self.assertEqual(ctx.get_err(), self.err_msg)
ctx.err(kdumpfile.ERR_NOTIMPL, self.err_msg2)
self.assertEqual(ctx.get_err(), '{}: {}'.format(self.err_msg2, self.err_msg))
ctx.clear_err()
self.assertIsNone(ctx.get_err())
def test_attr(self):
ctx = kdumpfile.Context()
attr = ctx.attr
self.assertIsNone(attr.get(kdumpfile.ATTR_OSTYPE))
self.assertRaises(KeyError, get_attr_item, attr, kdumpfile.ATTR_OSTYPE)
self.assertRaises(AttributeError, get_ostype_attr, attr)
# unset directories can be instantiated but not iterated
self.assertTrue('ostype' in attr.addrxlat)
self.assertRaises(kdumpfile.NoDataError, iter_search_subkey, attr.addrxlat, 'ostype')
# unknown OS type fails early and does not change the attribute value
self.assertRaises(NotImplementedError, attr.__setitem__, kdumpfile.ATTR_OSTYPE, 'unknown')
self.assertRaises(KeyError, get_attr_item, attr, kdumpfile.ATTR_OSTYPE)
attr[kdumpfile.ATTR_OSTYPE] = 'linux'
self.assertEqual(attr.get(kdumpfile.ATTR_OSTYPE), 'linux')
self.assertEqual(attr[kdumpfile.ATTR_OSTYPE], 'linux')
self.assertEqual(attr.addrxlat.ostype, 'linux')
self.assertTrue(iter_search_subkey(attr.addrxlat, 'ostype'))
del attr.addrxlat.ostype
self.assertIsNone(attr.get(kdumpfile.ATTR_OSTYPE))
self.assertRaises(KeyError, get_attr_item, attr, kdumpfile.ATTR_OSTYPE)
self.assertRaises(AttributeError, get_ostype_attr, attr)
# unset attributes are contained but skipped in iteration
self.assertFalse(iter_search_subkey(attr.addrxlat, 'ostype'))
attr.addrxlat.ostype = 'linux'
self.assertEqual(attr.get(kdumpfile.ATTR_OSTYPE), 'linux')
self.assertEqual(attr[kdumpfile.ATTR_OSTYPE], 'linux')
self.assertEqual(attr.addrxlat.ostype, 'linux')
if __name__ == '__main__':
unittest.main()
|