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 ELFResolver 12 13 class ELFResolverTest(unittest.TestCase): 14 def setUp(self): 15 lib_set = { 16 '/system/lib/liba.so': 'a', 17 '/system/lib/libb.so': 'b', 18 '/vendor/lib/liba.so': 'a2', 19 '/vendor/lib/libc.so': 'c', 20 '/vendor/lib/libd.so': 'd', 21 '/system/lib/hw/libe.so': 'e', 22 '/vendor/lib/hw/libf.so': 'f', 23 } 24 25 self.resolver = ELFResolver(lib_set, ['/system/lib', '/vendor/lib']) 26 27 def test_get_candidates(self): 28 r = self.resolver 29 30 self.assertEqual( 31 ['/system/lib/libx.so', '/vendor/lib/libx.so'], 32 list(r.get_candidates('libx.so'))) 33 34 self.assertEqual( 35 ['/C/libx.so', '/system/lib/libx.so', '/vendor/lib/libx.so'], 36 list(r.get_candidates('libx.so', ['/C']))) 37 38 self.assertEqual( 39 ['/C/libx.so', '/D/libx.so', '/system/lib/libx.so', 40 '/vendor/lib/libx.so'], 41 list(r.get_candidates('libx.so', ['/C', '/D']))) 42 43 self.assertEqual( 44 ['/E/libx.so', '/system/lib/libx.so', '/vendor/lib/libx.so'], 45 list(r.get_candidates('libx.so', None, ['/E']))) 46 47 self.assertEqual( 48 ['/E/libx.so', '/F/libx.so', '/system/lib/libx.so', 49 '/vendor/lib/libx.so'], 50 list(r.get_candidates('libx.so', None, ['/E', '/F']))) 51 52 self.assertEqual( 53 ['/C/libx.so', '/D/libx.so', '/E/libx.so', '/F/libx.so', 54 '/system/lib/libx.so', '/vendor/lib/libx.so'], 55 list(r.get_candidates('libx.so', ['/C', '/D'], ['/E', '/F']))) 56 57 def test_resolve(self): 58 r = self.resolver 59 self.assertEqual('a', r.resolve('liba.so')) 60 self.assertEqual('c', r.resolve('libc.so')) 61 62 self.assertEqual(None, r.resolve('libe.so')) 63 self.assertEqual('e', r.resolve('libe.so', dt_rpath=['/system/lib/hw'])) 64 self.assertEqual( 65 'e', r.resolve('libe.so', dt_runpath=['/system/lib/hw'])) 66 67 self.assertEqual('a2', r.resolve('liba.so', dt_rpath=['/vendor/lib'])) 68 self.assertEqual('a2', r.resolve('liba.so', dt_runpath=['/vendor/lib'])) 69 70 71 if __name__ == '__main__': 72 unittest.main() 73