#!/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 3 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.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
TS_TOPDIR="${0%/*}/../.."
. $TS_TOPDIR/functions.sh

ts_init "$*"

ts_check_test_command "$TS_CMD_LSMEM"

LSCOLUMNS="RANGE,SIZE,STATE,REMOVABLE,BLOCK,NODE"


function do_lsmem {
	local opts="$*"

	echo -e "\n---\n" >>${TS_OUTPUT}
	echo "\$ lsmem $opts" >>${TS_OUTPUT}
	${TS_CMD_LSMEM} $opts --sysroot "${dumpdir}/${name}" >>${TS_OUTPUT} 2>&1
	
}

for dump in $(ls $TS_SELF/dumps/*.tar.bz2 | sort); do
	name=$(basename $dump .tar.bz2)
	dumpdir="$TS_OUTDIR/dumps"

	ts_init_subtest $name
	mkdir -p $dumpdir

	tar -C $dumpdir -jxf $dump

	do_lsmem --split=STATE,REMOVABLE
	do_lsmem --output RANGE,SIZE --split none
	do_lsmem --output RANGE,SIZE,STATE --split STATE
	do_lsmem --all --output $LSCOLUMNS
	do_lsmem --raw --output $LSCOLUMNS --split $LSCOLUMNS
	do_lsmem --json --output $LSCOLUMNS --split $LSCOLUMNS
	do_lsmem -o +ZONES
	do_lsmem

	ts_finalize_subtest
done

ts_finalize
