• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env python3
2
3from __future__ import print_function
4
5import os
6import sys
7sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
8
9import unittest
10
11from vndk_definition_tool import ELFResolver
12
13class 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
71if __name__ == '__main__':
72    unittest.main()
73