numbfs: Add extended attribute (xattr) support with tests and fixes #133
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |