Home | History | Annotate | Download | only in tests
      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