import subprocess import tempfile import unittest from pathlib import Path class Test_npkpy(unittest.TestCase): def setUp(self) -> None: # TODO: create DummyPkg and replace gps-6.45.6.npk self.npk_file = Path("tests/testData/6_48_4/gps-6.48.4.npk") self.path_to_npk = str(self.npk_file.absolute()) self.npk_container_list = Path("tests/testData/6_48_4/gps-6.48.4.result").read_text() self.dst_folder = Path(tempfile.mkdtemp()) def tearDown(self) -> None: for _file in self.dst_folder.rglob("*"): if _file.is_file(): _file.unlink() for _file in self.dst_folder.rglob("*"): _file.rmdir() self.dst_folder.rmdir() def test_list_all_containers_from_npk_pkg(self): cmd = ["npkpy", "--file", self.path_to_npk, "--show-container"] output = run_command_in_terminal(cmd) self.assertEqual(self.npk_container_list, output) def test_list_in_folder(self): cmd = ["npkpy", "--src-folder", str(self.npk_file.parent), "--show-container"] output = run_command_in_terminal(cmd) self.assertEqual(self.npk_container_list, output) def test_export_all_container_from_npk(self): cmd = ["npkpy", "--file", self.path_to_npk, "--dst-folder", self.dst_folder.absolute(), "--export-all"] run_command_in_terminal(cmd) exported_container = sorted(str(_file.relative_to(self.dst_folder)) for _file in self.dst_folder.rglob('*')) self.assertEqual(['npkPyExport_gps-6.48.4', 'npkPyExport_gps-6.48.4/000_cnt_PckPreHeader.raw', 'npkPyExport_gps-6.48.4/001_cnt_PckHeader.raw', 'npkPyExport_gps-6.48.4/002_cnt_PckReleaseTyp.raw', 'npkPyExport_gps-6.48.4/003_cnt_CntArchitectureTag.raw', 'npkPyExport_gps-6.48.4/004_cnt_PckDescription.raw', 'npkPyExport_gps-6.48.4/005_cnt_PckEckcdsaHash.raw', 'npkPyExport_gps-6.48.4/006_cnt_PckRequirementsHeader.raw', 'npkPyExport_gps-6.48.4/007_cnt_CntNullBlock.raw', 'npkPyExport_gps-6.48.4/008_cnt_CntSquashFsImage.raw', 'npkPyExport_gps-6.48.4/009_cnt_CntSquashFsHashSignature.raw', 'npkPyExport_gps-6.48.4/010_cnt_CntArchitectureTag.raw'], exported_container) def test_extract_squashfs_container_from_npk(self): cmd = ["npkpy", "--file", self.path_to_npk, "--dst-folder", self.dst_folder.absolute(), "--export-squashfs"] run_command_in_terminal(cmd) self.assert_container_extracted(['npkPyExport_gps-6.48.4', 'npkPyExport_gps-6.48.4/008_cnt_CntSquashFsImage.raw']) def test_extract_zlib_container_from_npk_nonexisting_not_extracted(self): cmd = ["npkpy", "--file", self.path_to_npk, "--dst-folder", self.dst_folder.absolute(), "--export-zlib"] run_command_in_terminal(cmd) self.assert_container_extracted([]) def assert_container_extracted(self, expected_files): extracted_container = sorted(str(_file.relative_to(self.dst_folder)) for _file in self.dst_folder.rglob('*')) self.assertEqual(expected_files, extracted_container) def run_command_in_terminal(cmd): return subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, check=True).stdout.decode("UTF-8")