Checks if the sysfs attribute sanitizes arguments and verifies input syntax. Signed-off-by: Anand Jain <anand.jain@xxxxxxxxxx> --- tests/btrfs/329 | 92 +++++++++++++++++++++++++++++++++++++++++++++ tests/btrfs/329.out | 2 + 2 files changed, 94 insertions(+) create mode 100755 tests/btrfs/329 create mode 100644 tests/btrfs/329.out diff --git a/tests/btrfs/329 b/tests/btrfs/329 new file mode 100755 index 000000000000..9f63ab951eac --- /dev/null +++ b/tests/btrfs/329 @@ -0,0 +1,92 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2025 Oracle. All Rights Reserved. +# +# FS QA Test 329 +# +# Verify sysfs knob input syntax. +# +. ./common/preamble +_begin_fstest auto quick + +. ./common/filter + +# Modify as appropriate. +_require_scratch +_require_fs_sysfs read_policy + +_scratch_mkfs > /dev/null 2>&1 || _fail "mkfs failed" +_scratch_mount + +set_sysfs_policy() +{ + local attr=$1 + shift + local policy=$@ + + _set_fs_sysfs_attr $SCRATCH_DEV $attr ${policy} + _get_fs_sysfs_attr $SCRATCH_DEV $attr | grep -q "[${policy}]" + if [[ $? != 0 ]]; then + echo "Setting sysfs $attr $policy failed" + fi +} + +set_sysfs_policy_must_fail() +{ + local attr=$1 + shift + local policy=$@ + + _set_fs_sysfs_attr $SCRATCH_DEV $attr ${policy} | _filter_sysfs_error \ + | _expect_error_invalid_argument | tee -a $seqres.full +} + +verify_sysfs_syntax() +{ + local attr=$1 + local policy=$2 + local value=$3 + + # Test policy specified wrongly. Must fail. + set_sysfs_policy_must_fail $attr "'$policy $policy'" + set_sysfs_policy_must_fail $attr "'$policy t'" + set_sysfs_policy_must_fail $attr "' '" + set_sysfs_policy_must_fail $attr "'${policy} n'" + set_sysfs_policy_must_fail $attr "'n ${policy}'" + set_sysfs_policy_must_fail $attr "' ${policy}'" + set_sysfs_policy_must_fail $attr "' ${policy} '" + set_sysfs_policy_must_fail $attr "'${policy} '" + set_sysfs_policy_must_fail $attr _${policy} + set_sysfs_policy_must_fail $attr ${policy}_ + set_sysfs_policy_must_fail $attr _${policy}_ + set_sysfs_policy_must_fail $attr ${policy}: + # Test policy longer than 32 chars fails stable. + set_sysfs_policy_must_fail $attr 'jfdkkkkjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjffjfjfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + + # Test policy specified correctly. Must pass. + set_sysfs_policy $attr $policy + + # If the policy has no value return + if [[ -z $value ]]; then + return + fi + + # Test value specified wrongly. Must fail. + set_sysfs_policy_must_fail $attr "'$policy: $value'" + set_sysfs_policy_must_fail $attr "'$policy:$value '" + set_sysfs_policy_must_fail $attr "'$policy:$value '" + set_sysfs_policy_must_fail $attr "'$policy: $value'" + set_sysfs_policy_must_fail $attr "'$policy :$value'" + + # Test policy and value all specified correctly. Must pass. + set_sysfs_policy $attr $policy:$value +} + +verify_sysfs_syntax read_policy pid +verify_sysfs_syntax read_policy round-robin 4k +verify_sysfs_syntax allocation/data/chunk_size 10g + +echo Silence is golden + +status=0 +exit diff --git a/tests/btrfs/329.out b/tests/btrfs/329.out new file mode 100644 index 000000000000..9794dc15960d --- /dev/null +++ b/tests/btrfs/329.out @@ -0,0 +1,2 @@ +QA output created by 329 +Silence is golden -- 2.47.0