ref: 9e70c266983bce105b2d998ab990c0b4a4d42798
parent: 046d1f545f17e045f7164085cdfd440ee0148bc7
author: Kaarle Ritvanen <kunkku@alpinelinux.org>
date: Wed Mar 22 09:25:57 CDT 2023
nlplug-findfs: rewrite test script The new implementation * systematically tests combinations of options and disk layouts and * does not require superuser privileges.
--- a/Makefile
+++ b/Makefile
@@ -90,7 +90,8 @@
all: $(SBIN_FILES) $(SCRIPTS) $(CONF_FILES) $(MAN_FILES)
clean:
- rm -f $(SBIN_FILES) $(SCRIPTS) $(MAN_FILES) mkinitfs.conf
+ rm -fr $(SBIN_FILES) $(SCRIPTS) $(MAN_FILES) mkinitfs.conf \
+ nlplug-findfs/actual nlplug-findfs/build
help:
@echo mkinitfs $(VERSION)
@@ -116,6 +117,12 @@
nlplug-findfs/nlplug-findfs: nlplug-findfs/nlplug-findfs.o
$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
+check: nlplug-findfs/build
+ nlplug-findfs/test.sh run
+
+nlplug-findfs/build: nlplug-findfs/init.sh nlplug-findfs/nlplug-findfs nlplug-findfs/test.sh
+ nlplug-findfs/test.sh build
+
.SUFFIXES: .in
.in:
${SED} ${SED_REPLACE} ${SED_EXTRA} $< > $@
@@ -138,4 +145,4 @@
mkinitfs.conf:
echo 'features="$(DEFAULT_FEATURES)"' > $@
-.PHONY: all clean help install
+.PHONY: all check clean help install
--- /dev/null
+++ b/nlplug-findfs/expected
@@ -1,0 +1,126 @@
+0-a apkovl=/media/vda1/foo.apkovl.tar.gz status=0
+0-ackm apkovl=/media/vda1/foo.apkovl.tar.gz status=0
+0-ackmH apkovl=/media/vda1/foo.apkovl.tar.gz status=0
+0-an apkovl=/media/vda1/foo.apkovl.tar.gz status=0
+0-anckm apkovl=/media/vda1/foo.apkovl.tar.gz status=0
+0-anckmH apkovl=/media/vda1/foo.apkovl.tar.gz status=0
+0-b bootrepo=/media/vda1/bar status=0
+0-bckm bootrepo=/media/vda1/bar status=0
+0-bckmH bootrepo=/media/vda1/bar status=0
+0-bn bootrepo=/media/vda1/bar status=0
+0-bnckm bootrepo=/media/vda1/bar status=0
+0-bnckmH bootrepo=/media/vda1/bar status=0
+0-ab apkovl=/media/vda1/foo.apkovl.tar.gz bootrepo=/media/vda1/bar status=0
+0-abckm apkovl=/media/vda1/foo.apkovl.tar.gz bootrepo=/media/vda1/bar status=0
+0-abckmH apkovl=/media/vda1/foo.apkovl.tar.gz bootrepo=/media/vda1/bar status=0
+0-abn apkovl=/media/vda1/foo.apkovl.tar.gz bootrepo=/media/vda1/bar status=0
+0-abnckm apkovl=/media/vda1/foo.apkovl.tar.gz bootrepo=/media/vda1/bar status=0
+0-abnckmH apkovl=/media/vda1/foo.apkovl.tar.gz bootrepo=/media/vda1/bar status=0
+05-a apkovl=/media/vda1/foo.apkovl.tar.gz:/media/md0/foo.apkovl.tar.gz status=0
+05-ackm apkovl=/media/vda1/foo.apkovl.tar.gz:/media/md0/foo.apkovl.tar.gz status=0
+05-ackmH apkovl=/media/vda1/foo.apkovl.tar.gz:/media/md0/foo.apkovl.tar.gz status=0
+05-an apkovl=/media/vda1/foo.apkovl.tar.gz:/media/md0/foo.apkovl.tar.gz status=0
+05-anckm apkovl=/media/vda1/foo.apkovl.tar.gz:/media/md0/foo.apkovl.tar.gz status=0
+05-anckmH apkovl=/media/vda1/foo.apkovl.tar.gz:/media/md0/foo.apkovl.tar.gz status=0
+05-b bootrepo=/media/vda1/bar status=0
+05-bckm bootrepo=/media/vda1/bar status=0
+05-bckmH bootrepo=/media/vda1/bar status=0
+05-bn bootrepo=/media/vda1/bar status=0
+05-bnckm bootrepo=/media/vda1/bar status=0
+05-bnckmH bootrepo=/media/vda1/bar status=0
+05-ab apkovl=/media/vda1/foo.apkovl.tar.gz:/media/md0/foo.apkovl.tar.gz bootrepo=/media/vda1/bar status=0
+05-abckm apkovl=/media/vda1/foo.apkovl.tar.gz:/media/md0/foo.apkovl.tar.gz bootrepo=/media/vda1/bar status=0
+05-abckmH apkovl=/media/vda1/foo.apkovl.tar.gz:/media/md0/foo.apkovl.tar.gz bootrepo=/media/vda1/bar status=0
+05-abn apkovl=/media/vda1/foo.apkovl.tar.gz:/media/md0/foo.apkovl.tar.gz bootrepo=/media/vda1/bar status=0
+05-abnckm apkovl=/media/vda1/foo.apkovl.tar.gz:/media/md0/foo.apkovl.tar.gz bootrepo=/media/vda1/bar status=0
+05-abnckmH apkovl=/media/vda1/foo.apkovl.tar.gz:/media/md0/foo.apkovl.tar.gz bootrepo=/media/vda1/bar status=0
+1-a apkovl=/media/vda1/foo.apkovl.tar.gz status=0
+1-ackm apkovl=/media/vda1/foo.apkovl.tar.gz status=0
+1-ackmH apkovl=/media/vda1/foo.apkovl.tar.gz status=0
+1-an apkovl=/media/vda1/foo.apkovl.tar.gz status=0
+1-anckm apkovl=/media/vda1/foo.apkovl.tar.gz status=0
+1-anckmH apkovl=/media/vda1/foo.apkovl.tar.gz status=0
+1-b status=0
+1-bckm status=0
+1-bckmH status=0
+1-bn status=0
+1-bnckm status=0
+1-bnckmH status=0
+1-ab apkovl=/media/vda1/foo.apkovl.tar.gz status=0
+1-abckm apkovl=/media/vda1/foo.apkovl.tar.gz status=0
+1-abckmH apkovl=/media/vda1/foo.apkovl.tar.gz status=0
+1-abn apkovl=/media/vda1/foo.apkovl.tar.gz status=0
+1-abnckm apkovl=/media/vda1/foo.apkovl.tar.gz status=0
+1-abnckmH apkovl=/media/vda1/foo.apkovl.tar.gz status=0
+12-a apkovl=/media/vda1/foo.apkovl.tar.gz status=0
+12-ackm apkovl=/media/vda1/foo.apkovl.tar.gz status=0
+12-ackmH apkovl=/media/vda1/foo.apkovl.tar.gz status=0
+12-an apkovl=/media/vda1/foo.apkovl.tar.gz status=0
+12-anckm apkovl=/media/vda1/foo.apkovl.tar.gz status=0
+12-anckmH apkovl=/media/vda1/foo.apkovl.tar.gz status=0
+12-b bootrepo=/media/vdb2/bar status=0
+12-bckm bootrepo=/media/vdb2/bar status=0
+12-bckmH bootrepo=/media/vdb2/bar status=0
+12-bn bootrepo=/media/vdb2/bar status=0
+12-bnckm bootrepo=/media/vdb2/bar status=0
+12-bnckmH bootrepo=/media/vdb2/bar status=0
+12-ab apkovl=/media/vda1/foo.apkovl.tar.gz bootrepo=/media/vdb2/bar status=0
+12-abckm apkovl=/media/vda1/foo.apkovl.tar.gz bootrepo=/media/vdb2/bar status=0
+12-abckmH apkovl=/media/vda1/foo.apkovl.tar.gz bootrepo=/media/vdb2/bar status=0
+12-abn apkovl=/media/vda1/foo.apkovl.tar.gz bootrepo=/media/vdb2/bar status=0
+12-abnckm apkovl=/media/vda1/foo.apkovl.tar.gz bootrepo=/media/vdb2/bar status=0
+12-abnckmH apkovl=/media/vda1/foo.apkovl.tar.gz bootrepo=/media/vdb2/bar status=0
+2-a status=0
+2-ackm apkovl=/media/dm-1/foo.apkovl.tar.gz status=0
+2-ackmH status=0
+2-an status=0
+2-anckm apkovl=/media/dm-1/foo.apkovl.tar.gz status=0
+2-anckmH status=0
+2-b bootrepo=/media/vda2/bar status=0
+2-bckm bootrepo=/media/vda2/bar status=0
+2-bckmH bootrepo=/media/vda2/bar status=0
+2-bn bootrepo=/media/vda2/bar status=0
+2-bnckm bootrepo=/media/vda2/bar status=0
+2-bnckmH bootrepo=/media/vda2/bar status=0
+2-ab bootrepo=/media/vda2/bar status=0
+2-abckm apkovl=/media/dm-1/foo.apkovl.tar.gz bootrepo=/media/vda2/bar status=0
+2-abckmH bootrepo=/media/vda2/bar status=0
+2-abn bootrepo=/media/vda2/bar status=0
+2-abnckm apkovl=/media/dm-1/foo.apkovl.tar.gz bootrepo=/media/vda2/bar status=0
+2-abnckmH bootrepo=/media/vda2/bar status=0
+3-a status=1
+3-ackm apkovl=/media/dm-0/foo.apkovl.tar.gz status=0
+3-ackmH status=1
+3-an status=0
+3-anckm apkovl=/media/dm-0/foo.apkovl.tar.gz status=0
+3-anckmH status=0
+3-b status=1
+3-bckm bootrepo=/media/dm-0/bar status=0
+3-bckmH status=1
+3-bn status=0
+3-bnckm bootrepo=/media/dm-0/bar status=0
+3-bnckmH status=0
+3-ab status=1
+3-abckm apkovl=/media/dm-0/foo.apkovl.tar.gz bootrepo=/media/dm-0/bar status=0
+3-abckmH status=1
+3-abn status=0
+3-abnckm apkovl=/media/dm-0/foo.apkovl.tar.gz bootrepo=/media/dm-0/bar status=0
+3-abnckmH status=0
+45-a apkovl=/media/md0/foo.apkovl.tar.gz status=0
+45-ackm apkovl=/media/md0/foo.apkovl.tar.gz status=0
+45-ackmH apkovl=/media/md0/foo.apkovl.tar.gz status=0
+45-an apkovl=/media/md0/foo.apkovl.tar.gz status=0
+45-anckm apkovl=/media/md0/foo.apkovl.tar.gz status=0
+45-anckmH apkovl=/media/md0/foo.apkovl.tar.gz status=0
+45-b status=0
+45-bckm status=0
+45-bckmH bootrepo=/media/dm-0/bar status=0
+45-bn status=0
+45-bnckm status=0
+45-bnckmH bootrepo=/media/dm-0/bar status=0
+45-ab apkovl=/media/md0/foo.apkovl.tar.gz status=0
+45-abckm apkovl=/media/md0/foo.apkovl.tar.gz status=0
+45-abckmH apkovl=/media/md0/foo.apkovl.tar.gz bootrepo=/media/dm-0/bar status=0
+45-abn apkovl=/media/md0/foo.apkovl.tar.gz status=0
+45-abnckm apkovl=/media/md0/foo.apkovl.tar.gz status=0
+45-abnckmH apkovl=/media/md0/foo.apkovl.tar.gz bootrepo=/media/dm-0/bar status=0
--- /dev/null
+++ b/nlplug-findfs/init.sh
@@ -1,0 +1,124 @@
+#!/bin/sh
+
+# initramfs for testing nlplug-findfs
+# Copyright (c) 2022-2023 Kaarle Ritvanen
+
+export PATH=/usr/bin:/bin:/usr/sbin:/sbin
+
+busybox mount -t proc none /proc
+busybox mount -t sysfs none /sys
+busybox mkdir /usr/bin /usr/sbin
+/bin/busybox --install
+
+param() {
+ sed -E "s/^.* nlpffs_$1"'=([^ ]*)( .*)?/\1/;ta;d;:a' < /proc/cmdline
+}
+
+MODE=$(param mode)
+TEST_PATH=$(param path)
+
+APKOVL=foo.apkovl.tar.gz
+BOOT_REPO=bar/.boot_repository
+
+_mkfs() {
+ local dev=/dev/$1
+ shift
+
+ mkfs.vfat $dev
+ mkdir -p /mnt
+ mount -t vfat $dev /mnt
+
+ local path
+ for path; do
+ mkdir -p /mnt/$(dirname $path)
+ : > /mnt/$path
+ done
+
+ umount /mnt
+}
+
+luks() {
+ local args="-d $TEST_PATH/build/key ${3:+--header /dev/$3} /dev/$2"
+ cryptsetup luksFormat $args < /dev/null
+ cryptsetup open --type luks $args $1
+}
+
+luksfs() {
+ local dev=$1
+ local files=$2
+ shift 2
+
+ luks fs $dev $*
+ _mkfs mapper/fs $files
+ cryptsetup close fs
+}
+
+nlpffs() {
+ local path=$1
+ shift
+ $path/nlplug-findfs -p /sbin/mdev "$@"
+}
+
+if [ "$MODE" = build ]; then
+ nlpffs /sbin
+
+ for disk in a b c d e f; do
+ (
+ for part in $(seq 3); do
+ cat <<-EOF
+ n
+ p
+ $part
+
+ +32M
+ EOF
+ done
+ echo w
+ ) | fdisk /dev/vd$disk
+ done
+
+ mdev -s
+
+ set -ex
+ _mkfs vda1 $APKOVL $BOOT_REPO
+ _mkfs vdb1 $APKOVL
+
+ luks pv vdc1
+ lvm pvcreate /dev/mapper/pv
+ lvm vgcreate vg /dev/mapper/pv
+ lvm lvcreate -L 1M -n lv vg
+ _mkfs vg/lv $APKOVL
+ lvm vgchange -a n
+ cryptsetup close pv
+ _mkfs vdc2 $BOOT_REPO
+
+ luksfs vdd1 "$APKOVL $BOOT_REPO"
+
+ luksfs vde1 $BOOT_REPO vde2
+ mdadm -C /dev/md0 -l 1 -n 2 --assume-clean --metadata 1.2 \
+ /dev/vde3 /dev/vdf1
+ _mkfs md0 $APKOVL
+ mdadm -S /dev/md0
+else
+ set -x
+ cd "$TEST_PATH"
+ mkdir output
+ cd output
+ nlpffs .. $(param args | base64 -d)
+ echo $? > status
+
+ if [ "$MODE" = debug ]; then
+ cd ..
+ sh
+ elif [ "$MODE" = test ]; then
+ set +x
+ echo -n "TEST RESULT:"
+ for file in *; do
+ echo -n " $file="
+ sed ':a;N;s/\n/:/;ta' $file | tr -d $'\n'
+ done
+ echo
+ fi
+fi
+
+poweroff -f
--- /dev/null
+++ b/nlplug-findfs/test.sh
@@ -1,0 +1,163 @@
+#!/bin/sh -e
+
+# Test utility for nlplug-findfs
+# Copyright (c) 2022-2023 Kaarle Ritvanen
+
+cd "${0%/*}"
+BINARY=$PWD/nlplug-findfs
+BUILD_DIR=$PWD/build
+mkdir -p "$BUILD_DIR"
+KEY_FILE=$BUILD_DIR/key
+INITRAMFS=$BUILD_DIR/initramfs
+
+split_chars() {
+ local s=$1
+ while [ "$s" ]; do
+ echo ${s:0:1}
+ s=${s:1}
+ done
+}
+
+
+disk_img() {
+ echo "$BUILD_DIR/disk$1.img"
+}
+
+run_in_vm() {
+ [ -f "$BINARY" ]
+ [ -f "$KEY_FILE" ] || dd if=/dev/urandom of="$KEY_FILE" bs=32 count=1
+ [ -f "$INITRAMFS" ] || custom_files="$BINARY $KEY_FILE" \
+ mkinitfs -i init.sh -o "$INITRAMFS" \
+ -F "base cryptsetup lvm raid usb virtio"
+
+ local args=
+ local disk
+ for disk in $(split_chars $2); do
+ args="$args -drive file=$(disk_img $disk),format=raw,if=virtio"
+ done
+
+ qemu-system-x86_64 -m 256 -nographic \
+ -kernel /boot/vmlinuz-lts -initrd "$INITRAMFS" \
+ -append "console=ttyS0 nlpffs_path=$PWD nlpffs_mode=$1 ${3:+nlpffs_args=$3}" \
+ $args
+}
+
+build() {
+ local disks=$(seq -s "" 0 5)
+ local disk
+ for disk in $(split_chars $disks); do
+ qemu-img create $(disk_img $disk) 128M
+ done
+ run_in_vm build $disks < /dev/null
+}
+
+run_case_in_vm() {
+ local mode=$1
+ local case=$2
+ shift 2
+
+ local disks=
+ local args=
+ local opt
+ for opt in $(split_chars "$case"); do
+ case "$opt" in
+ [0-9])
+ [ -f $(disk_img $opt) ] || build > /dev/null
+ disks="$disks$opt"
+ ;;
+ [a-zA-Z])
+ local arg
+ for arg in \
+ a:apkovl \
+ b:bootrepo \
+ c:vda1 \
+ k:$KEY_FILE \
+ m:cryptdev \
+ H:vda2; do
+
+ if [ ${arg%:*} = $opt ]; then
+ opt="$opt ${arg#*:}"
+ break
+ fi
+ done
+ args="$args -$opt"
+ ;;
+ esac
+ done
+ run_in_vm $mode $disks $(printf %s "$args $*" | base64 -w 0)
+}
+
+
+if [ $# -eq 0 ]; then
+ MODE=run
+else
+ MODE=$1
+ shift
+fi
+
+TEST=$1
+ARGS=
+case "$MODE" in
+ build)
+ build
+ exit
+ ;;
+ debug)
+ run_case_in_vm debug "$@"
+ exit
+ ;;
+ custom)
+ shift
+ ARGS=$*
+ ;;
+ update)
+ TEST=
+ ;;
+ run)
+ ;;
+ *)
+ exit 1
+ ;;
+esac
+
+
+expected() {
+ if [ "$1" ]; then
+ grep "^$1 " expected
+ else
+ cat expected
+ fi
+}
+
+: > actual
+run() {
+ [ $MODE != run ] || expected "$1" > /dev/null
+
+ (
+ echo -n "$1 "
+ local result=$(run_case_in_vm test "$@" < /dev/null | \
+ sed "s/^TEST RESULT: //;ta;d;:a" | tr -d '\r\n')
+ [ "$result" ] || result=FAILED
+ echo "$result"
+ ) | tee -a actual
+}
+
+if [ "$TEST" ]; then
+ run "$TEST" $ARGS
+else
+ for disks in 0 05 1 12 2 3 45; do
+ for ab in a b ab; do
+ for n in "" n; do
+ for ckmH in "" ckm ckmH; do
+ run $disks-$ab$n$ckmH
+ done
+ done
+ done
+ done
+fi
+
+if [ $MODE = update ]; then
+ mv actual expected
+elif [ $MODE = run ]; then
+ expected $TEST | diff /dev/stdin actual
+fi
--- a/test.sh
+++ /dev/null
@@ -1,154 +1,0 @@
-#!/bin/sh
-
-set -e
-set -u
-
-# Defaults
-operation=full
-noconfirm=0
-clean_all=0
-retcode=0
-flags=""
-clean=1
-
-usage () {
- cat >&2 <<-EOF
- $0 [flags] [operation]
-
- operation:
- full (default)
- clean
- help (this help)
-
- flags:
- -h: help (this help)
- -d: turn on nlplug-findfs debug output
- -y: skip confirmation at program start
- -x: clean all (including produced binaries)
- -k: keep devices (dont clean up)
- EOF
- exit 1
-}
-
-while [ $# -gt 0 ]
-do
- case "$1" in
- "-d") flags="-d $flags"; shift;;
- "-y") noconfirm=1; shift;;
- "-x") clean_all=1; shift;;
- "-h"|"--help") usage; shift;;
- "-k") clean=""; shift;;
- "-"*) shift;; # Ignore erroneous flags
- *) break;;
- esac
-done
-
-[ $# -eq 1 ] && operation=$1
-
-[ $noconfirm -eq 0 ] && echo \
-"Warning: this script is going to de-setup all your existing /dev/loop* devices
-at exit. Press enter to continue, or ^C to cancel." >&2
-[ $noconfirm -eq 0 ] && read dummy
-
-if [ "$operation" != "clean" ]
-then
- passphrase=foobar
- mkdir -p local-mount
-
- if [ ! -f ./nlplug-findfs ]; then
- echo "> Creating nlplug-findfs"
- make
- fi
-
- echo "> Creating images"
- dd if=/dev/zero of=block count=10 bs=1M 2>&1 | sed 's/^/\t/g'
- [ "$operation" = "header" ] && dd if=/dev/zero of=header count=1024 bs=65536 2>&1 | sed 's/^/\t/g'
-
- echo "> Setting up the loop devices"
- block="$(sudo losetup -f)"
- echo "> Setting up block as $block"
- sudo losetup $block block 2>&1 | sed 's/^/\t/g'
- [ "$operation" = "header" ] && header="$(sudo losetup -f)"
- [ "$operation" = "header" ] && echo "> Setting up header as $header"
- [ "$operation" = "header" ] && sudo losetup $header header 2>&1 | sed 's/^/\t/g'
-
- [ "$operation" != "header" ] && echo "> Formatting '$block' with passphrase '$passphrase'."
- [ "$operation" = "header" ] && echo "> Formatting '$block' with header '$header' and passphrase '$passphrase'."
- [ "$operation" != "header" ] && printf "%s" "$passphrase" | sudo cryptsetup luksFormat -q $block - 2>&1 | sed 's/^/\t/g'
- [ "$operation" = "header" ] && printf "%s" "$passphrase" | sudo cryptsetup luksFormat -q --header $header $block - 2>&1 | sed 's/^/\t/g'
-
- echo "> Creating keyfile"
- dd if=/dev/urandom of=keyfile count=1 bs=512 2>&1 | sed 's/^/\t/g'
- echo "> Adding keyfile to device"
- [ "$operation" != "header" ] && printf "%s" "$passphrase" | sudo cryptsetup luksAddKey -q $block keyfile - 2>&1 | sed 's/^/\t/g'
- [ "$operation" = "header" ] && printf "%s" "$passphrase" | sudo cryptsetup luksAddKey -q --header $header $block keyfile - 2>&1 | sed 's/^/\t/g'
-
- echo "> Opening the device '$block' as /dev/mapper/temp-test"
- [ "$operation" != "header" ] && printf "%s" "$passphrase" | sudo cryptsetup luksOpen -q $block temp-test - 2>&1 | sed 's/^/\t/g'
- [ "$operation" = "header" ] && printf "%s" "$passphrase" | sudo cryptsetup luksOpen -q --header $header $block temp-test - 2>&1 | sed 's/^/\t/g'
- echo "> Creating a filesystem on '/dev/mapper/temp-test'"
- sudo mkfs.ext2 /dev/mapper/temp-test
- echo "> Mounting the fs"
- sudo mount -t ext2 /dev/mapper/temp-test local-mount
- echo "> Creating proof in the mounted fs"
- sudo sh -c 'date "+proof:%s" > local-mount/proof'
- proof=$(cat local-mount/proof)
- echo "> Proof is: '$proof'"
- echo "> Unmounting the fs"
- sudo umount local-mount
- echo "> Closing the device '/dev/mapper/temp-test'"
- sudo cryptsetup luksClose temp-test
-
- echo "> Testing nlplug-findfs on $block using keyfile"
- [ "$operation" != "header" ] && { echo "$passphrase" | sudo ./nlplug-findfs -p /sbin/mdev ${flags} -c $block -k keyfile -m 'test-device' /dev/mapper/test-device || retcode=1; }
- [ "$operation" = "header" ] && { echo "$passphrase" | sudo ./nlplug-findfs -p /sbin/mdev ${flags} -H $header -c $block -k keyfile -m 'test-device' /dev/mapper/test-device || retcode=1; }
-
- if [ $retcode -eq 0 ]; then
- echo "> Mounting the device"
- sudo mount /dev/mapper/test-device local-mount
- echo "> Getting proof"
- check=$(cat local-mount/proof)
- echo "Retrieved proof is: $check"
- if [ "$check" != "$proof" ]; then
- retcode=1
- fi
- fi
- [ $retcode -eq 0 ] && echo "Operation succeeded, proofs match" || echo "Operation failed, proofs don't match"
-
- echo "> Unmounting the fs"
- mountpoint local-mount && sudo umount local-mount
- echo "> Closing the device '/dev/mapper/test-device'"
- [ -b /dev/mapper/test-device ] && sudo cryptsetup luksClose test-device
-
- echo "> Testing nlplug-findfs on $block (passphrase was '$passphrase')"
- [ "$operation" != "header" ] && { echo "$passphrase" | sudo ./nlplug-findfs -p /sbin/mdev ${flags} -c $block -m 'test-device' /dev/mapper/test-device || retcode=1; }
- [ "$operation" = "header" ] && { echo "$passphrase" | sudo ./nlplug-findfs -p /sbin/mdev ${flags} -H $header -c $block -m 'test-device' /dev/mapper/test-device || retcode=1; }
-
- if [ $retcode -eq 0 ]; then
- echo "> Mounting the device"
- sudo mount /dev/mapper/test-device local-mount
- echo "> Getting proof"
- check=$(cat local-mount/proof)
- echo "Retrieved proof is: $check"
- if [ "$check" != "$proof" ]; then
- retcode=1
- fi
- fi
- [ $retcode -eq 0 ] && echo "Operation succeeded, proofs match" || echo "Operation failed, proofs don't match"
-fi
-
-if [ -z "$clean" ]; then
- exit
-fi
-echo "> Cleaning up"
-mountpoint local-mount && sudo umount local-mount
-[ -b /dev/mapper/test-device ] && sudo cryptsetup luksClose test-device
-for i in $(seq 0 $(($(sudo losetup -f | sed 's:^[a-z/]*\([0-9]*\)$:\1:; s/$/-1/')))); do
- sudo losetup -d /dev/loop$i
-done
-[ -d local-mount ] && rmdir local-mount
-[ -f block ] && rm block
-[ -f header ] && rm header
-[ $clean_all -eq 1 ] && ( make clean; rm -f nlplug-findfs nlplug-findfs.o )
-exit $retcode
-# vim: ts=4:sw=4