#! /bin/bash
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (c) 2020 Oracle.  All Rights Reserved.
#
# FS QA Test No. 523
#
# Feed invalid mkfs config files to the mkfs parser to ensure that they are
# recognized as invalid.
#
. ./common/preamble
_begin_fstest auto quick mkfs

# Override the default cleanup function.
_cleanup()
{
	cd /
	rm -f $tmp.* $def_cfgfile $fsimg
}

# Import common functions.
. ./common/filter


# Modify as appropriate.
_require_test
_require_scratch_nocheck
_require_xfs_mkfs_cfgfile

def_cfgfile=$TEST_DIR/a
fsimg=$TEST_DIR/a.img
rm -f $def_cfgfile $fsimg
$XFS_IO_PROG -c "truncate 20t" -f $fsimg

test_mkfs_config() {
	local cfgfile="$1"
	if [ -z "$cfgfile" ] || [ "$cfgfile" = "-" ]; then
		cfgfile=$def_cfgfile
		cat > $cfgfile
	fi
	$MKFS_XFS_PROG -c options=$cfgfile -f -N $fsimg >> $seqres.full 2> $tmp.err
	if [ $? -eq 0 ]; then
		echo "Test passed, should have failed! Config file parameters:"
		cat $cfgfile
	fi
}

echo Spaces in a section name
test_mkfs_config << ENDL
[meta data]
crc = 0
ENDL
test_mkfs_config << ENDL
[meta	data]
crc = 0
ENDL
test_mkfs_config << ENDL
[ metadata]
crc = 0
ENDL
test_mkfs_config << ENDL
[metadata ]
crc = 0
ENDL
test_mkfs_config << ENDL
[ metadata ]
crc = 0
ENDL
test_mkfs_config << ENDL
[ metadata] 
crc = 0
ENDL
test_mkfs_config << ENDL
[metadata ] 
crc = 0
ENDL
test_mkfs_config << ENDL
 [ metadata]
crc = 0
ENDL
test_mkfs_config << ENDL
 [metadata ]
crc = 0
ENDL
test_mkfs_config << ENDL
 [ metadata ]
crc = 0
ENDL
test_mkfs_config << ENDL
 [metadata ] 
crc = 0
ENDL
test_mkfs_config << ENDL
 [ metadata ] 
crc = 0
ENDL
test_mkfs_config << ENDL
   	 		 	 [	  	 		metadata		  	  	    	  ] 	 	 	    	
crc = 0
ENDL

echo Spaces in the middle of a key name
test_mkfs_config << ENDL
[metadata]
c rc = 0
ENDL

echo Invalid value
test_mkfs_config << ENDL
[metadata]
crc = waffles
ENDL

echo Nonexistent sections
test_mkfs_config << ENDL
[goober]
crc = 0
ENDL

echo Nonexistent keys
test_mkfs_config << ENDL
[metadata]
goober = 0
ENDL

echo Only zero or one
test_mkfs_config << ENDL
[metadata]
crc = 50
ENDL
test_mkfs_config << ENDL
[metadata]
crc = -1
ENDL

echo sysctl style files
test_mkfs_config << ENDL
metadata.crc = 1
ENDL

echo binaries
test_mkfs_config $MKFS_XFS_PROG 2>&1 | sed -e "s#$MKFS_XFS_PROG#MKFS_XFS_PROG#g"

echo respecified options
test_mkfs_config << ENDL
[metadata]
crc = 0
crc = 1
ENDL

echo respecified sections
test_mkfs_config << ENDL
[metadata]
crc = 0
[metadata]
crc = 1
ENDL

echo ambiguous comment/section names
test_mkfs_config << ENDL
[meta#data]
crc = 0
ENDL

echo ambiguous comment/variable names
test_mkfs_config << ENDL
[metadata]
fo#o = 0
ENDL
test_mkfs_config << ENDL
[metadata]
foo#=# 0
ENDL
test_mkfs_config << ENDL
[metadata]
foo =# 0
ENDL
test_mkfs_config << ENDL
[metadata]
crc = 0;This is an eol comment.
ENDL

# success, all done
status=0
exit
