diff --git a/xCAT-test/bats/postscripts_otherpkgs.bats b/xCAT-test/bats/postscripts_otherpkgs.bats index a21bb0893..3a7ffb4cc 100644 --- a/xCAT-test/bats/postscripts_otherpkgs.bats +++ b/xCAT-test/bats/postscripts_otherpkgs.bats @@ -265,3 +265,72 @@ run_url_repo_block() [ "$status" -eq 0 ] [ "$(cat "${BATS_TEST_TMPDIR}/xCAT-otherpkgs0.list")" = "deb http://192.0.2.1/repo-a" ] } + +# Drives the lines that name the local otherpkgs repository for zypper: the alias written into +# the repository file, and the alias the refresh and the delete use. +run_zypper_local_repo() +{ + local urlrepoindex="$1" index="$2" + local repo_base="$BATS_TEST_TMPDIR" mounted=1 whole_path=/install/post/otherpkgs/sles15/x86_64 + local OSVER=sles15 VERBOSE= localrepoindex REPOFILE rc=1 result="" path=/pkgdir + zypper() + { + printf '%s\n' "$*" >>"$CMD_LOG" + case "$1" in + ar) sed -n '1s/^\[\(.*\)\]$/added=\1/p' "$3" >>"$CMD_LOG" ;; + esac + return "${ZYPPER_STATUS:-0}" + } + array_set_element() { :; } + # The extraction is kept apart from the eval: a failing zypper must not read as a failed + # extraction. + local pattern line + for pattern in \ + 'localrepoindex=' \ + 'REPOFILE="[$]repo_base/xCAT-otherpkgs[$]localrepoindex.repo"' \ + 'echo "[[]xcat-otherpkgs[$]localrepoindex[]]"' \ + 'result=`zypper ar -c [$]REPOFILE`' \ + 'zypper --non-interactive refresh xcat-otherpkgs' \ + 'result=`zypper sd xcat-otherpkgs'; do + line="$(extract_first_matching_line "$OTHERPKGS" "$pattern")" || return 99 + eval "$line" + done + return 0 +} + +@test "zypper refreshes the otherpkgs repository it added" { + run run_zypper_local_repo 2 0 + [ "$status" -eq 0 ] + [ "$(cmd_call 2)" = "added=xcat-otherpkgs2" ] + [ "$(cmd_call 3)" = "--non-interactive refresh xcat-otherpkgs2" ] +} + +@test "zypper deletes the otherpkgs repository it added when the refresh fails" { + ZYPPER_STATUS=1 run run_zypper_local_repo 2 0 + [ "$status" -eq 0 ] + [ "$(cmd_call 2)" = "added=xcat-otherpkgs2" ] + [ "$(cmd_call 4)" = "sd xcat-otherpkgs2" ] +} + +run_sdk_block() +{ + local block + block="$(otherpkgs_block '#adds SDK repository' 'if [ "$SDKDIR" != "" ]; then')" || return 99 + local SDKDIR=/install/sles15/x86_64/sdk1 OSVER=sles15 mounted=1 VERBOSE= log_label=otherpkgs result="" + local NFSSERVER=192.0.2.1 HTTPPORT=80 + eval "$(extract_shell_function "$OTHERPKGS" pmatch)" || return 99 + shadow_logger + zypper() + { + printf 'zypper failed\n' + return 1 + } + eval "$block" + return 0 +} + +@test "a failed SDK repository add is logged with the repository name" { + run run_sdk_block + [ "$status" -eq 0 ] + grep -q 'xCAT-sles15-sdk1' "$LOGGER_LOG" +} diff --git a/xCAT/postscripts/otherpkgs b/xCAT/postscripts/otherpkgs index 507de1078..49383801c 100755 --- a/xCAT/postscripts/otherpkgs +++ b/xCAT/postscripts/otherpkgs @@ -576,9 +576,9 @@ if ( ! ( pmatch "$OSVER" "sles10*" ) && [ $haszypper -eq 1 ] ); then result=`zypper ar $sdk_src xCAT-$OSVER-$bname 2>&1` if [ $? -ne 0 ]; then if ( ! pmatch "$result" "*exists*" ); then - logger -t $log_label -p local4.info "otherpkgs: zypper ar $sdk_src xCAT-$OSVER-bname\n $result" + logger -t $log_label -p local4.info "otherpkgs: zypper ar $sdk_src xCAT-$OSVER-$bname\n $result" if [ $VERBOSE ]; then - echo "otherpkgs: zypper ar $sdk_src xCAT-$OSVER-bname" + echo "otherpkgs: zypper ar $sdk_src xCAT-$OSVER-$bname" echo " $result" fi fi @@ -830,7 +830,7 @@ EOF` result=`zypper ar -c $REPOFILE` fi - result=`zypper --non-interactive refresh xcat-otherpkgs$index 2>&1` + result=`zypper --non-interactive refresh xcat-otherpkgs$localrepoindex 2>&1` if [ $? -eq 0 ]; then rc=0 array_set_element repo_path $index $path @@ -840,7 +840,7 @@ EOF` rc=0 array_set_element repo_path $index $path else - result=`zypper sd xcat-otherpkgs$index` + result=`zypper sd xcat-otherpkgs$localrepoindex` fi fi elif [ $hasapt -eq 1 ]; then