relesetools: Support running all the unittests with atest.
All the unittests will be built into releasetools_test. One can run the tests with `atest releasetools_test` or the traditional way `test_utils.py`. The atest way is recommended, which additionally builds the required tools. With the current support in Soong, we can't pack the built tools into releasetools_test yet. So running `releasetools_test` alone in clound would fail. Follow-up CLs will address the issue in order to deploy the tests with TEST_MAPPING. Bug: 112080715 Test: `atest releasetools_test` Change-Id: Ica95517a5ab326f4e58fc57c6c2c276cfe882f3c
This commit is contained in:
72
tools/releasetools/Android.bp
Normal file
72
tools/releasetools/Android.bp
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
python_defaults {
|
||||||
|
name: "releasetools_test_defaults",
|
||||||
|
version: {
|
||||||
|
py2: {
|
||||||
|
enabled: true,
|
||||||
|
embedded_launcher: false,
|
||||||
|
},
|
||||||
|
py3: {
|
||||||
|
enabled: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
python_library_host {
|
||||||
|
name: "releasetools_lib",
|
||||||
|
defaults: ["releasetools_test_defaults"],
|
||||||
|
srcs: [
|
||||||
|
"add_img_to_target_files.py",
|
||||||
|
"apex_utils.py",
|
||||||
|
"blockimgdiff.py",
|
||||||
|
"build_image.py",
|
||||||
|
"build_super_image.py",
|
||||||
|
"check_ota_package_signature.py",
|
||||||
|
"check_target_files_signatures.py",
|
||||||
|
"common.py",
|
||||||
|
"edify_generator.py",
|
||||||
|
"img_from_target_files.py",
|
||||||
|
"make_recovery_patch.py",
|
||||||
|
"merge_target_files.py",
|
||||||
|
"ota_from_target_files.py",
|
||||||
|
"ota_package_parser.py",
|
||||||
|
"rangelib.py",
|
||||||
|
"sign_target_files_apks.py",
|
||||||
|
"sparse_img.py",
|
||||||
|
"target_files_diff.py",
|
||||||
|
"validate_target_files.py",
|
||||||
|
"verity_utils.py",
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
python_test_host {
|
||||||
|
name: "releasetools_test",
|
||||||
|
defaults: ["releasetools_test_defaults"],
|
||||||
|
main: "test_utils.py",
|
||||||
|
srcs: [
|
||||||
|
"test_*.py",
|
||||||
|
],
|
||||||
|
libs: [
|
||||||
|
"releasetools_lib",
|
||||||
|
],
|
||||||
|
data: [
|
||||||
|
"testdata/*",
|
||||||
|
],
|
||||||
|
required: [
|
||||||
|
"otatools",
|
||||||
|
],
|
||||||
|
test_suites: ["general-tests"],
|
||||||
|
}
|
@@ -56,8 +56,10 @@ class ApexUtilsTest(test_utils.ReleaseToolsTestCase):
|
|||||||
|
|
||||||
def test_SignApexPayload_withSignerHelper(self):
|
def test_SignApexPayload_withSignerHelper(self):
|
||||||
payload_file = self._GetTestPayload()
|
payload_file = self._GetTestPayload()
|
||||||
|
signing_helper = os.path.join(self.testdata_dir, 'signing_helper.sh')
|
||||||
|
os.chmod(signing_helper, 0o700)
|
||||||
payload_signer_args = '--signing_helper_with_files {}'.format(
|
payload_signer_args = '--signing_helper_with_files {}'.format(
|
||||||
os.path.join(self.testdata_dir, 'signing_helper.sh'))
|
signing_helper)
|
||||||
apex_utils.SignApexPayload(
|
apex_utils.SignApexPayload(
|
||||||
payload_file,
|
payload_file,
|
||||||
self.payload_key,
|
self.payload_key,
|
||||||
|
@@ -1233,6 +1233,7 @@ class PayloadSignerTest(test_utils.ReleaseToolsTestCase):
|
|||||||
"""Uses testdata/payload_signer.sh as the external payload signer."""
|
"""Uses testdata/payload_signer.sh as the external payload signer."""
|
||||||
common.OPTIONS.payload_signer = os.path.join(
|
common.OPTIONS.payload_signer = os.path.join(
|
||||||
self.testdata_dir, 'payload_signer.sh')
|
self.testdata_dir, 'payload_signer.sh')
|
||||||
|
os.chmod(common.OPTIONS.payload_signer, 0o700)
|
||||||
common.OPTIONS.payload_signer_args = [
|
common.OPTIONS.payload_signer_args = [
|
||||||
os.path.join(self.testdata_dir, 'testkey.pk8')]
|
os.path.join(self.testdata_dir, 'testkey.pk8')]
|
||||||
payload_signer = PayloadSigner()
|
payload_signer = PayloadSigner()
|
||||||
|
25
tools/releasetools/test_utils.py
Normal file → Executable file
25
tools/releasetools/test_utils.py
Normal file → Executable file
@@ -1,3 +1,4 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
#
|
#
|
||||||
# Copyright (C) 2018 The Android Open Source Project
|
# Copyright (C) 2018 The Android Open Source Project
|
||||||
#
|
#
|
||||||
@@ -40,6 +41,19 @@ def get_testdata_dir():
|
|||||||
|
|
||||||
def get_search_path():
|
def get_search_path():
|
||||||
"""Returns the search path that has 'framework/signapk.jar' under."""
|
"""Returns the search path that has 'framework/signapk.jar' under."""
|
||||||
|
|
||||||
|
def signapk_exists(path):
|
||||||
|
signapk_path = os.path.realpath(
|
||||||
|
os.path.join(path, 'framework', 'signapk.jar'))
|
||||||
|
return os.path.exists(signapk_path)
|
||||||
|
|
||||||
|
# Try with ANDROID_BUILD_TOP first.
|
||||||
|
full_path = os.path.realpath(os.path.join(
|
||||||
|
os.environ.get('ANDROID_BUILD_TOP', ''), 'out', 'host', 'linux-x86'))
|
||||||
|
if signapk_exists(full_path):
|
||||||
|
return full_path
|
||||||
|
|
||||||
|
# Otherwise try going with relative pathes.
|
||||||
current_dir = os.path.dirname(os.path.realpath(__file__))
|
current_dir = os.path.dirname(os.path.realpath(__file__))
|
||||||
for path in (
|
for path in (
|
||||||
# In relative to 'build/make/tools/releasetools' in the Android source.
|
# In relative to 'build/make/tools/releasetools' in the Android source.
|
||||||
@@ -47,9 +61,7 @@ def get_search_path():
|
|||||||
# Or running the script unpacked from otatools.zip.
|
# Or running the script unpacked from otatools.zip.
|
||||||
['..']):
|
['..']):
|
||||||
full_path = os.path.realpath(os.path.join(current_dir, *path))
|
full_path = os.path.realpath(os.path.join(current_dir, *path))
|
||||||
signapk_path = os.path.realpath(
|
if signapk_exists(full_path):
|
||||||
os.path.join(full_path, 'framework', 'signapk.jar'))
|
|
||||||
if os.path.exists(signapk_path):
|
|
||||||
return full_path
|
return full_path
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@@ -123,3 +135,10 @@ class ReleaseToolsTestCase(unittest.TestCase):
|
|||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
common.Cleanup()
|
common.Cleanup()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
testsuite = unittest.TestLoader().discover(
|
||||||
|
os.path.dirname(os.path.realpath(__file__)))
|
||||||
|
# atest needs a verbosity level of >= 2 to correctly parse the result.
|
||||||
|
unittest.TextTestRunner(verbosity=2).run(testsuite)
|
||||||
|
Reference in New Issue
Block a user