#!/bin/sh

######## Stuff for tracking test case counts

FAILS=0
OKS=0
TOTAL=0
LOG_DETAILS=

######## Relevant pids default vals

if [ -z ${UTIL_PID} ]; then UTIL_PID=-1; fi
if [ -z ${DLOGSEND_PID} ]; then DLOGSEND_PID=-1; fi
if [ -z ${MT_TEST} ]; then MT_TEST=-1; fi
if [ -z ${LOGGER} ]; then LOGGER=-1; fi

export LOGGER
export UTIL_PID
export DLOGSEND_PID
export MT_TEST

SCRIPT_NAME=$(basename $0)
USAGE_MESSAGE="usage: $0 [--verbose] [--quick] pipe|logger"

check_daemon() {
	ret=1
	if [ "$LOGGER" -ne -1 ] && [ -z "$(ps -o pid= -p "$LOGGER")" ]; then
		ret=0
	fi
	return "$ret"
}

fail() {
	check_daemon && daemon_status="[logger daemon not running]"

	FAILS=$((FAILS + 1))
	TOTAL=$((TOTAL + 1))
	printf "[$SCRIPT_NAME %03d] \033[0;31mFAILED\033[0;m: %s %s\n" "$TOTAL" "$LOG_DETAILS" "$daemon_status"
	LOG_DETAILS=
}

ok() {
	check_daemon && daemon_status="[logger daemon not running]"

	OKS=$((OKS + 1))
	TOTAL=$((TOTAL + 1))
	printf "[$SCRIPT_NAME %03d] \033[0;32mPASSED\033[0;m: %s %s\n" "$TOTAL" "$LOG_DETAILS" "$daemon_status"
	LOG_DETAILS=
}

######## Paths to test folders etc

TESTDIR=/var/lib/dlog-tests

######## Utility functions

cleanup() {
	[ "$UTIL_PID" -ne -1 ] && kill "$UTIL_PID" > /dev/null 2>&1
	[ "$MT_TEST"  -ne -1 ] && kill "$MT_TEST"  > /dev/null 2>&1
	[ "$LOGGER"   -ne -1 ] && kill "$LOGGER"   > /dev/null 2>&1
	# Shellcheck doesn't like this because the rm call is bad if $TESTDIR is empty.
	# However, such cases would be caught by the conditional.
	# shellcheck disable=SC2115
	[ -d "$TESTDIR" ] && rm -rf "$TESTDIR"/*
	[ -d "$RUNTIME_FILTERS_DIR" ] && rm -rf "$RUNTIME_FILTERS_DIR"
}

extract_timestamp() {
	ts=0
	case "$1" in
		"threadtime")
			time=$(echo "$2" | awk -F '[ +]' '{print $2}')
			ts=$(date +%s%N -d "$time")
		;;
		"long")
			time=$(echo "$2" | awk -F '[ +.]' '{print $3}')
			ms=$(echo "$2" | awk -F '[ +.]' '{print $4}')
			sec=$(date +%s%N -d "$time")
			ns=$((10#$ms * 1000000))
			ts=$((sec + ns))
		;;
		"rwtime")
			time=$(echo "$2" | awk -F '[ +.]' '{print $2}')
			ts=$(date +%s%N -d "$time")
		;;
		"recv_realtime")
			time=$(echo "$2" | awk -F '[ +.]' '{print $2}')
			ts=$(date +%s%N -d "$time")
		;;
		"time")
			time=$(echo "$2" | awk -F '[ +.]' '{print $2}')
			ts=$(date +%s%N -d "$time")
		;;
		"kerneltime")
			ts=$(echo "$2" | awk -F '[ +]' '{print $1}' | sed -e 's/\.//g')
		;;
	esac
	echo "$ts"
}

######
if [ "$1" = "pipe" ]; then
	type="pipe"
elif [ "$1" = "logger" ]; then
	type="logger"
elif [ "$1" = "zero-copy" ]; then
	type="zero-copy"
elif [ "$1" = "pipe_quick" ]; then
	type="pipe"
	quick=1
elif [ "$1" = "logger_quick" ]; then
	type="logger"
	quick=1
else
	echo "$USAGE_MESSAGE"
	exit 1
fi

