t_elf.py revision 430
edfd009103881de283e146609f691281aba150aeTimo Sirainen#!/usr/bin/python2.4
edfd009103881de283e146609f691281aba150aeTimo Sirainen#
edfd009103881de283e146609f691281aba150aeTimo Sirainen# CDDL HEADER START
edfd009103881de283e146609f691281aba150aeTimo Sirainen#
edfd009103881de283e146609f691281aba150aeTimo Sirainen# The contents of this file are subject to the terms of the
edfd009103881de283e146609f691281aba150aeTimo Sirainen# Common Development and Distribution License (the "License").
edfd009103881de283e146609f691281aba150aeTimo Sirainen# You may not use this file except in compliance with the License.
edfd009103881de283e146609f691281aba150aeTimo Sirainen#
edfd009103881de283e146609f691281aba150aeTimo Sirainen# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
edfd009103881de283e146609f691281aba150aeTimo Sirainen# or http://www.opensolaris.org/os/licensing.
edfd009103881de283e146609f691281aba150aeTimo Sirainen# See the License for the specific language governing permissions
edfd009103881de283e146609f691281aba150aeTimo Sirainen# and limitations under the License.
edfd009103881de283e146609f691281aba150aeTimo Sirainen#
edfd009103881de283e146609f691281aba150aeTimo Sirainen# When distributing Covered Code, include this CDDL HEADER in each
edfd009103881de283e146609f691281aba150aeTimo Sirainen# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
edfd009103881de283e146609f691281aba150aeTimo Sirainen# If applicable, add the following below this CDDL HEADER, with the
edfd009103881de283e146609f691281aba150aeTimo Sirainen# fields enclosed by brackets "[]" replaced with your own identifying
edfd009103881de283e146609f691281aba150aeTimo Sirainen# information: Portions Copyright [yyyy] [name of copyright owner]
edfd009103881de283e146609f691281aba150aeTimo Sirainen#
edfd009103881de283e146609f691281aba150aeTimo Sirainen# CDDL HEADER END
edfd009103881de283e146609f691281aba150aeTimo Sirainen#
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainen# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
edfd009103881de283e146609f691281aba150aeTimo Sirainen# Use is subject to license terms.
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainenimport pkg.elf as elf
edfd009103881de283e146609f691281aba150aeTimo Sirainenimport os
edfd009103881de283e146609f691281aba150aeTimo Sirainenimport sys
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainen# Set the path so that modules above can be found
edfd009103881de283e146609f691281aba150aeTimo Sirainenpath_to_parent = os.path.join(os.path.dirname(__file__), "..")
edfd009103881de283e146609f691281aba150aeTimo Sirainensys.path.insert(0, path_to_parent)
edfd009103881de283e146609f691281aba150aeTimo Sirainenimport pkg5unittest
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainenclass TestElf(pkg5unittest.Pkg5TestCase):
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainen def test_is_elf_object(self):
edfd009103881de283e146609f691281aba150aeTimo Sirainen """ ASSERT: is_elf_object correctly classifies a range of
edfd009103881de283e146609f691281aba150aeTimo Sirainen elf objects and non-elf objects """
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainen if os.path.exists("/usr/bin/cat"):
edfd009103881de283e146609f691281aba150aeTimo Sirainen self.assertEqual(elf.is_elf_object("/usr/bin/cat"),
edfd009103881de283e146609f691281aba150aeTimo Sirainen True)
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainen if os.path.exists("/etc/motd"):
edfd009103881de283e146609f691281aba150aeTimo Sirainen self.assertNotEqual(elf.is_elf_object("/etc/motd"),
edfd009103881de283e146609f691281aba150aeTimo Sirainen True)
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainen if os.path.exists("/dev/ksyms"):
edfd009103881de283e146609f691281aba150aeTimo Sirainen self.assertEqual(elf.is_elf_object("/dev/ksyms"),
edfd009103881de283e146609f691281aba150aeTimo Sirainen True)
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainen if os.path.exists("/usr/lib/libmlib.so"):
edfd009103881de283e146609f691281aba150aeTimo Sirainen self.assertEqual(
edfd009103881de283e146609f691281aba150aeTimo Sirainen elf.is_elf_object("/usr/lib/libmlib.so"), True)
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainen if os.path.exists("/kernel/drv/sd"):
edfd009103881de283e146609f691281aba150aeTimo Sirainen self.assertEqual(elf.is_elf_object("/kernel/drv/sd"),
edfd009103881de283e146609f691281aba150aeTimo Sirainen True)
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainen if os.path.exists("/kernel/drv/amd64/sd"):
edfd009103881de283e146609f691281aba150aeTimo Sirainen self.assertEqual(
edfd009103881de283e146609f691281aba150aeTimo Sirainen elf.is_elf_object("/kernel/drv/amd64/sd"), True)
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainen if os.path.exists("/kernel/drv/sparcv9/sd"):
edfd009103881de283e146609f691281aba150aeTimo Sirainen self.assertEqual(
edfd009103881de283e146609f691281aba150aeTimo Sirainen elf.is_elf_object("/kernel/drv/sparcv9/sd"), True)
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainen self.assertRaises(OSError, elf.is_elf_object, "/does/not/exist")
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainen def test_get_dynamic(self):
edfd009103881de283e146609f691281aba150aeTimo Sirainen if os.path.exists("/usr/bin/cat"):
edfd009103881de283e146609f691281aba150aeTimo Sirainen try:
edfd009103881de283e146609f691281aba150aeTimo Sirainen elf.get_dynamic("/usr/bin/cat")
edfd009103881de283e146609f691281aba150aeTimo Sirainen except:
edfd009103881de283e146609f691281aba150aeTimo Sirainen self.fail();
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainen if os.path.exists("/etc/motd"):
edfd009103881de283e146609f691281aba150aeTimo Sirainen self.assertRaises(RuntimeError, elf.get_dynamic,
edfd009103881de283e146609f691281aba150aeTimo Sirainen "/etc/motd")
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainen if os.path.exists("/usr/lib/libmlib.so"):
edfd009103881de283e146609f691281aba150aeTimo Sirainen elf.get_dynamic("/usr/lib/libmlib.so")
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainen if os.path.exists("/kernel/drv/sd"):
edfd009103881de283e146609f691281aba150aeTimo Sirainen elf.get_dynamic("/kernel/drv/sd")
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainen if os.path.exists("/kernel/drv/amd64/sd"):
edfd009103881de283e146609f691281aba150aeTimo Sirainen elf.get_dynamic("/kernel/drv/amd64/sd")
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainen if os.path.exists("/kernel/drv/sparcv9/sd"):
edfd009103881de283e146609f691281aba150aeTimo Sirainen elf.get_dynamic("/kernel/drv/sparcv9/sd")
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainen if os.path.exists("/usr/lib/crti.o"):
edfd009103881de283e146609f691281aba150aeTimo Sirainen elf.get_dynamic("/usr/lib/crti.o")
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainen self.assertRaises(OSError, elf.get_dynamic, "/does/not/exist")
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainen def test_get_info(self):
edfd009103881de283e146609f691281aba150aeTimo Sirainen if os.path.exists("/usr/bin/cat"):
edfd009103881de283e146609f691281aba150aeTimo Sirainen try:
edfd009103881de283e146609f691281aba150aeTimo Sirainen elf.get_info("/usr/bin/cat")
edfd009103881de283e146609f691281aba150aeTimo Sirainen except:
edfd009103881de283e146609f691281aba150aeTimo Sirainen self.fail();
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainen if os.path.exists("/etc/motd"):
edfd009103881de283e146609f691281aba150aeTimo Sirainen self.assertRaises(RuntimeError, elf.get_info,
edfd009103881de283e146609f691281aba150aeTimo Sirainen "/etc/motd");
edfd009103881de283e146609f691281aba150aeTimo Sirainen
a63cd84128875485e40ed804dbf0b0945526989cTimo Sirainen if os.path.exists("/usr/lib/libmlib.so"):
a63cd84128875485e40ed804dbf0b0945526989cTimo Sirainen elf.get_info("/usr/lib/libmlib.so")
a63cd84128875485e40ed804dbf0b0945526989cTimo Sirainen
a63cd84128875485e40ed804dbf0b0945526989cTimo Sirainen if os.path.exists("/kernel/drv/sd"):
a63cd84128875485e40ed804dbf0b0945526989cTimo Sirainen elf.get_info("/kernel/drv/sd")
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainen if os.path.exists("/kernel/drv/amd64/sd"):
edfd009103881de283e146609f691281aba150aeTimo Sirainen elf.get_info("/kernel/drv/amd64/sd")
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainen if os.path.exists("/kernel/drv/sparcv9/sd"):
edfd009103881de283e146609f691281aba150aeTimo Sirainen elf.get_info("/kernel/drv/sparcv9/sd")
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainen if os.path.exists("/usr/lib/crti.o"):
edfd009103881de283e146609f691281aba150aeTimo Sirainen elf.get_info("/usr/lib/crti.o")
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainen self.assertRaises(OSError, elf.get_info, "/does/not/exist");
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainen
edfd009103881de283e146609f691281aba150aeTimo Sirainenif __name__ == "__main__":
edfd009103881de283e146609f691281aba150aeTimo Sirainen unittest.main()
edfd009103881de283e146609f691281aba150aeTimo Sirainen