88 lines
2.6 KiB
Bash
Executable File
88 lines
2.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Copyright (C) 2022 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.
|
|
#
|
|
set -xeuo pipefail
|
|
|
|
readonly arg_apex_filepath=$1
|
|
arg_compressed=false
|
|
[ $# -eq 2 ] && [ "$2" = "compressed" ] && arg_compressed=true
|
|
|
|
readonly ZIPPER=$(rlocation bazel_tools/tools/zip/zipper/zipper)
|
|
readonly -a APEX_FILES=(
|
|
"apex_manifest.pb"
|
|
"AndroidManifest.xml"
|
|
"apex_payload.img"
|
|
"apex_pubkey"
|
|
"META-INF/CERT\.SF"
|
|
"META-INF/CERT\.RSA"
|
|
"META-INF/MANIFEST\.MF"
|
|
)
|
|
readonly -a CAPEX_FILES=(
|
|
"apex_manifest.pb"
|
|
"AndroidManifest.xml"
|
|
"original_apex"
|
|
"apex_pubkey"
|
|
"META-INF/CERT\.SF"
|
|
"META-INF/CERT\.RSA"
|
|
"META-INF/MANIFEST\.MF"
|
|
)
|
|
|
|
# Check if apex file contains specified files
|
|
function apex_contains_files() {
|
|
local apex_filepath=$1
|
|
shift
|
|
local expected_files=("$@")
|
|
local apex_entries=$($ZIPPER v "$apex_filepath")
|
|
for file in "${expected_files[@]}"; do
|
|
if ! echo -e "$apex_entries" | grep "$file"; then
|
|
echo "Failed to find file $file in $apex_filepath"
|
|
exit 1
|
|
fi
|
|
done
|
|
}
|
|
|
|
# Test compressed apex file required files.
|
|
function test_capex_contains_required_files() {
|
|
if [ "${arg_apex_filepath: -6}" != ".capex" ]; then
|
|
echo "@arg_apex_filepath does not have .capex as extension."
|
|
exit 1
|
|
fi
|
|
apex_contains_files "$arg_apex_filepath" "${CAPEX_FILES[@]}"
|
|
|
|
# Check files in original_apex extracted from the compressed apex file
|
|
local apex_file_dir=$(dirname "$arg_apex_filepath")
|
|
local extracted_capex=$(mktemp -d -p "$apex_file_dir")
|
|
$ZIPPER x "$arg_apex_filepath" -d "$extracted_capex"
|
|
apex_contains_files "$extracted_capex/original_apex" "${APEX_FILES[@]}"
|
|
rm -rf "${extracted_capex}"
|
|
}
|
|
|
|
# Test apex file contains required files
|
|
function test_apex_contains_required_files() {
|
|
if [ "${arg_apex_filepath: -5}" != ".apex" ]; then
|
|
echo "@arg_apex_filepath does not have .apex as extension."
|
|
exit 1
|
|
fi
|
|
apex_contains_files "$arg_apex_filepath" "${APEX_FILES[@]}"
|
|
}
|
|
|
|
if [ $arg_compressed == true ]; then
|
|
test_capex_contains_required_files
|
|
else
|
|
test_apex_contains_required_files
|
|
fi
|
|
|
|
echo "Passed all test cases." |