140681896Sopenharmony_ci#!/usr/bin/env python 240681896Sopenharmony_ci# -*- coding: utf-8 -*- 340681896Sopenharmony_ci# Copyright (c) 2021 Huawei Device Co., Ltd. 440681896Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 540681896Sopenharmony_ci# you may not use this file except in compliance with the License. 640681896Sopenharmony_ci# You may obtain a copy of the License at 740681896Sopenharmony_ci# 840681896Sopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 940681896Sopenharmony_ci# 1040681896Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software 1140681896Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 1240681896Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1340681896Sopenharmony_ci# See the License for the specific language governing permissions and 1440681896Sopenharmony_ci# limitations under the License. 1540681896Sopenharmony_ci 1640681896Sopenharmony_ciimport os 1740681896Sopenharmony_ciimport subprocess 1840681896Sopenharmony_ciimport unittest 1940681896Sopenharmony_ci 2040681896Sopenharmony_cifrom image_class import IncUpdateImage 2140681896Sopenharmony_cifrom image_class import FullUpdateImage 2240681896Sopenharmony_cifrom test.create_package_data import create_input_package 2340681896Sopenharmony_cifrom test.create_package_data import clear_package 2440681896Sopenharmony_cifrom script_generator import VerseScript 2540681896Sopenharmony_cifrom utils import clear_resource 2640681896Sopenharmony_cifrom blocks_manager import BlocksManager 2740681896Sopenharmony_ci 2840681896Sopenharmony_ci 2940681896Sopenharmony_ciclass TestImage(unittest.TestCase): 3040681896Sopenharmony_ci 3140681896Sopenharmony_ci def setUp(self): 3240681896Sopenharmony_ci print("set up") 3340681896Sopenharmony_ci 3440681896Sopenharmony_ci def tearDown(self): 3540681896Sopenharmony_ci print("tear down") 3640681896Sopenharmony_ci 3740681896Sopenharmony_ci def test_update_full_image(self): 3840681896Sopenharmony_ci """ 3940681896Sopenharmony_ci update_full_image,raw image script content 4040681896Sopenharmony_ci :return: 4140681896Sopenharmony_ci """ 4240681896Sopenharmony_ci create_input_package("test_target_package", package_type="source") 4340681896Sopenharmony_ci with open('vendor.img', 'wb') as w_f: 4440681896Sopenharmony_ci with open('./test_target_package/vendor.img', "rb") as\ 4540681896Sopenharmony_ci r_f: 4640681896Sopenharmony_ci r_f.seek(10) 4740681896Sopenharmony_ci content = r_f.read() 4840681896Sopenharmony_ci w_f.write(content) 4940681896Sopenharmony_ci verse_script = VerseScript() 5040681896Sopenharmony_ci FullUpdateImage("", ["vendor"], verse_script, ["vendor.img"]).\ 5140681896Sopenharmony_ci update_full_image() 5240681896Sopenharmony_ci clear_resource() 5340681896Sopenharmony_ci check_re = len(verse_script.script) != 0 5440681896Sopenharmony_ci print(verse_script.script) 5540681896Sopenharmony_ci if os.path.exists('vendor.img'): 5640681896Sopenharmony_ci os.remove('vendor.img') 5740681896Sopenharmony_ci self.assertEqual(check_re, True) 5840681896Sopenharmony_ci clear_package("test_target_package") 5940681896Sopenharmony_ci 6040681896Sopenharmony_ci def test_get_file_data(self): 6140681896Sopenharmony_ci """ 6240681896Sopenharmony_ci get_file_data,file_pos is None 6340681896Sopenharmony_ci :return: 6440681896Sopenharmony_ci """ 6540681896Sopenharmony_ci create_input_package("test_target_package", package_type="source") 6640681896Sopenharmony_ci with open('./test_target_package/vendor.img', 'rb') as wo_f: 6740681896Sopenharmony_ci f_r = wo_f 6840681896Sopenharmony_ci default_zero_block = ('\0' * 4096).encode() 6940681896Sopenharmony_ci fill_data = ('\0' * 4096).encode()[:4] 7040681896Sopenharmony_ci check_re = IncUpdateImage.get_file_data( 7140681896Sopenharmony_ci 4096, 0, default_zero_block, 0, 7240681896Sopenharmony_ci None, fill_data, f_r) 7340681896Sopenharmony_ci self.assertEqual(check_re, default_zero_block) 7440681896Sopenharmony_ci 7540681896Sopenharmony_ci fill_data = ('\1' * 4096).encode()[:4] 7640681896Sopenharmony_ci check_re = IncUpdateImage.get_file_data( 7740681896Sopenharmony_ci 4096, 0, default_zero_block, 0, 7840681896Sopenharmony_ci None, fill_data, f_r) 7940681896Sopenharmony_ci self.assertEqual(check_re, None) 8040681896Sopenharmony_ci 8140681896Sopenharmony_ci clear_resource() 8240681896Sopenharmony_ci f_r.close() 8340681896Sopenharmony_ci clear_package("test_target_package") 8440681896Sopenharmony_ci 8540681896Sopenharmony_ci def test_get_blocks_list(self): 8640681896Sopenharmony_ci """ 8740681896Sopenharmony_ci get_zero_nonzero_blocks_list,data == default_zero_block 8840681896Sopenharmony_ci :return: 8940681896Sopenharmony_ci """ 9040681896Sopenharmony_ci default_zero_block = ('\0' * 4096).encode() 9140681896Sopenharmony_ci data = ('\0' * 4096).encode() 9240681896Sopenharmony_ci zero_blocks_list, nonzero_blocks_list, nonzero_groups_list = [], [], [] 9340681896Sopenharmony_ci zero_blocks_list, nonzero_blocks_list, nonzero_groups_list = \ 9440681896Sopenharmony_ci IncUpdateImage.get_zero_nonzero_blocks_list( 9540681896Sopenharmony_ci data, default_zero_block, 1, nonzero_blocks_list, 9640681896Sopenharmony_ci nonzero_groups_list, zero_blocks_list) 9740681896Sopenharmony_ci check_re = len(zero_blocks_list) != 0 9840681896Sopenharmony_ci self.assertEqual(check_re, True) 9940681896Sopenharmony_ci 10040681896Sopenharmony_ci data = ('\1' * 4096).encode() 10140681896Sopenharmony_ci zero_blocks_list, nonzero_blocks_list, nonzero_groups_list = \ 10240681896Sopenharmony_ci [], [0] * 4096, [] 10340681896Sopenharmony_ci zero_blocks_list, nonzero_blocks_list, nonzero_groups_list = \ 10440681896Sopenharmony_ci IncUpdateImage.get_zero_nonzero_blocks_list( 10540681896Sopenharmony_ci data, default_zero_block, 1, nonzero_blocks_list, 10640681896Sopenharmony_ci nonzero_groups_list, zero_blocks_list) 10740681896Sopenharmony_ci check_re = len(nonzero_groups_list) != 0 10840681896Sopenharmony_ci self.assertEqual(check_re, True) 10940681896Sopenharmony_ci 11040681896Sopenharmony_ci clear_resource() 11140681896Sopenharmony_ci 11240681896Sopenharmony_ci def test_get_file_map(self): 11340681896Sopenharmony_ci """ 11440681896Sopenharmony_ci get_file_map,if zero_blocks_list 11540681896Sopenharmony_ci :return: 11640681896Sopenharmony_ci """ 11740681896Sopenharmony_ci zero_blocks_list, nonzero_blocks_list, nonzero_groups_list = \ 11840681896Sopenharmony_ci [0] * 4096, [], [] 11940681896Sopenharmony_ci reserved_blocks = BlocksManager("0") 12040681896Sopenharmony_ci temp_file_map = {} 12140681896Sopenharmony_ci temp_file_map = \ 12240681896Sopenharmony_ci IncUpdateImage.get_file_map( 12340681896Sopenharmony_ci nonzero_blocks_list, nonzero_groups_list, reserved_blocks, 12440681896Sopenharmony_ci temp_file_map, zero_blocks_list) 12540681896Sopenharmony_ci check_re = len(temp_file_map) != 0 12640681896Sopenharmony_ci self.assertEqual(check_re, True) 12740681896Sopenharmony_ci 12840681896Sopenharmony_ci clear_resource() 12940681896Sopenharmony_ci 13040681896Sopenharmony_ci def test_read_ranges(self): 13140681896Sopenharmony_ci """ 13240681896Sopenharmony_ci read_ranges, SparseImage reads ranges. 13340681896Sopenharmony_ci :return: 13440681896Sopenharmony_ci """ 13540681896Sopenharmony_ci create_input_package("test_target_package", package_type="source") 13640681896Sopenharmony_ci image_path = "./test_target_package/vendor.img" 13740681896Sopenharmony_ci map_path = "./test_target_package/vendor.map" 13840681896Sopenharmony_ci cmd = ["e2fsdroid", "-B", map_path, 13940681896Sopenharmony_ci "-a", "/vendor", image_path, "-e"] 14040681896Sopenharmony_ci sub_p = subprocess.Popen( 14140681896Sopenharmony_ci cmd, shell=False, stdout=subprocess.PIPE, 14240681896Sopenharmony_ci stderr=subprocess.STDOUT) 14340681896Sopenharmony_ci sub_p.wait() 14440681896Sopenharmony_ci ranges_list = IncUpdateImage(image_path, map_path).\ 14540681896Sopenharmony_ci get_ranges(BlocksManager("2")) 14640681896Sopenharmony_ci check_re = len(ranges_list) != 0 14740681896Sopenharmony_ci self.assertEqual(check_re, True) 14840681896Sopenharmony_ci 14940681896Sopenharmony_ci clear_resource() 15040681896Sopenharmony_ci clear_package("test_target_package") 15140681896Sopenharmony_ci 15240681896Sopenharmony_ci def test_get_range_data(self): 15340681896Sopenharmony_ci """ 15440681896Sopenharmony_ci _get_range_data, SparseImage _get_range_data 15540681896Sopenharmony_ci :return: 15640681896Sopenharmony_ci """ 15740681896Sopenharmony_ci create_input_package("test_target_package", package_type="source") 15840681896Sopenharmony_ci image_path = "./test_target_package/vendor.img" 15940681896Sopenharmony_ci map_path = "./test_target_package/vendor.map" 16040681896Sopenharmony_ci cmd = ["e2fsdroid", "-B", map_path, 16140681896Sopenharmony_ci "-a", "/vendor", image_path, "-e"] 16240681896Sopenharmony_ci sub_p = subprocess.Popen( 16340681896Sopenharmony_ci cmd, shell=False, stdout=subprocess.PIPE, 16440681896Sopenharmony_ci stderr=subprocess.STDOUT) 16540681896Sopenharmony_ci sub_p.wait() 16640681896Sopenharmony_ci s_image = IncUpdateImage(image_path, map_path) 16740681896Sopenharmony_ci s_image.offset_value_list = [[39, 0, None, 10]] 16840681896Sopenharmony_ci ranges_list = s_image.get_ranges(BlocksManager("2")) 16940681896Sopenharmony_ci check_re = len(ranges_list) != 0 17040681896Sopenharmony_ci self.assertEqual(check_re, True) 17140681896Sopenharmony_ci 17240681896Sopenharmony_ci s_image.offset_value_list = [(2, 0, None, 1), (2, 2, None, 1)] 17340681896Sopenharmony_ci ranges_list = s_image.get_ranges(BlocksManager("2")) 17440681896Sopenharmony_ci check_re = len(ranges_list) != 0 17540681896Sopenharmony_ci self.assertEqual(check_re, True) 17640681896Sopenharmony_ci 17740681896Sopenharmony_ci s_image.offset_value_list = [(2, 0, None, 1), (2, 2, 1, 1)] 17840681896Sopenharmony_ci ranges_list = s_image.get_ranges(BlocksManager("2")) 17940681896Sopenharmony_ci check_re = len(ranges_list) != 0 18040681896Sopenharmony_ci self.assertEqual(check_re, True) 18140681896Sopenharmony_ci 18240681896Sopenharmony_ci clear_resource() 18340681896Sopenharmony_ci clear_package("test_target_package") 184