blob: a90d269dbba6a4443f88c9a62720b299b9bc01fa [file] [log] [blame]
#!/usr/bin/env python
#
# Copyright (C) 2020 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
"""Unit testing paycheck.py."""
# This test requires new (Y) and old (X) images, as well as a full payload
# from image Y and a delta payload from Y to X for each partition.
# Payloads are from sample_images/generate_payloads.
#
# The test performs the following:
#
# - It statically applies the full and delta payloads.
#
# - It applies full_payload to yield a new kernel (kern.part) and rootfs
# (root.part) and compares them to the new image partitions.
#
# - It applies delta_payload to the old image to yield a new kernel and rootfs
# and compares them to the new image partitions.
#
# Previously test_paycheck.sh. Run with update_payload ebuild.
# Disable check for function names to avoid errors based on old code
# pylint: disable=invalid-name
import filecmp
import os
import subprocess
import unittest
class PaycheckTest(unittest.TestCase):
"""Test paycheck functions."""
def setUp(self):
self.tmpdir = os.getenv('T')
self._full_payload = os.path.join(self.tmpdir, 'full_payload.bin')
self._delta_payload = os.path.join(self.tmpdir, 'delta_payload.bin')
self._new_kernel = os.path.join(self.tmpdir, 'disk_ext2_4k.img')
self._new_root = os.path.join(self.tmpdir, 'disk_sqfs_default.img')
self._old_kernel = os.path.join(self.tmpdir,
'disk_ext2_4k_empty.img')
self._old_root = os.path.join(self.tmpdir, 'disk_sqfs_empty.img')
# Temp output files.
self._kernel_part = os.path.join(self.tmpdir, 'kern.part')
self._root_part = os.path.join(self.tmpdir, 'root.part')
def checkPayload(self, type_arg, payload):
"""Checks Payload."""
self.assertEqual(0, subprocess.check_call(['./paycheck.py', '-t',
type_arg, payload]))
def testFullPayload(self):
"""Checks the full payload statically."""
self.checkPayload('full', self._full_payload)
def testDeltaPayload(self):
"""Checks the delta payload statically."""
self.checkPayload('delta', self._delta_payload)
def testApplyFullPayload(self):
"""Applies full payloads and compares results to new sample images."""
self.assertEqual(0, subprocess.check_call(['./paycheck.py',
self._full_payload,
'--part_names', 'kernel', 'root',
'--out_dst_part_paths',
self._kernel_part,
self._root_part]))
# Check if generated full image is equal to sample image.
self.assertTrue(filecmp.cmp(self._kernel_part, self._new_kernel))
self.assertTrue(filecmp.cmp(self._root_part, self._new_root))
def testApplyDeltaPayload(self):
"""Applies delta to old image and checks against new sample images."""
self.assertEqual(0, subprocess.check_call(['./paycheck.py',
self._delta_payload,
'--part_names', 'kernel', 'root',
'--src_part_paths',
self._old_kernel, self._old_root,
'--out_dst_part_paths',
self._kernel_part,
self._root_part]))
self.assertTrue(filecmp.cmp(self._kernel_part, self._new_kernel))
self.assertTrue(filecmp.cmp(self._root_part, self._new_root))
if __name__ == '__main__':
unittest.main()