#!/bin/sh

set -e

is_non_generic_kernel () {
  case "$(uname -r)" in
    *-generic) return 1 ;;
    *) return 0 ;;
  esac
}

switch_to_generic_kernel () {
  is_non_generic_kernel || return 1

  apt-get update

  # install generic and remove the current kernel
  # assuming that there is only one kernel installed
  cur_kernel=$(uname -r)
  DEBIAN_FRONTEND=noninteractive apt-get install -y linux-generic || return 1
  DEBIAN_FRONTEND=noninteractive apt-get purge -y linux-image-${cur_kernel} linux-modules-${cur_kernel} || true

  return 0
}

# setup the right kernel for the NFS and iSCSI tests
# since they require kernel modules (nfsd and iscsi_target_mod)
setup_kernel_modules () {
  # check if need to switch to generic kernel
  modprobe nfsd && modprobe iscsi_target_mod && return 0

  # skip if no reboot capability
  if ! test -x /tmp/autopkgtest-reboot; then
    echo "Kernel module setup requires autopkgtest reboot support" >&2
    return 1
  fi

  # skip if at resume phase
  if test "${AUTOPKGTEST_REBOOT_MARK:-}" = generic-kernel; then
    echo "Generic kernel was not booted after reboot" >&2
    return 1
  fi

  # switch to generic kernel and reboot
  if switch_to_generic_kernel; then
    /tmp/autopkgtest-reboot generic-kernel
  fi

  return 0
}

AGENT=$1

# NFS and iSCSI tests need kernel modules that might not be available
# in the current kernel
case "$AGENT" in
  nfsserver|iscsi)
    setup_kernel_modules 2>&1 || echo "Warning: kernel module setup failed; keep going ..."
    ;;
esac

cleanup () {
  ocft clean $AGENT
}

trap "cleanup" 0 2 3 15

mkdir -p /run/resource-agents

echo "Running: ocft make $AGENT"
ocft make $AGENT

echo "Running: ocft test -v $AGENT"
ocft test -v $AGENT
