export DEST="127.0.0.1"

ts_log()
{
	echo "$@"
}

ts_err()
{
	ts_log "$@" | tee >> $ERRF
}

ts_cat()
{
	cat "$@"
}

ts_err_cat()
{
	ts_cat "$@" | tee >> $ERRF
}

ts_skip()
{
    exit 127
}

ts_tc()
{
	SCRIPT=$1; shift
	DESC=$1; shift

	$TC $@ 2> $STD_ERR > $STD_OUT

	if [ -s $STD_ERR ]; then
		ts_err "${SCRIPT}: ${DESC} failed:"
		ts_err "command: $TC $@"
		ts_err "stderr output:"
		ts_err_cat $STD_ERR
		if [ -s $STD_OUT ]; then
			ts_err "stdout output:"
			ts_err_cat $STD_OUT
		fi
	elif [ -s $STD_OUT ]; then
		echo "${SCRIPT}: ${DESC} succeeded with output:"
		cat $STD_OUT
	else
		echo "${SCRIPT}: ${DESC} succeeded"
	fi
}

ts_ip()
{
	SCRIPT=$1; shift
	DESC=$1; shift

	$IP $@ 2> $STD_ERR > $STD_OUT
        RET=$?

	if [ -s $STD_ERR ] || [ "$RET" != "0" ]; then
		ts_err "${SCRIPT}: ${DESC} failed:"
		ts_err "command: $IP $@"
		ts_err "stderr output:"
		ts_err_cat $STD_ERR
		if [ -s $STD_OUT ]; then
			ts_err "stdout output:"
			ts_err_cat $STD_OUT
		fi
	elif [ -s $STD_OUT ]; then
		echo "${SCRIPT}: ${DESC} succeeded with output:"
		cat $STD_OUT
	else
		echo "${SCRIPT}: ${DESC} succeeded"
	fi
}

ts_qdisc_available()
{
	HELPOUT=`$TC qdisc add $1 help 2>&1`
	if [ "`echo $HELPOUT | grep \"^Unknown qdisc\"`" ]; then
		return 0;
	else
		return 1;
	fi
}

rand_dev()
{
    echo "dev-$(tr -dc "[:alpha:]" < /dev/urandom | head -c 6)"
}

pr_failed()
{
	echo " [FAILED]"
	ts_err "matching failed"
}

pr_success()
{
	echo " [SUCCESS]"
}

test_on()
{
	echo -n "test on: \"$1\""
	if cat "$STD_OUT" | grep -qE "$1"
	then
		pr_success
	else
		pr_failed
	fi
}

test_on_not()
{
	echo -n "test on: \"$1\""
	if cat "$STD_OUT" | grep -vqE "$1"
	then
		pr_success
	else
		pr_failed
	fi
}

test_lines_count()
{
	echo -n "test on lines count ($1): "
	if cat "$STD_OUT" | wc -l | grep -q "$1"
	then
		pr_success
	else
		pr_failed
	fi
}