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