#!/bin/bash -eu
#
# Copyright 2015 The Bazel Authors. All rights reserved.
# 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

# Integration tests for ijar zipper/unzipper


DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)

## Inputs
ZIPPER=${PWD}/$1
shift
UNZIP=$1
shift
ZIP=$1
shift

## Test framework
source ${DIR}/testenv.sh || { echo "testenv.sh not found!" >&2; exit 1; }

# Assertion
function assert_unzip_same_as_zipper() {
  local folder1=$(mktemp -d ${TEST_TMPDIR}/output.XXXXXXXX)
  local folder2=$(mktemp -d ${TEST_TMPDIR}/output.XXXXXXXX)
  local zipfile=$1
  shift
  (cd $folder1 && $UNZIP -q $zipfile $@ || true)  # ignore CRC32 errors
  (cd $folder2 && $ZIPPER x $zipfile $@)
  diff -r $folder1 $folder2 &> $TEST_log \
      || fail "Unzip and Zipper resulted in different output"
}

function assert_zipper_same_after_unzip() {
  local dir="$1"
  shift
  local zipfile=${TEST_TMPDIR}/output.zip
  (cd "${dir}" && $ZIPPER c ${zipfile} "$@")
  local folder=$(mktemp -d ${TEST_TMPDIR}/output.XXXXXXXX)
  (cd $folder && $UNZIP -q ${zipfile} || true)  # ignore CRC32 errors
  diff -r "${dir}" $folder &> $TEST_log \
      || fail "Unzip after zipper output differ"
  # Retry with compression
  (cd "${dir}" && $ZIPPER cC ${zipfile} "$@")
  local folder=$(mktemp -d ${TEST_TMPDIR}/output.XXXXXXXX)
  (cd $folder && $UNZIP -q ${zipfile} || true)  # ignore CRC32 errors
  diff -r "${dir}" $folder &> $TEST_log \
      || fail "Unzip after zipper output differ"
}

#### Tests

function test_zipper() {
  mkdir -p ${TEST_TMPDIR}/test/path/to/some
  mkdir -p ${TEST_TMPDIR}/test/some/other/path
  touch ${TEST_TMPDIR}/test/path/to/some/empty_file
  echo "toto" > ${TEST_TMPDIR}/test/path/to/some/file
  echo "titi" > ${TEST_TMPDIR}/test/path/to/some/other_file
  chmod +x ${TEST_TMPDIR}/test/path/to/some/other_file
  echo "tata" > ${TEST_TMPDIR}/test/file
  filelist="$(cd ${TEST_TMPDIR}/test && find . | sed 's|^./||' | grep -v '^.$')"

  assert_zipper_same_after_unzip ${TEST_TMPDIR}/test ${filelist}
  assert_unzip_same_as_zipper ${TEST_TMPDIR}/output.zip

  # Test @filelist format
  echo "${filelist}" >${TEST_TMPDIR}/test.content
  assert_zipper_same_after_unzip ${TEST_TMPDIR}/test @${TEST_TMPDIR}/test.content
  assert_unzip_same_as_zipper ${TEST_TMPDIR}/output.zip

  # Test flatten option
  (cd ${TEST_TMPDIR}/test && $ZIPPER cf ${TEST_TMPDIR}/output.zip ${filelist})
  $ZIPPER v ${TEST_TMPDIR}/output.zip >$TEST_log
  expect_log "^f .* file$"
  expect_log "^f .* other_file$"
  expect_not_log "path"
  expect_not_log "/"

  # Test adding leading garbage at the begining of the file (for
  # self-extractable binary).
  echo "abcdefghi" >${TEST_TMPDIR}/test.zip
  cat ${TEST_TMPDIR}/output.zip >>${TEST_TMPDIR}/test.zip
  $ZIPPER v ${TEST_TMPDIR}/test.zip >$TEST_log
  expect_log "^f .* file$"
  expect_log "^f .* other_file$"
  expect_not_log "path"
}

function test_zipper_junk_paths() {
  mkdir -p ${TEST_TMPDIR}/test/path/to/some
  mkdir -p ${TEST_TMPDIR}/test/some/other/path
  touch ${TEST_TMPDIR}/test/path/to/some/empty_file
  echo "toto" > ${TEST_TMPDIR}/test/path/to/some/file
  echo "titi" > ${TEST_TMPDIR}/test/path/to/some/other_file
  chmod +x ${TEST_TMPDIR}/test/path/to/some/other_file
  echo "tata" > ${TEST_TMPDIR}/test/file
  filelist="$(cd ${TEST_TMPDIR}/test && find . | sed 's|^./||' | grep -v '^.$')"

  # Test extract + flatten option
  (cd ${TEST_TMPDIR}/test && $ZIPPER c ${TEST_TMPDIR}/output.zip ${filelist})
  $ZIPPER vf ${TEST_TMPDIR}/output.zip >$TEST_log
  echo $TEST_log
  expect_log "^f .* file$"
  expect_log "^f .* other_file$"
  expect_not_log "path"
  expect_not_log "/"
}

function test_zipper_unzip_selective_files() {
  mkdir -p ${TEST_TMPDIR}/test/path/to/some
  mkdir -p ${TEST_TMPDIR}/test/some/other/path
  touch ${TEST_TMPDIR}/test/path/to/some/empty_file
  echo "toto" > ${TEST_TMPDIR}/test/path/to/some/file
  echo "titi" > ${TEST_TMPDIR}/test/path/to/some/other_file
  chmod +x ${TEST_TMPDIR}/test/path/to/some/other_file
  echo "tata" > ${TEST_TMPDIR}/test/file
  filelist="$(cd ${TEST_TMPDIR}/test && find . | sed 's|^./||' | grep -v '^.$')"

  assert_zipper_same_after_unzip ${TEST_TMPDIR}/test ${filelist}
  assert_unzip_same_as_zipper ${TEST_TMPDIR}/output.zip \
      path/to/some/empty_file path/to/some/other_file
}

function test_zipper_unzip_to_optional_dir() {
  mkdir -p ${TEST_TMPDIR}/test/path/to/some
  mkdir -p ${TEST_TMPDIR}/test/some/other/path
  touch ${TEST_TMPDIR}/test/path/to/some/empty_file
  echo "toto" > ${TEST_TMPDIR}/test/path/to/some/file
  echo "titi" > ${TEST_TMPDIR}/test/path/to/some/other_file
  chmod +x ${TEST_TMPDIR}/test/path/to/some/other_file
  echo "tata" > ${TEST_TMPDIR}/test/file
  filelist="$(cd ${TEST_TMPDIR}/test && find . | sed 's|^./||' | grep -v '^.$')"

  assert_zipper_same_after_unzip ${TEST_TMPDIR}/test ${filelist}
  assert_unzip_same_as_zipper ${TEST_TMPDIR}/output.zip -d output_dir2 \
      path/to/some/empty_file path/to/some/other_file
}

function test_zipper_compression() {
  echo -n > ${TEST_TMPDIR}/a
  for i in $(seq 1 1000); do
    echo -n "a" >> ${TEST_TMPDIR}/a
  done
  $ZIPPER cCf ${TEST_TMPDIR}/output.zip ${TEST_TMPDIR}/a
  local out_size=$(cat ${TEST_TMPDIR}/output.zip | wc -c | xargs)
  local in_size=$(cat ${TEST_TMPDIR}/a | wc -c | xargs)
  check_gt "${in_size}" "${out_size}" "Output size is greater than input size"

  rm -fr ${TEST_TMPDIR}/out
  mkdir -p ${TEST_TMPDIR}/out
  (cd ${TEST_TMPDIR}/out && $ZIPPER x ${TEST_TMPDIR}/output.zip)
  diff ${TEST_TMPDIR}/a ${TEST_TMPDIR}/out/a &> $TEST_log \
      || fail "Unzip using zipper after zipper output differ"

  rm -fr ${TEST_TMPDIR}/out
  mkdir -p ${TEST_TMPDIR}/out
  (cd ${TEST_TMPDIR}/out && $UNZIP -q ${TEST_TMPDIR}/output.zip)
  diff ${TEST_TMPDIR}/a ${TEST_TMPDIR}/out/a &> $TEST_log \
      || fail "Unzip after zipper output differ"
}

function test_zipper_specify_path() {
  mkdir -p ${TEST_TMPDIR}/files
  echo "toto" > ${TEST_TMPDIR}/files/a.txt
  echo "titi" > ${TEST_TMPDIR}/files/b.txt
  rm -fr ${TEST_TMPDIR}/expect/foo/bar
  mkdir -p ${TEST_TMPDIR}/expect/foo/bar
  touch ${TEST_TMPDIR}/expect/empty.txt
  echo "toto" > ${TEST_TMPDIR}/expect/foo/a.txt
  echo "titi" > ${TEST_TMPDIR}/expect/foo/bar/b.txt
  rm -fr ${TEST_TMPDIR}/out
  mkdir -p ${TEST_TMPDIR}/out

  ${ZIPPER} cC ${TEST_TMPDIR}/output.zip empty.txt= \
      foo/a.txt=${TEST_TMPDIR}/files/a.txt \
      foo/bar/b.txt=${TEST_TMPDIR}/files/b.txt
  (cd ${TEST_TMPDIR}/out && $UNZIP -q ${TEST_TMPDIR}/output.zip)
  diff -r ${TEST_TMPDIR}/expect ${TEST_TMPDIR}/out &> $TEST_log \
      || fail "Unzip after zipper output is not expected"
}

run_suite "zipper tests"
