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