86 lines
2.5 KiB
Bash
Executable File
86 lines
2.5 KiB
Bash
Executable File
#! /usr/bin/env bats
|
|
|
|
# This is a test file for use with the bats testing framework
|
|
# https://github.com/bats-core/bats-core
|
|
# On Debian: apt install bats
|
|
|
|
function setup {
|
|
ORIGDIR="$(pwd)"
|
|
TMPDIR="$(mktemp -d)"
|
|
|
|
# If no $FORGEBUILD is supplied in ENV, use the default
|
|
# (otherwise you can't `bats ./tests/` manually)
|
|
[ -z "$FORGEBUILD" ] && FORGEBUILD="forgebuild"
|
|
|
|
# Setup forgebuild tasks
|
|
FORGEBUILDDIR="$TMPDIR"/forgebuild
|
|
mkdir $FORGEBUILDDIR
|
|
echo "date +%s%N > $TMPDIR/forgebuild-time" > $FORGEBUILDDIR/time
|
|
chmod +x $FORGEBUILDDIR/time
|
|
echo "echo \$(pwd) > $TMPDIR/forgebuild-pwd" > $FORGEBUILDDIR/pwd
|
|
chmod +x $FORGEBUILDDIR/pwd
|
|
|
|
# Setup settings
|
|
mkdir $FORGEBUILDDIR/config
|
|
echo "default" > $FORGEBUILDDIR/config/entry
|
|
mkdir $FORGEBUILDDIR/$HOSTNAME
|
|
echo "host" > $FORGEBUILDDIR/$HOSTNAME/entry
|
|
}
|
|
|
|
function teardown {
|
|
cd $ORIGDIR
|
|
if [ -d $TMPDIR ]; then rm -rf $TMPDIR; fi
|
|
}
|
|
|
|
# Simple repository
|
|
|
|
@test "sourceless task runs only once" {
|
|
$FORGEBUILD -b $FORGEBUILDDIR time
|
|
[ -f $TMPDIR/forgebuild-time ]
|
|
[ -f $FORGEBUILDDIR/time.done ]
|
|
TIME="$(cat $TMPDIR/forgebuild-time)"
|
|
$FORGEBUILD -b $FORGEBUILDDIR time
|
|
NEWTIME="$(cat $TMPDIR/forgebuild-time)"
|
|
[[ "$TIME" = "$NEWTIME" ]]
|
|
}
|
|
|
|
@test "sourceless task working dir is FORGEBUILDDIR" {
|
|
$FORGEBUILD -b $FORGEBUILDDIR pwd
|
|
PWD="$(cat $TMPDIR/forgebuild-pwd)"
|
|
cp $TMPDIR/forgebuild-pwd{,-2}
|
|
[[ "$PWD" = "$FORGEBUILDDIR" ]]
|
|
}
|
|
|
|
@test "after running, back to the previous working dir" {
|
|
cd /tmp
|
|
$FORGEBUILD -b $FORGEBUILDDIR pwd
|
|
[[ "$(pwd)" = "/tmp" ]]
|
|
}
|
|
|
|
@test "sourceless task is not forced triggered by --force flag" {
|
|
$FORGEBUILD -b $FORGEBUILDDIR time
|
|
[ -f $TMPDIR/forgebuild-time ]
|
|
[ -f $FORGEBUILDDIR/time.done ]
|
|
TIME="$(cat $TMPDIR/forgebuild-time)"
|
|
$FORGEBUILD -f -b $FORGEBUILDDIR time
|
|
NEWTIME="$(cat $TMPDIR/forgebuild-time)"
|
|
[[ "$TIME" = "$NEWTIME" ]]
|
|
}
|
|
|
|
@test "sourceless task can run on specific hosts" {
|
|
echo "$HOSTNAME" > $FORGEBUILDDIR/time.hosts
|
|
$FORGEBUILD -b $FORGEBUILDDIR time
|
|
TIME="$(cat $TMPDIR/forgebuild-time)"
|
|
HOST="UNKNOWN" $FORGEBUILD -b $FORGEBUILDDIR time
|
|
NEWTIME="$(cat $TMPDIR/forgebuild-time)"
|
|
[[ "$TIME" = "$NEWTIME" ]]
|
|
}
|
|
|
|
@test "sourceless task can be ignored on hosts" {
|
|
touch $FORGEBUILDDIR/$HOSTNAME/time.ignore
|
|
$FORGEBUILD -b $FORGEBUILDDIR time
|
|
[ ! -f $TMPDIR/forgebuild-time ]
|
|
HOST="UNKNOWN" $FORGEBUILD -b $FORGEBUILDDIR time
|
|
[ -f $TMPDIR/forgebuild-time ]
|
|
}
|