#!/bin/sh
set -e

verify_by_hash() {
    for hash_gen in SHA256:sha256sum SHA512:sha512sum; do
        hash=$(echo ${hash_gen} | cut -f1 -d:)
        gen=$(echo ${hash_gen} | cut -f2 -d:)
        testsuccess stat aptarchive/dists/unstable/main/binary-i386/by-hash/$hash/$($gen aptarchive/dists/unstable/main/binary-i386/Packages | cut -f1 -d' ')
        testsuccess stat aptarchive/dists/unstable/main/binary-i386/by-hash/$hash/$($gen aptarchive/dists/unstable/main/binary-i386/Packages.gz | cut -f1 -d' ')
    done
}

#
# main()
#
TESTDIR="$(readlink -f "$(dirname "$0")")"
. "$TESTDIR/framework"
setupenvironment
configarchitecture 'i386'
configcompression 'gz' '.'
confighashes 'SHA256' 'SHA512'

# enable by-hash in apt-ftparchive
echo 'APT::FTPArchive::DoByHash "1";' >> aptconfig.conf

# build one package
buildsimplenativepackage 'foo' 'i386' '1' 'unstable'
buildaptarchivefromincoming

# verify initial run
verify_by_hash
previous_hash=$(sha256sum aptarchive/dists/unstable/main/binary-i386/Packages | cut -f1 -d' ')

# insert new package
buildsimplenativepackage 'bar' 'i386' '1' 'unstable'
# and build again
buildaptarchivefromincoming

# ensure the new package packag is there
testsuccess zgrep "Package: bar" aptarchive/dists/unstable/main/binary-i386/Packages.gz

# ensure we have the by-hash stuff
verify_by_hash

# ensure the old hash is still there
testsuccess stat aptarchive/dists/unstable/main/binary-i386/by-hash/SHA256/$previous_hash

# ensure we have it in the Release file
testsuccess grep "Acquire-By-Hash: yes" aptarchive/dists/unstable/*Release

# now ensure gc work
for i in $(seq 3); do
    buildsimplenativepackage 'bar' 'i386' "$i" 'unstable'
    buildaptarchivefromincoming
done

hash_count=$(ls aptarchive/dists/unstable/main/binary-i386/by-hash/SHA256/|wc -l)
# we have 2 files (uncompressed, gz) per run, 5 runs in total
# by default apt-ftparchive keeps three generations (current plus 2 older)
msgtest "Check that gc for by-hash works… "
if [ "$hash_count" = "6" ]; then
    msgpass
else
    echo "Got $hash_count expected 6"
    msgfail
fi

# ensure the current generation is still there
verify_by_hash