#!/bin/bash

# This file is part of util-linux.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This file is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

TS_TOPDIR="${0%/*}/../.."
TS_DESC="last ipv6"

. $TS_TOPDIR/functions.sh
ts_init "$*"

ts_check_test_command "$TS_CMD_LAST"
$TS_CMD_LAST --version 2>&1 | grep -q "invalid option" \
	&& ts_skip "deprecated last"

. "$TS_SELF/utmp_functions.sh"

WTMP_FILE=${TS_OUTDIR}/wtmp-ipv6
rm -f $WTMP_FILE

export LANG=C
export TZ=GMT

if [ $SIZEOF_UTMP -eq 384 ]; then
	ln -s ${TS_SELF}/wtmp-ipv6.${BYTE_ORDER} $WTMP_FILE
else
	$TS_CMD_UTMPDUMP -r ${TS_SELF}/txt-ipv6 > $WTMP_FILE 2>/dev/null \
		|| ts_skip "can't create test data"
fi

# there is no better way yet to skip a subtest
if ts_resolve_host "a.root-servers.net" >/dev/null; then
ts_init_subtest "dns"

ts_log "~~~ dns short ~~~"
$TS_CMD_LAST -f $WTMP_FILE -d >> $TS_OUTPUT 2>/dev/null

ts_log "~~~ dns long ~~~"
$TS_CMD_LAST -f $WTMP_FILE -d -w >> $TS_OUTPUT 2>/dev/null

ts_log "~~~ dns host last ~~~"
$TS_CMD_LAST -f $WTMP_FILE -d -a >> $TS_OUTPUT 2>/dev/null

ts_finalize_subtest
fi

ts_init_subtest "nodns"
ts_log "~~~ show ip ~~~"
$TS_CMD_LAST -f $WTMP_FILE -i >> $TS_OUTPUT 2>/dev/null

ts_log "~~~ show ip last ~~~"
$TS_CMD_LAST -f $WTMP_FILE -i -a >> $TS_OUTPUT 2>/dev/null
ts_finalize_subtest

rm -f $WTMP_FILE

ts_finalize
