android13/build/bazel/tests/apex/apex_test.sh

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."