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

# Kselftest frmework requirement - SKIP code is 4.
ksft_skip=4

ensure_write_succ()
{
	file=$1
	content=$2
	reason=$3

	if ! echo "$content" > "$file"
	then
		echo "writing $content to $file failed"
		echo "expected success because $reason"
		exit 1
	fi
}

ensure_write_fail()
{
	file=$1
	content=$2
	reason=$3

	if echo "$content" > "$file"
	then
		echo "writing $content to $file succeed ($fail_reason)"
		echo "expected failure because $reason"
		exit 1
	fi
}

ensure_dir()
{
	dir=$1
	to_ensure=$2
	if [ "$to_ensure" = "exist" ] && [ ! -d "$dir" ]
	then
		echo "$dir dir is expected but not found"
		exit 1
	elif [ "$to_ensure" = "not_exist" ] && [ -d "$dir" ]
	then
		echo "$dir dir is not expected but found"
		exit 1
	fi
}

ensure_file()
{
	file=$1
	to_ensure=$2
	permission=$3
	if [ "$to_ensure" = "exist" ]
	then
		if [ ! -f "$file" ]
		then
			echo "$file is expected but not found"
			exit 1
		fi
		perm=$(stat -c "%a" "$file")
		if [ ! "$perm" = "$permission" ]
		then
			echo "$file permission: expected $permission but $perm"
			exit 1
		fi
	elif [ "$to_ensure" = "not_exist" ] && [ -f "$dir" ]
	then
		echo "$file is not expected but found"
		exit 1
	fi
}

test_range()
{
	range_dir=$1
	ensure_dir "$range_dir" "exist"
	ensure_file "$range_dir/min" "exist" 600
	ensure_file "$range_dir/max" "exist" 600
}

test_stats()
{
	stats_dir=$1
	ensure_dir "$stats_dir" "exist"
	for f in nr_tried sz_tried nr_applied sz_applied qt_exceeds
	do
		ensure_file "$stats_dir/$f" "exist" "400"
	done
}

test_watermarks()
{
	watermarks_dir=$1
	ensure_dir "$watermarks_dir" "exist"
	ensure_file "$watermarks_dir/metric" "exist" "600"
	ensure_file "$watermarks_dir/interval_us" "exist" "600"
	ensure_file "$watermarks_dir/high" "exist" "600"
	ensure_file "$watermarks_dir/mid" "exist" "600"
	ensure_file "$watermarks_dir/low" "exist" "600"
}

test_weights()
{
	weights_dir=$1
	ensure_dir "$weights_dir" "exist"
	ensure_file "$weights_dir/sz_permil" "exist" "600"
	ensure_file "$weights_dir/nr_accesses_permil" "exist" "600"
	ensure_file "$weights_dir/age_permil" "exist" "600"
}

test_quotas()
{
	quotas_dir=$1
	ensure_dir "$quotas_dir" "exist"
	ensure_file "$quotas_dir/ms" "exist" 600
	ensure_file "$quotas_dir/bytes" "exist" 600
	ensure_file "$quotas_dir/reset_interval_ms" "exist" 600
	test_weights "$quotas_dir/weights"
}

test_access_pattern()
{
	access_pattern_dir=$1
	ensure_dir "$access_pattern_dir" "exist"
	test_range "$access_pattern_dir/age"
	test_range "$access_pattern_dir/nr_accesses"
	test_range "$access_pattern_dir/sz"
}

test_scheme()
{
	scheme_dir=$1
	ensure_dir "$scheme_dir" "exist"
	ensure_file "$scheme_dir/action" "exist" "600"
	test_access_pattern "$scheme_dir/access_pattern"
	test_quotas "$scheme_dir/quotas"
	test_watermarks "$scheme_dir/watermarks"
	test_stats "$scheme_dir/stats"
}

test_schemes()
{
	schemes_dir=$1
	ensure_dir "$schemes_dir" "exist"
	ensure_file "$schemes_dir/nr_schemes" "exist" 600

	ensure_write_succ  "$schemes_dir/nr_schemes" "1" "valid input"
	test_scheme "$schemes_dir/0"

	ensure_write_succ  "$schemes_dir/nr_schemes" "2" "valid input"
	test_scheme "$schemes_dir/0"
	test_scheme "$schemes_dir/1"

	ensure_write_succ "$schemes_dir/nr_schemes" "0" "valid input"
	ensure_dir "$schemes_dir/0" "not_exist"
	ensure_dir "$schemes_dir/1" "not_exist"
}

test_region()
{
	region_dir=$1
	ensure_dir "$region_dir" "exist"
	ensure_file "$region_dir/start" "exist" 600
	ensure_file "$region_dir/end" "exist" 600
}

test_regions()
{
	regions_dir=$1
	ensure_dir "$regions_dir" "exist"
	ensure_file "$regions_dir/nr_regions" "exist" 600

	ensure_write_succ  "$regions_dir/nr_regions" "1" "valid input"
	test_region "$regions_dir/0"

	ensure_write_succ  "$regions_dir/nr_regions" "2" "valid input"
	test_region "$regions_dir/0"
	test_region "$regions_dir/1"

	ensure_write_succ "$regions_dir/nr_regions" "0" "valid input"
	ensure_dir "$regions_dir/0" "not_exist"
	ensure_dir "$regions_dir/1" "not_exist"
}

test_target()
{
	target_dir=$1
	ensure_dir "$target_dir" "exist"
	ensure_file "$target_dir/pid_target" "exist" "600"
	test_regions "$target_dir/regions"
}

test_targets()
{
	targets_dir=$1
	ensure_dir "$targets_dir" "exist"
	ensure_file "$targets_dir/nr_targets" "exist" 600

	ensure_write_succ  "$targets_dir/nr_targets" "1" "valid input"
	test_target "$targets_dir/0"

	ensure_write_succ  "$targets_dir/nr_targets" "2" "valid input"
	test_target "$targets_dir/0"
	test_target "$targets_dir/1"

	ensure_write_succ "$targets_dir/nr_targets" "0" "valid input"
	ensure_dir "$targets_dir/0" "not_exist"
	ensure_dir "$targets_dir/1" "not_exist"
}

test_intervals()
{
	intervals_dir=$1
	ensure_dir "$intervals_dir" "exist"
	ensure_file "$intervals_dir/aggr_us" "exist" "600"
	ensure_file "$intervals_dir/sample_us" "exist" "600"
	ensure_file "$intervals_dir/update_us" "exist" "600"
}

test_monitoring_attrs()
{
	monitoring_attrs_dir=$1
	ensure_dir "$monitoring_attrs_dir" "exist"
	test_intervals "$monitoring_attrs_dir/intervals"
	test_range "$monitoring_attrs_dir/nr_regions"
}

test_context()
{
	context_dir=$1
	ensure_dir "$context_dir" "exist"
	ensure_file "$context_dir/avail_operations" "exit" 400
	ensure_file "$context_dir/operations" "exist" 600
	test_monitoring_attrs "$context_dir/monitoring_attrs"
	test_targets "$context_dir/targets"
	test_schemes "$context_dir/schemes"
}

test_contexts()
{
	contexts_dir=$1
	ensure_dir "$contexts_dir" "exist"
	ensure_file "$contexts_dir/nr_contexts" "exist" 600

	ensure_write_succ  "$contexts_dir/nr_contexts" "1" "valid input"
	test_context "$contexts_dir/0"

	ensure_write_fail "$contexts_dir/nr_contexts" "2" "only 0/1 are supported"
	test_context "$contexts_dir/0"

	ensure_write_succ "$contexts_dir/nr_contexts" "0" "valid input"
	ensure_dir "$contexts_dir/0" "not_exist"
}

test_kdamond()
{
	kdamond_dir=$1
	ensure_dir "$kdamond_dir" "exist"
	ensure_file "$kdamond_dir/state" "exist" "600"
	ensure_file "$kdamond_dir/pid" "exist" 400
	test_contexts "$kdamond_dir/contexts"
}

test_kdamonds()
{
	kdamonds_dir=$1
	ensure_dir "$kdamonds_dir" "exist"

	ensure_file "$kdamonds_dir/nr_kdamonds" "exist" "600"

	ensure_write_succ  "$kdamonds_dir/nr_kdamonds" "1" "valid input"
	test_kdamond "$kdamonds_dir/0"

	ensure_write_succ  "$kdamonds_dir/nr_kdamonds" "2" "valid input"
	test_kdamond "$kdamonds_dir/0"
	test_kdamond "$kdamonds_dir/1"

	ensure_write_succ "$kdamonds_dir/nr_kdamonds" "0" "valid input"
	ensure_dir "$kdamonds_dir/0" "not_exist"
	ensure_dir "$kdamonds_dir/1" "not_exist"
}

test_damon_sysfs()
{
	damon_sysfs=$1
	if [ ! -d "$damon_sysfs" ]
	then
		echo "$damon_sysfs not found"
		exit $ksft_skip
	fi

	test_kdamonds "$damon_sysfs/kdamonds"
}

check_dependencies()
{
	if [ $EUID -ne 0 ]
	then
		echo "Run as root"
		exit $ksft_skip
	fi
}

check_dependencies
test_damon_sysfs "/sys/kernel/mm/damon/admin"
