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

lib_dir=$(dirname $0)/../../../../net/forwarding

NUM_NETIFS=1
source $lib_dir/lib.sh
source devlink_lib_spectrum.sh

setup_prepare()
{
	devlink_sp_read_kvd_defaults
}

cleanup()
{
	pre_cleanup
	devlink_sp_size_kvd_to_default
}

trap cleanup EXIT

setup_prepare

profiles_test()
{
	local i

	log_info "Running profile tests"

	for i in $KVD_PROFILES; do
		RET=0
		devlink_sp_resource_kvd_profile_set $i
		log_test "'$i' profile"
	done

	# Default is explicitly tested at end to ensure it's actually applied
	RET=0
	devlink_sp_resource_kvd_profile_set "default"
	log_test "'default' profile"
}

resources_min_test()
{
	local size
	local i
	local j

	log_info "Running KVD-minimum tests"

	for i in $KVD_CHILDREN; do
		RET=0
		size=$(devlink_resource_get kvd "$i" | jq '.["size_min"]')
		devlink_resource_size_set "$size" kvd "$i"

		# In case of linear, need to minimize sub-resources as well
		if [[ "$i" == "linear" ]]; then
			for j in $KVDL_CHILDREN; do
				devlink_resource_size_set 0 kvd linear "$j"
			done
		fi

		devlink_reload
		devlink_sp_size_kvd_to_default
		log_test "'$i' minimize [$size]"
	done
}

resources_max_test()
{
	local min_size
	local size
	local i
	local j

	log_info "Running KVD-maximum tests"
	for i in $KVD_CHILDREN; do
		RET=0
		devlink_sp_resource_minimize

		# Calculate the maximum possible size for the given partition
		size=$(devlink_resource_size_get kvd)
		for j in $KVD_CHILDREN; do
			if [ "$i" != "$j" ]; then
				min_size=$(devlink_resource_get kvd "$j" | \
					   jq '.["size_min"]')
				size=$((size - min_size))
			fi
		done

		# Test almost maximum size
		devlink_resource_size_set "$((size - 128))" kvd "$i"
		devlink_reload
		log_test "'$i' almost maximize [$((size - 128))]"

		# Test above maximum size
		devlink resource set "$DEVLINK_DEV" \
			path "kvd/$i" size $((size + 128)) &> /dev/null
		check_fail $? "Set kvd/$i to size $((size + 128)) should fail"
		log_test "'$i' Overflow rejection [$((size + 128))]"

		# Test maximum size
		if [ "$i" == "hash_single" ] || [ "$i" == "hash_double" ]; then
			echo "SKIP: Observed problem with exact max $i"
			continue
		fi

		devlink_resource_size_set "$size" kvd "$i"
		devlink_reload
		log_test "'$i' maximize [$size]"

		devlink_sp_size_kvd_to_default
	done
}

profiles_test
resources_min_test
resources_max_test

exit "$RET"
