include ../testconfig.mk
export LC_ALL=en_US.iso88591

FS_FATType=32
# MiBytes
FS_SIZE=100
FS_FATs=2
FS_VOL_NAME=test
FS_ROOT_ENTRIES=512
FS_RSVD_SEC=32
FS_SEC_PER_CLUS=1
FS_SEC_SIZE=512

DIRECTORIES=directories.txt
FILES=files.txt

TESTLOG=test.log

STDOUT=stdout.log
STDOUT_EXP=stdout_expected.txt
STDERR=stderr.log
STDERR_EXP=stderr_expected.txt

all: fsck
	if [ ${DEL_FS_ON_PASS} -eq 1 ]; then rm -f ${FS_IMG}; fi

clean:
	rm -fr *.log *.tmp ${FS_IMG} ${TMPFILE} ${TMPDIR}
	if [ -d ${MOUNT_POINT} ]; then \
	until sudo umount ${MOUNT_POINT}; do sleep 1; done; \
	rmdir ${MOUNT_POINT}; \
	fi

# create file system
mkfs:
	# ++++++++++ Creating file ${FATType} system ++++++++++
	rm -f ${FS_IMG}
	truncate -s ${FS_SIZE}MB ${FS_IMG}
	mkfs.vfat -F ${FS_FATType} -f ${FS_FATs} -n ${FS_VOL_NAME} -r ${FS_ROOT_ENTRIES} -R ${FS_RSVD_SEC} -s ${FS_SEC_PER_CLUS} -S ${FS_SEC_SIZE} ${FS_IMG}

# populate fs
populatefs: mkfs
	# ++++++++++ Populating file system with directories and files ++++++++++
	mkdir -p ${MOUNT_POINT}
	sudo mount -o loop,codepage=850,iocharset=iso8859-1,uid=${MOUNT_UID},gid=${MOUNT_GID} ${FS_IMG} ${MOUNT_POINT}
	cat ${DIRECTORIES} | while read dir; do mkdir -p "${MOUNT_POINT}/$$dir"; done
	cat ${FILES} | while read file; do touch "${MOUNT_POINT}/$$file"; done
	until sudo umount ${MOUNT_POINT}; do sleep 1; done
	rmdir ${MOUNT_POINT}

# alter file system as necessary for the test
alterfs: populatefs
	# ++++++++++ Altering file system ++++++++++
	# empty here
	rm -fr ${TMPFILE}

execute: alterfs
	# ++++++++++ Executing tests ++++++++++
	${FATSORT} ${FS_IMG}
	${FATSORT} -l ${FS_IMG} > ${STDOUT} 2> ${STDERR}
	diff ${STDOUT} ${STDOUT_EXP}
	diff ${STDERR} ${STDERR_EXP}

# check result
fsck: execute
	# ++++++++++ Checking file system ++++++++++
	fsck.vfat -n ${FS_IMG}

.PHONY: fsck execute populatefs mkfs clean

