You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
4.1 KiB
106 lines
4.1 KiB
#!/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()
|