releasetools: Add sanity test for sign_apex.

This ensures a matching interface between sign_apex and apex_utils.

The test apex `testdata/foo.apex` is generated by running
`system/apex/apexer/runtests.sh`.

Test: python -m unittest test_sign_apex
Test: atest releasetools_test
Change-Id: I7c14b1df2a3038ad206aa3e5aac084c47baaa00b
This commit is contained in:
Tao Bao
2019-06-26 14:54:14 -07:00
parent 90f638d842
commit c9c1b864ba
4 changed files with 62 additions and 14 deletions

View File

@@ -44,6 +44,7 @@ python_library_host {
"ota_from_target_files.py", "ota_from_target_files.py",
"ota_package_parser.py", "ota_package_parser.py",
"rangelib.py", "rangelib.py",
"sign_apex.py",
"sign_target_files_apks.py", "sign_target_files_apks.py",
"sparse_img.py", "sparse_img.py",
"target_files_diff.py", "target_files_diff.py",

View File

@@ -40,6 +40,20 @@ import common
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
def SignApexFile(apex_file, payload_key, container_key, signing_args=None):
"""Signs the given apex file."""
with open(apex_file, 'rb') as input_fp:
apex_data = input_fp.read()
return apex_utils.SignApex(
apex_data,
payload_key=payload_key,
container_key=container_key,
container_pw=None,
codename_to_api_level_map=None,
signing_args=signing_args)
def main(argv): def main(argv):
options = {} options = {}
@@ -76,20 +90,12 @@ def main(argv):
common.InitLogging() common.InitLogging()
input_zip = args[0] signed_apex = SignApexFile(
output_zip = args[1] args[0],
with open(input_zip) as input_fp: options['payload_key'],
apex_data = input_fp.read() options['container_key'],
options.get('payload_extra_args'))
signed_apex = apex_utils.SignApex( shutil.copyfile(signed_apex, args[1])
apex_data,
payload_key=options['payload_key'],
container_key=options['container_key'],
container_pw=None,
codename_to_api_level_map=None,
signing_args=options.get('payload_extra_args'))
shutil.copyfile(signed_apex, output_zip)
logger.info("done.") logger.info("done.")

View File

@@ -0,0 +1,41 @@
#
# Copyright (C) 2019 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.path
import common
import sign_apex
import test_utils
class SignApexTest(test_utils.ReleaseToolsTestCase):
def setUp(self):
self.testdata_dir = test_utils.get_testdata_dir()
self.assertTrue(os.path.exists(self.testdata_dir))
common.OPTIONS.search_path = test_utils.get_search_path()
@test_utils.SkipIfExternalToolsUnavailable()
def test_SignApexFile(self):
foo_apex = os.path.join(self.testdata_dir, 'foo.apex')
payload_key = os.path.join(self.testdata_dir, 'testkey_RSA4096.key')
container_key = os.path.join(self.testdata_dir, 'testkey')
signed_foo_apex = sign_apex.SignApexFile(
foo_apex,
payload_key,
container_key)
self.assertTrue(os.path.exists(signed_foo_apex))

BIN
tools/releasetools/testdata/foo.apex vendored Normal file

Binary file not shown.