1 #!/usr/bin/env python3 2 3 from __future__ import print_function 4 5 import os 6 import sys 7 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) 8 9 import unittest 10 11 from vndk_definition_tool import ELFLinkData, PT_SYSTEM, PT_VENDOR 12 13 14 class ELFLinkDataTest(unittest.TestCase): 15 def setUp(self): 16 self.x = ELFLinkData(PT_SYSTEM, '/system/lib/libx.so', None, 0) 17 self.y = ELFLinkData(PT_SYSTEM, '/system/lib/liby.so', None, 0) 18 self.z = ELFLinkData(PT_SYSTEM, '/system/lib/libz.so', None, 0) 19 self.w = ELFLinkData(PT_SYSTEM, '/system/lib/libw.so', None, 0) 20 self.v = ELFLinkData(PT_VENDOR, '/vendor/lib/libv.so', None, 0) 21 22 self.x.add_needed_dep(self.y) 23 self.x.add_dlopen_dep(self.z) 24 25 self.z.add_needed_dep(self.w) 26 self.z.add_dlopen_dep(self.w) 27 28 def test_add_dep_and_accessors(self): 29 self.assertIn(self.y, self.x.deps_needed_all) 30 self.assertIn(self.x, self.y.users_needed_all) 31 self.assertNotIn(self.y, self.x.deps_dlopen_all) 32 self.assertNotIn(self.x, self.y.users_dlopen_all) 33 34 self.assertIn(self.z, self.x.deps_dlopen_all) 35 self.assertIn(self.x, self.z.users_dlopen_all) 36 self.assertNotIn(self.z, self.x.deps_needed_all) 37 self.assertNotIn(self.x, self.z.users_needed_all) 38 39 def test_remove_dep(self): 40 self.assertIn(self.y, self.x.deps_needed_all) 41 self.assertIn(self.x, self.y.users_needed_all) 42 43 with self.assertRaises(KeyError): 44 self.x.hide_dlopen_dep(self.y) 45 self.assertIn(self.y, self.x.deps_needed_all) 46 self.assertIn(self.x, self.y.users_needed_all) 47 48 self.x.hide_needed_dep(self.y) 49 self.assertIn(self.y, self.x.deps_needed_hidden) 50 self.assertIn(self.x, self.y.users_needed_hidden) 51 self.assertNotIn(self.y, self.x.deps_needed) 52 self.assertNotIn(self.x, self.y.users_needed) 53 54 def test_num_deps(self): 55 self.assertEqual(2, self.x.num_deps) 56 self.assertEqual(0, self.y.num_deps) 57 self.assertEqual(0, self.w.num_deps) 58 self.assertEqual(0, self.v.num_deps) 59 60 # NEEDED and DLOPEN are counted twice. 61 self.assertEqual(2, self.z.num_deps) 62 63 def test_num_users(self): 64 self.assertEqual(0, self.x.num_users) 65 self.assertEqual(1, self.y.num_users) 66 self.assertEqual(1, self.z.num_users) 67 self.assertEqual(0, self.v.num_users) 68 69 # NEEDED and DLOPEN are counted twice. 70 self.assertEqual(2, self.w.num_users) 71 72 def test_has_dep(self): 73 self.assertTrue(self.x.has_dep(self.y)) 74 self.assertTrue(self.x.has_dep(self.z)) 75 self.assertFalse(self.x.has_dep(self.x)) 76 self.assertFalse(self.x.has_dep(self.w)) 77 78 def test_has_user(self): 79 self.assertTrue(self.y.has_user(self.x)) 80 self.assertTrue(self.z.has_user(self.x)) 81 self.assertFalse(self.x.has_user(self.x)) 82 self.assertFalse(self.w.has_user(self.x)) 83 84 def test_is_system_lib(self): 85 self.assertTrue(self.x.is_system_lib()) 86 self.assertFalse(self.v.is_system_lib()) 87 88 def test_get_dep_linked_symbols(self): 89 self.x.linked_symbols['c'] = self.y 90 self.x.linked_symbols['b'] = self.y 91 self.x.linked_symbols['a'] = self.y 92 93 self.x.linked_symbols['w'] = self.z 94 self.x.linked_symbols['z'] = self.z 95 self.x.linked_symbols['y'] = self.z 96 self.x.linked_symbols['x'] = self.z 97 98 self.assertEqual(['a', 'b', 'c'], 99 self.x.get_dep_linked_symbols(self.y)) 100 101 self.assertEqual(['w', 'x', 'y', 'z'], 102 self.x.get_dep_linked_symbols(self.z)) 103 104 105 if __name__ == '__main__': 106 unittest.main() 107