Skip to content
Snippets Groups Projects
Verified Commit 152847a3 authored by Michal Hrusecky's avatar Michal Hrusecky :mouse:
Browse files

Add some basic tests

parent 77428a4b
No related merge requests found
image: "$CI_REGISTRY_IMAGE"
basic:
script: BATS_LIB_PATH="/root/bats" tests/help-and-version.bats -F junit > report.xml
artifacts:
reports:
junit: report.xml
local:
tags:
- dind
script:
- sh -c 'for i in `seq 0 9`; do [ -e /dev/loop$i ] || mknod /dev/loop$i b 7 $i; done'
- BATS_LIB_PATH="/root/bats" tests/local-tests.bats -F junit > report.xml
artifacts:
reports:
junit: report.xml
FROM alpine:latest
ENV HOME=/root
RUN apk --update add wget git bash sudo ncurses btrfs-progs util-linux-misc coreutils tar gpg
# Get the newer release then the one available in Alpine
RUN cd /root && wget -O - https://github.com/bats-core/bats-core/archive/refs/tags/v1.6.0.tar.gz | tar -xzf - && cd bats-core-* && ./install.sh /usr
RUN cd /root && mkdir bats && cd bats && for i in bats-file bats-assert bats-support; do git clone https://github.com/bats-core/$i.git; done
#!/usr/bin/env bash
_diskless_setup() {
ROOT_DIR="$(dirname "$( dirname "$BATS_TEST_FILENAME" )")"
[ -d "$ROOT_DIR" ]
bats_load_library 'bats-support'
bats_load_library 'bats-assert'
}
_disk_setup() {
sync
$SUDO btrfs subvol create "$ROOT_MOUNT"/@
$SUDO btrfs subvol create "$ROOT_MOUNT"/@other
$SUDO mount -t btrfs "$WD"/disk "$MAIN_MOUNT" -o subvol=@
$SUDO chmod a+rw "$MAIN_MOUNT"
$SUDO mount -t btrfs "$WD"/disk "$OTHER_MOUNT" -o subvol=@other
$SUDO chmod a+rw "$OTHER_MOUNT"
bats_load_library 'bats-file'
load "helpers.bash"
}
_remount_main() {
$SUDO umount "$MAIN_MOUNT"
$SUDO mount -t btrfs "$WD"/disk "$MAIN_MOUNT" -o subvol=@
}
_disk_teardown() {
$SUDO umount "$MAIN_MOUNT"
$SUDO umount "$OTHER_MOUNT"
for s in "$ROOT_MOUNT"/@*; do
$SUDO btrfs subvol delete "$s"
done
$SUDO rm -f "$ROOT_MOUNT"/*
sync
}
_disk_file_setup() {
SUDO=""
[ "$(id -u)" -eq 0 ] || SUDO=sudo
WD="$(mktemp -d schnapps-tests-XXXXXXX)"
dd if=/dev/zero of="$WD"/disk bs=1M count=250
mkfs.btrfs -L schnapps-test "$WD"/disk
ROOT_MOUNT="$WD"/mount-root
MAIN_MOUNT="$WD"/mount-main
OTHER_MOUNT="$WD"/mount-other
mkdir "$ROOT_MOUNT"
$SUDO mount -t btrfs "$WD"/disk "$ROOT_MOUNT"
mkdir "$MAIN_MOUNT"
mkdir "$OTHER_MOUNT"
export BATS_NO_PARALLELIZE_WITHIN_FILE=true
export SUDO MAIN_MOUNT OTHER_MOUNT ROOT_MOUNT WD
}
_disk_file_teardown() {
$SUDO umount "$ROOT_MOUNT"
rm -rf "$WD"
}
#!/usr/bin/env bats
setup() {
load "common_setup.bash"
_diskless_setup
}
@test "Reports version" {
run "${ROOT_DIR}"/schnapps.sh version
assert_success
assert_output --partial '@VERSION@'
}
@test "Displays help" {
run "${ROOT_DIR}"/schnapps.sh help
assert_success
assert_output --partial 'Usage: schnapps'
}
#!/usr/bin/env bash
create_dataset_A() {
pushd "$1"
mkdir -p a/aa/aaa
echo a > a/test
echo aa > a/aa/test
echo aaa > a/aa/aaa/test
echo nothing > test
popd
}
check_dataset_A() {
assert_dir_exists "$1"/a
assert_dir_exists "$1"/a/aa
assert_dir_exists "$1"/a/aa/aaa
assert_file_exists "$1"/test
assert_file_contains "$1"/test '^nothing$'
assert_file_exists "$1"/a/test
assert_file_contains "$1"/a/test '^a$'
assert_file_exists "$1"/a/aa/test
assert_file_contains "$1"/a/aa/test '^aa$'
assert_file_exists "$1"/a/aa/aaa/test
assert_file_contains "$1"/a/aa/aaa/test '^aaa$'
}
change_dataset_A_to_AB() {
pushd "$1"
echo ab > a/test
echo aabb > a/aa/test
rm -rf a/aa/aaa
popd
}
check_dataset_AB() {
assert_dir_exists "$1"/a
assert_dir_exists "$1"/a/aa
assert_dir_not_exists "$1"/a/aa/aaa
assert_file_exists "$1"/test
assert_file_contains "$1"/test '^nothing$'
assert_file_exists "$1"/a/test
assert_file_contains "$1"/a/test '^ab$'
assert_file_exists "$1"/a/aa/test
assert_file_contains "$1"/a/aa/test '^aabb$'
assert_file_not_exists "$1"/a/aaa/test
}
#!/usr/bin/env bats
setup_file() {
load "common_setup.bash"
_disk_file_setup
}
setup() {
load "common_setup.bash"
_diskless_setup
_disk_setup
}
teardown() {
_disk_teardown
}
teardown_file() {
_disk_file_teardown
}
@test "List works" {
run $SUDO "${ROOT_DIR}"/schnapps.sh -d "$MAIN_MOUNT" list
assert_success
assert_output --regexp "Type.*Size.*Date.*Description"
}
@test "Snapshot creation works" {
run $SUDO "${ROOT_DIR}"/schnapps.sh -d "$MAIN_MOUNT" create Testing snapshot
assert_success
run $SUDO "${ROOT_DIR}"/schnapps.sh -d "$MAIN_MOUNT" list
assert_output --partial "Testing snapshot"
assert_dir_exists "$ROOT_MOUNT"/@1
assert_file_exists "$ROOT_MOUNT"/1.info
}
@test "Snapshot are really snapshots" {
create_dataset_A "$MAIN_MOUNT"
check_dataset_A "$MAIN_MOUNT"
run $SUDO "${ROOT_DIR}"/schnapps.sh -d "$MAIN_MOUNT" create Testing snapshot
assert_success
change_dataset_A_to_AB "$MAIN_MOUNT"
check_dataset_AB "$MAIN_MOUNT"
check_dataset_A "$ROOT_MOUNT"/@1
}
@test "Rollback works" {
create_dataset_A "$MAIN_MOUNT"
check_dataset_A "$MAIN_MOUNT"
run $SUDO "${ROOT_DIR}"/schnapps.sh -d "$MAIN_MOUNT" create Testing snapshot
assert_success
change_dataset_A_to_AB "$MAIN_MOUNT"
check_dataset_AB "$MAIN_MOUNT"
run $SUDO "${ROOT_DIR}"/schnapps.sh -d "$MAIN_MOUNT" rollback
_remount_main
check_dataset_A "$MAIN_MOUNT"
}
@test "Delete works" {
create_dataset_A "$MAIN_MOUNT"
check_dataset_A "$MAIN_MOUNT"
run $SUDO "${ROOT_DIR}"/schnapps.sh -d "$MAIN_MOUNT" create Testing snapshot
assert_success
assert_dir_exists "$ROOT_MOUNT"/@1
assert_file_exists "$ROOT_MOUNT"/1.info
run $SUDO "${ROOT_DIR}"/schnapps.sh -d "$MAIN_MOUNT" delete 1
assert_success
assert_dir_not_exists "$ROOT_MOUNT"/@1
assert_file_not_exists "$ROOT_MOUNT"/1.info
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment