blob: 5207e2fc72f3283f49f496c0ce4607f52ad6f927 [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)
Tianjiea2076132020-08-19 17:25:32 -070045 self.assertEqual(2, len(tokens))
Kelvin Zhangcff4d762020-07-29 16:37:51 -040046 self._verify_entries(zip_file, tokens, entries)
47
48 def test_Finalize(self):
49 entries = [
50 'META-INF/com/android/metadata',
Tianjiea2076132020-08-19 17:25:32 -070051 'META-INF/com/android/metadata.pb',
Kelvin Zhangcff4d762020-07-29 16:37:51 -040052 ]
53 zip_file = self.construct_zip_package(entries)
54 property_files = NonAbOtaPropertyFiles()
55 with zipfile.ZipFile(zip_file) as zip_fp:
56 raw_metadata = property_files.GetPropertyFilesString(
57 zip_fp, reserve_space=False)
58 property_files_string = property_files.Finalize(zip_fp, len(raw_metadata))
59 tokens = self._parse_property_files_string(property_files_string)
60
Tianjiea2076132020-08-19 17:25:32 -070061 self.assertEqual(2, len(tokens))
Kelvin Zhangcff4d762020-07-29 16:37:51 -040062 # 'META-INF/com/android/metadata' will be key'd as 'metadata'.
63 entries[0] = 'metadata'
Tianjiea2076132020-08-19 17:25:32 -070064 entries[1] = 'metadata.pb'
Kelvin Zhangcff4d762020-07-29 16:37:51 -040065 self._verify_entries(zip_file, tokens, entries)
66
67 def test_Verify(self):
68 entries = (
69 'META-INF/com/android/metadata',
Tianjiea2076132020-08-19 17:25:32 -070070 'META-INF/com/android/metadata.pb',
Kelvin Zhangcff4d762020-07-29 16:37:51 -040071 )
72 zip_file = self.construct_zip_package(entries)
73 property_files = NonAbOtaPropertyFiles()
74 with zipfile.ZipFile(zip_file) as zip_fp:
75 raw_metadata = property_files.GetPropertyFilesString(
76 zip_fp, reserve_space=False)
77
78 property_files.Verify(zip_fp, raw_metadata)
79
80class NonAbOTATest(test_utils.ReleaseToolsTestCase):
81 TEST_TARGET_INFO_DICT = {
82 'build.prop': common.PartitionBuildProps.FromDictionary(
83 'system', {
84 'ro.product.device': 'product-device',
85 'ro.build.fingerprint': 'build-fingerprint-target',
86 'ro.build.version.incremental': 'build-version-incremental-target',
87 'ro.build.version.sdk': '27',
88 'ro.build.version.security_patch': '2017-12-01',
89 'ro.build.date.utc': '1500000000'}
90 )
91 }
92 TEST_INFO_DICT_USES_OEM_PROPS = {
93 'build.prop': common.PartitionBuildProps.FromDictionary(
94 'system', {
95 'ro.product.name': 'product-name',
96 'ro.build.thumbprint': 'build-thumbprint',
97 'ro.build.bar': 'build-bar'}
98 ),
99 'vendor.build.prop': common.PartitionBuildProps.FromDictionary(
100 'vendor', {
101 'ro.vendor.build.fingerprint': 'vendor-build-fingerprint'}
102 ),
103 'property1': 'value1',
104 'property2': 4096,
105 'oem_fingerprint_properties': 'ro.product.device ro.product.brand',
106 }
107 TEST_OEM_DICTS = [
108 {
109 'ro.product.brand': 'brand1',
110 'ro.product.device': 'device1',
111 },
112 {
113 'ro.product.brand': 'brand2',
114 'ro.product.device': 'device2',
115 },
116 {
117 'ro.product.brand': 'brand3',
118 'ro.product.device': 'device3',
119 },
120 ]
121 def test_WriteFingerprintAssertion_without_oem_props(self):
122 target_info = common.BuildInfo(self.TEST_TARGET_INFO_DICT, None)
123 source_info_dict = copy.deepcopy(self.TEST_TARGET_INFO_DICT)
124 source_info_dict['build.prop'].build_props['ro.build.fingerprint'] = (
125 'source-build-fingerprint')
126 source_info = common.BuildInfo(source_info_dict, None)
127
128 script_writer = test_utils.MockScriptWriter()
129 WriteFingerprintAssertion(script_writer, target_info, source_info)
130 self.assertEqual(
131 [('AssertSomeFingerprint', 'source-build-fingerprint',
132 'build-fingerprint-target')],
133 script_writer.lines)
134
135 def test_WriteFingerprintAssertion_with_source_oem_props(self):
136 target_info = common.BuildInfo(self.TEST_TARGET_INFO_DICT, None)
137 source_info = common.BuildInfo(self.TEST_INFO_DICT_USES_OEM_PROPS,
138 self.TEST_OEM_DICTS)
139
140 script_writer = test_utils.MockScriptWriter()
141 WriteFingerprintAssertion(script_writer, target_info, source_info)
142 self.assertEqual(
143 [('AssertFingerprintOrThumbprint', 'build-fingerprint-target',
144 'build-thumbprint')],
145 script_writer.lines)
146
147 def test_WriteFingerprintAssertion_with_target_oem_props(self):
148 target_info = common.BuildInfo(self.TEST_INFO_DICT_USES_OEM_PROPS,
149 self.TEST_OEM_DICTS)
150 source_info = common.BuildInfo(self.TEST_TARGET_INFO_DICT, None)
151
152 script_writer = test_utils.MockScriptWriter()
153 WriteFingerprintAssertion(script_writer, target_info, source_info)
154 self.assertEqual(
155 [('AssertFingerprintOrThumbprint', 'build-fingerprint-target',
156 'build-thumbprint')],
157 script_writer.lines)
158
159 def test_WriteFingerprintAssertion_with_both_oem_props(self):
160 target_info = common.BuildInfo(self.TEST_INFO_DICT_USES_OEM_PROPS,
161 self.TEST_OEM_DICTS)
162 source_info_dict = copy.deepcopy(self.TEST_INFO_DICT_USES_OEM_PROPS)
163 source_info_dict['build.prop'].build_props['ro.build.thumbprint'] = (
164 'source-build-thumbprint')
165 source_info = common.BuildInfo(source_info_dict, self.TEST_OEM_DICTS)
166
167 script_writer = test_utils.MockScriptWriter()
168 WriteFingerprintAssertion(script_writer, target_info, source_info)
169 self.assertEqual(
170 [('AssertSomeThumbprint', 'build-thumbprint',
171 'source-build-thumbprint')],
172 script_writer.lines)