#!/bin/bash
# Copyright 2014 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

TMP_DIR=
cleanup() {
  rm -rf "${TMP_DIR}"
}

fail() {
  echo "${test}: FAIL: $*" >&2
  exit 1
}

pass() {
  echo "${test}: PASS"
  exit 0
}

test_init() {
  scratch_dir="${TMP_DIR}/${test}"
  export SPOOL_DIR="${scratch_dir}/spool"
  mkdir -p "${SPOOL_DIR}"

  trap -- EXIT INT
}

# This kills the `sleep` the periodic_scheduler uses to wait.
# Kill it manually so that we can wake it up.
wake_sched_up() {
  local pid=$1 pstree sleep_pid

  pstree=$(TERM=linux LC_ALL=C pstree -p -A ${pid})
  sleep_pid=$(echo "${pstree}" |
              sed -n -r '/sleep\(/s:.*\(([0-9]*)\).*:\1:p')
  if [[ -z ${sleep_pid} ]]; then
    fail "could not locate sleep in process tree:" $'\n' "${pstree}"
  else
    kill ${sleep_pid}
  fi
}

# Basic test to make sure things work.
test1() {
  local test=${FUNCNAME} scratch_dir pid spool_file
  test_init

  local test_file="${scratch_dir}/ok"
  ${SCHED_SHELL} "${SCHED}" 1000 300 boo touch "${test_file}" &
  pid=$!
  trap "kill ${pid} \$(pgrep -P ${pid})" EXIT INT
  spool_file="${SPOOL_DIR}/boo"

  sleep 1
  if [[ -e ${test_file} ]]; then
    fail "${test_file} should not exist yet"
  fi

  touch -t 199001010101 "${spool_file}"
  wake_sched_up ${pid}
  # Wait up to 60 seconds in case the build system is overloaded.
  # http://crbug.com/420102
  local timeout=600
  while [[ ! -e ${test_file} ]]; do
    sleep 0.1
    if [[ $(( --timeout )) -eq 0 ]]; then
      fail "${test_file} never came back"
    fi
  done

  pass
}

main() {
  if [[ $# -ne 0 ]]; then
    echo "Usage: $0" >&2
    exit 1
  fi
  echo "Note: Messages like 'Terminated sleep' are normal"

  trap cleanup EXIT INT
  export SCHED=$(realpath "${0%_unittest}")
  # Default to the temp dir ($T) that portage has set up for us.
  # This is needed when doing out of tree builds.
  TMP_DIR=$(mktemp -d "${T:-${SCHED%/*}}/${SCHED##*/}.XXXXXX")

  # Try to use dash if it's available as that's what we'll be using
  # on the actual device at runtime.
  export SCHED_SHELL=$(which dash 2>/dev/null || echo /bin/sh)

  local ret pids=()
  test1 &
  pids+=( $! )

  ret=0
  for p in "${pids[@]}"; do
    wait ${p}
    : $(( ret |= $? ))
  done
  exit ${ret}
}

main "$@"
