18a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng#!/bin/sh 28a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng# 38a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng# Copyright (c) 2015 Fujitsu Ltd. 48a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng# Author: Guangwen Feng <fenggw-fnst@cn.fujitsu.com> 58a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng# 68a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng# This program is free software; you can redistribute it and/or modify 78a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng# it under the terms of the GNU General Public License as published by 88a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng# the Free Software Foundation; either version 2 of the License, or 98a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng# (at your option) any later version. 108a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng# 118a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng# This program is distributed in the hope that it will be useful, 128a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng# but WITHOUT ANY WARRANTY; without even the implied warranty of 138a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 148a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng# the GNU General Public License for more details. 158a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng# 168a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng# Test mkfs command with some basic options. 178a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng# 188a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng 19353597d789ed6573d04459c23946b9a4289e4bc7Cyril HrubisTST_CNT=5 20353597d789ed6573d04459c23946b9a4289e4bc7Cyril HrubisTST_SETUP=setup 21353597d789ed6573d04459c23946b9a4289e4bc7Cyril HrubisTST_TESTFUNC=test 22353597d789ed6573d04459c23946b9a4289e4bc7Cyril HrubisTST_OPTS="f:" 23353597d789ed6573d04459c23946b9a4289e4bc7Cyril HrubisTST_USAGE=usage 24353597d789ed6573d04459c23946b9a4289e4bc7Cyril HrubisTST_PARSE_ARGS=parse_args 25353597d789ed6573d04459c23946b9a4289e4bc7Cyril HrubisTST_NEEDS_ROOT=1 26353597d789ed6573d04459c23946b9a4289e4bc7Cyril HrubisTST_NEEDS_TMPDIR=1 27353597d789ed6573d04459c23946b9a4289e4bc7Cyril HrubisTST_NEEDS_DEVICE=1 28353597d789ed6573d04459c23946b9a4289e4bc7Cyril HrubisTST_NEEDS_CMDS="blkid df" 29353597d789ed6573d04459c23946b9a4289e4bc7Cyril Hrubis. tst_test.sh 308a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng 31353597d789ed6573d04459c23946b9a4289e4bc7Cyril Hrubisusage() 328a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng{ 33353597d789ed6573d04459c23946b9a4289e4bc7Cyril Hrubis cat << EOF 34353597d789ed6573d04459c23946b9a4289e4bc7Cyril Hrubisusage: $0 [-f <ext2|ext3|ext4|vfat|...>] 358a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng 36353597d789ed6573d04459c23946b9a4289e4bc7Cyril HrubisOPTIONS 37353597d789ed6573d04459c23946b9a4289e4bc7Cyril Hrubis-f Specify the type of filesystem to be built. If not 38353597d789ed6573d04459c23946b9a4289e4bc7Cyril Hrubis specified, the default filesystem type (currently ext2) 39353597d789ed6573d04459c23946b9a4289e4bc7Cyril Hrubis is used. 40353597d789ed6573d04459c23946b9a4289e4bc7Cyril HrubisEOF 41353597d789ed6573d04459c23946b9a4289e4bc7Cyril Hrubis} 428a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng 43353597d789ed6573d04459c23946b9a4289e4bc7Cyril Hrubisparse_args() 44353597d789ed6573d04459c23946b9a4289e4bc7Cyril Hrubis{ 45353597d789ed6573d04459c23946b9a4289e4bc7Cyril Hrubis FS_TYPE="$2" 46353597d789ed6573d04459c23946b9a4289e4bc7Cyril Hrubis} 47353597d789ed6573d04459c23946b9a4289e4bc7Cyril Hrubis 48353597d789ed6573d04459c23946b9a4289e4bc7Cyril Hrubissetup() 49353597d789ed6573d04459c23946b9a4289e4bc7Cyril Hrubis{ 508a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng if [ -n "$FS_TYPE" ]; then 518a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng tst_check_cmds mkfs.${FS_TYPE} 528a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng fi 538a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng 548a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng ROD_SILENT mkdir -p mntpoint 558a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng} 568a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng 578a95b719259f489bf50e1642498ecbda99662f90Guangwen Fengmkfs_mount() 588a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng{ 598a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng mount ${TST_DEVICE} mntpoint 608a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng local ret=$? 618a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng if [ $ret -eq 32 ]; then 62353597d789ed6573d04459c23946b9a4289e4bc7Cyril Hrubis tst_brk TCONF "Cannot mount ${FS_TYPE}, missing driver?" 638a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng fi 648a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng 658a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng if [ $ret -ne 0 ]; then 66353597d789ed6573d04459c23946b9a4289e4bc7Cyril Hrubis tst_brk TBROK "Failed to mount device: mount exit = $ret" 678a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng fi 688a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng} 698a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng 708a95b719259f489bf50e1642498ecbda99662f90Guangwen Fengmkfs_verify_type() 718a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng{ 728a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng if [ -z "$1" ]; then 738a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng blkid $2 -t TYPE="ext2" >/dev/null 748a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng else 758a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng if [ "$1" = "msdos" ]; then 766be6bb56f02d662952860ebcbfc2f1a2355e8705Rock Lee blkid $2 -t TYPE="vfat" >/dev/null 778a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng else 788a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng blkid $2 -t TYPE="$1" >/dev/null 798a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng fi 808a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng fi 818a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng} 828a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng 838a95b719259f489bf50e1642498ecbda99662f90Guangwen Fengmkfs_verify_size() 848a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng{ 858a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng mkfs_mount 86c6ef4403f944e6df5610ec3f845ce056106be6acStanislav Kholmanskikh local blocknum=`df -P -B 1k mntpoint | tail -n1 | awk '{print $2}'` 87c615f1127383eec550e86785ed7cb20b61eb8268Cyril Hrubis tst_umount "$TST_DEVICE" 888a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng 898a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng if [ $blocknum -gt "$2" ]; then 908a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng return 1 918a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng fi 928a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng 938a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng # Size argument in mkfs.ntfs denotes number-of-sectors which is 512bytes, 948a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng # 1k-block size should be devided by this argument for ntfs verification. 958a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng if [ "$1" = "ntfs" ]; then 968a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng local rate=1024/512 9702efa0309e3754a092c03d4e645e81275771f75eLucas Magasweran if [ $blocknum -lt "$(($2/$rate*9/10))" ]; then 988a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng return 1 998a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng fi 1008a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng else 1018a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng if [ $blocknum -lt "$(($2*9/10))" ]; then 1028a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng return 1 1038a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng fi 1048a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng fi 1058a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng 1068a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng return 0 1078a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng} 1088a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng 1098a95b719259f489bf50e1642498ecbda99662f90Guangwen Fengmkfs_test() 1108a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng{ 1118a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng local mkfs_op=$1 1128a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng local fs_type=$2 1138a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng local fs_op=$3 1148a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng local device=$4 1158a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng local size=$5 1168a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng 1178a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng if [ -n "$fs_type" ]; then 1188a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng mkfs_op="-t $fs_type" 1198a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng fi 1208a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng 1218a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng if [ "$fs_type" = "xfs" ] || [ "$fs_type" = "btrfs" ]; then 1228a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng fs_op="$fs_op -f" 1238a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng fi 1248a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng 1258a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng local mkfs_cmd="mkfs $mkfs_op $fs_op $device $size" 1268a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng 1278a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng echo ${fs_op} | grep -q "\-c" 1288a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng if [ $? -eq 0 ] && [ "$fs_type" = "ntfs" ]; then 129353597d789ed6573d04459c23946b9a4289e4bc7Cyril Hrubis tst_res TCONF "'${mkfs_cmd}' not supported." 1308a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng return 1318a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng fi 1328a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng 1338a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng if [ -n "$size" ]; then 1348a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng if [ "$fs_type" = "xfs" ] || [ "$fs_type" = "btrfs" ]; then 135353597d789ed6573d04459c23946b9a4289e4bc7Cyril Hrubis tst_res TCONF "'${mkfs_cmd}' not supported." 1368a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng return 1378a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng fi 1388a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng fi 1398a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng 1408a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng ${mkfs_cmd} >temp 2>&1 1418a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng if [ $? -ne 0 ]; then 1428a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng grep -q -E "unknown option | invalid option" temp 1438a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng if [ $? -eq 0 ]; then 144353597d789ed6573d04459c23946b9a4289e4bc7Cyril Hrubis tst_res TCONF "'${mkfs_cmd}' not supported." 1458a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng return 1468a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng else 147353597d789ed6573d04459c23946b9a4289e4bc7Cyril Hrubis tst_res TFAIL "'${mkfs_cmd}' failed." 1488a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng cat temp 1498a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng return 1508a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng fi 1518a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng fi 1528a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng 1538a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng if [ -n "$device" ]; then 1548a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng mkfs_verify_type "$fs_type" "$device" 1558a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng if [ $? -ne 0 ]; then 156353597d789ed6573d04459c23946b9a4289e4bc7Cyril Hrubis tst_res TFAIL "'${mkfs_cmd}' failed, not expected." 1578a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng return 1588a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng fi 1598a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng fi 1608a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng 1618a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng if [ -n "$size" ]; then 1628a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng mkfs_verify_size "$fs_type" "$size" 1638a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng if [ $? -ne 0 ]; then 164353597d789ed6573d04459c23946b9a4289e4bc7Cyril Hrubis tst_res TFAIL "'${mkfs_cmd}' failed, not expected." 1658a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng return 1668a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng fi 1678a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng fi 1688a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng 169353597d789ed6573d04459c23946b9a4289e4bc7Cyril Hrubis tst_res TPASS "'${mkfs_cmd}' passed." 1708a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng} 1718a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng 1728a95b719259f489bf50e1642498ecbda99662f90Guangwen Fengtest1() 1738a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng{ 1748a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng mkfs_test "" "$FS_TYPE" "" "$TST_DEVICE" 1758a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng} 1768a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng 1778a95b719259f489bf50e1642498ecbda99662f90Guangwen Fengtest2() 1788a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng{ 1798a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng mkfs_test "" "$FS_TYPE" "" "$TST_DEVICE" "16000" 1808a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng} 1818a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng 1828a95b719259f489bf50e1642498ecbda99662f90Guangwen Fengtest3() 1838a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng{ 1848a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng mkfs_test "" "$FS_TYPE" "-c" "$TST_DEVICE" 1858a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng} 1868a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng 1878a95b719259f489bf50e1642498ecbda99662f90Guangwen Fengtest4() 1888a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng{ 1898a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng mkfs_test "-V" 1908a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng} 1918a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng 1928a95b719259f489bf50e1642498ecbda99662f90Guangwen Fengtest5() 1938a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng{ 1948a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng mkfs_test "-h" 1958a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng} 1968a95b719259f489bf50e1642498ecbda99662f90Guangwen Feng 197353597d789ed6573d04459c23946b9a4289e4bc7Cyril Hrubistst_run 198