tests/shared/partition.sh
#!/bin/bash

PARTITION="/root/new_partition"

create_partition() {
	# Some scenarios re-mount this device as '/tmp', therefore its size
	# needs to be enough for the produced logs.
	dd if=/dev/zero of=$PARTITION bs=1M count=200
	mkfs.ext2 -F $PARTITION
}

# $1: The mount point
# $2: The type of file system
# $3: The additional mount options
make_fstab_given_partition_line() {
	local _mount_point="$1" _type="$2" _additional_mount_options="$3"
	test -z "$_additional_mount_options" || _additional_mount_options=",$_additional_mount_options"
	printf "%s     %s     %s     rw%s     0 0\n" "$PARTITION" "$_mount_point" "$_type" "$_additional_mount_options" >> /etc/fstab
}

# $1: The mount point
make_fstab_correct_partition_line() {
	make_fstab_given_partition_line "$1" "ext2" "nodev,noexec,nosuid"
}

make_fstab_bind_partition_line() {
	make_fstab_given_partition_line "$1" "none" "nodev,noexec,nosuid,bind"
}

# $1: The mount point
mount_partition() {
	mkdir -p "$1"
	mount --target "$1"
}

mount_bind_partition() {
	mkdir -p "$1"
	mount -B "$PARTITION" "$1"
}

umount_partition() {
	local _mount_point="$1"
	if mount | grep -E "\s+${_mount_point}\s+"; then
		echo "'$_mount_point' is mounted, will unmount it.."
		umount -nl "$_mount_point"
	else
		echo "'$_mount_point' is not mounted, skipping"
	fi
}

# $1: The path to umount and remove from /etc/fstab
clean_up_partition() {
    path="$1"
    escaped_path=${path//$'/'/$'\/'}
    sed -i "/${escaped_path}/d" /etc/fstab
    if mountpoint -q -- "${path}"; then
        umount -l ${path}
    fi
}
