blob: d1e5040a10fd696f7fd51f8845c736109fa89dff [file] [log] [blame]
# Copyright 2024 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Paygen provision payload tests."""
from unittest import mock
from chromite.lib import chroot_lib
from chromite.lib import compression_lib
from chromite.lib import constants
from chromite.lib import cros_test_lib
from chromite.lib import osutils
from chromite.lib import parallel_unittest
from chromite.lib import partial_mock
from chromite.lib.paygen import partition_lib
from chromite.lib.paygen import paygen_provision_payload
class GenerateProvisionPayloadsTest(cros_test_lib.MockTempDirTestCase):
"""Test cases for the provision payloads generation."""
def setUp(self) -> None:
self.StartPatcher(parallel_unittest.ParallelMock())
self.target_image = (
self.tempdir
/ "link"
/ "R37-5952.0.2014_06_12_2302-a1"
/ "chromiumos_test_image.bin"
)
osutils.Touch(self.target_image, makedirs=True)
self.sample_dlc_image = (
self.tempdir
/ "link"
/ "R37-5952.0.2014_06_12_2302-a1"
/ "dlc"
/ "sample-dlc"
/ "package"
/ "dlc.img"
)
osutils.Touch(self.sample_dlc_image, makedirs=True)
self.chroot = chroot_lib.Chroot(
self.tempdir / "chroot", out_path=self.tempdir / "out"
)
def testGenerateProvisionPayloads(self) -> None:
"""Verifies correct files are created for provisioning."""
extract_kernel_mock = self.PatchObject(partition_lib, "ExtractKernel")
extract_root_mock = self.PatchObject(partition_lib, "ExtractRoot")
has_minios_mock = self.PatchObject(
partition_lib, "HasMiniOSPartitions", return_value=False
)
compress_file_mock = self.PatchObject(compression_lib, "compress_file")
paygen_provision_payload.GenerateProvisionPayloads(
self.target_image, self.tempdir
)
extract_kernel_mock.assert_called_once_with(
self.target_image, partial_mock.HasString("kernel.bin")
)
extract_root_mock.assert_called_once_with(
self.target_image,
partial_mock.HasString("rootfs.bin"),
truncate=False,
)
has_minios_mock.assert_called_once()
calls = [
mock.call(
partial_mock.HasString("kernel.bin"),
partial_mock.HasString(
constants.QUICK_PROVISION_PAYLOAD_KERNEL
),
compression_level=None,
),
mock.call(
partial_mock.HasString("rootfs.bin"),
partial_mock.HasString(
constants.QUICK_PROVISION_PAYLOAD_ROOTFS
),
compression_level=None,
),
mock.call(
partial_mock.HasString("kernel.bin"),
partial_mock.HasString(constants.FULL_PAYLOAD_KERN),
compression_level=19,
),
mock.call(
partial_mock.HasString("rootfs.bin"),
partial_mock.HasString(constants.FULL_PAYLOAD_ROOT),
compression_level=19,
),
]
compress_file_mock.assert_has_calls(calls)
def testGenerateProvisionPayloadsWithMiniOS(self) -> None:
"""Verifies correct files are created for provisioning."""
extract_kernel_mock = self.PatchObject(partition_lib, "ExtractKernel")
extract_root_mock = self.PatchObject(partition_lib, "ExtractRoot")
extract_minios_mock = self.PatchObject(partition_lib, "ExtractMiniOS")
has_minios_mock = self.PatchObject(
partition_lib, "HasMiniOSPartitions", return_value=True
)
compress_file_mock = self.PatchObject(compression_lib, "compress_file")
paygen_provision_payload.GenerateProvisionPayloads(
self.target_image, self.tempdir
)
extract_kernel_mock.assert_called_once_with(
self.target_image, partial_mock.HasString("kernel.bin")
)
extract_root_mock.assert_called_once_with(
self.target_image,
partial_mock.HasString("rootfs.bin"),
truncate=False,
)
extract_minios_mock.assert_called_once_with(
self.target_image, partial_mock.HasString("minios.bin")
)
has_minios_mock.assert_called_once()
calls = [
mock.call(
partial_mock.HasString("kernel.bin"),
partial_mock.HasString(
constants.QUICK_PROVISION_PAYLOAD_KERNEL
),
compression_level=None,
),
mock.call(
partial_mock.HasString("rootfs.bin"),
partial_mock.HasString(
constants.QUICK_PROVISION_PAYLOAD_ROOTFS
),
compression_level=None,
),
mock.call(
partial_mock.HasString("minios.bin"),
partial_mock.HasString(
constants.QUICK_PROVISION_PAYLOAD_MINIOS
),
compression_level=None,
),
mock.call(
partial_mock.HasString("kernel.bin"),
partial_mock.HasString(constants.FULL_PAYLOAD_KERN),
compression_level=19,
),
mock.call(
partial_mock.HasString("rootfs.bin"),
partial_mock.HasString(constants.FULL_PAYLOAD_ROOT),
compression_level=19,
),
mock.call(
partial_mock.HasString("minios.bin"),
partial_mock.HasString(constants.FULL_PAYLOAD_MINIOS),
compression_level=19,
),
]
compress_file_mock.assert_has_calls(calls)