1dd7c9be3SJavier Martinez Canillas#!/bin/bash 2dd7c9be3SJavier Martinez Canillas# SPDX-License-Identifier: GPL-2.0 3dd7c9be3SJavier Martinez Canillas# 4dd7c9be3SJavier Martinez Canillas# Run filesystem operations tests on an 1 MiB disk image that is formatted with 5dd7c9be3SJavier Martinez Canillas# a vfat filesystem and mounted in a temporary directory using a loop device. 6dd7c9be3SJavier Martinez Canillas# 7dd7c9be3SJavier Martinez Canillas# Copyright 2022 Red Hat Inc. 8dd7c9be3SJavier Martinez Canillas# Author: Javier Martinez Canillas <javierm@redhat.com> 9dd7c9be3SJavier Martinez Canillas 10dd7c9be3SJavier Martinez Canillasset -e 11dd7c9be3SJavier Martinez Canillasset -u 12dd7c9be3SJavier Martinez Canillasset -o pipefail 13dd7c9be3SJavier Martinez Canillas 14dd7c9be3SJavier Martinez CanillasBASE_DIR="$(dirname $0)" 15*1e9519b6SHui Min Mina ChouTMP_DIR="$(mktemp -d /tmp/fat_tests_tmp.XXXXXX)" 16dd7c9be3SJavier Martinez CanillasIMG_PATH="${TMP_DIR}/fat.img" 17dd7c9be3SJavier Martinez CanillasMNT_PATH="${TMP_DIR}/mnt" 18dd7c9be3SJavier Martinez Canillas 19dd7c9be3SJavier Martinez Canillascleanup() 20dd7c9be3SJavier Martinez Canillas{ 21dd7c9be3SJavier Martinez Canillas mountpoint -q "${MNT_PATH}" && unmount_image 22dd7c9be3SJavier Martinez Canillas rm -rf "${TMP_DIR}" 23dd7c9be3SJavier Martinez Canillas} 24dd7c9be3SJavier Martinez Canillastrap cleanup SIGINT SIGTERM EXIT 25dd7c9be3SJavier Martinez Canillas 26dd7c9be3SJavier Martinez Canillascreate_loopback() 27dd7c9be3SJavier Martinez Canillas{ 28dd7c9be3SJavier Martinez Canillas touch "${IMG_PATH}" 29dd7c9be3SJavier Martinez Canillas chattr +C "${IMG_PATH}" >/dev/null 2>&1 || true 30dd7c9be3SJavier Martinez Canillas 31dd7c9be3SJavier Martinez Canillas truncate -s 1M "${IMG_PATH}" 32dd7c9be3SJavier Martinez Canillas mkfs.vfat "${IMG_PATH}" >/dev/null 2>&1 33dd7c9be3SJavier Martinez Canillas} 34dd7c9be3SJavier Martinez Canillas 35dd7c9be3SJavier Martinez Canillasmount_image() 36dd7c9be3SJavier Martinez Canillas{ 37dd7c9be3SJavier Martinez Canillas mkdir -p "${MNT_PATH}" 38dd7c9be3SJavier Martinez Canillas sudo mount -o loop "${IMG_PATH}" "${MNT_PATH}" 39dd7c9be3SJavier Martinez Canillas} 40dd7c9be3SJavier Martinez Canillas 41dd7c9be3SJavier Martinez Canillasrename_exchange_test() 42dd7c9be3SJavier Martinez Canillas{ 43dd7c9be3SJavier Martinez Canillas local rename_exchange="${BASE_DIR}/rename_exchange" 44dd7c9be3SJavier Martinez Canillas local old_path="${MNT_PATH}/old_file" 45dd7c9be3SJavier Martinez Canillas local new_path="${MNT_PATH}/new_file" 46dd7c9be3SJavier Martinez Canillas 47dd7c9be3SJavier Martinez Canillas echo old | sudo tee "${old_path}" >/dev/null 2>&1 48dd7c9be3SJavier Martinez Canillas echo new | sudo tee "${new_path}" >/dev/null 2>&1 49dd7c9be3SJavier Martinez Canillas sudo "${rename_exchange}" "${old_path}" "${new_path}" >/dev/null 2>&1 50dd7c9be3SJavier Martinez Canillas sudo sync -f "${MNT_PATH}" 51dd7c9be3SJavier Martinez Canillas grep new "${old_path}" >/dev/null 2>&1 52dd7c9be3SJavier Martinez Canillas grep old "${new_path}" >/dev/null 2>&1 53dd7c9be3SJavier Martinez Canillas} 54dd7c9be3SJavier Martinez Canillas 55dd7c9be3SJavier Martinez Canillasrename_exchange_subdir_test() 56dd7c9be3SJavier Martinez Canillas{ 57dd7c9be3SJavier Martinez Canillas local rename_exchange="${BASE_DIR}/rename_exchange" 58dd7c9be3SJavier Martinez Canillas local dir_path="${MNT_PATH}/subdir" 59dd7c9be3SJavier Martinez Canillas local old_path="${MNT_PATH}/old_file" 60dd7c9be3SJavier Martinez Canillas local new_path="${dir_path}/new_file" 61dd7c9be3SJavier Martinez Canillas 62dd7c9be3SJavier Martinez Canillas sudo mkdir -p "${dir_path}" 63dd7c9be3SJavier Martinez Canillas echo old | sudo tee "${old_path}" >/dev/null 2>&1 64dd7c9be3SJavier Martinez Canillas echo new | sudo tee "${new_path}" >/dev/null 2>&1 65dd7c9be3SJavier Martinez Canillas sudo "${rename_exchange}" "${old_path}" "${new_path}" >/dev/null 2>&1 66dd7c9be3SJavier Martinez Canillas sudo sync -f "${MNT_PATH}" 67dd7c9be3SJavier Martinez Canillas grep new "${old_path}" >/dev/null 2>&1 68dd7c9be3SJavier Martinez Canillas grep old "${new_path}" >/dev/null 2>&1 69dd7c9be3SJavier Martinez Canillas} 70dd7c9be3SJavier Martinez Canillas 71dd7c9be3SJavier Martinez Canillasunmount_image() 72dd7c9be3SJavier Martinez Canillas{ 73dd7c9be3SJavier Martinez Canillas sudo umount "${MNT_PATH}" &> /dev/null 74dd7c9be3SJavier Martinez Canillas} 75dd7c9be3SJavier Martinez Canillas 76dd7c9be3SJavier Martinez Canillascreate_loopback 77dd7c9be3SJavier Martinez Canillasmount_image 78dd7c9be3SJavier Martinez Canillasrename_exchange_test 79dd7c9be3SJavier Martinez Canillasrename_exchange_subdir_test 80dd7c9be3SJavier Martinez Canillasunmount_image 81dd7c9be3SJavier Martinez Canillas 82dd7c9be3SJavier Martinez Canillasexit 0 83