예제 #1
0
    def test_circular_dependencies(self):
        binary = 'bin/foo'
        binary_deps = ['libbar.so', 'libc.so']
        lib_dir = 'LIB'

        def get_deps(lib_path):
            _DEPS_MAP = {
                'LIB/ld.so.1': [],
                'LIB/libbar.so': ['libzoo.so'],
                'LIB/libzoo.so': ['libbar.so', 'libc.so'],
            }
            return _DEPS_MAP.get(lib_path, None)

        visited_libs = set()
        error = dm.verify_elf_dependencies(binary, lib_dir, binary_deps,
                                           get_deps, visited_libs)
        self.assertFalse(error)
        self.assertSetEqual(visited_libs,
                            {'LIB/libbar.so', 'LIB/libzoo.so', 'LIB/ld.so.1'})
예제 #2
0
    def test_missing_dependencies(self):
        binary = 'bin/foo'
        binary_deps = ['libbar.so', 'libc.so']
        lib_dir = 'LIB'

        def get_deps(lib_path):
            _DEPS_MAP = {
                'LIB/ld.so.1': [],
                'LIB/libbar.so': ['libzoo.so'],
                'LIB/libzoo.so': ['libmissing.so', 'libc.so'],
            }
            return _DEPS_MAP.get(lib_path, None)

        visited_libs = set()
        error = dm.verify_elf_dependencies(binary, lib_dir, binary_deps,
                                           get_deps, visited_libs)

        expected_error = [
            '%s missing dependency %s/libmissing.so' % (binary, lib_dir)
        ]
        self.assertListEqual(error, expected_error)
        self.assertSetEqual(visited_libs,
                            {'LIB/libbar.so', 'LIB/libzoo.so', 'LIB/ld.so.1'})