blob: ee1b4113c957dce87a7d43558120600f0c437ff5 [file] [log] [blame]
Kelvin Zhangcff4d762020-07-29 16:37:51 -04001#
2# Copyright (C) 2020 The Android Open Source Project
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16
17import copy
18import zipfile
19
20import common
21import test_utils
22
23from non_ab_ota import NonAbOtaPropertyFiles, WriteFingerprintAssertion
24from test_utils import PropertyFilesTestCase
25
26
27class NonAbOtaPropertyFilesTest(PropertyFilesTestCase):
28 """Additional validity checks specialized for NonAbOtaPropertyFiles."""
29 def setUp(self):
30 common.OPTIONS.no_signing = False
31 def test_init(self):
32 property_files = NonAbOtaPropertyFiles()
33 self.assertEqual('ota-property-files', property_files.name)
34 self.assertEqual((), property_files.required)
35 self.assertEqual((), property_files.optional)
36
37 def test_Compute(self):
38 entries = ()
39 zip_file = self.construct_zip_package(entries)
40 property_files = NonAbOtaPropertyFiles()
41 with zipfile.ZipFile(zip_file) as zip_fp:
42 property_files_string = property_files.Compute(zip_fp)
43
44 tokens = self._parse_property_files_string(property_files_string)
45 self.assertEqual(1, len(tokens))
46 self._verify_entries(zip_file, tokens, entries)
47
48 def test_Finalize(self):
49 entries = [
50 'META-INF/com/android/metadata',
51 ]
52 zip_file = self.construct_zip_package(entries)
53 property_files = NonAbOtaPropertyFiles()
54 with zipfile.ZipFile(zip_file) as zip_fp:
55 raw_metadata = property_files.GetPropertyFilesString(
56 zip_fp, reserve_space=False)
57 property_files_string = property_files.Finalize(zip_fp, len(raw_metadata))
58 tokens = self._parse_property_files_string(property_files_string)
59
60 self.assertEqual(1, len(tokens))
61 # 'META-INF/com/android/metadata' will be key'd as 'metadata'.
62 entries[0] = 'metadata'
63 self._verify_entries(zip_file, tokens, entries)
64
65 def test_Verify(self):
66 entries = (
67 'META-INF/com/android/metadata',
68 )
69 zip_file = self.construct_zip_package(entries)
70 property_files = NonAbOtaPropertyFiles()
71 with zipfile.ZipFile(zip_file) as zip_fp:
72 raw_metadata = property_files.GetPropertyFilesString(
73 zip_fp, reserve_space=False)
74
75 property_files.Verify(zip_fp, raw_metadata)
76
77class NonAbOTATest(test_utils.ReleaseToolsTestCase):
78 TEST_TARGET_INFO_DICT = {
79 'build.prop': common.PartitionBuildProps.FromDictionary(
80 'system', {
81 'ro.product.device': 'product-device',
82 'ro.build.fingerprint': 'build-fingerprint-target',
83 'ro.build.version.incremental': 'build-version-incremental-target',
84 'ro.build.version.sdk': '27',
85 'ro.build.version.security_patch': '2017-12-01',
86 'ro.build.date.utc': '1500000000'}
87 )
88 }
89 TEST_INFO_DICT_USES_OEM_PROPS = {
90 'build.prop': common.PartitionBuildProps.FromDictionary(
91 'system', {
92 'ro.product.name': 'product-name',
93 'ro.build.thumbprint': 'build-thumbprint',
94 'ro.build.bar': 'build-bar'}
95 ),
96 'vendor.build.prop': common.PartitionBuildProps.FromDictionary(
97 'vendor', {
98 'ro.vendor.build.fingerprint': 'vendor-build-fingerprint'}
99 ),
100 'property1': 'value1',
101 'property2': 4096,
102 'oem_fingerprint_properties': 'ro.product.device ro.product.brand',
103 }
104 TEST_OEM_DICTS = [
105 {
106 'ro.product.brand': 'brand1',
107 'ro.product.device': 'device1',
108 },
109 {
110 'ro.product.brand': 'brand2',
111 'ro.product.device': 'device2',
112 },
113 {
114 'ro.product.brand': 'brand3',
115 'ro.product.device': 'device3',
116 },
117 ]
118 def test_WriteFingerprintAssertion_without_oem_props(self):
119 target_info = common.BuildInfo(self.TEST_TARGET_INFO_DICT, None)
120 source_info_dict = copy.deepcopy(self.TEST_TARGET_INFO_DICT)
121 source_info_dict['build.prop'].build_props['ro.build.fingerprint'] = (
122 'source-build-fingerprint')
123 source_info = common.BuildInfo(source_info_dict, None)
124
125 script_writer = test_utils.MockScriptWriter()
126 WriteFingerprintAssertion(script_writer, target_info, source_info)
127 self.assertEqual(
128 [('AssertSomeFingerprint', 'source-build-fingerprint',
129 'build-fingerprint-target')],
130 script_writer.lines)
131
132 def test_WriteFingerprintAssertion_with_source_oem_props(self):
133 target_info = common.BuildInfo(self.TEST_TARGET_INFO_DICT, None)
134 source_info = common.BuildInfo(self.TEST_INFO_DICT_USES_OEM_PROPS,
135 self.TEST_OEM_DICTS)
136
137 script_writer = test_utils.MockScriptWriter()
138 WriteFingerprintAssertion(script_writer, target_info, source_info)
139 self.assertEqual(
140 [('AssertFingerprintOrThumbprint', 'build-fingerprint-target',
141 'build-thumbprint')],
142 script_writer.lines)
143
144 def test_WriteFingerprintAssertion_with_target_oem_props(self):
145 target_info = common.BuildInfo(self.TEST_INFO_DICT_USES_OEM_PROPS,
146 self.TEST_OEM_DICTS)
147 source_info = common.BuildInfo(self.TEST_TARGET_INFO_DICT, None)
148
149 script_writer = test_utils.MockScriptWriter()
150 WriteFingerprintAssertion(script_writer, target_info, source_info)
151 self.assertEqual(
152 [('AssertFingerprintOrThumbprint', 'build-fingerprint-target',
153 'build-thumbprint')],
154 script_writer.lines)
155
156 def test_WriteFingerprintAssertion_with_both_oem_props(self):
157 target_info = common.BuildInfo(self.TEST_INFO_DICT_USES_OEM_PROPS,
158 self.TEST_OEM_DICTS)
159 source_info_dict = copy.deepcopy(self.TEST_INFO_DICT_USES_OEM_PROPS)
160 source_info_dict['build.prop'].build_props['ro.build.thumbprint'] = (
161 'source-build-thumbprint')
162 source_info = common.BuildInfo(source_info_dict, self.TEST_OEM_DICTS)
163
164 script_writer = test_utils.MockScriptWriter()
165 WriteFingerprintAssertion(script_writer, target_info, source_info)
166 self.assertEqual(
167 [('AssertSomeThumbprint', 'build-thumbprint',
168 'source-build-thumbprint')],
169 script_writer.lines)