#!/usr/bin/env bats load test_helper # system/finish-install.sh with a fake uname and configure. The kernel is up to # date unless a test says otherwise: uname reports a kernel whose modules exist. setup() { common_setup KERNEL="$(ls /usr/lib/modules 2> /dev/null | head -n 1)" export KERNEL stub uname 'echo "$KERNEL"' # configure --list prints $ITEMS; configure itself logs that it ran export ITEMS="done core Federated Core" mkdir -p "$HOME/.local/bin" cat > "$HOME/.local/bin/configure" << 'STUB' #!/bin/bash echo "configure${*:+ $*}" >> "$STUB_LOG" [ "$1" = --list ] && printf '%s\n' "$ITEMS" exit 0 STUB chmod +x "$HOME/.local/bin/configure" # No terminal unless a test gives answers export COREDESKTOP_TTY="$BATS_TEST_TMPDIR/no-tty/tty" } needs_modules() { [ -n "$KERNEL" ] || skip "needs a kernel in /usr/lib/modules" } answer() { export COREDESKTOP_TTY="$BATS_TEST_TMPDIR/answer" echo "$1" > "$COREDESKTOP_TTY" } @test "finish-install says the install worked when nothing is left to do" { needs_modules run bash "$REPO/system/finish-install.sh" [ "$status" -eq 0 ] [[ "$output" == *"CoreDesktop is installed."* ]] [[ "$output" == *"no reboot needed"* ]] [[ "$output" != *"configure connects"* ]] uncalled configure } @test "finish-install says the install worked, then asks for a reboot after a new kernel" { KERNEL=0.0.0-not-installed run bash "$REPO/system/finish-install.sh" [ "$status" -eq 0 ] [[ "$output" == *"CoreDesktop is installed."*"Reboot, then run: configure"* ]] not_called configure } @test "finish-install says the install worked before offering configure" { needs_modules ITEMS="to do core Federated Core" run bash "$REPO/system/finish-install.sh" [ "$status" -eq 0 ] [[ "$output" == *"CoreDesktop is installed."*"configure connects"*"To do it later, run: configure"* ]] uncalled configure } @test "finish-install runs configure when asked" { needs_modules ITEMS="to do core Federated Core" answer y run bash "$REPO/system/finish-install.sh" [ "$status" -eq 0 ] [[ "$output" == *"CoreDesktop is installed."* ]] called configure }