summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbill-auger <mr.j.spam.me@gmail.com>2024-03-28 20:01:27 -0400
committerbill-auger <mr.j.spam.me@gmail.com>2024-03-28 23:15:50 -0400
commit7f095f81ef82c7d3978fc1bae5cac6ee3cd0ddf9 (patch)
tree2cf8c22b5d95765f558d29d2349ddc1cc7269994
parent02d1a84247d83fab531b88099af842b1c8650721 (diff)
add tests for `-c` and `-C` options - refactor librerelease.bats
-rwxr-xr-xsrc/abslibre-tools/librerelease4
-rw-r--r--test/cases/librerelease.bats158
2 files changed, 85 insertions, 77 deletions
diff --git a/src/abslibre-tools/librerelease b/src/abslibre-tools/librerelease
index 9c48ac7..455d981 100755
--- a/src/abslibre-tools/librerelease
+++ b/src/abslibre-tools/librerelease
@@ -194,7 +194,7 @@ clean_local() {
clean_remote() {
msg "Removing files from remote staging directory"
- ${SSH_CMD[*]} "rm -rf ${TIER0_STAGING@Q}/*"
+ ${SSH_CMD[*]} "rm -rfv ${TIER0_STAGING@Q}/*"
}
release() {
@@ -286,7 +286,7 @@ release() {
fi
# notify pbot of the excellent work that we have done today
- msg2 "$(_ "Notifying pbot:")" ; print " $pbotsay_msg" ;
+ msg2 "Notifying pbot:" ; print " $pbotsay_msg" ;
${SSH_CMD[*]} "$pbotsay_cmd" &> /dev/null || :
else
msg2 "Nothing was published"
diff --git a/test/cases/librerelease.bats b/test/cases/librerelease.bats
index 7f982fd..cd9455e 100644
--- a/test/cases/librerelease.bats
+++ b/test/cases/librerelease.bats
@@ -3,8 +3,10 @@ load ../lib/common
# bats file_tags=net
+## helpers ##
+
# Stub server-side `db-update` for SSH localhost to run
-DBUPDATE_STUB()
+StubDbupdate()
{
cat <<-eot
#!/bin/bash
@@ -18,7 +20,7 @@ eot
}
# Stub server-side `pbot-say` for SSH localhost to run
-PBOTSAY_STUB()
+StubPbotsay()
{
cat <<-eot
#!/bin/bash
@@ -26,6 +28,19 @@ echo "\$*" >${tmpdir@Q}/pbot.txt
eot
}
+StageFiles()
+{
+ local staging_dir="$1"
+
+ mkdir -p "$staging_dir"/repo1 "$staging_dir"/repo2/sub
+ touch "$staging_dir"/repo1/file1 \
+ "$staging_dir"/repo1/file2 \
+ "$staging_dir/repo2/file with spaces" \
+ "$staging_dir"/repo2/sub/subfolder
+}
+
+
+## setup/teardown ##
setup() {
common_setup
@@ -72,24 +87,21 @@ teardown() {
common_teardown
}
+
+## tests ##
+
@test "librerelease displays usage text" {
rm -rf "$XDG_CONFIG_HOME"
- LC_ALL=C librerelease -h >"$tmpdir/stdout" 2>"$tmpdir/stderr"
+ LC_ALL=C librerelease -h > "$tmpdir/stdout" 2> "$tmpdir/stderr"
[[ "$(sed 1q "$tmpdir/stdout")" =~ Usage:.* ]]
empty "$tmpdir/stderr"
}
@test "librerelease lists all files" {
- local workdir="$tmpdir/workdir"
- mkdir -p "$workdir/staging/repo1" "$workdir/staging/repo2/sub"
- touch \
- "$workdir/staging/repo1/file1" \
- "$workdir/staging/repo1/file2" \
- "$workdir/staging/repo2/file with spaces" \
- "$workdir/staging/repo2/sub/subfolder"
+ StageFiles "$tmpdir"/workdir/staging
- LC_ALL=C librerelease -l &>"$tmpdir/list" || { status=$?; cat "$tmpdir/list"; return $status; }
+ LC_ALL=C librerelease -l &> "$tmpdir/list" || { status=$?; cat "$tmpdir/list"; return $status; }
cat > "$tmpdir/list-correct" <<-eot
-> repo1
@@ -106,15 +118,9 @@ teardown() {
@test "librerelease fails if GPGKEY not set" {
unset GPGKEY
- local workdir="$tmpdir/workdir"
- mkdir -p "$workdir/staging/repo1" "$workdir/staging/repo2/sub"
- touch \
- "$workdir/staging/repo1/file1" \
- "$workdir/staging/repo1/file2" \
- "$workdir/staging/repo2/file with spaces" \
- "$workdir/staging/repo2/sub/subfolder"
+ StageFiles "$tmpdir"/workdir/staging
- LC_ALL=C librerelease -l >"$tmpdir/stdout" 2>"$tmpdir/stderr" || status=$?
+ LC_ALL=C librerelease -l > "$tmpdir/stdout" 2> "$tmpdir/stderr" || status=$?
[[ $status != 0 ]]
empty "$tmpdir/stdout"
@@ -125,19 +131,13 @@ teardown() {
unset TIER0_HOST
sed -i 's|TIER0_HOST=.*|TIER0_HOST=|' "$XDG_CONFIG_HOME/libretools/libretools.conf"
- local workdir="$tmpdir/workdir"
- mkdir -p "$workdir/staging/repo1" "$workdir/staging/repo2/sub"
- touch \
- "$workdir/staging/repo1/file1" \
- "$workdir/staging/repo1/file2" \
- "$workdir/staging/repo2/file with spaces" \
- "$workdir/staging/repo2/sub/subfolder"
+ StageFiles "$tmpdir"/workdir/staging
- LC_ALL=C librerelease -l >"$tmpdir/stdout" 2>"$tmpdir/stderr" || status=$?
+ LC_ALL=C librerelease -l > "$tmpdir"/stdout 2> "$tmpdir"/stderr || status=$?
[[ $status != 0 ]]
- grep "libretools.conf variables may have changed" "$tmpdir/stdout"
- grep TIER0_HOST "$tmpdir/stderr"
+ grep "libretools.conf variables may have changed" "$tmpdir"/stdout
+ grep TIER0_HOST "$tmpdir"/stderr
}
@test "librerelease fails if DBSCRIPTS_CONFIG is not set" {
@@ -145,24 +145,57 @@ teardown() {
DBSCRIPTS_CONFIG=''
eot
- local workdir="$tmpdir/workdir"
- mkdir -p "$workdir/staging/repo1" "$workdir/staging/repo2/sub"
- touch \
- "$workdir/staging/repo1/file1" \
- "$workdir/staging/repo1/file2" \
- "$workdir/staging/repo2/file with spaces" \
- "$workdir/staging/repo2/sub/subfolder"
+ StageFiles "$tmpdir"/workdir/staging
- LC_ALL=C librerelease -l >"$tmpdir/stdout" 2>"$tmpdir/stderr" || status=$?
+ LC_ALL=C librerelease -l > "$tmpdir/stdout" 2> "$tmpdir/stderr" || status=$?
[[ $status != 0 ]]
grep "libretools.conf variables may have changed" "$tmpdir/stdout"
grep DBSCRIPTS_CONFIG "$tmpdir/stderr"
}
+@test "librerelease cleans local staging" {
+ local staging_dir="$tmpdir"/workdir/staging ; StageFiles "$staging_dir" ;
+
+ cat > "$tmpdir"/expected-stdout <<-eot
+removed 'repo1/file1'
+removed 'repo1/file2'
+removed 'repo2/file with spaces'
+removed 'repo2/sub/subfolder'
+eot
+
+ LC_ALL=C librerelease -c > "$tmpdir"/stdout 2> "$tmpdir"/stderr || status=$?
+
+ [[ $status == 0 ]]
+ grep "==> Removing files from local staging directory" "$tmpdir"/stderr
+ diff "$tmpdir"/expected-stdout "$tmpdir"/stdout
+ (( ! $(command ls -A1 "$staging_dir" | wc -l) ))
+}
+
+@test "librerelease cleans remote staging" {
+ local staging_dir="$tmpdir"/srv-staging ; StageFiles "$staging_dir" ;
+
+ cat > "$tmpdir"/expected-stdout <<-eot
+removed '$staging_dir//repo1/file1'
+removed '$staging_dir//repo1/file2'
+removed directory '$staging_dir//repo1'
+removed '$staging_dir//repo2/file with spaces'
+removed '$staging_dir//repo2/sub/subfolder'
+removed directory '$staging_dir//repo2/sub'
+removed directory '$staging_dir//repo2'
+eot
+
+ LC_ALL=C librerelease -C > "$tmpdir"/stdout 2> "$tmpdir"/stderr || status=$?
+
+ [[ $status == 0 ]]
+ grep "==> Removing files from remote staging directory" "$tmpdir"/stderr
+ diff "$tmpdir"/expected-stdout "$tmpdir"/stdout
+ (( ! $(command ls -A1 "$staging_dir" | wc -l) ))
+}
+
@test "librerelease publishes packages successfully" {
# Add server-side stub
- install -Dm755 /dev/stdin "$tmpdir/bin/db-update" < <(DBUPDATE_STUB) # writes log.txt
+ install -Dm755 /dev/stdin "$tmpdir/bin/db-update" < <(StubDbupdate) # writes log.txt
PATH=$tmpdir/bin:$PATH
# Log which directories the hooks are run in.
@@ -171,14 +204,7 @@ teardown() {
HOOKPOSTRELEASE='pwd > ${tmpdir@Q}/postrelease.txt'
eot
- # Make some files to stage
- local workdir="$tmpdir/workdir"
- mkdir -p "$workdir/staging/repo1" "$workdir/staging/repo2/sub"
- touch \
- "$workdir/staging/repo1/file1" \
- "$workdir/staging/repo1/file2" \
- "$workdir/staging/repo2/file with spaces" \
- "$workdir/staging/repo2/sub/subfolder"
+ StageFiles "$tmpdir"/workdir/staging
# Run
librerelease
@@ -208,44 +234,26 @@ teardown() {
@test "librerelease notifies pbot" {
# Add server-side stubs
- install -Dm755 /dev/stdin "$tmpdir/bin/db-update" < <(DBUPDATE_STUB) # writes log.txt
- install -Dm755 /dev/stdin "$tmpdir/bin/pbot-say" < <(PBOTSAY_STUB ) # writes pbot.txt
+ install -Dm755 /dev/stdin "$tmpdir"/bin/db-update < <(StubDbupdate) # writes log.txt
+ install -Dm755 /dev/stdin "$tmpdir"/bin/pbot-say < <(StubPbotsay ) # writes pbot.txt
PATH=$tmpdir/bin:$PATH
- # Make some files to stage
- local workdir="$tmpdir/workdir"
- mkdir -p "$workdir/staging/repo1" "$workdir/staging/repo2/sub"
- touch \
- "$workdir/staging/repo1/file1" \
- "$workdir/staging/repo1/file2" \
- "$workdir/staging/repo2/file with spaces" \
- "$workdir/staging/repo2/sub/subfolder"
+ StageFiles "$tmpdir"/workdir/staging
- # Run
- librerelease
+ LC_ALL=C librerelease 2> "$tmpdir"/stderr
- # Check that pbot gets notified
- grep 'just published' "$tmpdir/pbot.txt"
+ grep -E " -> Notifying pbot:" "$tmpdir"/stderr
+ #grep " $USER just published:" "$tmpdir"/pbot.txt
+ grep "$USER just published:" "$tmpdir"/pbot.txt
}
@test "librerelease logs-in as TIER0_LOGIN" {
PATH=$tmpdir/bin:$PATH
- # Make some files to stage
- local workdir="$tmpdir/workdir"
- mkdir -p "$workdir/staging/repo1" "$workdir/staging/repo2/sub"
- touch \
- "$workdir/staging/repo1/file1" \
- "$workdir/staging/repo1/file2" \
- "$workdir/staging/repo2/file with spaces" \
- "$workdir/staging/repo2/sub/subfolder"
+ echo "TIER0_LOGIN=tier0-user" >> "$XDG_CONFIG_HOME"/libretools/libretools.conf
+ LC_ALL=C librerelease -C > "$tmpdir"/stdout 2> "$tmpdir"/stderr || status=$?
- # Run
- echo "TIER0_LOGIN=tier0-user" >> "$XDG_CONFIG_HOME/libretools/libretools.conf"
- librerelease >"$tmpdir/stdout" 2>"$tmpdir/stderr" || status=$?
-
- # Check that tier0-user was the SSH login
[[ $status != 0 ]]
- empty "$tmpdir/stdout"
- grep "tier0-user@127.0.0.1: Permission denied" "$tmpdir/stderr"
+ empty "$tmpdir"/stdout
+ grep "tier0-user@127.0.0.1: Permission denied" "$tmpdir"/stderr
}