diff options
author | bill-auger <mr.j.spam.me@gmail.com> | 2024-03-28 20:01:27 -0400 |
---|---|---|
committer | bill-auger <mr.j.spam.me@gmail.com> | 2024-03-28 23:15:50 -0400 |
commit | 7f095f81ef82c7d3978fc1bae5cac6ee3cd0ddf9 (patch) | |
tree | 2cf8c22b5d95765f558d29d2349ddc1cc7269994 | |
parent | 02d1a84247d83fab531b88099af842b1c8650721 (diff) |
add tests for `-c` and `-C` options - refactor librerelease.bats
-rwxr-xr-x | src/abslibre-tools/librerelease | 4 | ||||
-rw-r--r-- | test/cases/librerelease.bats | 158 |
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 } |