diff options
Diffstat (limited to 'tests/ts/lsfd/mkfds-inotify-btrfs')
-rwxr-xr-x | tests/ts/lsfd/mkfds-inotify-btrfs | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/tests/ts/lsfd/mkfds-inotify-btrfs b/tests/ts/lsfd/mkfds-inotify-btrfs new file mode 100755 index 0000000..5dc8e97 --- /dev/null +++ b/tests/ts/lsfd/mkfds-inotify-btrfs @@ -0,0 +1,91 @@ +#!/bin/bash +# +# Copyright (C) 2024 Masatake YAMATO <yamato@redhat.com> +# +# This file is part of util-linux. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This file is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +TS_TOPDIR="${0%/*}/../.." +TS_DESC="inotify on btrfs" + +. "$TS_TOPDIR"/functions.sh +ts_init "$*" +ts_skip_nonroot + +ts_check_test_command "$TS_CMD_LSFD" +ts_check_test_command "$TS_CMD_FINDMNT" +ts_check_prog "stat" +ts_check_prog "sed" +ts_check_prog "mkfs.btrfs" +ts_check_prog "dd" + +ts_cd "$TS_OUTDIR" + +IMG=img.btrfs +MNTPNT=mntpnt +mkdir -p $MNTPNT +dd if=/dev/zero of=$IMG bs=114294784 count=1 status=none +if ! mkfs.btrfs -q $IMG; then + ts_skip "failed to make a btrfs image: $IMG" +fi +if ! mount $IMG $MNTPNT; then + ts_skip "failed to mount a btrfs image, $IMG to $MNTPNT" +fi +trap "umount $MNTPNT; rm -f $IMG" EXIT + +if ! touch $MNTPNT/fstab; then + ts_skip "failed to touch a file on a btrfs filesystem: $MNTPNT/fstab" +fi + +PID= +FD=3 +ROOT="$(stat -c %i $MNTPNT)"@"$($TS_CMD_FINDMNT --raw --noheadings -oMAJ:MIN --target $MNTPNT)" +FSTAB="$(stat -c %i $MNTPNT/fstab)"@"$($TS_CMD_FINDMNT --raw --noheadings -oMAJ:MIN --target $MNTPNT/fstab)" +{ + coproc MKFDS { "$TS_HELPER_MKFDS" inotify $FD dir=$MNTPNT file=$MNTPNT/fstab; } + if read -u ${MKFDS[0]} PID; then + EXPR='(PID == '"${PID}"') and (FD == '"$FD"')' + INODES_RAW=$(${TS_CMD_LSFD} --raw -n -o INOTIFY.INODES.RAW -Q "${EXPR}") + echo "INOTIFY.INODES.RAW": $? + if [[ "$INODES_RAW" == "${FSTAB}"'\x0a'"${ROOT}" ]]; then + echo "INOTIFY.INODES.RAW" == FSTAB'\x0a'ROOT + else + echo "INOTIFY.INODES.RAW": "$INODES_RAW" + echo "FSTAB": "$FSTAB" + echo "ROOT": "$ROOT" + fi + INODES_RAW_JSON=$(${TS_CMD_LSFD} -J --raw -n -o INOTIFY.INODES.RAW -Q "${EXPR}") + echo "INOTIFY.INODES.RAW (JSON)": $? + EXPECTED_JSON=$(cat<<EOF +{ + "lsfd": [ + { + "inotify.inodes.raw": [ + "$FSTAB", "$ROOT" + ] + } + ] +} +EOF + ) + if [[ "$INODES_RAW_JSON" == "${EXPECTED_JSON}" ]]; then + echo "INOTIFY.INODES.RAW" == EXPECTED_JSON + else + echo "INOTIFY.INODES.RAW": "$INODES_RAW_JSON" + fi + + echo DONE >&"${MKFDS[1]}" + fi + wait "${MKFDS_PID}" +} > "$TS_OUTPUT" 2>&1 + +ts_finalize |