| #!/bin/bash |
| # SPDX-License-Identifier: GPL-2.0 |
| # |
| # Run filesystem operations tests on an 1 MiB disk image that is formatted with |
| # a vfat filesystem and mounted in a temporary directory using a loop device. |
| # |
| # Copyright 2022 Red Hat Inc. |
| # Author: Javier Martinez Canillas <javierm@redhat.com> |
| |
| set -e |
| set -u |
| set -o pipefail |
| |
| BASE_DIR="$(dirname $0)" |
| TMP_DIR="$(mktemp -d /tmp/fat_tests_tmp.XXXXXX)" |
| IMG_PATH="${TMP_DIR}/fat.img" |
| MNT_PATH="${TMP_DIR}/mnt" |
| |
| cleanup() |
| { |
| mountpoint -q "${MNT_PATH}" && unmount_image |
| rm -rf "${TMP_DIR}" |
| } |
| trap cleanup SIGINT SIGTERM EXIT |
| |
| create_loopback() |
| { |
| touch "${IMG_PATH}" |
| chattr +C "${IMG_PATH}" >/dev/null 2>&1 || true |
| |
| truncate -s 1M "${IMG_PATH}" |
| mkfs.vfat "${IMG_PATH}" >/dev/null 2>&1 |
| } |
| |
| mount_image() |
| { |
| mkdir -p "${MNT_PATH}" |
| sudo mount -o loop "${IMG_PATH}" "${MNT_PATH}" |
| } |
| |
| rename_exchange_test() |
| { |
| local rename_exchange="${BASE_DIR}/rename_exchange" |
| local old_path="${MNT_PATH}/old_file" |
| local new_path="${MNT_PATH}/new_file" |
| |
| echo old | sudo tee "${old_path}" >/dev/null 2>&1 |
| echo new | sudo tee "${new_path}" >/dev/null 2>&1 |
| sudo "${rename_exchange}" "${old_path}" "${new_path}" >/dev/null 2>&1 |
| sudo sync -f "${MNT_PATH}" |
| grep new "${old_path}" >/dev/null 2>&1 |
| grep old "${new_path}" >/dev/null 2>&1 |
| } |
| |
| rename_exchange_subdir_test() |
| { |
| local rename_exchange="${BASE_DIR}/rename_exchange" |
| local dir_path="${MNT_PATH}/subdir" |
| local old_path="${MNT_PATH}/old_file" |
| local new_path="${dir_path}/new_file" |
| |
| sudo mkdir -p "${dir_path}" |
| echo old | sudo tee "${old_path}" >/dev/null 2>&1 |
| echo new | sudo tee "${new_path}" >/dev/null 2>&1 |
| sudo "${rename_exchange}" "${old_path}" "${new_path}" >/dev/null 2>&1 |
| sudo sync -f "${MNT_PATH}" |
| grep new "${old_path}" >/dev/null 2>&1 |
| grep old "${new_path}" >/dev/null 2>&1 |
| } |
| |
| unmount_image() |
| { |
| sudo umount "${MNT_PATH}" &> /dev/null |
| } |
| |
| create_loopback |
| mount_image |
| rename_exchange_test |
| rename_exchange_subdir_test |
| unmount_image |
| |
| exit 0 |