#!/bin/bash
# SPDX-License-Identifier: GPL-2.0

lib_dir=$(dirname $0)/forwarding

ALL_TESTS="altnames_test"
NUM_NETIFS=0
source $lib_dir/lib.sh

DUMMY_DEV=dummytest
SHORT_NAME=shortname
LONG_NAME=someveryveryveryveryveryverylongname

altnames_test()
{
	RET=0
	local output
	local name

	ip link property add $DUMMY_DEV altname $SHORT_NAME
	check_err $? "Failed to add short alternative name"

	output=$(ip -j -p link show $SHORT_NAME)
	check_err $? "Failed to do link show with short alternative name"

	name=$(echo $output | jq -e -r ".[0].altnames[0]")
	check_err $? "Failed to get short alternative name from link show JSON"

	[ "$name" == "$SHORT_NAME" ]
	check_err $? "Got unexpected short alternative name from link show JSON"

	ip -j -p link show $DUMMY_DEV &>/dev/null
	check_err $? "Failed to do link show with original name"

	ip link property add $DUMMY_DEV altname $LONG_NAME
	check_err $? "Failed to add long alternative name"

	output=$(ip -j -p link show $LONG_NAME)
	check_err $? "Failed to do link show with long alternative name"

	name=$(echo $output | jq -e -r ".[0].altnames[1]")
	check_err $? "Failed to get long alternative name from link show JSON"

	[ "$name" == "$LONG_NAME" ]
	check_err $? "Got unexpected long alternative name from link show JSON"

	ip link property del $DUMMY_DEV altname $SHORT_NAME
	check_err $? "Failed to delete short alternative name"

	ip -j -p link show $SHORT_NAME &>/dev/null
	check_fail $? "Unexpected success while trying to do link show with deleted short alternative name"

	# long name is left there on purpose to be removed alongside the device

	log_test "altnames test"
}

setup_prepare()
{
	ip link add name $DUMMY_DEV type dummy
}

cleanup()
{
	pre_cleanup
	ip link del name $DUMMY_DEV
}

trap cleanup EXIT

setup_prepare

tests_run

exit $EXIT_STATUS