#! /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 > /tmp/forgebuild-time" > $FORGEBUILDDIR/time chmod +x $FORGEBUILDDIR/time echo "echo \$(pwd) > /tmp/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 clean } function clean { if [ -d $TMPDIR ]; then rm -rf $TMPDIR; fi if [ -f /tmp/forgebuild-time ]; then rm /tmp/forgebuild-time; fi } # Simple repository @test "sourceless task runs only once" { $FORGEBUILD -b $FORGEBUILDDIR time [ -f /tmp/forgebuild-time ] [ -f $FORGEBUILDDIR/time.done ] TIME="$(cat /tmp/forgebuild-time)" $FORGEBUILD -b $FORGEBUILDDIR time NEWTIME="$(cat /tmp/forgebuild-time)" [[ "$TIME" = "$NEWTIME" ]] } @test "sourceless task working dir is FORGEBUILDDIR" { $FORGEBUILD -b $FORGEBUILDDIR pwd PWD="$(cat /tmp/forgebuild-pwd)" cp /tmp/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 /tmp/forgebuild-time ] [ -f $FORGEBUILDDIR/time.done ] TIME="$(cat /tmp/forgebuild-time)" $FORGEBUILD -f -b $FORGEBUILDDIR time NEWTIME="$(cat /tmp/forgebuild-time)" [[ "$TIME" = "$NEWTIME" ]] } @test "sourceless task can run on specific hosts" { echo "$HOSTNAME" > $FORGEBUILDDIR/time.hosts $FORGEBUILD -b $FORGEBUILDDIR time TIME="$(cat /tmp/forgebuild-time)" HOST="UNKNOWN" $FORGEBUILD -b $FORGEBUILDDIR time NEWTIME="$(cat /tmp/forgebuild-time)" [[ "$TIME" = "$NEWTIME" ]] } @test "sourceless task can be ignored on hosts" { touch $FORGEBUILDDIR/$HOSTNAME/time.ignore $FORGEBUILD -b $FORGEBUILDDIR time [ ! -f /tmp/forgebuild-time ] HOST="UNKNOWN" $FORGEBUILD -b $FORGEBUILDDIR time [ -f /tmp/forgebuild-time ] }