| # Copyright 2021 The ChromiumOS Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Test the kernel_builder module.""" |
| |
| import os |
| |
| from chromite.lib import constants |
| from chromite.lib import cros_test_lib |
| from chromite.lib import kernel_builder |
| |
| |
| class BuilderTest(cros_test_lib.RunCommandTestCase): |
| """Test Builder.""" |
| |
| def setUp(self) -> None: |
| """Sets up common objects for testing.""" |
| self._kb = kernel_builder.Builder( |
| "foo-board", "foo-tmp", "foo-root", "777" |
| ) |
| |
| def testCreateCustomKernel(self) -> None: |
| """Tests CreateCustomKernel().""" |
| self.PatchObject(os.environ, "get", return_value="z") |
| self.rc.AddCmdResult( |
| [ |
| "portageq-foo-board", |
| "expand_virtual", |
| "/build/foo-board", |
| "virtual/linux-sources", |
| ], |
| stdout="kernel", |
| ) |
| |
| self._kb.CreateCustomKernel(["x", "y"]) |
| |
| emerge_board = "emerge-foo-board" |
| extra_env = { |
| "PKGDIR": os.path.join("foo-tmp", "packages"), |
| "USE": "z x y", |
| } |
| self.assertCommandCalled( |
| [emerge_board, "--jobs=777", "chromeos-base/chromeos-initramfs"], |
| enter_chroot=True, |
| extra_env=extra_env, |
| ) |
| self.assertCommandCalled( |
| [emerge_board, "--jobs=777", "--onlydeps", "kernel"], |
| enter_chroot=True, |
| extra_env=extra_env, |
| clear_env=["INSTALL_MASK"], |
| ) |
| self.assertCommandCalled( |
| [emerge_board, "--jobs=777", "--buildpkgonly", "kernel"], |
| enter_chroot=True, |
| extra_env=extra_env, |
| ) |
| self.assertCommandCalled( |
| [ |
| emerge_board, |
| "--jobs=777", |
| "--usepkgonly", |
| "--root=foo-root", |
| "kernel", |
| ], |
| enter_chroot=True, |
| extra_env=extra_env, |
| ) |
| |
| def testCreateCustomKernelOverrideUseFlag(self) -> None: |
| """Tests CreateCustomKernel().""" |
| self.rc.AddCmdResult( |
| [ |
| "portageq-foo-board", |
| "expand_virtual", |
| "/build/foo-board", |
| "virtual/linux-sources", |
| ], |
| stdout="kernel", |
| ) |
| |
| self._kb.CreateCustomKernel(["x", "y"], ["foo"]) |
| |
| emerge_board = "emerge-foo-board" |
| extra_env = { |
| "PKGDIR": os.path.join("foo-tmp", "packages"), |
| "USE": "foo x y", |
| } |
| self.assertCommandCalled( |
| [emerge_board, "--jobs=777", "chromeos-base/chromeos-initramfs"], |
| enter_chroot=True, |
| extra_env=extra_env, |
| ) |
| self.assertCommandCalled( |
| [emerge_board, "--jobs=777", "--onlydeps", "kernel"], |
| enter_chroot=True, |
| extra_env=extra_env, |
| clear_env=["INSTALL_MASK"], |
| ) |
| self.assertCommandCalled( |
| [emerge_board, "--jobs=777", "--buildpkgonly", "kernel"], |
| enter_chroot=True, |
| extra_env=extra_env, |
| ) |
| self.assertCommandCalled( |
| [ |
| emerge_board, |
| "--jobs=777", |
| "--usepkgonly", |
| "--root=foo-root", |
| "kernel", |
| ], |
| enter_chroot=True, |
| extra_env=extra_env, |
| ) |
| |
| def testCreateKernelImageDefaultArgs(self) -> None: |
| """Tests CreateKernelImage() with default arguments.""" |
| self.rc.AddCmdResult( |
| ["portageq-foo-board", "envvar", "ARCH"], stdout="foo-arch" |
| ) |
| |
| self._kb.CreateKernelImage("output") |
| |
| self.assertCommandCalled( |
| [ |
| constants.CROSUTILS_DIR / "build_kernel_image.sh", |
| "--board=foo-board", |
| "--arch=foo-arch", |
| "--to=output", |
| "--vmlinuz=foo-root/boot/vmlinuz", |
| "--working_dir=foo-tmp", |
| "--keep_work", |
| f"--keys_dir={constants.VBOOT_DEVKEYS_DIR}", |
| f"--public={constants.KERNEL_PUBLIC_SUBKEY}", |
| f"--private={constants.KERNEL_DATA_PRIVATE_KEY}", |
| f"--keyblock={constants.KERNEL_KEYBLOCK}", |
| ], |
| enter_chroot=True, |
| ) |
| |
| def testCreateKernelImageWithArgs(self) -> None: |
| """Tests CreateKernelImage() with default arguments.""" |
| self.rc.AddCmdResult( |
| ["portageq-foo-board", "envvar", "ARCH"], stdout="foo-arch" |
| ) |
| |
| self._kb.CreateKernelImage( |
| "output", |
| keys_dir=constants.VBOOT_DEVKEYS_DIR, |
| public_key=constants.RECOVERY_PUBLIC_KEY, |
| private_key=constants.RECOVERY_DATA_PRIVATE_KEY, |
| keyblock=constants.RECOVERY_KEYBLOCK, |
| boot_args="x y=foo", |
| serial="ttyfoo", |
| disable_rootfs_verification=True, |
| ) |
| |
| self.assertCommandCalled( |
| [ |
| constants.CROSUTILS_DIR / "build_kernel_image.sh", |
| "--board=foo-board", |
| "--arch=foo-arch", |
| "--to=output", |
| "--vmlinuz=foo-root/boot/vmlinuz", |
| "--working_dir=foo-tmp", |
| "--keep_work", |
| f"--keys_dir={constants.VBOOT_DEVKEYS_DIR}", |
| f"--public={constants.RECOVERY_PUBLIC_KEY}", |
| f"--private={constants.RECOVERY_DATA_PRIVATE_KEY}", |
| f"--keyblock={constants.RECOVERY_KEYBLOCK}", |
| "--noenable_rootfs_verification", |
| "--boot_args=x y=foo", |
| "--enable_serial=ttyfoo", |
| ], |
| enter_chroot=True, |
| ) |