# Global shell definitions for the autotest test suite

PATH="/synosrc/DSM7.0/ds.base/source/debsig-verify-0.x/src:$PATH"
export PATH

# Setup a sane environment
LC_ALL=C
export LC_ALL

TZ=UTC0
export TZ

# Define helper variables and functions
TESTDATA="/synosrc/DSM7.0/ds.base/source/debsig-verify-0.x/test"
TESTPOLICIES="$TESTDATA/policies"
TESTKEYRINGS="$TESTDATA/keyrings"
TESTKEYID="FAD46790DE88C7E2"

DEBSIG="debsig-verify -v -d --policies-dir $TESTPOLICIES --keyrings-dir $TESTKEYRINGS"

GPG=gpg
GPGOPTS="--ignore-time-conflict --no-options --no-default-keyring
         --no-auto-check-trustdb --trust-model=always"

# Check if we need to manage the agent ourselves.
if gpgconf -n --kill gpg-agent >/dev/null 2>&1; then
  GPGAGENT_MANAGED=true
else
  GPGAGENT_MANAGED=false
fi

trap debsig_teardown_gnupg EXIT HUP INT QUIT TERM

debsig_setup_gnupg ()
{
  # Create the GnuPG home directory.
  export GNUPGHOME=$(mktemp --tmpdir -d debsig-test-tmp.XXXXXXXXXX)
  TESTGNUPG=$GNUPGHOME
  chmod 0700 $GNUPGHOME

  # For recent GnuPG versions, start the agent explicitly.
  if $GPGAGENT_MANAGED; then
    gpgconf --launch gpg-agent
  fi

  # Import the keys.
  $GPG $GPGOPTS -v --batch --import $TESTKEYRINGS/$TESTKEYID/pubring.gpg
  $GPG $GPGOPTS -v --batch --import $TESTKEYRINGS/$TESTKEYID/secring.gpg
}

debsig_teardown_gnupg ()
{
  if $GPGAGENT_MANAGED; then
    gpgconf --kill gpg-agent
  fi
  rm -rf "$TESTGNUPG"
  unset GNUPGHOME
}

debsig_make_deb ()
{
  local debname="$1"
  local debversion="$2"
  local debdir="${debname}_${debversion}"
  local debpkg="${debdir}.deb"

  # Make a .deb package.
  mkdir -p $debdir/DEBIAN
  cat > $debdir/DEBIAN/control <<EOF
Package: $debname
Version: $debversion
Architecture: all
Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
Description: Signature Test Package
EOF
  mkdir -p $debdir/usr/share/doc/
  echo "Debsig testing deb" > $debdir/usr/share/doc/README
  dpkg-deb -b "$debdir" "$debpkg"
}

debsig_make_sig_bad ()
{
  local debpkg="$1_$2.deb"

  # Add a bogus signature to a .deb package.
  debsig_setup_gnupg
  $GPG $GPGOPTS --detach-sig >_gpgorigin <"$debpkg"
  ar q "$debpkg" _gpgorigin
  debsig_teardown_gnupg
}

debsig_make_sig ()
{
  local debpkg="$1_$2.deb"

  # Add signature to a .deb package.
  debsig_setup_gnupg
  ar p "$debpkg" | $GPG $GPGOPTS --detach-sig >_gpgorigin
  ar q "$debpkg" _gpgorigin
  debsig_teardown_gnupg
}
