* [LTP] [PATCH] commands/mkfs: Added new testcase to test mkfs(8) command.
@ 2015-10-28 11:37 Guangwen Feng
2015-11-02 15:28 ` Cyril Hrubis
0 siblings, 1 reply; 12+ messages in thread
From: Guangwen Feng @ 2015-10-28 11:37 UTC (permalink / raw)
To: ltp
Test mkfs(8) command with some basic options.
Signed-off-by: Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
---
runtest/commands | 10 ++
testcases/commands/mkfs/Makefile | 24 ++++
testcases/commands/mkfs/mkfs01.sh | 236 ++++++++++++++++++++++++++++++++++++++
3 files changed, 270 insertions(+)
create mode 100644 testcases/commands/mkfs/Makefile
create mode 100755 testcases/commands/mkfs/mkfs01.sh
diff --git a/runtest/commands b/runtest/commands
index e5260ba..6c0485b 100644
--- a/runtest/commands
+++ b/runtest/commands
@@ -28,3 +28,13 @@ df01_xfs df01.sh -f xfs
df01_vfat df01.sh -f vfat
df01_exfat df01.sh -f exfat
df01_ntfs df01.sh -f ntfs
+mkfs01 mkfs01.sh
+mkfs01_ext2 mkfs01.sh -f ext2
+mkfs01_ext3 mkfs01.sh -f ext3
+mkfs01_ext4 mkfs01.sh -f ext4
+mkfs01_xfs mkfs01.sh -f xfs
+mkfs01_btrfs mkfs01.sh -f btrfs
+mkfs01_minix mkfs01.sh -f minix
+mkfs01_msdos mkfs01.sh -f msdos
+mkfs01_vfat mkfs01.sh -f vfat
+mkfs01_ntfs mkfs01.sh -f ntfs
diff --git a/testcases/commands/mkfs/Makefile b/testcases/commands/mkfs/Makefile
new file mode 100644
index 0000000..6099017
--- /dev/null
+++ b/testcases/commands/mkfs/Makefile
@@ -0,0 +1,24 @@
+#
+# commands/mkfs testcases Makefile.
+#
+# Copyright (c) 2015 Fujitsu Ltd.
+# Author:Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
+#
+# This program 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 program 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.
+#
+
+top_srcdir ?= ../../..
+
+include $(top_srcdir)/include/mk/env_pre.mk
+
+INSTALL_TARGETS := mkfs01.sh
+
+include $(top_srcdir)/include/mk/generic_leaf_target.mk
diff --git a/testcases/commands/mkfs/mkfs01.sh b/testcases/commands/mkfs/mkfs01.sh
new file mode 100755
index 0000000..3d2f92e
--- /dev/null
+++ b/testcases/commands/mkfs/mkfs01.sh
@@ -0,0 +1,236 @@
+#!/bin/sh
+#
+# Copyright (c) 2015 Fujitsu Ltd.
+# Author: Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
+#
+# This program 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 program 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.
+#
+# Test mkfs command with some basic options.
+#
+
+TCID=mkfs01
+TST_TOTAL=5
+. test.sh
+
+setup()
+{
+ tst_require_root
+
+ tst_check_cmds blkid df
+
+ if [ -n "$FS_TYPE" ]; then
+ tst_check_cmds mkfs.${FS_TYPE}
+ fi
+
+ tst_tmpdir
+
+ TST_CLEANUP="cleanup"
+
+ ROD_SILENT mkdir -p mntpoint
+}
+
+cleanup()
+{
+ tst_release_device
+
+ tst_rmdir
+}
+
+mkfs_mount()
+{
+ mount ${TST_DEVICE} mntpoint
+ local ret=$?
+ if [ $ret -eq 32 ]; then
+ tst_brkm TCONF "Cannot mount ${FS_TYPE}, missing driver?"
+ fi
+
+ if [ $ret -ne 0 ]; then
+ tst_brkm TBROK "Failed to mount device: mount exit = $ret"
+ fi
+}
+
+mkfs_umount()
+{
+ grep -q ${TST_DEVICE} /proc/self/mounts
+ if [ $? -eq 0 ]; then
+ umount ${TST_DEVICE}
+ if [ $? -ne 0 ];then
+ tst_resm TWARN "'umount ${TST_DEVICE}' failed"
+ fi
+ else
+ tst_resm TINFO "${TST_DEVICE} is not mounted"
+ fi
+}
+
+usage()
+{
+ cat << EOF
+ usage: $0 [-f <ext2|ext3|ext4|vfat|...>]
+
+ OPTIONS
+ -f Specify the type of filesystem to be built. If not
+ specified, the default filesystem type (currently ext2)
+ is used.
+ -h Display help text and exit.
+
+EOF
+ tst_brkm TCONF "Display help text or unknown options"
+}
+
+mkfs_verify()
+{
+ if [ -z "$1" ]; then
+ blkid | grep "$2" | grep -q "ext2"
+ else
+ blkid | grep "$2" | grep -q "$1"
+ fi
+}
+
+mkfs_check()
+{
+ mkfs_mount
+ local blocknum=`df -aT | grep "$1" | awk '{print $3}'`
+ mkfs_umount
+
+ if [ $blocknum -gt "$2" ]; then
+ return 1
+ fi
+}
+
+mkfs_test()
+{
+ local mkfs_op=$1
+ local fs_type=$2
+ local fs_op=$3
+ local device=$4
+ local size=$5
+
+ if [ -n "$fs_type" ]; then
+ mkfs_op="-t"
+ fi
+
+ if [ "$fs_type" = "xfs" ] || [ "$fs_type" = "btrfs" ]; then
+ fs_op+=" -f"
+ fi
+
+ local mkfs_cmd="mkfs $mkfs_op $fs_type $fs_op $device $size"
+ mkfs_cmd=`echo "$mkfs_cmd" | sed 's/\s\+/ /g'`
+
+ echo ${fs_op} | grep -q "\-c"
+ if [ $? -eq 0 ] && [ "$fs_type" = "ntfs" ]; then
+ tst_resm TCONF "'${mkfs_cmd}' not supported."
+ return 32
+ fi
+
+ if [ -n "$size" ]; then
+ if [ "$fs_type" = "xfs" ] || [ "$fs_type" = "btrfs" ]; then
+ tst_resm TCONF "'${mkfs_cmd}' not supported."
+ return 32
+ fi
+ fi
+
+ ${mkfs_cmd} >temp 2>&1
+ if [ $? -ne 0 ]; then
+ grep -q -E "unknown option | invalid option" temp
+ if [ $? -eq 0 ]; then
+ tst_resm TCONF "'${mkfs_cmd}' not supported."
+ return 32
+ else
+ tst_resm TFAIL "'${mkfs_cmd}' failed."
+ cat temp
+ return 1
+ fi
+ fi
+
+ if [ -n "$device" ]; then
+ mkfs_verify "$fs_type" "$device"
+ if [ $? -ne 0 ]; then
+ tst_resm TFAIL "'${mkfs_cmd}' failed, not expected."
+ return 1
+ fi
+ fi
+
+ if [ -n "$size" ]; then
+ mkfs_check "$device" "$size"
+ if [ $? -ne 0 ]; then
+ tst_resm TFAIL "'${mkfs_cmd}' failed, not expected."
+ return 1
+ fi
+ fi
+
+ tst_resm TPASS "'${mkfs_cmd}' passed."
+}
+
+test1()
+{
+ tst_acquire_device
+
+ mkfs_test "$MKFS_OP" "$FS_TYPE" "$FS_OP" "$TST_DEVICE"
+
+ tst_release_device
+}
+
+test2()
+{
+ tst_acquire_device
+
+ mkfs_test "$MKFS_OP" "$FS_TYPE" "$FS_OP" "$TST_DEVICE" "10000"
+
+ tst_release_device
+}
+
+test3()
+{
+ tst_acquire_device
+
+ mkfs_test "$MKFS_OP" "$FS_TYPE" "-c" "$TST_DEVICE"
+
+ tst_release_device
+}
+
+test4()
+{
+ mkfs_test "-V"
+}
+
+test5()
+{
+ mkfs_test "-h"
+}
+
+MKFS_OP=""
+FS_TYPE=""
+FS_OP=""
+
+if [ $# -ne 0 ]; then
+ while getopts f:h OPTION; do
+ case $OPTION in
+ f)
+ FS_TYPE=$OPTARG;;
+ h)
+ usage;;
+ ?)
+ usage;;
+ esac
+ done
+
+ if [ -z "$FS_TYPE" ]; then
+ usage
+ fi
+fi
+
+setup
+for i in $(seq 1 ${TST_TOTAL})
+do
+ test$i
+done
+
+tst_exit
--
1.8.4.2
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [LTP] [PATCH] commands/mkfs: Added new testcase to test mkfs(8) command.
2015-10-28 11:37 [LTP] [PATCH] commands/mkfs: Added new testcase to test mkfs(8) command Guangwen Feng
@ 2015-11-02 15:28 ` Cyril Hrubis
2015-11-03 6:16 ` Guangwen Feng
2015-11-03 11:20 ` [LTP] [PATCH] " Guangwen Feng
0 siblings, 2 replies; 12+ messages in thread
From: Cyril Hrubis @ 2015-11-02 15:28 UTC (permalink / raw)
To: ltp
> +#!/bin/sh
> +#
> +# Copyright (c) 2015 Fujitsu Ltd.
> +# Author: Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
> +#
> +# This program 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 program 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.
> +#
> +# Test mkfs command with some basic options.
> +#
> +
> +TCID=mkfs01
> +TST_TOTAL=5
> +. test.sh
> +
> +setup()
> +{
> + tst_require_root
> +
> + tst_check_cmds blkid df
> +
> + if [ -n "$FS_TYPE" ]; then
> + tst_check_cmds mkfs.${FS_TYPE}
> + fi
> +
> + tst_tmpdir
> +
> + TST_CLEANUP="cleanup"
> +
> + ROD_SILENT mkdir -p mntpoint
> +}
> +
> +cleanup()
> +{
> + tst_release_device
> +
> + tst_rmdir
> +}
> +
> +mkfs_mount()
> +{
> + mount ${TST_DEVICE} mntpoint
> + local ret=$?
> + if [ $ret -eq 32 ]; then
> + tst_brkm TCONF "Cannot mount ${FS_TYPE}, missing driver?"
> + fi
> +
> + if [ $ret -ne 0 ]; then
> + tst_brkm TBROK "Failed to mount device: mount exit = $ret"
> + fi
> +}
> +
> +mkfs_umount()
> +{
> + grep -q ${TST_DEVICE} /proc/self/mounts
^
Why not just /proc/mounts?
> + if [ $? -eq 0 ]; then
> + umount ${TST_DEVICE}
> + if [ $? -ne 0 ];then
> + tst_resm TWARN "'umount ${TST_DEVICE}' failed"
> + fi
> + else
> + tst_resm TINFO "${TST_DEVICE} is not mounted"
> + fi
> +}
> +
> +usage()
> +{
> + cat << EOF
> + usage: $0 [-f <ext2|ext3|ext4|vfat|...>]
> +
> + OPTIONS
> + -f Specify the type of filesystem to be built. If not
> + specified, the default filesystem type (currently ext2)
> + is used.
> + -h Display help text and exit.
> +
> +EOF
> + tst_brkm TCONF "Display help text or unknown options"
^
I would rather make this TWARN, because when runtest entries
became corrupted somehow the test would start reporting TCONF
And that may end up being undetected for quite some time.
> +}
> +
> +mkfs_verify()
> +{
> + if [ -z "$1" ]; then
> + blkid | grep "$2" | grep -q "ext2"
> + else
> + blkid | grep "$2" | grep -q "$1"
> + fi
You can actually pass the device to blkid as a parameter instead of grepping it
in the output.
> +}
> +
> +mkfs_check()
> +{
> + mkfs_mount
> + local blocknum=`df -aT | grep "$1" | awk '{print $3}'`
You can pass the mount point to the df instead of greping the device.
> + mkfs_umount
> +
> + if [ $blocknum -gt "$2" ]; then
> + return 1
> + fi
So the size we get as $2 is in kB and df -T reports 1k blocks shouldn't these
be equal, or are there any reserved block in play?
> +}
> +
> +mkfs_test()
> +{
> + local mkfs_op=$1
> + local fs_type=$2
> + local fs_op=$3
> + local device=$4
> + local size=$5
> +
> + if [ -n "$fs_type" ]; then
> + mkfs_op="-t"
Why are you adding the flags by the tiniest bits?
Why don't you rather do:
mkfs_op="-t $fs_type"
Which is far more logical.
> + fi
> +
> + if [ "$fs_type" = "xfs" ] || [ "$fs_type" = "btrfs" ]; then
> + fs_op+=" -f"
This is bashism. You have to do fs_op="$fs_op -f" instead.
> + fi
> +
> + local mkfs_cmd="mkfs $mkfs_op $fs_type $fs_op $device $size"
> + mkfs_cmd=`echo "$mkfs_cmd" | sed 's/\s\+/ /g'`
This is just cosmetic, isn't it? I would just omit it.
> + echo ${fs_op} | grep -q "\-c"
> + if [ $? -eq 0 ] && [ "$fs_type" = "ntfs" ]; then
> + tst_resm TCONF "'${mkfs_cmd}' not supported."
> + return 32
This is fairly misleading. It would be better to use return 0
in case when you just need to exit the function. Because returning
different values and ingoring them later is misleading.
> + fi
> +
> + if [ -n "$size" ]; then
> + if [ "$fs_type" = "xfs" ] || [ "$fs_type" = "btrfs" ]; then
> + tst_resm TCONF "'${mkfs_cmd}' not supported."
> + return 32
Here as well.
> + fi
> + fi
> +
> + ${mkfs_cmd} >temp 2>&1
> + if [ $? -ne 0 ]; then
> + grep -q -E "unknown option | invalid option" temp
> + if [ $? -eq 0 ]; then
> + tst_resm TCONF "'${mkfs_cmd}' not supported."
> + return 32
> + else
> + tst_resm TFAIL "'${mkfs_cmd}' failed."
> + cat temp
> + return 1
> + fi
> + fi
> +
> + if [ -n "$device" ]; then
> + mkfs_verify "$fs_type" "$device"
> + if [ $? -ne 0 ]; then
> + tst_resm TFAIL "'${mkfs_cmd}' failed, not expected."
> + return 1
> + fi
We should name the function better, mkfs_verify_type() comes to mind.
> + fi
> +
> + if [ -n "$size" ]; then
> + mkfs_check "$device" "$size"
> + if [ $? -ne 0 ]; then
> + tst_resm TFAIL "'${mkfs_cmd}' failed, not expected."
> + return 1
> + fi
> + fi
Here as well, mkfs_verify_size would be better.
> + tst_resm TPASS "'${mkfs_cmd}' passed."
> +}
> +
> +test1()
> +{
> + tst_acquire_device
> +
> + mkfs_test "$MKFS_OP" "$FS_TYPE" "$FS_OP" "$TST_DEVICE"
> +
> + tst_release_device
> +}
> +
> +test2()
> +{
> + tst_acquire_device
> +
> + mkfs_test "$MKFS_OP" "$FS_TYPE" "$FS_OP" "$TST_DEVICE" "10000"
Can you just pass empty string when it should be empty instead of passing empty
global variable?
It's more confusing than it could be this way.
> + tst_release_device
> +}
> +
> +test3()
> +{
> + tst_acquire_device
> +
> + mkfs_test "$MKFS_OP" "$FS_TYPE" "-c" "$TST_DEVICE"
> +
> + tst_release_device
> +}
Why don't we acquire device once in the setup and release it in the cleanup?
> +test4()
> +{
> + mkfs_test "-V"
> +}
> +
> +test5()
> +{
> + mkfs_test "-h"
> +}
> +
> +MKFS_OP=""
> +FS_TYPE=""
> +FS_OP=""
> +
> +if [ $# -ne 0 ]; then
> + while getopts f:h OPTION; do
> + case $OPTION in
> + f)
> + FS_TYPE=$OPTARG;;
> + h)
> + usage;;
> + ?)
> + usage;;
> + esac
> + done
> +
> + if [ -z "$FS_TYPE" ]; then
> + usage
> + fi
> +fi
Eh, why just not:
while getopts f:h OPTION; do
case $OPTION in
f)
FS_TYPE=$OPTARG;;
h)
usage;;
?)
usage;;
esac
done
> +setup
> +for i in $(seq 1 ${TST_TOTAL})
> +do
> + test$i
> +done
> +
> +tst_exit
> --
> 1.8.4.2
>
>
> --
> Mailing list info: http://lists.linux.it/listinfo/ltp
--
Cyril Hrubis
chrubis@suse.cz
^ permalink raw reply [flat|nested] 12+ messages in thread
* [LTP] [PATCH] commands/mkfs: Added new testcase to test mkfs(8) command.
2015-11-02 15:28 ` Cyril Hrubis
@ 2015-11-03 6:16 ` Guangwen Feng
2015-11-03 11:43 ` [LTP] [PATCH v2] " Guangwen Feng
2015-11-03 11:20 ` [LTP] [PATCH] " Guangwen Feng
1 sibling, 1 reply; 12+ messages in thread
From: Guangwen Feng @ 2015-11-03 6:16 UTC (permalink / raw)
To: ltp
Hi!
Thanks for your review.
I will modify the test case according to your suggestion.
Best Regards,
Guangwen Feng
On 2015/11/02 23:28, Cyril Hrubis wrote:
>> +#!/bin/sh
>> +#
>> +# Copyright (c) 2015 Fujitsu Ltd.
>> +# Author: Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
>> +#
>> +# This program 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 program 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.
>> +#
>> +# Test mkfs command with some basic options.
>> +#
>> +
>> +TCID=mkfs01
>> +TST_TOTAL=5
>> +. test.sh
>> +
>> +setup()
>> +{
>> + tst_require_root
>> +
>> + tst_check_cmds blkid df
>> +
>> + if [ -n "$FS_TYPE" ]; then
>> + tst_check_cmds mkfs.${FS_TYPE}
>> + fi
>> +
>> + tst_tmpdir
>> +
>> + TST_CLEANUP="cleanup"
>> +
>> + ROD_SILENT mkdir -p mntpoint
>> +}
>> +
>> +cleanup()
>> +{
>> + tst_release_device
>> +
>> + tst_rmdir
>> +}
>> +
>> +mkfs_mount()
>> +{
>> + mount ${TST_DEVICE} mntpoint
>> + local ret=$?
>> + if [ $ret -eq 32 ]; then
>> + tst_brkm TCONF "Cannot mount ${FS_TYPE}, missing driver?"
>> + fi
>> +
>> + if [ $ret -ne 0 ]; then
>> + tst_brkm TBROK "Failed to mount device: mount exit = $ret"
>> + fi
>> +}
>> +
>> +mkfs_umount()
>> +{
>> + grep -q ${TST_DEVICE} /proc/self/mounts
> ^
> Why not just /proc/mounts?
>
>> + if [ $? -eq 0 ]; then
>> + umount ${TST_DEVICE}
>> + if [ $? -ne 0 ];then
>> + tst_resm TWARN "'umount ${TST_DEVICE}' failed"
>> + fi
>> + else
>> + tst_resm TINFO "${TST_DEVICE} is not mounted"
>> + fi
>> +}
>> +
>> +usage()
>> +{
>> + cat << EOF
>> + usage: $0 [-f <ext2|ext3|ext4|vfat|...>]
>> +
>> + OPTIONS
>> + -f Specify the type of filesystem to be built. If not
>> + specified, the default filesystem type (currently ext2)
>> + is used.
>> + -h Display help text and exit.
>> +
>> +EOF
>> + tst_brkm TCONF "Display help text or unknown options"
> ^
> I would rather make this TWARN, because when runtest entries
> became corrupted somehow the test would start reporting TCONF
> And that may end up being undetected for quite some time.
>
>> +}
>> +
>> +mkfs_verify()
>> +{
>> + if [ -z "$1" ]; then
>> + blkid | grep "$2" | grep -q "ext2"
>> + else
>> + blkid | grep "$2" | grep -q "$1"
>> + fi
>
> You can actually pass the device to blkid as a parameter instead of grepping it
> in the output.
>
>> +}
>> +
>> +mkfs_check()
>> +{
>> + mkfs_mount
>> + local blocknum=`df -aT | grep "$1" | awk '{print $3}'`
>
> You can pass the mount point to the df instead of greping the device.
>
>> + mkfs_umount
>> +
>> + if [ $blocknum -gt "$2" ]; then
>> + return 1
>> + fi
>
> So the size we get as $2 is in kB and df -T reports 1k blocks shouldn't these
> be equal, or are there any reserved block in play?
>
>> +}
>> +
>> +mkfs_test()
>> +{
>> + local mkfs_op=$1
>> + local fs_type=$2
>> + local fs_op=$3
>> + local device=$4
>> + local size=$5
>> +
>> + if [ -n "$fs_type" ]; then
>> + mkfs_op="-t"
>
> Why are you adding the flags by the tiniest bits?
>
> Why don't you rather do:
>
> mkfs_op="-t $fs_type"
>
> Which is far more logical.
>
>> + fi
>> +
>> + if [ "$fs_type" = "xfs" ] || [ "$fs_type" = "btrfs" ]; then
>> + fs_op+=" -f"
>
> This is bashism. You have to do fs_op="$fs_op -f" instead.
>
>> + fi
>> +
>> + local mkfs_cmd="mkfs $mkfs_op $fs_type $fs_op $device $size"
>> + mkfs_cmd=`echo "$mkfs_cmd" | sed 's/\s\+/ /g'`
>
> This is just cosmetic, isn't it? I would just omit it.
>
>> + echo ${fs_op} | grep -q "\-c"
>> + if [ $? -eq 0 ] && [ "$fs_type" = "ntfs" ]; then
>> + tst_resm TCONF "'${mkfs_cmd}' not supported."
>> + return 32
>
> This is fairly misleading. It would be better to use return 0
> in case when you just need to exit the function. Because returning
> different values and ingoring them later is misleading.
>
>> + fi
>> +
>> + if [ -n "$size" ]; then
>> + if [ "$fs_type" = "xfs" ] || [ "$fs_type" = "btrfs" ]; then
>> + tst_resm TCONF "'${mkfs_cmd}' not supported."
>> + return 32
>
> Here as well.
>
>> + fi
>> + fi
>> +
>> + ${mkfs_cmd} >temp 2>&1
>> + if [ $? -ne 0 ]; then
>> + grep -q -E "unknown option | invalid option" temp
>> + if [ $? -eq 0 ]; then
>> + tst_resm TCONF "'${mkfs_cmd}' not supported."
>> + return 32
>> + else
>> + tst_resm TFAIL "'${mkfs_cmd}' failed."
>> + cat temp
>> + return 1
>> + fi
>> + fi
>> +
>> + if [ -n "$device" ]; then
>> + mkfs_verify "$fs_type" "$device"
>> + if [ $? -ne 0 ]; then
>> + tst_resm TFAIL "'${mkfs_cmd}' failed, not expected."
>> + return 1
>> + fi
>
> We should name the function better, mkfs_verify_type() comes to mind.
>
>> + fi
>> +
>> + if [ -n "$size" ]; then
>> + mkfs_check "$device" "$size"
>> + if [ $? -ne 0 ]; then
>> + tst_resm TFAIL "'${mkfs_cmd}' failed, not expected."
>> + return 1
>> + fi
>> + fi
>
> Here as well, mkfs_verify_size would be better.
>
>> + tst_resm TPASS "'${mkfs_cmd}' passed."
>> +}
>> +
>> +test1()
>> +{
>> + tst_acquire_device
>> +
>> + mkfs_test "$MKFS_OP" "$FS_TYPE" "$FS_OP" "$TST_DEVICE"
>> +
>> + tst_release_device
>> +}
>> +
>> +test2()
>> +{
>> + tst_acquire_device
>> +
>> + mkfs_test "$MKFS_OP" "$FS_TYPE" "$FS_OP" "$TST_DEVICE" "10000"
>
> Can you just pass empty string when it should be empty instead of passing empty
> global variable?
>
> It's more confusing than it could be this way.
>
>> + tst_release_device
>> +}
>> +
>> +test3()
>> +{
>> + tst_acquire_device
>> +
>> + mkfs_test "$MKFS_OP" "$FS_TYPE" "-c" "$TST_DEVICE"
>> +
>> + tst_release_device
>> +}
>
> Why don't we acquire device once in the setup and release it in the cleanup?
>
>> +test4()
>> +{
>> + mkfs_test "-V"
>> +}
>> +
>> +test5()
>> +{
>> + mkfs_test "-h"
>> +}
>> +
>> +MKFS_OP=""
>> +FS_TYPE=""
>> +FS_OP=""
>> +
>> +if [ $# -ne 0 ]; then
>> + while getopts f:h OPTION; do
>> + case $OPTION in
>> + f)
>> + FS_TYPE=$OPTARG;;
>> + h)
>> + usage;;
>> + ?)
>> + usage;;
>> + esac
>> + done
>> +
>> + if [ -z "$FS_TYPE" ]; then
>> + usage
>> + fi
>> +fi
>
> Eh, why just not:
>
> while getopts f:h OPTION; do
> case $OPTION in
> f)
> FS_TYPE=$OPTARG;;
> h)
> usage;;
> ?)
> usage;;
> esac
> done
>
>> +setup
>> +for i in $(seq 1 ${TST_TOTAL})
>> +do
>> + test$i
>> +done
>> +
>> +tst_exit
>> --
>> 1.8.4.2
>>
>>
>> --
>> Mailing list info: http://lists.linux.it/listinfo/ltp
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* [LTP] [PATCH] commands/mkfs: Added new testcase to test mkfs(8) command.
2015-11-02 15:28 ` Cyril Hrubis
2015-11-03 6:16 ` Guangwen Feng
@ 2015-11-03 11:20 ` Guangwen Feng
2015-11-03 11:39 ` Cyril Hrubis
1 sibling, 1 reply; 12+ messages in thread
From: Guangwen Feng @ 2015-11-03 11:20 UTC (permalink / raw)
To: ltp
On 2015/11/02 23:28, Cyril Hrubis wrote:
>> +#!/bin/sh
>> +#
>> +# Copyright (c) 2015 Fujitsu Ltd.
>> +# Author: Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
>> +#
>> +# This program 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 program 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.
>> +#
>> +# Test mkfs command with some basic options.
>> +#
>> +
>> +TCID=mkfs01
>> +TST_TOTAL=5
>> +. test.sh
>> +
>> +setup()
>> +{
>> + tst_require_root
>> +
>> + tst_check_cmds blkid df
>> +
>> + if [ -n "$FS_TYPE" ]; then
>> + tst_check_cmds mkfs.${FS_TYPE}
>> + fi
>> +
>> + tst_tmpdir
>> +
>> + TST_CLEANUP="cleanup"
>> +
>> + ROD_SILENT mkdir -p mntpoint
>> +}
>> +
>> +cleanup()
>> +{
>> + tst_release_device
>> +
>> + tst_rmdir
>> +}
>> +
>> +mkfs_mount()
>> +{
>> + mount ${TST_DEVICE} mntpoint
>> + local ret=$?
>> + if [ $ret -eq 32 ]; then
>> + tst_brkm TCONF "Cannot mount ${FS_TYPE}, missing driver?"
>> + fi
>> +
>> + if [ $ret -ne 0 ]; then
>> + tst_brkm TBROK "Failed to mount device: mount exit = $ret"
>> + fi
>> +}
>> +
>> +mkfs_umount()
>> +{
>> + grep -q ${TST_DEVICE} /proc/self/mounts
> ^
> Why not just /proc/mounts?
>
>> + if [ $? -eq 0 ]; then
>> + umount ${TST_DEVICE}
>> + if [ $? -ne 0 ];then
>> + tst_resm TWARN "'umount ${TST_DEVICE}' failed"
>> + fi
>> + else
>> + tst_resm TINFO "${TST_DEVICE} is not mounted"
>> + fi
>> +}
>> +
>> +usage()
>> +{
>> + cat << EOF
>> + usage: $0 [-f <ext2|ext3|ext4|vfat|...>]
>> +
>> + OPTIONS
>> + -f Specify the type of filesystem to be built. If not
>> + specified, the default filesystem type (currently ext2)
>> + is used.
>> + -h Display help text and exit.
>> +
>> +EOF
>> + tst_brkm TCONF "Display help text or unknown options"
> ^
> I would rather make this TWARN, because when runtest entries
> became corrupted somehow the test would start reporting TCONF
> And that may end up being undetected for quite some time.
>
>> +}
>> +
>> +mkfs_verify()
>> +{
>> + if [ -z "$1" ]; then
>> + blkid | grep "$2" | grep -q "ext2"
>> + else
>> + blkid | grep "$2" | grep -q "$1"
>> + fi
>
> You can actually pass the device to blkid as a parameter instead of grepping it
> in the output.
>
>> +}
>> +
>> +mkfs_check()
>> +{
>> + mkfs_mount
>> + local blocknum=`df -aT | grep "$1" | awk '{print $3}'`
>
> You can pass the mount point to the df instead of greping the device.
>
>> + mkfs_umount
>> +
>> + if [ $blocknum -gt "$2" ]; then
>> + return 1
>> + fi
>
> So the size we get as $2 is in kB and df -T reports 1k blocks shouldn't these
> be equal, or are there any reserved block in play?
>
Indeed, "$blocknum" here is equal to struct statfs'f_blocks, which denotes total
data blocks in filesystem(df uses statfs(2) to get this info) and does not contain
some metadata in filesytem, e.g. ext3's journal space size.
Best Regards,
Guangwen Feng
>> +}
>> +
>> +mkfs_test()
>> +{
>> + local mkfs_op=$1
>> + local fs_type=$2
>> + local fs_op=$3
>> + local device=$4
>> + local size=$5
>> +
>> + if [ -n "$fs_type" ]; then
>> + mkfs_op="-t"
>
> Why are you adding the flags by the tiniest bits?
>
> Why don't you rather do:
>
> mkfs_op="-t $fs_type"
>
> Which is far more logical.
>
>> + fi
>> +
>> + if [ "$fs_type" = "xfs" ] || [ "$fs_type" = "btrfs" ]; then
>> + fs_op+=" -f"
>
> This is bashism. You have to do fs_op="$fs_op -f" instead.
>
>> + fi
>> +
>> + local mkfs_cmd="mkfs $mkfs_op $fs_type $fs_op $device $size"
>> + mkfs_cmd=`echo "$mkfs_cmd" | sed 's/\s\+/ /g'`
>
> This is just cosmetic, isn't it? I would just omit it.
>
>> + echo ${fs_op} | grep -q "\-c"
>> + if [ $? -eq 0 ] && [ "$fs_type" = "ntfs" ]; then
>> + tst_resm TCONF "'${mkfs_cmd}' not supported."
>> + return 32
>
> This is fairly misleading. It would be better to use return 0
> in case when you just need to exit the function. Because returning
> different values and ingoring them later is misleading.
>
>> + fi
>> +
>> + if [ -n "$size" ]; then
>> + if [ "$fs_type" = "xfs" ] || [ "$fs_type" = "btrfs" ]; then
>> + tst_resm TCONF "'${mkfs_cmd}' not supported."
>> + return 32
>
> Here as well.
>
>> + fi
>> + fi
>> +
>> + ${mkfs_cmd} >temp 2>&1
>> + if [ $? -ne 0 ]; then
>> + grep -q -E "unknown option | invalid option" temp
>> + if [ $? -eq 0 ]; then
>> + tst_resm TCONF "'${mkfs_cmd}' not supported."
>> + return 32
>> + else
>> + tst_resm TFAIL "'${mkfs_cmd}' failed."
>> + cat temp
>> + return 1
>> + fi
>> + fi
>> +
>> + if [ -n "$device" ]; then
>> + mkfs_verify "$fs_type" "$device"
>> + if [ $? -ne 0 ]; then
>> + tst_resm TFAIL "'${mkfs_cmd}' failed, not expected."
>> + return 1
>> + fi
>
> We should name the function better, mkfs_verify_type() comes to mind.
>
>> + fi
>> +
>> + if [ -n "$size" ]; then
>> + mkfs_check "$device" "$size"
>> + if [ $? -ne 0 ]; then
>> + tst_resm TFAIL "'${mkfs_cmd}' failed, not expected."
>> + return 1
>> + fi
>> + fi
>
> Here as well, mkfs_verify_size would be better.
>
>> + tst_resm TPASS "'${mkfs_cmd}' passed."
>> +}
>> +
>> +test1()
>> +{
>> + tst_acquire_device
>> +
>> + mkfs_test "$MKFS_OP" "$FS_TYPE" "$FS_OP" "$TST_DEVICE"
>> +
>> + tst_release_device
>> +}
>> +
>> +test2()
>> +{
>> + tst_acquire_device
>> +
>> + mkfs_test "$MKFS_OP" "$FS_TYPE" "$FS_OP" "$TST_DEVICE" "10000"
>
> Can you just pass empty string when it should be empty instead of passing empty
> global variable?
>
> It's more confusing than it could be this way.
>
>> + tst_release_device
>> +}
>> +
>> +test3()
>> +{
>> + tst_acquire_device
>> +
>> + mkfs_test "$MKFS_OP" "$FS_TYPE" "-c" "$TST_DEVICE"
>> +
>> + tst_release_device
>> +}
>
> Why don't we acquire device once in the setup and release it in the cleanup?
>
>> +test4()
>> +{
>> + mkfs_test "-V"
>> +}
>> +
>> +test5()
>> +{
>> + mkfs_test "-h"
>> +}
>> +
>> +MKFS_OP=""
>> +FS_TYPE=""
>> +FS_OP=""
>> +
>> +if [ $# -ne 0 ]; then
>> + while getopts f:h OPTION; do
>> + case $OPTION in
>> + f)
>> + FS_TYPE=$OPTARG;;
>> + h)
>> + usage;;
>> + ?)
>> + usage;;
>> + esac
>> + done
>> +
>> + if [ -z "$FS_TYPE" ]; then
>> + usage
>> + fi
>> +fi
>
> Eh, why just not:
>
> while getopts f:h OPTION; do
> case $OPTION in
> f)
> FS_TYPE=$OPTARG;;
> h)
> usage;;
> ?)
> usage;;
> esac
> done
>
>> +setup
>> +for i in $(seq 1 ${TST_TOTAL})
>> +do
>> + test$i
>> +done
>> +
>> +tst_exit
>> --
>> 1.8.4.2
>>
>>
>> --
>> Mailing list info: http://lists.linux.it/listinfo/ltp
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* [LTP] [PATCH] commands/mkfs: Added new testcase to test mkfs(8) command.
2015-11-03 11:20 ` [LTP] [PATCH] " Guangwen Feng
@ 2015-11-03 11:39 ` Cyril Hrubis
2015-11-03 11:55 ` Guangwen Feng
0 siblings, 1 reply; 12+ messages in thread
From: Cyril Hrubis @ 2015-11-03 11:39 UTC (permalink / raw)
To: ltp
Hi!
> >> + mkfs_umount
> >> +
> >> + if [ $blocknum -gt "$2" ]; then
> >> + return 1
> >> + fi
> >
> > So the size we get as $2 is in kB and df -T reports 1k blocks shouldn't these
> > be equal, or are there any reserved block in play?
> >
>
> Indeed, "$blocknum" here is equal to struct statfs'f_blocks, which denotes total
> data blocks in filesystem(df uses statfs(2) to get this info) and does not contain
> some metadata in filesytem, e.g. ext3's journal space size.
Ok, then we should check for lower bound as well. Something as blocknum
is greater than 90% of size or similar.
--
Cyril Hrubis
chrubis@suse.cz
^ permalink raw reply [flat|nested] 12+ messages in thread
* [LTP] [PATCH v2] commands/mkfs: Added new testcase to test mkfs(8) command.
2015-11-03 6:16 ` Guangwen Feng
@ 2015-11-03 11:43 ` Guangwen Feng
2015-11-04 4:37 ` =?unknown-8bit?b?5p2O56OK?=
0 siblings, 1 reply; 12+ messages in thread
From: Guangwen Feng @ 2015-11-03 11:43 UTC (permalink / raw)
To: ltp
Test mkfs(8) command with some basic options.
Signed-off-by: Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
---
runtest/commands | 10 ++
testcases/commands/mkfs/Makefile | 24 +++++
testcases/commands/mkfs/mkfs01.sh | 217 ++++++++++++++++++++++++++++++++++++++
3 files changed, 251 insertions(+)
create mode 100644 testcases/commands/mkfs/Makefile
create mode 100755 testcases/commands/mkfs/mkfs01.sh
diff --git a/runtest/commands b/runtest/commands
index e5260ba..6c0485b 100644
--- a/runtest/commands
+++ b/runtest/commands
@@ -28,3 +28,13 @@ df01_xfs df01.sh -f xfs
df01_vfat df01.sh -f vfat
df01_exfat df01.sh -f exfat
df01_ntfs df01.sh -f ntfs
+mkfs01 mkfs01.sh
+mkfs01_ext2 mkfs01.sh -f ext2
+mkfs01_ext3 mkfs01.sh -f ext3
+mkfs01_ext4 mkfs01.sh -f ext4
+mkfs01_xfs mkfs01.sh -f xfs
+mkfs01_btrfs mkfs01.sh -f btrfs
+mkfs01_minix mkfs01.sh -f minix
+mkfs01_msdos mkfs01.sh -f msdos
+mkfs01_vfat mkfs01.sh -f vfat
+mkfs01_ntfs mkfs01.sh -f ntfs
diff --git a/testcases/commands/mkfs/Makefile b/testcases/commands/mkfs/Makefile
new file mode 100644
index 0000000..6099017
--- /dev/null
+++ b/testcases/commands/mkfs/Makefile
@@ -0,0 +1,24 @@
+#
+# commands/mkfs testcases Makefile.
+#
+# Copyright (c) 2015 Fujitsu Ltd.
+# Author:Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
+#
+# This program 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 program 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.
+#
+
+top_srcdir ?= ../../..
+
+include $(top_srcdir)/include/mk/env_pre.mk
+
+INSTALL_TARGETS := mkfs01.sh
+
+include $(top_srcdir)/include/mk/generic_leaf_target.mk
diff --git a/testcases/commands/mkfs/mkfs01.sh b/testcases/commands/mkfs/mkfs01.sh
new file mode 100755
index 0000000..c1337a6
--- /dev/null
+++ b/testcases/commands/mkfs/mkfs01.sh
@@ -0,0 +1,217 @@
+#!/bin/sh
+#
+# Copyright (c) 2015 Fujitsu Ltd.
+# Author: Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
+#
+# This program 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 program 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.
+#
+# Test mkfs command with some basic options.
+#
+
+TCID=mkfs01
+TST_TOTAL=5
+. test.sh
+
+setup()
+{
+ tst_require_root
+
+ tst_check_cmds blkid df
+
+ if [ -n "$FS_TYPE" ]; then
+ tst_check_cmds mkfs.${FS_TYPE}
+ fi
+
+ tst_tmpdir
+
+ tst_acquire_device
+
+ TST_CLEANUP="cleanup"
+
+ ROD_SILENT mkdir -p mntpoint
+}
+
+cleanup()
+{
+ tst_release_device
+
+ tst_rmdir
+}
+
+mkfs_mount()
+{
+ mount ${TST_DEVICE} mntpoint
+ local ret=$?
+ if [ $ret -eq 32 ]; then
+ tst_brkm TCONF "Cannot mount ${FS_TYPE}, missing driver?"
+ fi
+
+ if [ $ret -ne 0 ]; then
+ tst_brkm TBROK "Failed to mount device: mount exit = $ret"
+ fi
+}
+
+mkfs_umount()
+{
+ grep -q ${TST_DEVICE} /proc/mounts
+ if [ $? -eq 0 ]; then
+ umount ${TST_DEVICE}
+ if [ $? -ne 0 ];then
+ tst_resm TWARN "'umount ${TST_DEVICE}' failed"
+ fi
+ else
+ tst_resm TINFO "${TST_DEVICE} is not mounted"
+ fi
+}
+
+usage()
+{
+ cat << EOF
+ usage: $0 [-f <ext2|ext3|ext4|vfat|...>]
+
+ OPTIONS
+ -f Specify the type of filesystem to be built. If not
+ specified, the default filesystem type (currently ext2)
+ is used.
+ -h Display help text and exit.
+
+EOF
+ tst_brkm TWARN "Display help text or unknown options"
+}
+
+mkfs_verify_type()
+{
+ if [ -z "$1" ]; then
+ blkid $2 | grep -q "ext2"
+ else
+ blkid $2 | grep -q "$1"
+ fi
+}
+
+mkfs_verify_size()
+{
+ mkfs_mount
+ local blocknum=`df -aT mntpoint | tail -n1 | awk '{print $3}'`
+ mkfs_umount
+
+ if [ $blocknum -gt "$1" ]; then
+ return 1
+ fi
+}
+
+mkfs_test()
+{
+ local mkfs_op=$1
+ local fs_type=$2
+ local fs_op=$3
+ local device=$4
+ local size=$5
+
+ if [ -n "$fs_type" ]; then
+ mkfs_op="-t $fs_type"
+ fi
+
+ if [ "$fs_type" = "xfs" ] || [ "$fs_type" = "btrfs" ]; then
+ fs_op="$fs_op -f"
+ fi
+
+ local mkfs_cmd="mkfs $mkfs_op $fs_op $device $size"
+
+ echo ${fs_op} | grep -q "\-c"
+ if [ $? -eq 0 ] && [ "$fs_type" = "ntfs" ]; then
+ tst_resm TCONF "'${mkfs_cmd}' not supported."
+ return
+ fi
+
+ if [ -n "$size" ]; then
+ if [ "$fs_type" = "xfs" ] || [ "$fs_type" = "btrfs" ]; then
+ tst_resm TCONF "'${mkfs_cmd}' not supported."
+ return
+ fi
+ fi
+
+ ${mkfs_cmd} >temp 2>&1
+ if [ $? -ne 0 ]; then
+ grep -q -E "unknown option | invalid option" temp
+ if [ $? -eq 0 ]; then
+ tst_resm TCONF "'${mkfs_cmd}' not supported."
+ return
+ else
+ tst_resm TFAIL "'${mkfs_cmd}' failed."
+ cat temp
+ return
+ fi
+ fi
+
+ if [ -n "$device" ]; then
+ mkfs_verify_type "$fs_type" "$device"
+ if [ $? -ne 0 ]; then
+ tst_resm TFAIL "'${mkfs_cmd}' failed, not expected."
+ return
+ fi
+ fi
+
+ if [ -n "$size" ]; then
+ mkfs_verify_size "$size"
+ if [ $? -ne 0 ]; then
+ tst_resm TFAIL "'${mkfs_cmd}' failed, not expected."
+ return
+ fi
+ fi
+
+ tst_resm TPASS "'${mkfs_cmd}' passed."
+}
+
+test1()
+{
+ mkfs_test "" "$FS_TYPE" "" "$TST_DEVICE"
+}
+
+test2()
+{
+ mkfs_test "" "$FS_TYPE" "" "$TST_DEVICE" "10000"
+}
+
+test3()
+{
+ mkfs_test "" "$FS_TYPE" "-c" "$TST_DEVICE"
+}
+
+test4()
+{
+ mkfs_test "-V"
+}
+
+test5()
+{
+ mkfs_test "-h"
+}
+
+FS_TYPE=""
+
+while getopts f:h OPTION; do
+ case $OPTION in
+ f)
+ FS_TYPE=$OPTARG;;
+ h)
+ usage;;
+ ?)
+ usage;;
+ esac
+done
+
+setup
+for i in $(seq 1 ${TST_TOTAL})
+do
+ test$i
+done
+
+tst_exit
--
1.8.4.2
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [LTP] [PATCH] commands/mkfs: Added new testcase to test mkfs(8) command.
2015-11-03 11:39 ` Cyril Hrubis
@ 2015-11-03 11:55 ` Guangwen Feng
2015-11-04 8:12 ` [LTP] [PATCH v3] " Guangwen Feng
0 siblings, 1 reply; 12+ messages in thread
From: Guangwen Feng @ 2015-11-03 11:55 UTC (permalink / raw)
To: ltp
On 2015/11/03 19:39, Cyril Hrubis wrote:
> Hi!
>>>> + mkfs_umount
>>>> +
>>>> + if [ $blocknum -gt "$2" ]; then
>>>> + return 1
>>>> + fi
>>>
>>> So the size we get as $2 is in kB and df -T reports 1k blocks shouldn't these
>>> be equal, or are there any reserved block in play?
>>>
>>
>> Indeed, "$blocknum" here is equal to struct statfs'f_blocks, which denotes total
>> data blocks in filesystem(df uses statfs(2) to get this info) and does not contain
>> some metadata in filesytem, e.g. ext3's journal space size.
>
> Ok, then we should check for lower bound as well. Something as blocknum
> is greater than 90% of size or similar.
>
OK, I see, thanks!
Please ignore the v2 I just sent, I will email a v3 with lower bound check.
Best Regards,
Guangwen Feng
^ permalink raw reply [flat|nested] 12+ messages in thread
* [LTP] [PATCH v2] commands/mkfs: Added new testcase to test mkfs(8) command.
2015-11-03 11:43 ` [LTP] [PATCH v2] " Guangwen Feng
@ 2015-11-04 4:37 ` =?unknown-8bit?b?5p2O56OK?=
2015-11-04 5:37 ` Guangwen Feng
0 siblings, 1 reply; 12+ messages in thread
From: =?unknown-8bit?b?5p2O56OK?= @ 2015-11-04 4:37 UTC (permalink / raw)
To: ltp
> Test mkfs(8) command with some basic options.
>
> Signed-off-by: Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
> ---
> runtest/commands | 10 ++
> testcases/commands/mkfs/Makefile | 24 +++++
> testcases/commands/mkfs/mkfs01.sh | 217 ++++++++++++++++++++++++++++++++++++++
> 3 files changed, 251 insertions(+)
> create mode 100644 testcases/commands/mkfs/Makefile
> create mode 100755 testcases/commands/mkfs/mkfs01.sh
>
> diff --git a/runtest/commands b/runtest/commands
> index e5260ba..6c0485b 100644
> --- a/runtest/commands
> +++ b/runtest/commands
> @@ -28,3 +28,13 @@ df01_xfs df01.sh -f xfs
> df01_vfat df01.sh -f vfat
> df01_exfat df01.sh -f exfat
> df01_ntfs df01.sh -f ntfs
> +mkfs01 mkfs01.sh
> +mkfs01_ext2 mkfs01.sh -f ext2
> +mkfs01_ext3 mkfs01.sh -f ext3
> +mkfs01_ext4 mkfs01.sh -f ext4
> +mkfs01_xfs mkfs01.sh -f xfs
> +mkfs01_btrfs mkfs01.sh -f btrfs
> +mkfs01_minix mkfs01.sh -f minix
> +mkfs01_msdos mkfs01.sh -f msdos
> +mkfs01_vfat mkfs01.sh -f vfat
> +mkfs01_ntfs mkfs01.sh -f ntfs
> diff --git a/testcases/commands/mkfs/Makefile b/testcases/commands/mkfs/Makefile
> new file mode 100644
> index 0000000..6099017
> --- /dev/null
> +++ b/testcases/commands/mkfs/Makefile
> @@ -0,0 +1,24 @@
> +#
> +# commands/mkfs testcases Makefile.
> +#
> +# Copyright (c) 2015 Fujitsu Ltd.
> +# Author:Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
> +#
> +# This program 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 program 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.
> +#
> +
> +top_srcdir ?= ../../..
> +
> +include $(top_srcdir)/include/mk/env_pre.mk
> +
> +INSTALL_TARGETS := mkfs01.sh
> +
> +include $(top_srcdir)/include/mk/generic_leaf_target.mk
> diff --git a/testcases/commands/mkfs/mkfs01.sh b/testcases/commands/mkfs/mkfs01.sh
> new file mode 100755
> index 0000000..c1337a6
> --- /dev/null
> +++ b/testcases/commands/mkfs/mkfs01.sh
> @@ -0,0 +1,217 @@
> +#!/bin/sh
> +#
> +# Copyright (c) 2015 Fujitsu Ltd.
> +# Author: Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
> +#
> +# This program 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 program 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.
> +#
> +# Test mkfs command with some basic options.
> +#
> +
> +TCID=mkfs01
> +TST_TOTAL=5
> +. test.sh
> +
> +setup()
> +{
> + tst_require_root
> +
> + tst_check_cmds blkid df
> +
> + if [ -n "$FS_TYPE" ]; then
> + tst_check_cmds mkfs.${FS_TYPE}
> + fi
> +
> + tst_tmpdir
> +
> + tst_acquire_device
> +
> + TST_CLEANUP="cleanup"
> +
> + ROD_SILENT mkdir -p mntpoint
> +}
> +
> +cleanup()
> +{
> + tst_release_device
> +
> + tst_rmdir
> +}
> +
> +mkfs_mount()
> +{
> + mount ${TST_DEVICE} mntpoint
> + local ret=$?
> + if [ $ret -eq 32 ]; then
> + tst_brkm TCONF "Cannot mount ${FS_TYPE}, missing driver?"
> + fi
> +
> + if [ $ret -ne 0 ]; then
> + tst_brkm TBROK "Failed to mount device: mount exit = $ret"
> + fi
> +}
> +
> +mkfs_umount()
> +{
> + grep -q ${TST_DEVICE} /proc/mounts
> + if [ $? -eq 0 ]; then
> + umount ${TST_DEVICE}
> + if [ $? -ne 0 ];then
> + tst_resm TWARN "'umount ${TST_DEVICE}' failed"
> + fi
> + else
> + tst_resm TINFO "${TST_DEVICE} is not mounted"
> + fi
> +}
> +
> +usage()
> +{
> + cat << EOF
> + usage: $0 [-f <ext2|ext3|ext4|vfat|...>]
> +
> + OPTIONS
> + -f Specify the type of filesystem to be built. If not
> + specified, the default filesystem type (currently ext2)
> + is used.
> + -h Display help text and exit.
> +
> +EOF
> + tst_brkm TWARN "Display help text or unknown options"
> +}
> +
> +mkfs_verify_type()
> +{
> + if [ -z "$1" ]; then
> + blkid $2 | grep -q "ext2"
> + else
> + blkid $2 | grep -q "$1"
> + fi
> +}
Hi, how about:
mkfs_verify_type()
{
if [ -z "$1" ]; then
blkid $2 -t TYPE="ext2"
else
blkid $2 -t TYPE="$1"
fi
}
--
Rock Lee
^ permalink raw reply [flat|nested] 12+ messages in thread
* [LTP] [PATCH v2] commands/mkfs: Added new testcase to test mkfs(8) command.
2015-11-04 4:37 ` =?unknown-8bit?b?5p2O56OK?=
@ 2015-11-04 5:37 ` Guangwen Feng
0 siblings, 0 replies; 12+ messages in thread
From: Guangwen Feng @ 2015-11-04 5:37 UTC (permalink / raw)
To: ltp
Hi!
>> +mkfs_verify_type()
>> +{
>> + if [ -z "$1" ]; then
>> + blkid $2 | grep -q "ext2"
>> + else
>> + blkid $2 | grep -q "$1"
>> + fi
>> +}
>
> Hi, how about:
> mkfs_verify_type()
> {
> if [ -z "$1" ]; then
> blkid $2 -t TYPE="ext2"
> else
> blkid $2 -t TYPE="$1"
> fi
> }
>
It looks better since it's more logical? thanks!
^ permalink raw reply [flat|nested] 12+ messages in thread
* [LTP] [PATCH v3] commands/mkfs: Added new testcase to test mkfs(8) command.
2015-11-03 11:55 ` Guangwen Feng
@ 2015-11-04 8:12 ` Guangwen Feng
2015-11-04 13:22 ` Cyril Hrubis
0 siblings, 1 reply; 12+ messages in thread
From: Guangwen Feng @ 2015-11-04 8:12 UTC (permalink / raw)
To: ltp
Test mkfs(8) command with some basic options.
Signed-off-by: Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
---
runtest/commands | 10 ++
testcases/commands/mkfs/Makefile | 24 ++++
testcases/commands/mkfs/mkfs01.sh | 234 ++++++++++++++++++++++++++++++++++++++
3 files changed, 268 insertions(+)
create mode 100644 testcases/commands/mkfs/Makefile
create mode 100755 testcases/commands/mkfs/mkfs01.sh
diff --git a/runtest/commands b/runtest/commands
index e5260ba..6c0485b 100644
--- a/runtest/commands
+++ b/runtest/commands
@@ -28,3 +28,13 @@ df01_xfs df01.sh -f xfs
df01_vfat df01.sh -f vfat
df01_exfat df01.sh -f exfat
df01_ntfs df01.sh -f ntfs
+mkfs01 mkfs01.sh
+mkfs01_ext2 mkfs01.sh -f ext2
+mkfs01_ext3 mkfs01.sh -f ext3
+mkfs01_ext4 mkfs01.sh -f ext4
+mkfs01_xfs mkfs01.sh -f xfs
+mkfs01_btrfs mkfs01.sh -f btrfs
+mkfs01_minix mkfs01.sh -f minix
+mkfs01_msdos mkfs01.sh -f msdos
+mkfs01_vfat mkfs01.sh -f vfat
+mkfs01_ntfs mkfs01.sh -f ntfs
diff --git a/testcases/commands/mkfs/Makefile b/testcases/commands/mkfs/Makefile
new file mode 100644
index 0000000..6099017
--- /dev/null
+++ b/testcases/commands/mkfs/Makefile
@@ -0,0 +1,24 @@
+#
+# commands/mkfs testcases Makefile.
+#
+# Copyright (c) 2015 Fujitsu Ltd.
+# Author:Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
+#
+# This program 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 program 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.
+#
+
+top_srcdir ?= ../../..
+
+include $(top_srcdir)/include/mk/env_pre.mk
+
+INSTALL_TARGETS := mkfs01.sh
+
+include $(top_srcdir)/include/mk/generic_leaf_target.mk
diff --git a/testcases/commands/mkfs/mkfs01.sh b/testcases/commands/mkfs/mkfs01.sh
new file mode 100755
index 0000000..2cf9d6a
--- /dev/null
+++ b/testcases/commands/mkfs/mkfs01.sh
@@ -0,0 +1,234 @@
+#!/bin/sh
+#
+# Copyright (c) 2015 Fujitsu Ltd.
+# Author: Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
+#
+# This program 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 program 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.
+#
+# Test mkfs command with some basic options.
+#
+
+TCID=mkfs01
+TST_TOTAL=5
+. test.sh
+
+setup()
+{
+ tst_require_root
+
+ tst_check_cmds blkid df
+
+ if [ -n "$FS_TYPE" ]; then
+ tst_check_cmds mkfs.${FS_TYPE}
+ fi
+
+ tst_tmpdir
+
+ tst_acquire_device
+
+ TST_CLEANUP="cleanup"
+
+ ROD_SILENT mkdir -p mntpoint
+}
+
+cleanup()
+{
+ tst_release_device
+
+ tst_rmdir
+}
+
+mkfs_mount()
+{
+ mount ${TST_DEVICE} mntpoint
+ local ret=$?
+ if [ $ret -eq 32 ]; then
+ tst_brkm TCONF "Cannot mount ${FS_TYPE}, missing driver?"
+ fi
+
+ if [ $ret -ne 0 ]; then
+ tst_brkm TBROK "Failed to mount device: mount exit = $ret"
+ fi
+}
+
+mkfs_umount()
+{
+ grep -q ${TST_DEVICE} /proc/mounts
+ if [ $? -eq 0 ]; then
+ umount ${TST_DEVICE}
+ if [ $? -ne 0 ];then
+ tst_resm TWARN "'umount ${TST_DEVICE}' failed"
+ fi
+ else
+ tst_resm TINFO "${TST_DEVICE} is not mounted"
+ fi
+}
+
+usage()
+{
+ cat << EOF
+ usage: $0 [-f <ext2|ext3|ext4|vfat|...>]
+
+ OPTIONS
+ -f Specify the type of filesystem to be built. If not
+ specified, the default filesystem type (currently ext2)
+ is used.
+ -h Display help text and exit.
+
+EOF
+ tst_brkm TWARN "Display help text or unknown options"
+}
+
+mkfs_verify_type()
+{
+ if [ -z "$1" ]; then
+ blkid $2 -t TYPE="ext2" >/dev/null
+ else
+ if [ "$1" = "msdos" ]; then
+ blkid $2 -t SEC_TYPE="$1" >/dev/null
+ else
+ blkid $2 -t TYPE="$1" >/dev/null
+ fi
+ fi
+}
+
+mkfs_verify_size()
+{
+ mkfs_mount
+ local blocknum=`df -B 1k mntpoint | tail -n1 | awk '{print $2}'`
+ mkfs_umount
+
+ if [ $blocknum -gt "$2" ]; then
+ return 1
+ fi
+
+ # Size argument in mkfs.ntfs denotes number-of-sectors which is 512bytes,
+ # 1k-block size should be devided by this argument for ntfs verification.
+ if [ "$1" = "ntfs" ]; then
+ local rate=1024/512
+ if [ $blocknum -lt "$(($2/rate*9/10))" ]; then
+ return 1
+ fi
+ else
+ if [ $blocknum -lt "$(($2*9/10))" ]; then
+ return 1
+ fi
+ fi
+}
+
+mkfs_test()
+{
+ local mkfs_op=$1
+ local fs_type=$2
+ local fs_op=$3
+ local device=$4
+ local size=$5
+
+ if [ -n "$fs_type" ]; then
+ mkfs_op="-t $fs_type"
+ fi
+
+ if [ "$fs_type" = "xfs" ] || [ "$fs_type" = "btrfs" ]; then
+ fs_op="$fs_op -f"
+ fi
+
+ local mkfs_cmd="mkfs $mkfs_op $fs_op $device $size"
+
+ echo ${fs_op} | grep -q "\-c"
+ if [ $? -eq 0 ] && [ "$fs_type" = "ntfs" ]; then
+ tst_resm TCONF "'${mkfs_cmd}' not supported."
+ return
+ fi
+
+ if [ -n "$size" ]; then
+ if [ "$fs_type" = "xfs" ] || [ "$fs_type" = "btrfs" ]; then
+ tst_resm TCONF "'${mkfs_cmd}' not supported."
+ return
+ fi
+ fi
+
+ ${mkfs_cmd} >temp 2>&1
+ if [ $? -ne 0 ]; then
+ grep -q -E "unknown option | invalid option" temp
+ if [ $? -eq 0 ]; then
+ tst_resm TCONF "'${mkfs_cmd}' not supported."
+ return
+ else
+ tst_resm TFAIL "'${mkfs_cmd}' failed."
+ cat temp
+ return
+ fi
+ fi
+
+ if [ -n "$device" ]; then
+ mkfs_verify_type "$fs_type" "$device"
+ if [ $? -ne 0 ]; then
+ tst_resm TFAIL "'${mkfs_cmd}' failed, not expected."
+ return
+ fi
+ fi
+
+ if [ -n "$size" ]; then
+ mkfs_verify_size "$fs_type" "$size"
+ if [ $? -ne 0 ]; then
+ tst_resm TFAIL "'${mkfs_cmd}' failed, not expected."
+ return
+ fi
+ fi
+
+ tst_resm TPASS "'${mkfs_cmd}' passed."
+}
+
+test1()
+{
+ mkfs_test "" "$FS_TYPE" "" "$TST_DEVICE"
+}
+
+test2()
+{
+ mkfs_test "" "$FS_TYPE" "" "$TST_DEVICE" "16000"
+}
+
+test3()
+{
+ mkfs_test "" "$FS_TYPE" "-c" "$TST_DEVICE"
+}
+
+test4()
+{
+ mkfs_test "-V"
+}
+
+test5()
+{
+ mkfs_test "-h"
+}
+
+FS_TYPE=""
+
+while getopts f:h OPTION; do
+ case $OPTION in
+ f)
+ FS_TYPE=$OPTARG;;
+ h)
+ usage;;
+ ?)
+ usage;;
+ esac
+done
+
+setup
+for i in $(seq 1 ${TST_TOTAL})
+do
+ test$i
+done
+
+tst_exit
--
1.8.4.2
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [LTP] [PATCH v3] commands/mkfs: Added new testcase to test mkfs(8) command.
2015-11-04 8:12 ` [LTP] [PATCH v3] " Guangwen Feng
@ 2015-11-04 13:22 ` Cyril Hrubis
2015-11-05 2:03 ` Guangwen Feng
0 siblings, 1 reply; 12+ messages in thread
From: Cyril Hrubis @ 2015-11-04 13:22 UTC (permalink / raw)
To: ltp
Hi!
> +mkfs_verify_size()
> +{
> + mkfs_mount
> + local blocknum=`df -B 1k mntpoint | tail -n1 | awk '{print $2}'`
> + mkfs_umount
> +
> + if [ $blocknum -gt "$2" ]; then
> + return 1
> + fi
> +
> + # Size argument in mkfs.ntfs denotes number-of-sectors which is 512bytes,
> + # 1k-block size should be devided by this argument for ntfs verification.
> + if [ "$1" = "ntfs" ]; then
> + local rate=1024/512
> + if [ $blocknum -lt "$(($2/rate*9/10))" ]; then
> + return 1
> + fi
> + else
> + if [ $blocknum -lt "$(($2*9/10))" ]; then
> + return 1
> + fi
> + fi
I've added explicit return 0 here, since otherwise the retul value would
be set by the last executed command (which would be the either umount
or mount above...).
And pushed, thanks.
--
Cyril Hrubis
chrubis@suse.cz
^ permalink raw reply [flat|nested] 12+ messages in thread
* [LTP] [PATCH v3] commands/mkfs: Added new testcase to test mkfs(8) command.
2015-11-04 13:22 ` Cyril Hrubis
@ 2015-11-05 2:03 ` Guangwen Feng
0 siblings, 0 replies; 12+ messages in thread
From: Guangwen Feng @ 2015-11-05 2:03 UTC (permalink / raw)
To: ltp
On 2015/11/04 21:22, Cyril Hrubis wrote:
> Hi!
>> +mkfs_verify_size()
>> +{
>> + mkfs_mount
>> + local blocknum=`df -B 1k mntpoint | tail -n1 | awk '{print $2}'`
>> + mkfs_umount
>> +
>> + if [ $blocknum -gt "$2" ]; then
>> + return 1
>> + fi
>> +
>> + # Size argument in mkfs.ntfs denotes number-of-sectors which is 512bytes,
>> + # 1k-block size should be devided by this argument for ntfs verification.
>> + if [ "$1" = "ntfs" ]; then
>> + local rate=1024/512
>> + if [ $blocknum -lt "$(($2/rate*9/10))" ]; then
>> + return 1
>> + fi
>> + else
>> + if [ $blocknum -lt "$(($2*9/10))" ]; then
>> + return 1
>> + fi
>> + fi
>
> I've added explicit return 0 here, since otherwise the retul value would
> be set by the last executed command (which would be the either umount
> or mount above...).
>
Indeed, got it.
Many thanks!
Best Regards,
Guangwen Feng
>
> And pushed, thanks.
>
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2015-11-05 2:03 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-10-28 11:37 [LTP] [PATCH] commands/mkfs: Added new testcase to test mkfs(8) command Guangwen Feng
2015-11-02 15:28 ` Cyril Hrubis
2015-11-03 6:16 ` Guangwen Feng
2015-11-03 11:43 ` [LTP] [PATCH v2] " Guangwen Feng
2015-11-04 4:37 ` =?unknown-8bit?b?5p2O56OK?=
2015-11-04 5:37 ` Guangwen Feng
2015-11-03 11:20 ` [LTP] [PATCH] " Guangwen Feng
2015-11-03 11:39 ` Cyril Hrubis
2015-11-03 11:55 ` Guangwen Feng
2015-11-04 8:12 ` [LTP] [PATCH v3] " Guangwen Feng
2015-11-04 13:22 ` Cyril Hrubis
2015-11-05 2:03 ` Guangwen Feng
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.