Commit b45bc033 authored by Declan Snyder's avatar Declan Snyder Committed by Chris Friedt
Browse files

scripts: check_init_priorities: Fix file leak



The elf file needs to be closed after done being used, otherwise sys
module will generate resource leak warnings.

Signed-off-by: default avatarDeclan Snyder <declan.snyder@nxp.com>
parent 0d6b0ceb
Loading
Loading
Loading
Loading
+14 −13
Original line number Diff line number Diff line
@@ -101,9 +101,9 @@ class ZephyrInitLevels:
    Attributes:
        file_path: path of the file to be loaded.
    """
    def __init__(self, file_path):
    def __init__(self, file_path, elf_file):
        self.file_path = file_path
        self._elf = ELFFile(open(file_path, "rb"))
        self._elf = ELFFile(elf_file)
        self._load_objects()
        self._load_level_addr()
        self._process_initlevels()
@@ -237,7 +237,7 @@ class Validator():
        edt_pickle: name of the EDT pickle file
        log: a logging.Logger object
    """
    def __init__(self, elf_file_path, edt_pickle, log):
    def __init__(self, elf_file_path, edt_pickle, log, elf_file):
        self.log = log

        edt_pickle_path = pathlib.Path(
@@ -248,7 +248,7 @@ class Validator():

        self._ord2node = edt.dep_ord2node

        self._obj = ZephyrInitLevels(elf_file_path)
        self._obj = ZephyrInitLevels(elf_file_path, elf_file)

        self.errors = 0

@@ -355,7 +355,8 @@ def main(argv=None):

    log.info(f"check_init_priorities: {args.elf_file}")

    validator = Validator(args.elf_file, args.edt_pickle, log)
    with open(args.elf_file, "rb") as elf_file:
        validator = Validator(args.elf_file, args.edt_pickle, log, elf_file)
        if args.initlevels:
            validator.print_initlevels()
        else:
+15 −15
Original line number Diff line number Diff line
@@ -82,7 +82,7 @@ class testZephyrInitLevels(unittest.TestCase):

        sts.iter_symbols.return_value = [s0, s1, s2]

        obj = check_init_priorities.ZephyrInitLevels("")
        obj = check_init_priorities.ZephyrInitLevels("", None)
        obj._elf = mock_elf
        obj._load_objects()

@@ -126,7 +126,7 @@ class testZephyrInitLevels(unittest.TestCase):

        sts.iter_symbols.return_value = [s0, s1, s2, s3, s4, s5, s6]

        obj = check_init_priorities.ZephyrInitLevels("")
        obj = check_init_priorities.ZephyrInitLevels("", None)
        obj._elf = mock_elf
        obj._load_level_addr()

@@ -142,7 +142,7 @@ class testZephyrInitLevels(unittest.TestCase):

    @mock.patch("check_init_priorities.ZephyrInitLevels.__init__", return_value=None)
    def test_device_ord_from_name(self, mock_zilinit):
        obj = check_init_priorities.ZephyrInitLevels("")
        obj = check_init_priorities.ZephyrInitLevels("", None)

        self.assertEqual(obj._device_ord_from_name(None), None)
        self.assertEqual(obj._device_ord_from_name("hey, hi!"), None)
@@ -150,7 +150,7 @@ class testZephyrInitLevels(unittest.TestCase):

    @mock.patch("check_init_priorities.ZephyrInitLevels.__init__", return_value=None)
    def test_object_name(self, mock_zilinit):
        obj = check_init_priorities.ZephyrInitLevels("")
        obj = check_init_priorities.ZephyrInitLevels("", None)
        obj._objects = {0x123: ("name", 4)}

        self.assertEqual(obj._object_name(0), "NULL")
@@ -159,7 +159,7 @@ class testZephyrInitLevels(unittest.TestCase):

    @mock.patch("check_init_priorities.ZephyrInitLevels.__init__", return_value=None)
    def test_initlevel_pointer_32(self, mock_zilinit):
        obj = check_init_priorities.ZephyrInitLevels("")
        obj = check_init_priorities.ZephyrInitLevels("", None)
        obj._elf = mock.Mock()
        obj._elf.elfclass = 32
        mock_section = mock.Mock()
@@ -176,7 +176,7 @@ class testZephyrInitLevels(unittest.TestCase):

    @mock.patch("check_init_priorities.ZephyrInitLevels.__init__", return_value=None)
    def test_initlevel_pointer_64(self, mock_zilinit):
        obj = check_init_priorities.ZephyrInitLevels("")
        obj = check_init_priorities.ZephyrInitLevels("", None)
        obj._elf = mock.Mock()
        obj._elf.elfclass = 64
        mock_section = mock.Mock()
@@ -195,7 +195,7 @@ class testZephyrInitLevels(unittest.TestCase):
    @mock.patch("check_init_priorities.ZephyrInitLevels._initlevel_pointer")
    @mock.patch("check_init_priorities.ZephyrInitLevels.__init__", return_value=None)
    def test_process_initlevels(self, mock_zilinit, mock_ip, mock_on):
        obj = check_init_priorities.ZephyrInitLevels("")
        obj = check_init_priorities.ZephyrInitLevels("", None)
        obj._init_level_addr = {
            "EARLY": 0x00,
            "PRE_KERNEL_1": 0x00,
@@ -257,15 +257,15 @@ class testValidator(unittest.TestCase):
        mock_zil.return_value = mock_obj

        with mock.patch("builtins.open", mock.mock_open()) as mock_open:
            validator = check_init_priorities.Validator("path", "pickle", mock_log)
            validator = check_init_priorities.Validator("path", "pickle", mock_log, None)

        self.assertEqual(validator._obj, mock_obj)
        mock_zil.assert_called_once_with("path")
        mock_zil.assert_called_once_with("path", None)
        mock_open.assert_called_once_with(pathlib.Path("pickle"), "rb")

    @mock.patch("check_init_priorities.Validator.__init__", return_value=None)
    def test_check_dep_same_node(self, mock_vinit):
        validator = check_init_priorities.Validator("", "", None)
        validator = check_init_priorities.Validator("", "", None, None)
        validator.log = mock.Mock()

        validator._check_dep(123, 123)
@@ -276,7 +276,7 @@ class testValidator(unittest.TestCase):

    @mock.patch("check_init_priorities.Validator.__init__", return_value=None)
    def test_check_dep_no_prio(self, mock_vinit):
        validator = check_init_priorities.Validator("", "", None)
        validator = check_init_priorities.Validator("", "", None, None)
        validator.log = mock.Mock()
        validator._obj = mock.Mock()

@@ -296,7 +296,7 @@ class testValidator(unittest.TestCase):

    @mock.patch("check_init_priorities.Validator.__init__", return_value=None)
    def test_check(self, mock_vinit):
        validator = check_init_priorities.Validator("", "", None)
        validator = check_init_priorities.Validator("", "", None, None)
        validator.log = mock.Mock()
        validator._obj = mock.Mock()
        validator.errors = 0
@@ -320,7 +320,7 @@ class testValidator(unittest.TestCase):

    @mock.patch("check_init_priorities.Validator.__init__", return_value=None)
    def test_check_same_prio_assert(self, mock_vinit):
        validator = check_init_priorities.Validator("", "", None)
        validator = check_init_priorities.Validator("", "", None, None)
        validator.log = mock.Mock()
        validator._obj = mock.Mock()
        validator.errors = 0
@@ -338,7 +338,7 @@ class testValidator(unittest.TestCase):

    @mock.patch("check_init_priorities.Validator.__init__", return_value=None)
    def test_check_ignored(self, mock_vinit):
        validator = check_init_priorities.Validator("", "", None)
        validator = check_init_priorities.Validator("", "", None, None)
        validator.log = mock.Mock()
        validator._obj = mock.Mock()
        validator.errors = 0
@@ -381,7 +381,7 @@ class testValidator(unittest.TestCase):
        dev2 = mock.Mock()
        dev2.depends_on = [d2]

        validator = check_init_priorities.Validator("", "", None)
        validator = check_init_priorities.Validator("", "", None, None)
        validator._ord2node = {1: dev0, 2: dev1, 3: dev2}
        validator._obj = mock.Mock()
        validator._obj.devices = {1: 10, 2: 10, 3: 20}