#!/bin/bash
#
# Copyright (C) 2025 Masatake YAMATO <yamato@redhat.com>
#
# 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="NETNSID of a namespace where no process belongs to"

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

ts_check_test_command "$TS_CMD_LSNS"
ts_check_prog "ip"
ts_skip_nonroot

ts_skip_netns
ts_cd "$TS_OUTDIR"

NETNSID=$$
NS=LSNS-TEST-NETNSID-NS-FOR-PN-"$NETNSID"
NULL=/dev/null
LOG=/dev/null #/root/foo.log

function cleanup {
    ip netns delete "$NS" 2> $NULL || :
}

echo "==Cleanup" >> $LOG
cleanup

echo "==Netns ADD" >> $LOG
if ip netns add "$NS" &&
	ip netns set "$NS" "$NETNSID"; then
    echo "===Netns EXEC" >> $LOG
else
    cleanup
    ts_skip "failed to initialize"
fi

function netnsid_subtest {
    local column=$1
    local eval_func=eval_"$column"
    local O
    local rc
    
    ts_init_subtest "$1"
    O=$($TS_CMD_LSNS --raw --noheadings --filter "NETNSID == '$NETNSID'" --output $1)
    rc=$?
    if [[ $rc -eq 0 ]]; then
	if "$eval_func" "$O"; then
	    echo OK
	else
	    echo ERROR
	    echo "$O"
	fi
    else
	echo ERROR $rc
    fi > "$TS_OUTPUT" 2>&1
    ts_finalize_subtest
}

function eval_NETNSID {
    [[ "$1" == "$NETNSID" ]]
}

function eval_TYPE {
    [[ "$1" == "net" ]]
}

function eval_NSFS {
    [[ ${1##*/} == "$NS" ]]
}

netnsid_subtest NETNSID
netnsid_subtest TYPE
netnsid_subtest NSFS

cleanup
ts_finalize

