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 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