# Copyright (C) 2008 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.
import os
import tempfile
import test_utils
import merge_ota
import update_payload
from update_metadata_pb2
import DynamicPartitionGroup
from update_metadata_pb2
import DynamicPartitionMetadata
from test_utils
import SkipIfExternalToolsUnavailable, ReleaseToolsTestCase
class MergeOtaTest(ReleaseToolsTestCase):
def setUp(self) ->
None:
self.testdata_dir = test_utils.get_testdata_dir()
return super().setUp()
@SkipIfExternalToolsUnavailable()
def test_MergeThreeOtas(self):
ota1 = os.path.join(self.testdata_dir,
"tuna_vbmeta.zip")
ota2 = os.path.join(self.testdata_dir,
"tuna_vbmeta_system.zip")
ota3 = os.path.join(self.testdata_dir,
"tuna_vbmeta_vendor.zip")
payloads = [update_payload.Payload(ota)
for ota
in [ota1, ota2, ota3]]
with tempfile.NamedTemporaryFile()
as output_file:
merge_ota.main([
"merge_ota",
"-v", ota1, ota2, ota3,
"--output", output_file.name])
payload = update_payload.Payload(output_file.name)
partition_names = [
part.partition_name
for part
in payload.manifest.partitions]
self.assertEqual(partition_names, [
"vbmeta",
"vbmeta_system",
"vbmeta_vendor"])
payload.CheckDataHash()
for i
in range(
3):
self.assertEqual(payload.manifest.partitions[i].old_partition_info,
payloads[i].manifest.partitions[
0].old_partition_info)
self.assertEqual(payload.manifest.partitions[i].new_partition_info,
payloads[i].manifest.partitions[
0].new_partition_info)
def test_MergeDAPSnapshotDisabled(self):
dap1 = DynamicPartitionMetadata()
dap2 = DynamicPartitionMetadata()
merged_dap = DynamicPartitionMetadata()
dap1.snapshot_enabled =
True
dap2.snapshot_enabled =
False
merge_ota.MergeDynamicPartitionMetadata(merged_dap, dap1)
merge_ota.MergeDynamicPartitionMetadata(merged_dap, dap2)
self.assertFalse(merged_dap.snapshot_enabled)
def test_MergeDAPSnapshotEnabled(self):
dap1 = DynamicPartitionMetadata()
dap2 = DynamicPartitionMetadata()
merged_dap = DynamicPartitionMetadata()
merged_dap.snapshot_enabled =
True
dap1.snapshot_enabled =
True
dap2.snapshot_enabled =
True
merge_ota.MergeDynamicPartitionMetadata(merged_dap, dap1)
merge_ota.MergeDynamicPartitionMetadata(merged_dap, dap2)
self.assertTrue(merged_dap.snapshot_enabled)
def test_MergeDAPGroups(self):
dap1 = DynamicPartitionMetadata()
dap1.groups.append(DynamicPartitionGroup(
name=
"abc", partition_names=[
"a",
"b",
"c"]))
dap2 = DynamicPartitionMetadata()
dap2.groups.append(DynamicPartitionGroup(
name=
"abc", partition_names=[
"d",
"e",
"f"]))
merged_dap = DynamicPartitionMetadata()
merge_ota.MergeDynamicPartitionMetadata(merged_dap, dap1)
merge_ota.MergeDynamicPartitionMetadata(merged_dap, dap2)
self.assertEqual(len(merged_dap.groups),
1)
self.assertEqual(merged_dap.groups[
0].name,
"abc")
self.assertEqual(merged_dap.groups[
0].partition_names, [
"a",
"b",
"c",
"d",
"e",
"f"])