#!/bin/bash
# Copyright 2015 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.

# Works only in the chromium chroot.

export LC_ALL=C
TRIM_TEMP_TEMPLACE=test_trim.XXXXXX
TRIM_TEMP=$(mktemp -d --tmpdir "${TRIM_TEMP_TEMPLACE}")

CHROMEOS_TRIM_DIR="${TRIM_TEMP}"

# Source the script to test.
. scripts/chromeos-trim --test

MOCK_PARTITION_SIZE=4095
MEGA_BYTES=$(( 1024 * 1024 ))

STATEFUL="testful"
PARTITION_DEV_STATS="./tests/partition_high_write_stats"

MOCK_DEVICE_STATS="./tests/device_stats"
CURRENT_STAT_FILE_LINE="${TRIM_TEMP}/current_line"

sleep() {
  echo "sleep: $*"
}

fstrim() {
  # We mock that each run trim 1MB.
  echo "fstrim: $* [ ${STATEFUL} : 1 MB (${MEGA_BYTES} bytes) trimmed ]"
}

get_stateful_total_space_blocks() {
  # We assume $1 is 1M.
  echo ${MOCK_PARTITION_SIZE}
}

get_disk_time_ms() {
  local current_line

  if [ -f "${CURRENT_STAT_FILE_LINE}" ]; then
    . "${CURRENT_STAT_FILE_LINE}"
  else
    current_line=1
  fi
  head -${current_line} "${MOCK_DEVICE_STATS}" | tail -1 | awk '{print $10}'
  : $(( current_line += 1 ))
  echo "current_line=${current_line}" > "${CURRENT_STAT_FILE_LINE}"
}

log_msg() {
  # Remove time reference to prevent flaky tests.
  echo "$*" | grep -v "second"
}

run_do_trim() {
  local result_exp=$1
  local result_actual="${TRIM_TEMP}/result_actual"
  do_trim > "${result_actual}"
  diff -q "${result_exp}" "${result_actual}"
}

# Simple test to check we can read write.
read_status_file
duration=20
trim_status="${TRIM_TEST_ONLY}"
write_status_file
duration=0
trim_status="${TRIM_NOT_SUPPORTED}"
read_status_file
if [ ${duration} -eq 0 ]; then
  echo "Unable to read status file: Got ${duration}, expected 20."
  exit 1
fi

if [ "${trim_status}" != "${TRIM_TEST_ONLY}" ]; then
  echo "Invalid trim status."
  exit 1
fi

# Do a run with a write bump in device stats.
run_do_trim "./tests/good_golden_run" || exit 1

exp_trim_ammount=$(get_stateful_total_space_blocks)
: $(( exp_trim_ammount /= FSTRIM_SLICE_MB ))
# We purposely set the partition size to not divide by FRSTRIM_SLICE_MB, so add 1.
: $(( exp_trim_ammount += 1 ))
if [ $(( trimmed_amount / MEGA_BYTES )) -ne ${exp_trim_ammount} ]; then
  echo "Invalid number of runs : " \
       "$(( trimmed_amount / MEGA_BYTES ))"
  exit 1
fi

# Artificially reduce the time allowed to 1 second.
MAX_TRIM_WORKER_TIME_SEC=3
DELAY_BTW_FSTRIM_SEC=1
CURRENT_DATE_FILE="${TRIM_TEMP}/current_date"

date() {
  if [ -f "${CURRENT_DATE_FILE}" ]; then
    . "${CURRENT_DATE_FILE}"
  else
    current_date=0
  fi
  : $(( current_date += 1 ))
  echo "current_date=${current_date}" > "${CURRENT_DATE_FILE}"
  echo "${current_date}"
}

run_do_trim "./tests/interrupted_golden_run" || exit 1

# Check trim failure are reported properly
fstrim() {
  echo "Error Trimming"
  exit 1
}

run_do_trim "./tests/failed_fstrim_golden_run" || exit 1

rm -rf "${TRIM_TEMP}"
