#!/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."