#!/bin/sh
# $Id$

. ./sh/lib/setup
. ./sh/lib/repo-setup
. ./sh/lib/compr-setup

mkidx() {
   $POLDEK_NOCONF -s $REPO --mkidx --mt pndir || fail "mkidx failed"
}

up() {
   $POLDEK_UP -Oautoupa=n -Osource="test,type=pndir $REPOURL" --up
}

load() {
  $POLDEK_UP -q --skip-installed -Osource="test,type=pndir $REPOURL" -n test \
           --cmd 'desc -al *' | grep -E -v '^Path:' > $TMPDIR/local-dump

  $POLDEK_NOCONF -q --skip-installed --st pndir -s $REPO \
           --cmd 'desc -al *' | grep -E -v '^Path:' > $TMPDIR/remote-dump


  # comare local and remote index contents
  diff -q $TMPDIR/remote-dump $TMPDIR/local-dump
  local ec=$?
  if [ $ec -ne 0 ]; then
      echo "repo=$REPO" && ls -l $TMPDIR/remote-dump $TMPDIR/local-dump
      return $ec
  fi

  # check if changelogs are available (related to github#6)
  packages=$($POLDEK_UP -q --skip-installed -Osource="test,type=pndir $REPOURL" -n test \
                            --cmd ls --qf '%{NAME}\n')
  $POLDEK_UP -q --skip-installed -Osource="test,type=pndir $REPOURL" -n test --cmd 'desc -L *' > $TMPDIR/changelogs
  for p in $packages; do
      grep -qP "^\- $p package changelog entry" $TMPDIR/changelogs
      ec=$?
      if [ $ec -ne 0 ]; then
          msgn "$POLDEK_UP -q --skip-installed -Osource='test,type=pndir $REPOURL' -n test --cmd desc -L $p"
          fail "$p: missing changelog"
          break
      fi
  done

  return $ec
}


testUpLoop()
{
    rm -rf $REPO/*.rpm
    # Create repo and generate some diffs
    msg "\n## Creating empty index"
    indexfile="$REPO/packages.ndir$COMPR_EXT"
    mkidx
    die_if_invalid_index $indexfile 0

    msg "\n## up"
    up

    # init repo with some packages
    n=0
    for i in $SOURCE_REPO/*.rpm; do
        bn=$(basename $i)
        ln -sf $i $REPO/$bn
        n=$(expr $n + 1)
        [ $n -gt 4 ] && break
    done

    nloop=0
    maxloop=${MAXLOOP:-"60"}
    force_msg "# testing in $maxloop iterations"
    while [ $nloop -lt $maxloop ]; do
        msg "\n#### Iteration #${nloop}"
        sleep 1
        random_change_repo

        npackages=$(ls $REPO/*.rpm 2>/dev/null | wc -l)
        force_msg "#${nloop} repository contains $npackages package(s)"
        mkidx

        msgn "  up"
        up
        if [ $? -ne 0 ]; then
           fail "up #${nloop} failed"
           nloop=$maxloop
        fi

        msgn "  load"
        load
        if [ $? -ne 0 ]; then
           fail "load #${nloop} failed"
           nloop=$maxloop
        fi

        nloop=$(expr $nloop + 1)
    done
}

. ./sh/lib/shunit2
