{{tag>Brouillon CA}}
= Scripting shell bash et tests unitaires avec bats
apt-get install -y --no-install-recommends bats
''test/spec.bats''
#!/usr/bin/env bats
set -euo pipefail
@test "Check apache2 is up" {
ps aux | grep "apache2"
}
''test/spec.bats''
#! /usr/bin/env bats
set -eu
setup() {
# Appelée avant chaque test unitaire
#echo "$(date --iso-8601=second BEGIN $BATS_TEST_NUMBER $BATS_TEST_NAME" > /dev/stdin
true
}
teardown() {
# Appelée après chaque test unitaire
#echo "$(date --iso-8601=second) END $BATS_TEST_NUMBER $BATS_TEST_NAME" > /dev/stdin
true
}
setup_file() {
# Appelée une seule fois au début du lancement de ce script
echo "$(date --iso-8601=second) BEGIN $(basename $BATS_TEST_FILENAME)" > /dev/stdin
}
teardown_file() {
# Appelée une seule fois en dernier lors de l’exécution de ce script
sleep 1
echo -e "\b$(date --iso-8601=second) END $(basename $BATS_TEST_FILENAME)" > /dev/stdin
}
### Exemple de tests
@test "prereq - create account" {
ansible -b -i tests/inventory -m user -a 'name=testplop' all
}
@test "Check required fields" {
ansible-playbook --check tests/test.yml -i tests/inventory |grep -q 'NameError.'
}
== Dépendance et condition
''test/spec.bats''
foo() {
echo foobar > /tmp/plop
}
@test "foobar" {
run foo
}
== Autres
''tests/spec.sh''
#! /bin/bash
set -eu
if [ -z "${ALREADY_RUN:-}" ]
then
export ALREADY_RUN=yes
fi
''test/spec.bats''
#! /usr/bin/env bats
set -eu
load spec.sh
@test "clean" {
if [ ! -z "${ALREADY_RUN:-}" ]
then
ssh server -- sudo find /opt/app1/ -type f -delete
fi
}