def get_module_dict( self, exclusions: typing.Container[KernelFileType], module_directory: Path ) -> typing.Dict[str, typing.List[GenericFile]]: """Get dict of module directories found in /lib/modules""" module_dict: typing.Dict[str, typing.List[GenericFile]] = {} try: diter = os.listdir(module_directory) except FileNotFoundError: pass else: for fn in diter: if fn.startswith('.'): continue path = module_directory / fn if path.is_symlink() or not path.is_dir(): continue mlist = module_dict.setdefault(fn, []) mobj = ModuleDirectory(path) if KernelFileType.BUILD not in exclusions: try: build = mobj.get_build_dir() if build.is_dir(): mlist.append( GenericDirectory(build, KernelFileType.BUILD)) except FileNotFoundError: pass # note: top directory must come last so that it isn't # removed before its subdirs if KernelFileType.MODULES not in exclusions: mlist.append(mobj) return module_dict
def test_exclude_build(self) -> None: with self.create_layout() as td: path = Path(td) boot = path / 'boot' modules = path / 'lib/modules' self.assertEqual( sorted( kernel_paths( StdLayout(root=path).find_kernels( exclusions=[KFT.BUILD]))), [('1.2.2', [ GenericFile(boot / 'System.map-1.2.2', KFT.SYSTEM_MAP), KernelImage(boot / 'vmlinuz-1.2.2'), ModuleDirectory(modules / '1.2.2'), ], '1.2.2'), ('1.2.3', [ GenericFile(boot / 'System.map-1.2.3', KFT.SYSTEM_MAP), GenericFile(boot / 'config-1.2.3', KFT.CONFIG), GenericFile(boot / 'initrd-1.2.3.img', KFT.INITRAMFS), KernelImage(boot / 'vmlinuz-1.2.3'), ModuleDirectory(modules / '1.2.3'), ], '1.2.3'), ('1.2.3.old', [ GenericFile(boot / 'System.map-1.2.3.old', KFT.SYSTEM_MAP), GenericFile(boot / 'config-1.2.3.old', KFT.CONFIG), GenericFile(boot / 'initrd-1.2.3.img.old', KFT.INITRAMFS), KernelImage(boot / 'vmlinuz-1.2.3.old'), ModuleDirectory(modules / '1.2.3'), ], '1.2.3'), ('1.2.4', [ GenericFile(boot / 'config-1.2.4', KFT.CONFIG), ModuleDirectory(modules / '1.2.4'), ], None)])
def test_rel_symlink(self) -> None: td = Path(self.td.name) mdir = td / 'modules/1.2.3' os.makedirs(mdir) os.makedirs(td / 'src/linux') os.symlink('../../src/linux', mdir / 'build') self.assertEqual( ModuleDirectory(mdir).get_build_dir(), mdir / '../../src/linux')
def test_modules_only(self) -> None: test_spec = [ 'lib/modules/1.2.3/test.ko', 'lib/modules/1.2.4/test.ko', 'usr/src/linux/Makefile', ] with make_test_files(test_spec) as td: path = Path(td) modules = path / 'lib/modules' os.symlink('../../../usr/src/linux', modules / '1.2.4/build') self.assertEqual( sorted(kernel_paths(StdLayout(root=path).find_kernels())), [('1.2.3', [ModuleDirectory(modules / '1.2.3')], None), ('1.2.4', [ ModuleDirectory(modules / '1.2.4'), GenericFile(modules / '1.2.4/../../../usr/src/linux', KFT.BUILD) ], None)])
def test_exclude_misc(self) -> None: with self.create_layout() as td: path = Path(td) boot = path / f'boot/{self.machine_id}' modules = path / 'lib/modules' self.assertEqual( sorted( kernel_paths( BlSpecLayout(root=path).find_kernels( exclusions=[KFT.MISC]))), [ ('1.2.1', [ EmptyDirectory(boot / '1.2.1'), GenericFile(boot / '1.2.1/initrd', KFT.INITRAMFS), KernelImage(boot / '1.2.1/linux'), ModuleDirectory(modules / '1.2.1'), ], '1.2.1'), ('1.2.2', [ EmptyDirectory(boot / '1.2.2'), GenericFile(boot / '1.2.2/initrd', KFT.INITRAMFS), KernelImage(boot / '1.2.2/linux'), ModuleDirectory(modules / '1.2.2'), GenericFile(modules / '1.2.2/../../../usr/src/linux', KFT.BUILD), ], '1.2.2'), ('1.2.3', [ EmptyDirectory(boot / '1.2.3'), GenericFile(boot / '1.2.3/initrd', KFT.INITRAMFS), KernelImage(boot / '1.2.3/linux'), ModuleDirectory(modules / '1.2.3'), GenericFile(modules / '1.2.3/../../../usr/src/linux', KFT.BUILD), ], '1.2.3'), ('1.2.4', [ EmptyDirectory(boot / '1.2.4'), GenericFile(boot / '1.2.4/initrd', KFT.INITRAMFS), ModuleDirectory(modules / '1.2.4'), ], None), ])