| #!/bin/bash | 
 | # Copyright 2018 The Fuchsia Authors. All rights reserved. | 
 | # Use of this source code is governed by a BSD-style license that can be | 
 | # found in the LICENSE file. | 
 |  | 
 | # Unit tests for //scripts/pave-prebuilt. | 
 | # | 
 | # Usage: pave-prebuilt-tests | 
 |  | 
 | set -o errexit | 
 | set -o nounset | 
 | set -o pipefail | 
 |  | 
 | # Read in the test framework | 
 | source "$(cd "$(dirname "${BASH_SOURCE[0]}")"/lib >/dev/null 2>&1 && pwd)"/common.sh || exit $? | 
 | # Read in the tool under test. Set TESTING=1 to avoid invoking main(). | 
 | readonly PARENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" | 
 | TESTING=1 source "${PARENT_DIR}/../pave-prebuilt" | 
 |  | 
 | # expect_archive_produces_id <archive-path> <expected-id> | 
 | function expect_archive_produces_id { | 
 |   local archive="$1" | 
 |   local expected_id="$2" | 
 |  | 
 |   # archive_to_unique_id expects the file to live in the filesystem, | 
 |   # so create an empty file at a related path under a temp directory. | 
 |   local tmpdir | 
 |   tmpdir="$(mktemp -d)" | 
 |   local full_archive="${tmpdir}/${archive}" | 
 |   mkdir -p "$(dirname "${full_archive}")" | 
 |   touch "${full_archive}" | 
 |  | 
 |   EXPECT_EQ \ | 
 |     "${expected_id}" \ | 
 |     "$(archive_to_unique_id "${full_archive}")" \ | 
 |     "input filename '${full_archive}'" | 
 |  | 
 |   rm -rf "${tmpdir}" | 
 | } | 
 |  | 
 | function test::archive_to_unique_id { | 
 |   # Expected ID when falling back to the "hash the archive contents" case. | 
 |   # Hash is the SHA-1 sum of an empty file. | 
 |   local fallback_hash='hash-da39a3ee5e6b4b0d3255bfef95601890afd80709' | 
 |  | 
 |   # Stem tests # | 
 |  | 
 |   # A long hex hash followed by an extension is a stem. | 
 |   expect_archive_produces_id \ | 
 |     '/home/USER/Downloads/625284e057cc25a77cdab944d46ab3de692bade1.tar' \ | 
 |     'stem-625284e057cc25a77cdab944d46ab3de692bade1' | 
 |  | 
 |   # Extension doesn't matter. | 
 |   expect_archive_produces_id \ | 
 |     '/home/USER/Downloads/625284e057cc25a77cdab944d46ab3de692bade1.png' \ | 
 |     'stem-625284e057cc25a77cdab944d46ab3de692bade1' | 
 |  | 
 |   # A short hex hash is not a stem, and falls back to hashing. | 
 |   expect_archive_produces_id \ | 
 |     '/home/USER/Downloads/625284e0.tar' \ | 
 |     "${fallback_hash}" | 
 |  | 
 |   # A long hex hash followed by non-hex before the extension is not a stem, | 
 |   # and falls back to hashing. | 
 |   expect_archive_produces_id \ | 
 |     '/home/USER/Downloads/625284e057cc25a77cdab944d46ab3de692bade1__ZZZZZ.tar' \ | 
 |     "${fallback_hash}" | 
 |  | 
 |   # Build ID tests # | 
 |  | 
 |   # A "fuchsia.*" file living in a numbered directory is a build ID. | 
 |   expect_archive_produces_id \ | 
 |     '/home/USER/.cache/builds/8937296116261653552/fuchsia.tar.gz' \ | 
 |     'build-8937296116261653552' | 
 |  | 
 |   # Extension dosen't matter. | 
 |   expect_archive_produces_id \ | 
 |     '/home/USER/.cache/builds/8937296116261653552/fuchsia.png' \ | 
 |     'build-8937296116261653552' | 
 |  | 
 |   # A "fuchsia.*" file living in a small-numbered directory is not a build ID, | 
 |   # and falls back to hashing. | 
 |   expect_archive_produces_id \ | 
 |     '/home/USER/.cache/builds/552/fuchsia.tar.gz' \ | 
 |     "${fallback_hash}" | 
 |  | 
 |   # A "fuchsia.*" file living in a number-prefixed directory is not a build ID, | 
 |   # and falls back to hashing. | 
 |   expect_archive_produces_id \ | 
 |     '/home/USER/.cache/builds/8937296116261653552__ZZZZZ/fuchsia.tar.gz' \ | 
 |     "${fallback_hash}" | 
 |  | 
 |   # A "fuchsia.*" file living in a non-numbered directory is not a build ID, | 
 |   # and falls back to hashing. | 
 |   expect_archive_produces_id \ | 
 |     '/home/USER/Downloads/fuchsia.tar.gz' \ | 
 |     "${fallback_hash}" | 
 | } | 
 |  | 
 | # Build ID is sniffed even when archive is passed as a relative path. | 
 | function test::archive_to_unique_id_relative { | 
 |   local tmpdir | 
 |   tmpdir="$(mktemp -d)" | 
 |   local archive='/home/USER/.cache/builds/8937296116261653552/fuchsia.tar.gz' | 
 |   local full_archive="${tmpdir}/${archive}" | 
 |   mkdir -p "$(dirname "${full_archive}")" | 
 |   touch "${full_archive}" | 
 |  | 
 |   local unique_id | 
 |   unique_id="$( | 
 |     cd "$(dirname "${full_archive}")" | 
 |     archive_to_unique_id ./fuchsia.tar.gz | 
 |   )" | 
 |  | 
 |   EXPECT_EQ \ | 
 |     'build-8937296116261653552' \ | 
 |     "${unique_id}" \ | 
 |     "input filename './fuchsia.tar.gz'" | 
 |  | 
 |   rm -rf "${tmpdir}" | 
 | } | 
 |  | 
 | test_main "$@" |