xref: /openbmc/linux/tools/testing/selftests/filesystems/fat/run_fat_tests.sh (revision c900529f3d9161bfde5cca0754f83b4d3c3e0220)
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