162306a36Sopenharmony_ci#!/bin/bash 262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci# Kselftest frmework requirement - SKIP code is 4. 562306a36Sopenharmony_ciksft_skip=4 662306a36Sopenharmony_ci 762306a36Sopenharmony_ciensure_write_succ() 862306a36Sopenharmony_ci{ 962306a36Sopenharmony_ci file=$1 1062306a36Sopenharmony_ci content=$2 1162306a36Sopenharmony_ci reason=$3 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci if ! echo "$content" > "$file" 1462306a36Sopenharmony_ci then 1562306a36Sopenharmony_ci echo "writing $content to $file failed" 1662306a36Sopenharmony_ci echo "expected success because $reason" 1762306a36Sopenharmony_ci exit 1 1862306a36Sopenharmony_ci fi 1962306a36Sopenharmony_ci} 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ciensure_write_fail() 2262306a36Sopenharmony_ci{ 2362306a36Sopenharmony_ci file=$1 2462306a36Sopenharmony_ci content=$2 2562306a36Sopenharmony_ci reason=$3 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci if (echo "$content" > "$file") 2> /dev/null 2862306a36Sopenharmony_ci then 2962306a36Sopenharmony_ci echo "writing $content to $file succeed ($fail_reason)" 3062306a36Sopenharmony_ci echo "expected failure because $reason" 3162306a36Sopenharmony_ci exit 1 3262306a36Sopenharmony_ci fi 3362306a36Sopenharmony_ci} 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ciensure_dir() 3662306a36Sopenharmony_ci{ 3762306a36Sopenharmony_ci dir=$1 3862306a36Sopenharmony_ci to_ensure=$2 3962306a36Sopenharmony_ci if [ "$to_ensure" = "exist" ] && [ ! -d "$dir" ] 4062306a36Sopenharmony_ci then 4162306a36Sopenharmony_ci echo "$dir dir is expected but not found" 4262306a36Sopenharmony_ci exit 1 4362306a36Sopenharmony_ci elif [ "$to_ensure" = "not_exist" ] && [ -d "$dir" ] 4462306a36Sopenharmony_ci then 4562306a36Sopenharmony_ci echo "$dir dir is not expected but found" 4662306a36Sopenharmony_ci exit 1 4762306a36Sopenharmony_ci fi 4862306a36Sopenharmony_ci} 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ciensure_file() 5162306a36Sopenharmony_ci{ 5262306a36Sopenharmony_ci file=$1 5362306a36Sopenharmony_ci to_ensure=$2 5462306a36Sopenharmony_ci permission=$3 5562306a36Sopenharmony_ci if [ "$to_ensure" = "exist" ] 5662306a36Sopenharmony_ci then 5762306a36Sopenharmony_ci if [ ! -f "$file" ] 5862306a36Sopenharmony_ci then 5962306a36Sopenharmony_ci echo "$file is expected but not found" 6062306a36Sopenharmony_ci exit 1 6162306a36Sopenharmony_ci fi 6262306a36Sopenharmony_ci perm=$(stat -c "%a" "$file") 6362306a36Sopenharmony_ci if [ ! "$perm" = "$permission" ] 6462306a36Sopenharmony_ci then 6562306a36Sopenharmony_ci echo "$file permission: expected $permission but $perm" 6662306a36Sopenharmony_ci exit 1 6762306a36Sopenharmony_ci fi 6862306a36Sopenharmony_ci elif [ "$to_ensure" = "not_exist" ] && [ -f "$dir" ] 6962306a36Sopenharmony_ci then 7062306a36Sopenharmony_ci echo "$file is not expected but found" 7162306a36Sopenharmony_ci exit 1 7262306a36Sopenharmony_ci fi 7362306a36Sopenharmony_ci} 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_citest_range() 7662306a36Sopenharmony_ci{ 7762306a36Sopenharmony_ci range_dir=$1 7862306a36Sopenharmony_ci ensure_dir "$range_dir" "exist" 7962306a36Sopenharmony_ci ensure_file "$range_dir/min" "exist" 600 8062306a36Sopenharmony_ci ensure_file "$range_dir/max" "exist" 600 8162306a36Sopenharmony_ci} 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_citest_tried_regions() 8462306a36Sopenharmony_ci{ 8562306a36Sopenharmony_ci tried_regions_dir=$1 8662306a36Sopenharmony_ci ensure_dir "$tried_regions_dir" "exist" 8762306a36Sopenharmony_ci ensure_file "$tried_regions_dir/total_bytes" "exist" "400" 8862306a36Sopenharmony_ci} 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_citest_stats() 9162306a36Sopenharmony_ci{ 9262306a36Sopenharmony_ci stats_dir=$1 9362306a36Sopenharmony_ci ensure_dir "$stats_dir" "exist" 9462306a36Sopenharmony_ci for f in nr_tried sz_tried nr_applied sz_applied qt_exceeds 9562306a36Sopenharmony_ci do 9662306a36Sopenharmony_ci ensure_file "$stats_dir/$f" "exist" "400" 9762306a36Sopenharmony_ci done 9862306a36Sopenharmony_ci} 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_citest_filter() 10162306a36Sopenharmony_ci{ 10262306a36Sopenharmony_ci filter_dir=$1 10362306a36Sopenharmony_ci ensure_file "$filter_dir/type" "exist" "600" 10462306a36Sopenharmony_ci ensure_write_succ "$filter_dir/type" "anon" "valid input" 10562306a36Sopenharmony_ci ensure_write_succ "$filter_dir/type" "memcg" "valid input" 10662306a36Sopenharmony_ci ensure_write_succ "$filter_dir/type" "addr" "valid input" 10762306a36Sopenharmony_ci ensure_write_succ "$filter_dir/type" "target" "valid input" 10862306a36Sopenharmony_ci ensure_write_fail "$filter_dir/type" "foo" "invalid input" 10962306a36Sopenharmony_ci ensure_file "$filter_dir/matching" "exist" "600" 11062306a36Sopenharmony_ci ensure_file "$filter_dir/memcg_path" "exist" "600" 11162306a36Sopenharmony_ci ensure_file "$filter_dir/addr_start" "exist" "600" 11262306a36Sopenharmony_ci ensure_file "$filter_dir/addr_end" "exist" "600" 11362306a36Sopenharmony_ci ensure_file "$filter_dir/damon_target_idx" "exist" "600" 11462306a36Sopenharmony_ci} 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_citest_filters() 11762306a36Sopenharmony_ci{ 11862306a36Sopenharmony_ci filters_dir=$1 11962306a36Sopenharmony_ci ensure_dir "$filters_dir" "exist" 12062306a36Sopenharmony_ci ensure_file "$filters_dir/nr_filters" "exist" "600" 12162306a36Sopenharmony_ci ensure_write_succ "$filters_dir/nr_filters" "1" "valid input" 12262306a36Sopenharmony_ci test_filter "$filters_dir/0" 12362306a36Sopenharmony_ci 12462306a36Sopenharmony_ci ensure_write_succ "$filters_dir/nr_filters" "2" "valid input" 12562306a36Sopenharmony_ci test_filter "$filters_dir/0" 12662306a36Sopenharmony_ci test_filter "$filters_dir/1" 12762306a36Sopenharmony_ci 12862306a36Sopenharmony_ci ensure_write_succ "$filters_dir/nr_filters" "0" "valid input" 12962306a36Sopenharmony_ci ensure_dir "$filters_dir/0" "not_exist" 13062306a36Sopenharmony_ci ensure_dir "$filters_dir/1" "not_exist" 13162306a36Sopenharmony_ci} 13262306a36Sopenharmony_ci 13362306a36Sopenharmony_citest_watermarks() 13462306a36Sopenharmony_ci{ 13562306a36Sopenharmony_ci watermarks_dir=$1 13662306a36Sopenharmony_ci ensure_dir "$watermarks_dir" "exist" 13762306a36Sopenharmony_ci ensure_file "$watermarks_dir/metric" "exist" "600" 13862306a36Sopenharmony_ci ensure_file "$watermarks_dir/interval_us" "exist" "600" 13962306a36Sopenharmony_ci ensure_file "$watermarks_dir/high" "exist" "600" 14062306a36Sopenharmony_ci ensure_file "$watermarks_dir/mid" "exist" "600" 14162306a36Sopenharmony_ci ensure_file "$watermarks_dir/low" "exist" "600" 14262306a36Sopenharmony_ci} 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_citest_weights() 14562306a36Sopenharmony_ci{ 14662306a36Sopenharmony_ci weights_dir=$1 14762306a36Sopenharmony_ci ensure_dir "$weights_dir" "exist" 14862306a36Sopenharmony_ci ensure_file "$weights_dir/sz_permil" "exist" "600" 14962306a36Sopenharmony_ci ensure_file "$weights_dir/nr_accesses_permil" "exist" "600" 15062306a36Sopenharmony_ci ensure_file "$weights_dir/age_permil" "exist" "600" 15162306a36Sopenharmony_ci} 15262306a36Sopenharmony_ci 15362306a36Sopenharmony_citest_quotas() 15462306a36Sopenharmony_ci{ 15562306a36Sopenharmony_ci quotas_dir=$1 15662306a36Sopenharmony_ci ensure_dir "$quotas_dir" "exist" 15762306a36Sopenharmony_ci ensure_file "$quotas_dir/ms" "exist" 600 15862306a36Sopenharmony_ci ensure_file "$quotas_dir/bytes" "exist" 600 15962306a36Sopenharmony_ci ensure_file "$quotas_dir/reset_interval_ms" "exist" 600 16062306a36Sopenharmony_ci test_weights "$quotas_dir/weights" 16162306a36Sopenharmony_ci} 16262306a36Sopenharmony_ci 16362306a36Sopenharmony_citest_access_pattern() 16462306a36Sopenharmony_ci{ 16562306a36Sopenharmony_ci access_pattern_dir=$1 16662306a36Sopenharmony_ci ensure_dir "$access_pattern_dir" "exist" 16762306a36Sopenharmony_ci test_range "$access_pattern_dir/age" 16862306a36Sopenharmony_ci test_range "$access_pattern_dir/nr_accesses" 16962306a36Sopenharmony_ci test_range "$access_pattern_dir/sz" 17062306a36Sopenharmony_ci} 17162306a36Sopenharmony_ci 17262306a36Sopenharmony_citest_scheme() 17362306a36Sopenharmony_ci{ 17462306a36Sopenharmony_ci scheme_dir=$1 17562306a36Sopenharmony_ci ensure_dir "$scheme_dir" "exist" 17662306a36Sopenharmony_ci ensure_file "$scheme_dir/action" "exist" "600" 17762306a36Sopenharmony_ci test_access_pattern "$scheme_dir/access_pattern" 17862306a36Sopenharmony_ci test_quotas "$scheme_dir/quotas" 17962306a36Sopenharmony_ci test_watermarks "$scheme_dir/watermarks" 18062306a36Sopenharmony_ci test_filters "$scheme_dir/filters" 18162306a36Sopenharmony_ci test_stats "$scheme_dir/stats" 18262306a36Sopenharmony_ci test_tried_regions "$scheme_dir/tried_regions" 18362306a36Sopenharmony_ci} 18462306a36Sopenharmony_ci 18562306a36Sopenharmony_citest_schemes() 18662306a36Sopenharmony_ci{ 18762306a36Sopenharmony_ci schemes_dir=$1 18862306a36Sopenharmony_ci ensure_dir "$schemes_dir" "exist" 18962306a36Sopenharmony_ci ensure_file "$schemes_dir/nr_schemes" "exist" 600 19062306a36Sopenharmony_ci 19162306a36Sopenharmony_ci ensure_write_succ "$schemes_dir/nr_schemes" "1" "valid input" 19262306a36Sopenharmony_ci test_scheme "$schemes_dir/0" 19362306a36Sopenharmony_ci 19462306a36Sopenharmony_ci ensure_write_succ "$schemes_dir/nr_schemes" "2" "valid input" 19562306a36Sopenharmony_ci test_scheme "$schemes_dir/0" 19662306a36Sopenharmony_ci test_scheme "$schemes_dir/1" 19762306a36Sopenharmony_ci 19862306a36Sopenharmony_ci ensure_write_succ "$schemes_dir/nr_schemes" "0" "valid input" 19962306a36Sopenharmony_ci ensure_dir "$schemes_dir/0" "not_exist" 20062306a36Sopenharmony_ci ensure_dir "$schemes_dir/1" "not_exist" 20162306a36Sopenharmony_ci} 20262306a36Sopenharmony_ci 20362306a36Sopenharmony_citest_region() 20462306a36Sopenharmony_ci{ 20562306a36Sopenharmony_ci region_dir=$1 20662306a36Sopenharmony_ci ensure_dir "$region_dir" "exist" 20762306a36Sopenharmony_ci ensure_file "$region_dir/start" "exist" 600 20862306a36Sopenharmony_ci ensure_file "$region_dir/end" "exist" 600 20962306a36Sopenharmony_ci} 21062306a36Sopenharmony_ci 21162306a36Sopenharmony_citest_regions() 21262306a36Sopenharmony_ci{ 21362306a36Sopenharmony_ci regions_dir=$1 21462306a36Sopenharmony_ci ensure_dir "$regions_dir" "exist" 21562306a36Sopenharmony_ci ensure_file "$regions_dir/nr_regions" "exist" 600 21662306a36Sopenharmony_ci 21762306a36Sopenharmony_ci ensure_write_succ "$regions_dir/nr_regions" "1" "valid input" 21862306a36Sopenharmony_ci test_region "$regions_dir/0" 21962306a36Sopenharmony_ci 22062306a36Sopenharmony_ci ensure_write_succ "$regions_dir/nr_regions" "2" "valid input" 22162306a36Sopenharmony_ci test_region "$regions_dir/0" 22262306a36Sopenharmony_ci test_region "$regions_dir/1" 22362306a36Sopenharmony_ci 22462306a36Sopenharmony_ci ensure_write_succ "$regions_dir/nr_regions" "0" "valid input" 22562306a36Sopenharmony_ci ensure_dir "$regions_dir/0" "not_exist" 22662306a36Sopenharmony_ci ensure_dir "$regions_dir/1" "not_exist" 22762306a36Sopenharmony_ci} 22862306a36Sopenharmony_ci 22962306a36Sopenharmony_citest_target() 23062306a36Sopenharmony_ci{ 23162306a36Sopenharmony_ci target_dir=$1 23262306a36Sopenharmony_ci ensure_dir "$target_dir" "exist" 23362306a36Sopenharmony_ci ensure_file "$target_dir/pid_target" "exist" "600" 23462306a36Sopenharmony_ci test_regions "$target_dir/regions" 23562306a36Sopenharmony_ci} 23662306a36Sopenharmony_ci 23762306a36Sopenharmony_citest_targets() 23862306a36Sopenharmony_ci{ 23962306a36Sopenharmony_ci targets_dir=$1 24062306a36Sopenharmony_ci ensure_dir "$targets_dir" "exist" 24162306a36Sopenharmony_ci ensure_file "$targets_dir/nr_targets" "exist" 600 24262306a36Sopenharmony_ci 24362306a36Sopenharmony_ci ensure_write_succ "$targets_dir/nr_targets" "1" "valid input" 24462306a36Sopenharmony_ci test_target "$targets_dir/0" 24562306a36Sopenharmony_ci 24662306a36Sopenharmony_ci ensure_write_succ "$targets_dir/nr_targets" "2" "valid input" 24762306a36Sopenharmony_ci test_target "$targets_dir/0" 24862306a36Sopenharmony_ci test_target "$targets_dir/1" 24962306a36Sopenharmony_ci 25062306a36Sopenharmony_ci ensure_write_succ "$targets_dir/nr_targets" "0" "valid input" 25162306a36Sopenharmony_ci ensure_dir "$targets_dir/0" "not_exist" 25262306a36Sopenharmony_ci ensure_dir "$targets_dir/1" "not_exist" 25362306a36Sopenharmony_ci} 25462306a36Sopenharmony_ci 25562306a36Sopenharmony_citest_intervals() 25662306a36Sopenharmony_ci{ 25762306a36Sopenharmony_ci intervals_dir=$1 25862306a36Sopenharmony_ci ensure_dir "$intervals_dir" "exist" 25962306a36Sopenharmony_ci ensure_file "$intervals_dir/aggr_us" "exist" "600" 26062306a36Sopenharmony_ci ensure_file "$intervals_dir/sample_us" "exist" "600" 26162306a36Sopenharmony_ci ensure_file "$intervals_dir/update_us" "exist" "600" 26262306a36Sopenharmony_ci} 26362306a36Sopenharmony_ci 26462306a36Sopenharmony_citest_monitoring_attrs() 26562306a36Sopenharmony_ci{ 26662306a36Sopenharmony_ci monitoring_attrs_dir=$1 26762306a36Sopenharmony_ci ensure_dir "$monitoring_attrs_dir" "exist" 26862306a36Sopenharmony_ci test_intervals "$monitoring_attrs_dir/intervals" 26962306a36Sopenharmony_ci test_range "$monitoring_attrs_dir/nr_regions" 27062306a36Sopenharmony_ci} 27162306a36Sopenharmony_ci 27262306a36Sopenharmony_citest_context() 27362306a36Sopenharmony_ci{ 27462306a36Sopenharmony_ci context_dir=$1 27562306a36Sopenharmony_ci ensure_dir "$context_dir" "exist" 27662306a36Sopenharmony_ci ensure_file "$context_dir/avail_operations" "exit" 400 27762306a36Sopenharmony_ci ensure_file "$context_dir/operations" "exist" 600 27862306a36Sopenharmony_ci test_monitoring_attrs "$context_dir/monitoring_attrs" 27962306a36Sopenharmony_ci test_targets "$context_dir/targets" 28062306a36Sopenharmony_ci test_schemes "$context_dir/schemes" 28162306a36Sopenharmony_ci} 28262306a36Sopenharmony_ci 28362306a36Sopenharmony_citest_contexts() 28462306a36Sopenharmony_ci{ 28562306a36Sopenharmony_ci contexts_dir=$1 28662306a36Sopenharmony_ci ensure_dir "$contexts_dir" "exist" 28762306a36Sopenharmony_ci ensure_file "$contexts_dir/nr_contexts" "exist" 600 28862306a36Sopenharmony_ci 28962306a36Sopenharmony_ci ensure_write_succ "$contexts_dir/nr_contexts" "1" "valid input" 29062306a36Sopenharmony_ci test_context "$contexts_dir/0" 29162306a36Sopenharmony_ci 29262306a36Sopenharmony_ci ensure_write_fail "$contexts_dir/nr_contexts" "2" "only 0/1 are supported" 29362306a36Sopenharmony_ci test_context "$contexts_dir/0" 29462306a36Sopenharmony_ci 29562306a36Sopenharmony_ci ensure_write_succ "$contexts_dir/nr_contexts" "0" "valid input" 29662306a36Sopenharmony_ci ensure_dir "$contexts_dir/0" "not_exist" 29762306a36Sopenharmony_ci} 29862306a36Sopenharmony_ci 29962306a36Sopenharmony_citest_kdamond() 30062306a36Sopenharmony_ci{ 30162306a36Sopenharmony_ci kdamond_dir=$1 30262306a36Sopenharmony_ci ensure_dir "$kdamond_dir" "exist" 30362306a36Sopenharmony_ci ensure_file "$kdamond_dir/state" "exist" "600" 30462306a36Sopenharmony_ci ensure_file "$kdamond_dir/pid" "exist" 400 30562306a36Sopenharmony_ci test_contexts "$kdamond_dir/contexts" 30662306a36Sopenharmony_ci} 30762306a36Sopenharmony_ci 30862306a36Sopenharmony_citest_kdamonds() 30962306a36Sopenharmony_ci{ 31062306a36Sopenharmony_ci kdamonds_dir=$1 31162306a36Sopenharmony_ci ensure_dir "$kdamonds_dir" "exist" 31262306a36Sopenharmony_ci 31362306a36Sopenharmony_ci ensure_file "$kdamonds_dir/nr_kdamonds" "exist" "600" 31462306a36Sopenharmony_ci 31562306a36Sopenharmony_ci ensure_write_succ "$kdamonds_dir/nr_kdamonds" "1" "valid input" 31662306a36Sopenharmony_ci test_kdamond "$kdamonds_dir/0" 31762306a36Sopenharmony_ci 31862306a36Sopenharmony_ci ensure_write_succ "$kdamonds_dir/nr_kdamonds" "2" "valid input" 31962306a36Sopenharmony_ci test_kdamond "$kdamonds_dir/0" 32062306a36Sopenharmony_ci test_kdamond "$kdamonds_dir/1" 32162306a36Sopenharmony_ci 32262306a36Sopenharmony_ci ensure_write_succ "$kdamonds_dir/nr_kdamonds" "0" "valid input" 32362306a36Sopenharmony_ci ensure_dir "$kdamonds_dir/0" "not_exist" 32462306a36Sopenharmony_ci ensure_dir "$kdamonds_dir/1" "not_exist" 32562306a36Sopenharmony_ci} 32662306a36Sopenharmony_ci 32762306a36Sopenharmony_citest_damon_sysfs() 32862306a36Sopenharmony_ci{ 32962306a36Sopenharmony_ci damon_sysfs=$1 33062306a36Sopenharmony_ci if [ ! -d "$damon_sysfs" ] 33162306a36Sopenharmony_ci then 33262306a36Sopenharmony_ci echo "$damon_sysfs not found" 33362306a36Sopenharmony_ci exit $ksft_skip 33462306a36Sopenharmony_ci fi 33562306a36Sopenharmony_ci 33662306a36Sopenharmony_ci test_kdamonds "$damon_sysfs/kdamonds" 33762306a36Sopenharmony_ci} 33862306a36Sopenharmony_ci 33962306a36Sopenharmony_cicheck_dependencies() 34062306a36Sopenharmony_ci{ 34162306a36Sopenharmony_ci if [ $EUID -ne 0 ] 34262306a36Sopenharmony_ci then 34362306a36Sopenharmony_ci echo "Run as root" 34462306a36Sopenharmony_ci exit $ksft_skip 34562306a36Sopenharmony_ci fi 34662306a36Sopenharmony_ci} 34762306a36Sopenharmony_ci 34862306a36Sopenharmony_cicheck_dependencies 34962306a36Sopenharmony_citest_damon_sysfs "/sys/kernel/mm/damon/admin" 350