import os
import shutil
import unittest
import sys
import zipfile
from build_update import increment_image_processing
from build_update import main
from build_update import check_update_package
from build_update import check_miss_private_key
from build_update import check_target_package_path
from test.create_package_data import clear_package
from test.create_package_data import create_input_package
from script_generator import VerseScript
from build_update import check_incremental_args
from test.fake_data import RSA_PRIVATE_KEY_DATA
from utils import OPTIONS_MANAGER
from utils import clear_resource
from build_update import check_package_version
from build_update import private_key_check
class TestUpdateUtils(unittest.TestCase):
def setUp(self):
print("set up")
def tearDown(self):
print("tear down")
def test_update_pkg(self):
"""
The whole process
:return:
"""
create_input_package("test_target_package")
create_input_package("test_source_package", package_type="source")
if not os.path.exists("./output_test"):
os.mkdir("./output_test")
sys.argv.clear()
sys.argv.append("build_update.py")
sys.argv.append("./test_target_package/")
sys.argv.append("./output_test/demo")
sys.argv.append("-s")
sys.argv.append("./test_source_package.zip")
sys.argv.append("-pk")
sys.argv.append("./rsa_private_key2048.pem")
main()
output = "./output_test/demo"
pkg_re = os.path.join(output, os.listdir(output)[0]).endswith('zip')
shutil.rmtree("./output_test")
self.assertEqual(pkg_re, True)
clear_package("test_target_package")
clear_package("test_source_package")
def test_updater_partitions(self):
"""
Update partitions
:return:
"""
create_input_package(
"test_target_package_updater_partition",
package_type="source", is_updater_partitions=True)
if not os.path.exists("./output_test"):
os.mkdir("./output_test")
sys.argv.clear()
sys.argv.append("build_update.py")
sys.argv.append(
"./test_target_package_updater_partition.zip")
sys.argv.append("./output_test/demo")
sys.argv.append("-pk")
sys.argv.append("./rsa_private_key2048.pem")
sys.argv.append("-pf")
sys.argv.append("./partition_file.xml")
main()
output = "./output_test/demo"
pkg_re = os.path.join(output, os.listdir(output)[0]).endswith('zip')
shutil.rmtree("./output_test")
self.assertEqual(pkg_re, True)
clear_package("test_target_package_updater_partition")
def test_updater_partitions2(self):
"""
Update partitions,The incoming file does not exist:
nonexistent_path.xml
:return:
"""
create_input_package(
"test_target_package_updater_partition",
package_type="source", is_updater_partitions=True)
if not os.path.exists("./output_test"):
os.mkdir("./output_test")
sys.argv.clear()
sys.argv.append("build_update.py")
sys.argv.append(
"./test_target_package_updater_partition.zip")
sys.argv.append("./output_test/demo")
sys.argv.append("-pk")
sys.argv.append("./rsa_private_key2048.pem")
sys.argv.append("-pf")
sys.argv.append("../nonexistent_path.xml")
main()
output = "./output_test"
pkg_re = len(os.listdir(output))
self.assertEqual(pkg_re, 0)
shutil.rmtree("./output_test")
clear_resource()
clear_package("test_target_package_updater_partition")
def test_update_pkg_nozip(self):
"""
The whole process, no zip mode
:return:
"""
create_input_package(
"test_target_package_nozip", package_type="source")
if not os.path.exists("./output_test"):
os.mkdir("./output_test")
sys.argv.clear()
sys.argv.append("build_update.py")
sys.argv.append("./test_target_package_nozip.zip")
sys.argv.append("./output_test/demo")
sys.argv.append("-nz")
sys.argv.append("-pk")
sys.argv.append("./rsa_private_key2048.pem")
main()
output = "./output_test/demo"
pkg_re = os.path.join(output, os.listdir(output)[0]).endswith('bin')
shutil.rmtree("./output_test")
self.assertEqual(pkg_re, True)
clear_package("test_target_package_nozip")
def test_type_check(self):
"""
Input parameter type detection, type_check return False,
-s parameter does not exist.
:return:
"""
create_input_package(
"test_target_package_nozip", package_type="source")
if not os.path.exists("./output_test"):
os.mkdir("./output_test")
sys.argv.clear()
sys.argv.append("build_update.py")
sys.argv.append("./test_target_package_nozip.zip")
sys.argv.append("./output_test/demo")
sys.argv.append("-s")
sys.argv.append("../test_type_check.test")
sys.argv.append("-pk")
sys.argv.append("./rsa_private_key2048.pem")
main()
output = "./output_test/"
pkg_re = len(os.listdir(output))
shutil.rmtree("./output_test")
self.assertEqual(pkg_re, 0)
clear_resource()
clear_package("test_target_package_nozip")
def test_check_update_package(self):
"""
Input parameter type detection, check_update_package return False,
update_package parameter does not exist.
:return:
"""
create_input_package(
"test_target_package_nozip", package_type="source")
if not os.path.exists("./output_test"):
os.mkdir("./output_test")
output = "./output_test/demo"
if os.path.exists(output):
shutil.rmtree(output)
sys.argv.clear()
sys.argv.append("build_update.py")
sys.argv.append("./test_target_package_nozip.zip")
sys.argv.append("test_build_update.py")
sys.argv.append("-pk")
sys.argv.append("./rsa_private_key2048.pem")
main()
output = "./output_test/"
pkg_re = len(os.listdir(output))
shutil.rmtree("./output_test")
self.assertEqual(pkg_re, 0)
clear_resource()
clear_package("test_target_package_nozip")
def test_check_update_package1(self):
"""
Input parameter type detection, check_update_package return False,
update_package parameter is file.
:return:
"""
arg = check_update_package("test_build_update.py")
self.assertEqual(arg, False)
def test_check_update_package2(self):
"""
Input parameter type detection, check_update_package return False,
make update_package failed.
:return:
"""
arg = check_update_package("")
self.assertEqual(arg, False)
def test_check_miss_private_key(self):
"""
check_miss_private_key, -pk parameter is None.
:return:
"""
check_re = check_miss_private_key(None)
self.assertEqual(check_re, False)
def test_check_target_package_path(self):
"""
Input parameter type detection, check_target_package_path return False,
target_package parameter does not exist.
:return:
"""
target_package = "nonexistent_path.test"
check_re = check_target_package_path(target_package)
self.assertEqual(check_re, False)
def test_check_target_package_path2(self):
"""
Input parameter type detection, check_target_package_path return False,
Check target_package dir.
:return:
"""
target_package = "test.zip"
zip_obj = zipfile.ZipFile(target_package, "w")
with open('test.file', 'w') as w_f:
w_f.write('test')
zip_obj.write('test.file', 'test.file')
zip_obj.write('test.file', 'test2.file')
zip_obj.close()
check_re = check_target_package_path(target_package)
os.remove(target_package)
os.remove('test.file')
self.assertEqual(check_re, False)
def test_check_incremental_args(self):
"""
check_incremental_args, Parameter exception, return False
:return:
"""
create_input_package(
"test_source_package", package_type="source")
check_re = check_incremental_args(False, None, None, ["vendor"])
self.assertEqual(check_re, False)
check_re = check_incremental_args(True, None, "", ["vendor"])
self.assertEqual(check_re, False)
check_re = check_incremental_args(False, "", "", ["vendor"])
self.assertEqual(check_re, False)
OPTIONS_MANAGER.source_package_dir = "./"
check_re = check_incremental_args(False, None, "", ["vendor"])
self.assertEqual(check_re, False)
OPTIONS_MANAGER.target_package_version = \
"Hi3516DV300-eng 10 QP1A.190711.019"
check_re = check_incremental_args(
False, None, "./test_source_package.zip", ["vendor"])
clear_resource()
self.assertEqual(check_re, False)
clear_package("test_source_package")
def test_check_userdata_image(self):
"""
check_userdata_image, userdata does not upgrade not allowed.
:return:
"""
create_input_package(
"test_target_package_userdata", package_type="source",
has_userdata=True)
if not os.path.exists("./output_test"):
os.mkdir("./output_test")
sys.argv.clear()
sys.argv.append("build_update.py")
sys.argv.append(
"./test_target_package_userdata.zip")
sys.argv.append("./output_test/demo")
sys.argv.append("-pk")
sys.argv.append("./rsa_private_key2048.pem")
main()
output = "./output_test/demo"
pkg_re = os.path.exists(output)
shutil.rmtree("./output_test")
self.assertEqual(pkg_re, False)
clear_resource()
clear_package("test_target_package_userdata")
def test_check_images_list(self):
"""
check_images_list, Both full list and inc list are empty.
:return:
"""
create_input_package(
"test_target_package_inc_full_all_none", package_type="source",
is_inc_full_none=True)
if not os.path.exists("./output_test"):
os.mkdir("./output_test")
sys.argv.clear()
sys.argv.append("build_update.py")
sys.argv.append(
"./test_target_package_inc_full_all_none.zip")
sys.argv.append("./output_test/demo")
sys.argv.append("-pk")
sys.argv.append("./rsa_private_key2048.pem")
main()
output = "./output_test/demo"
pkg_re = os.path.exists(output)
shutil.rmtree("./output_test")
self.assertEqual(pkg_re, False)
clear_resource()
clear_package("test_target_package_inc_full_all_none")
def test_check_package_version(self):
"""
check_package_version, Exception in version number comparison.
:return:
"""
target_package_version = \
"test version num"
check_re = check_package_version(
target_package_version, "Hi3516DV300-eng 10 QP1A.190711.020")
clear_resource()
self.assertEqual(check_re, False)
def test_increment_image_processing(self):
"""
increment_image_processing,Exception in inc process, return False
:return:
"""
create_input_package("test_target_package", package_type="target")
create_input_package("test_target_package_miss_image",
package_type="target",
is_miss_image=True)
create_input_package(
"test_source_package_miss_image", package_type="source",
is_miss_image=True)
if not os.path.exists("./output_test"):
os.mkdir("./output_test")
verse_script = VerseScript()
check_re = increment_image_processing(
verse_script, ['test'], "", "")
self.assertEqual(check_re, False)
check_re = increment_image_processing(
verse_script, ['vendor'], "./test_target_package/",
"./test_target_package/")
self.assertEqual(check_re, False)
with open('vendor.img', 'w') as f_w:
f_w.write('test content')
with open('vendor.map', 'w') as f_w:
f_w.write('test content')
check_re = increment_image_processing(
verse_script, ['vendor'], "", "")
os.remove('vendor.img')
os.remove('vendor.map')
self.assertEqual(check_re, False)
sys.argv.clear()
sys.argv.append("build_update.py")
sys.argv.append(
"./test_target_package_miss_image")
sys.argv.append("./output_test/demo")
sys.argv.append("-s")
sys.argv.append("./test_source_package_miss_image.zip")
sys.argv.append("-pk")
sys.argv.append("./rsa_private_key2048.pem")
main()
output = "./output_test/demo"
pkg_re = os.path.exists(output)
self.assertEqual(pkg_re, False)
shutil.rmtree("./output_test")
clear_resource()
clear_package("test_target_package")
clear_package("test_target_package_miss_image")
clear_package("test_source_package_miss_image")
def test_target_package_path_return(self):
"""
check_target_package_path, return False
:return:
"""
with open("./rsa_private_key2048.pem", "wb") as w_f:
w_f.write(RSA_PRIVATE_KEY_DATA)
if not os.path.exists("./output_test"):
os.mkdir("./output_test")
sys.argv.clear()
sys.argv.append("build_update.py")
sys.argv.append("./")
sys.argv.append("./output_test/demo")
sys.argv.append("-pk")
sys.argv.append("./rsa_private_key2048.pem")
main()
output = "./output_test/demo"
pkg_re = os.path.exists(output)
shutil.rmtree("./output_test")
self.assertEqual(pkg_re, False)
clear_resource()
if os.path.exists("./rsa_private_key2048.pem"):
os.remove("./rsa_private_key2048.pem")
def test_get_update_info_return(self):
"""
get_update_info, return False
:return:
"""
create_input_package(
"test_target_package_miss_version_list", package_type="source",
is_miss_version_list=True)
if not os.path.exists("./output_test"):
os.mkdir("./output_test")
sys.argv.clear()
sys.argv.append("build_update.py")
sys.argv.append(
"./test_target_package_miss_version_list.zip")
sys.argv.append("./output_test/demo")
sys.argv.append("-pk")
sys.argv.append("./rsa_private_key2048.pem")
main()
output = "./output_test/demo"
pkg_re = os.path.exists(output)
shutil.rmtree("./output_test")
self.assertEqual(pkg_re, False)
clear_resource()
clear_package("test_target_package_miss_version_list")
def test_build_update_package(self):
"""
build_update_package, return False
:return:
"""
create_input_package(
"test_target_package_miss_updater_binary", package_type="source",
is_miss_updater_binary=True)
if not os.path.exists("./output_test"):
os.mkdir("./output_test")
sys.argv.clear()
sys.argv.append("build_update.py")
sys.argv.append(
"./test_target_package_miss_updater_binary.zip")
sys.argv.append("./output_test/")
sys.argv.append("-pk")
sys.argv.append("./rsa_private_key2048.pem")
main()
output = "./output_test/"
pkg_re = os.path.exists(output)
shutil.rmtree("./output_test")
self.assertEqual(pkg_re, True)
clear_resource()
clear_package("test_target_package_miss_updater_binary")
def test_on_server(self):
"""
Signing on server.
:return:
"""
create_input_package(
"test_target_package_on_server", package_type="source")
if not os.path.exists("./output_test"):
os.mkdir("./output_test")
sys.argv.clear()
sys.argv.append("build_update.py")
sys.argv.append(
"./test_target_package_on_server.zip")
sys.argv.append("./output_test/demo")
sys.argv.append("-pk")
sys.argv.append("ON_SERVER")
main()
output = "./output_test/demo"
pkg_re = os.path.exists(output)
shutil.rmtree("./output_test")
self.assertEqual(pkg_re, True)
clear_resource()
clear_package("test_target_package_on_server")
def test_private_key_check(self):
"""
private_key_check, check private key param.
:return:
"""
check_re = private_key_check("test_private_key_check")
self.assertEqual(check_re, False)