Skip to content

numbfs: Add extended attribute (xattr) support with tests and fixes #133

numbfs: Add extended attribute (xattr) support with tests and fixes

numbfs: Add extended attribute (xattr) support with tests and fixes #133

Workflow file for this run

name: Run Tests on Merge
on:
push:
branches: [ "main", "dev" ]
pull_request:
branches: [ "main" ]
jobs:
numbfs_test:
runs-on: ubuntu-22.04
env:
NUMBFS_UTILS_REPO: "https://github.com/salvete/NumbFS-utils.git"
IMAGE_SIZE: "10M"
IMAGE_NAME: "numbfs_img"
MOUNT_POINT: "/mnt/numbfs_test"
NUMBFS_ROOT: "${{ github.workspace }}"
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y linux-headers-$(uname -r) build-essential git meson ninja-build attr
- name: Build numbfs-utils
run: |
git clone $NUMBFS_UTILS_REPO
cd NumbFS-utils
meson setup build
cd build
ninja
sudo ninja install
cd $NUMBFS_ROOT
- name: Build numbfs filesystem image
run: |
cd $NUMBFS_ROOT
dd if=/dev/zero of=./$IMAGE_NAME bs=$IMAGE_SIZE count=1
mkfs.numbfs ./$IMAGE_NAME
sudo mkdir -p $MOUNT_POINT
- name: Build and load kernel module
run: |
cd $NUMBFS_ROOT
make -C /usr/src/linux-headers-$(uname -r) M=$(pwd)
sudo insmod ./numbfs.ko
lsmod | grep numbfs || (echo "Failed to load numbfs module" && exit 1)
- name: Mount and test filesystem
run: |
cd $NUMBFS_ROOT
sudo mount -t numbfs -o loop ./$IMAGE_NAME $MOUNT_POINT
mount | grep numbfs || (echo "Failed to mount numbfs" && exit 1)
echo "NumbFS mounted successfully at $MOUNT_POINT"
if [ -d "tests" ]; then
chmod +x tests/*.sh 2>/dev/null || true
fi
# lookup test
if [ -f "tests/lookup.sh" ]; then
echo "Running dir lookup tests..."
./tests/lookup.sh $MOUNT_POINT
fi
# create test
if [ -f "tests/create.sh" ]; then
echo "Running file create tests..."
./tests/create.sh $MOUNT_POINT $NUMBFS_ROOT $IMAGE_NAME
fi
# mkdir test
if [ -f "tests/mkdir.sh" ]; then
echo "Running mkdir tests..."
./tests/mkdir.sh $MOUNT_POINT $NUMBFS_ROOT $IMAGE_NAME
fi
# unlink test
if [ -f "tests/unlink.sh" ]; then
echo "Running unlink tests..."
./tests/unlink.sh $MOUNT_POINT $NUMBFS_ROOT $IMAGE_NAME
fi
# rmdir test
if [ -f "tests/rmdir.sh" ]; then
echo "Running rmdir tests..."
./tests/rmdir.sh $MOUNT_POINT $NUMBFS_ROOT $IMAGE_NAME
fi
# rename test
if [ -f "tests/rename.sh" ]; then
echo "Running rename tests..."
./tests/rename.sh $MOUNT_POINT $NUMBFS_ROOT $IMAGE_NAME
fi
# hard/soft link test
if [ -f "tests/link.sh" ]; then
echo "Running hard/soft link tests..."
./tests/link.sh $MOUNT_POINT $NUMBFS_ROOT $IMAGE_NAME
fi
# read/write test
if [ -f "tests/read_write.sh" ]; then
echo "Running read/write tests..."
./tests/read_write.sh $MOUNT_POINT $NUMBFS_ROOT $IMAGE_NAME
fi
# xattr
if [ -f "tests/xattr.sh" ]; then
echo "Running xattr tests..."
./tests/xattr.sh $MOUNT_POINT $NUMBFS_ROOT $IMAGE_NAME
fi
- name: Cleanup
run: |
cd $NUMBFS_ROOT
sudo umount $MOUNT_POINT 2>/dev/null || true
sudo rmmod numbfs 2>/dev/null || true
sudo rm -rf $MOUNT_POINT
make clean 2>/dev/null || true