def testGetLddMinusRlinesReloc(self):
     ip = inspective_package.InspectivePackage("/tmp/CSWfake")
     self.mox.StubOutWithMock(ip, 'GetBasedir')
     self.mox.StubOutWithMock(ip, 'ListBinaries')
     self.mox.StubOutWithMock(ip, 'GetFilesDir')
     self.mox.StubOutWithMock(os, 'chmod')
     self.mox.StubOutWithMock(os, 'uname')
     ip.GetBasedir().AndReturn('opt/csw')
     os.chmod('/tmp/CSWfake/reloc/bin/foo', 0755)
     ip.ListBinaries().AndReturn(['bin/foo'])
     ip.GetFilesDir().AndReturn('reloc')
     self.mox.StubOutWithMock(shell, 'ShellCommand')
     shell.ShellCommand(['ldd', '-Ur', '/tmp/CSWfake/reloc/bin/foo'],
                        timeout=10).AndReturn((0, "", ""))
     self.mox.StubOutWithMock(ip, '_ParseLddDashRline')
     self.mox.ReplayAll()
     self.assertEqual({'opt/csw/bin/foo': []}, ip.GetLddMinusRlines())
 def testListBinaries(self):
     self.mox.StubOutWithMock(hachoir_parser,
                              'createParser',
                              use_mock_anything=True)
     hachoir_parser_mock = self.mox.CreateMockAnything()
     hachoir_parser.createParser(
         u'/fake/path/CSWfoo/root/foo-file').AndReturn(hachoir_parser_mock)
     self.mox.StubOutWithMock(os, 'access')
     os.access(u'/fake/path/CSWfoo/root/foo-file', os.R_OK).AndReturn(True)
     machine_mock = self.mox.CreateMockAnything()
     machine_mock.value = 2
     hachoir_parser_mock.__getitem__('/header/machine').AndReturn(
         machine_mock)
     endian_mock = self.mox.CreateMockAnything()
     endian_mock.display = 'fake-endian'
     hachoir_parser_mock.__getitem__('/header/endian').AndReturn(
         endian_mock)
     magic_cookie_mock = self.mox.CreateMockAnything()
     self.mox.StubOutWithMock(magic, 'open')
     magic.open(0).AndReturn(magic_cookie_mock)
     magic_cookie_mock.load()
     if "MAGIC_MIME" in dir(magic):
         flag = magic.MAGIC_MIME
     elif "MIME" in dir(magic):
         flag = magic.MIME
     magic_cookie_mock.setflags(flag)
     magic_cookie_mock.file(u'/fake/path/CSWfoo/root/foo-file').AndReturn(
         "application/x-executable")
     self.mox.StubOutWithMock(os.path, 'isdir')
     self.mox.StubOutWithMock(os.path, 'exists')
     self.mox.StubOutWithMock(os, 'walk')
     # self.mox.StubOutWithMock(__builtins__, 'open')
     os.path.isdir("/fake/path/CSWfoo").AndReturn(True)
     os.path.isdir("/fake/path/CSWfoo").AndReturn(True)
     os.path.isdir("/fake/path/CSWfoo").AndReturn(True)
     os.path.exists("/fake/path/CSWfoo/reloc").AndReturn(False)
     os.path.exists("/fake/path/CSWfoo/reloc").AndReturn(False)
     os.walk("/fake/path/CSWfoo/root").AndReturn([
         ("/fake/path/CSWfoo/root", [], ["foo-file"]),
     ])
     self.mox.ReplayAll()
     ip = inspective_package.InspectivePackage("/fake/path/CSWfoo")
     ip.pkginfo_dict = {
         "BASEDIR": "",
     }
     self.assertEqual([u'foo-file'], ip.ListBinaries())
 def testGetLddMinusRlinesThrows(self):
     ip = inspective_package.InspectivePackage("/tmp/CSWfake")
     self.mox.StubOutWithMock(ip, 'GetBasedir')
     self.mox.StubOutWithMock(ip, 'ListBinaries')
     self.mox.StubOutWithMock(ip, 'GetFilesDir')
     self.mox.StubOutWithMock(os, 'chmod')
     self.mox.StubOutWithMock(os, 'uname')
     ip.GetBasedir().AndReturn('/')
     os.chmod('/tmp/CSWfake/root/opt/csw/bin/foo', 0755)
     os.uname().AndReturn('i86pc')
     ip.GetFilesDir().AndReturn('root')
     ip.ListBinaries().AndReturn(['opt/csw/bin/foo'])
     self.mox.StubOutWithMock(shell, 'ShellCommand')
     shell.ShellCommand(['ldd', '-Ur', '/tmp/CSWfake/root/opt/csw/bin/foo'],
                        timeout=10).AndReturn((1, "", "boo"))
     self.mox.StubOutWithMock(ip, '_ParseLddDashRline')
     self.mox.ReplayAll()
     self.assertRaises(package.SystemUtilityError, ip.GetLddMinusRlines)
    def testGetBinaryElfInfoReloc(self):
        fake_binary = 'lib/libssl.so.1.0.0'
        fake_package_path = '/fake/path/CSWfoo'

        ip = inspective_package.InspectivePackage(fake_package_path)
        self.mox.StubOutWithMock(ip, 'ListBinaries')
        self.mox.StubOutWithMock(ip, 'GetBasedir')
        self.mox.StubOutWithMock(ip, 'GetFilesDir')
        ip.ListBinaries().AndReturn([fake_binary])
        ip.GetBasedir().AndReturn('opt/csw')
        ip.GetFilesDir().AndReturn('reloc')

        self.mox.StubOutWithMock(shell, 'ShellCommand')
        args = [
            common_constants.ELFDUMP_BIN, '-svy',
            os.path.join(fake_package_path, "reloc", fake_binary)
        ]
        shell.ShellCommand(args).AndReturn((0, ELFDUMP_OUTPUT, ""))
        self.mox.ReplayAll()

        self.assertEqual(BINARY_ELFINFO, ip.GetBinaryElfInfo())
    def testGetBinaryDumpInfoReloc(self):
        fake_binary = 'bin/foo'
        fake_package_path = '/fake/path/CSWfoo'

        ip = inspective_package.InspectivePackage(fake_package_path)
        self.mox.StubOutWithMock(ip, 'ListBinaries')
        self.mox.StubOutWithMock(ip, 'GetBasedir')
        self.mox.StubOutWithMock(ip, 'GetFilesDir')
        ip.ListBinaries().AndReturn([fake_binary])
        ip.GetBasedir().AndReturn('opt/csw')
        ip.GetFilesDir().AndReturn('reloc')

        self.mox.StubOutWithMock(shell, 'ShellCommand')
        args = [
            common_constants.DUMP_BIN, '-Lv',
            os.path.join(fake_package_path, "reloc", fake_binary)
        ]
        shell.ShellCommand(args, mox.IgnoreArg()).AndReturn(
            (0, DUMP_OUTPUT, ""))
        self.mox.ReplayAll()

        self.assertEqual([BINARY_DUMP_INFO], ip.GetBinaryDumpInfo())
 def setUp(self):
     self.ip = inspective_package.InspectivePackage("/fake/path/CSWfoo")
    def testGetBinaryElfInfoWithIgnoredErrors(self):
        fake_binary = 'opt/csw/bin/foo'
        fake_package_path = '/fake/path/CSWfoo'
        fake_elfdump_output = '''
Version Needed Section:  .SUNW_version
     index  file                        version
       [2]  libc.so.1                 SUNW_1.1

Symbol Table Section:  .dynsym
     index    value      size      type bind oth ver shndx          name
       [1]  0x00000000 0x00000000  FUNC GLOB  D    2 UNDEF          fopen64

Syminfo Section:  .SUNW_syminfo
     index  flags            bound to                 symbol
       [1]  DBL          [1] libc.so.1                fopen64
'''
        fake_elfdump_errors = '''
/opt/csw/bin/foo: .dynsym: index[26]: bad symbol entry: : invalid shndx: 26
/opt/csw/bin/foo: .dynsym: bad symbol entry: : invalid shndx: 23
/opt/csw/bin/foo: .dynsym: index[108]: suspicious local symbol entry: _END_: lies within global symbol range (index >= 27)
/opt/csw/bin/foo: .dynsym: index[4]: bad symbol entry: toto: section[24] size: 0: symbol (address 0x36b7fc, size 0x4) lies outside of containing section
/opt/csw/bin/foo: .dynsym: bad symbol entry: Xt_app_con: section[28] size: 0: is smaller than symbol size: 4
'''
        fake_binary_elfinfo = {
            'opt/csw/bin/foo': {
                'symbol table': [
                    {
                        'shndx': 'UNDEF',
                        'soname': 'libc.so.1',
                        'bind': 'GLOB',
                        'symbol': 'fopen64',
                        'version': 'SUNW_1.1',
                        'flags': 'DBL',
                        'type': 'FUNC'
                    },
                ],
                'version needed': [
                    {
                        'version': 'SUNW_1.1',
                        'soname': 'libc.so.1'
                    },
                ],
                'version definition': [],
            }
        }
        ip = inspective_package.InspectivePackage(fake_package_path)
        self.mox.StubOutWithMock(ip, 'ListBinaries')
        self.mox.StubOutWithMock(ip, 'GetBasedir')
        self.mox.StubOutWithMock(ip, 'GetFilesDir')
        ip.ListBinaries().AndReturn([fake_binary])
        ip.GetBasedir().AndReturn('')
        ip.GetFilesDir().AndReturn('root')

        self.mox.StubOutWithMock(shell, 'ShellCommand')
        args = [
            common_constants.ELFDUMP_BIN, '-svy',
            os.path.join(fake_package_path, "root", fake_binary)
        ]
        shell.ShellCommand(args).AndReturn(
            (0, fake_elfdump_output, fake_elfdump_errors))
        self.mox.ReplayAll()

        self.assertEqual(fake_binary_elfinfo, ip.GetBinaryElfInfo())