blob: a90d269dbba6a4443f88c9a62720b299b9bc01fa [file] [log] [blame]
Vyshufbc57352020-09-09 20:50:02 +00001#!/usr/bin/env python
2#
3# Copyright (C) 2020 The Android Open Source Project
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16#
17
18"""Unit testing paycheck.py."""
19
20# This test requires new (Y) and old (X) images, as well as a full payload
21# from image Y and a delta payload from Y to X for each partition.
22# Payloads are from sample_images/generate_payloads.
23#
24# The test performs the following:
25#
26# - It statically applies the full and delta payloads.
27#
28# - It applies full_payload to yield a new kernel (kern.part) and rootfs
29# (root.part) and compares them to the new image partitions.
30#
31# - It applies delta_payload to the old image to yield a new kernel and rootfs
32# and compares them to the new image partitions.
33#
34# Previously test_paycheck.sh. Run with update_payload ebuild.
35
36# Disable check for function names to avoid errors based on old code
Amin Hassani42c2f982020-10-29 12:10:05 -070037# pylint: disable=invalid-name
Vyshufbc57352020-09-09 20:50:02 +000038
39import filecmp
40import os
41import subprocess
42import unittest
43
44
45class PaycheckTest(unittest.TestCase):
46 """Test paycheck functions."""
47
48 def setUp(self):
49 self.tmpdir = os.getenv('T')
50
51 self._full_payload = os.path.join(self.tmpdir, 'full_payload.bin')
52 self._delta_payload = os.path.join(self.tmpdir, 'delta_payload.bin')
53
54 self._new_kernel = os.path.join(self.tmpdir, 'disk_ext2_4k.img')
55 self._new_root = os.path.join(self.tmpdir, 'disk_sqfs_default.img')
56 self._old_kernel = os.path.join(self.tmpdir,
57 'disk_ext2_4k_empty.img')
58 self._old_root = os.path.join(self.tmpdir, 'disk_sqfs_empty.img')
59
60 # Temp output files.
61 self._kernel_part = os.path.join(self.tmpdir, 'kern.part')
62 self._root_part = os.path.join(self.tmpdir, 'root.part')
63
64 def checkPayload(self, type_arg, payload):
65 """Checks Payload."""
66 self.assertEqual(0, subprocess.check_call(['./paycheck.py', '-t',
67 type_arg, payload]))
68
69 def testFullPayload(self):
70 """Checks the full payload statically."""
71 self.checkPayload('full', self._full_payload)
72
73 def testDeltaPayload(self):
74 """Checks the delta payload statically."""
75 self.checkPayload('delta', self._delta_payload)
76
77 def testApplyFullPayload(self):
78 """Applies full payloads and compares results to new sample images."""
79 self.assertEqual(0, subprocess.check_call(['./paycheck.py',
80 self._full_payload,
81 '--part_names', 'kernel', 'root',
82 '--out_dst_part_paths',
83 self._kernel_part,
84 self._root_part]))
85
86 # Check if generated full image is equal to sample image.
87 self.assertTrue(filecmp.cmp(self._kernel_part, self._new_kernel))
88 self.assertTrue(filecmp.cmp(self._root_part, self._new_root))
89
90 def testApplyDeltaPayload(self):
91 """Applies delta to old image and checks against new sample images."""
92 self.assertEqual(0, subprocess.check_call(['./paycheck.py',
93 self._delta_payload,
94 '--part_names', 'kernel', 'root',
95 '--src_part_paths',
96 self._old_kernel, self._old_root,
97 '--out_dst_part_paths',
98 self._kernel_part,
99 self._root_part]))
100
101 self.assertTrue(filecmp.cmp(self._kernel_part, self._new_kernel))
102 self.assertTrue(filecmp.cmp(self._root_part, self._new_root))
103
104if __name__ == '__main__':
105 unittest.main()