@@ -132,6 +132,7 @@ DATASAFED
132132 PATH="${bin_dir}:${PATH}" \
133133 DATA_DIR="${data_dir}" \
134134 DP_TARGET_POD_NAME="rabbitmq-cluster-rabbitmq-0" \
135+ DP_TARGET_RELATIVE_PATH="ignored/extra/depth" \
135136 DP_BACKUP_BASE_PATH="/backup/base" \
136137 FAKE_ARCHIVE_PATH="${tmp_dir}/payload.tar" \
137138 bash "${restore_script}"
@@ -191,6 +192,81 @@ DATASAFED
191192 The stdout should include " restore prepareData completed"
192193 End
193194
195+ It " uses the final pod segment from a two-segment volume-populator target path"
196+ When call bash -c '
197+ set -Eeuo pipefail
198+ restore_script="$1"
199+ tmp_dir="$(mktemp -d)"
200+ trap "rm -rf \"${tmp_dir}\"" EXIT
201+ data_dir="${tmp_dir}/data"
202+ bin_dir="${tmp_dir}/bin"
203+ payload_dir="${tmp_dir}/payload"
204+ mkdir -p "${data_dir}" "${bin_dir}" "${payload_dir}"
205+ printf "restored-via-relative\n" > "${payload_dir}/restored.txt"
206+ tar -cf "${tmp_dir}/payload.tar" -C "${payload_dir}" .
207+ cat > "${bin_dir}/datasafed" <<' " '" ' DATASAFED' " '" '
208+ #!/bin/bash
209+ set -e
210+ case "$1" in
211+ list)
212+ test "${DATASAFED_BACKEND_BASE_PATH}" = "${EXPECTED_BACKUP_BASE_PATH}"
213+ printf "%s\n" "${EXPECTED_TARGET_POD_NAME}.tar.zst"
214+ ;;
215+ pull)
216+ cat "${FAKE_ARCHIVE_PATH}"
217+ ;;
218+ *)
219+ echo "unexpected datasafed command: $*" >&2
220+ exit 1
221+ ;;
222+ esac
223+ DATASAFED
224+ printf "#!/bin/bash\nexit 0\n" > "${bin_dir}/chown"
225+ chmod +x "${bin_dir}/datasafed" "${bin_dir}/chown"
226+ unset DP_TARGET_POD_NAME || true
227+ PATH="${bin_dir}:${PATH}" \
228+ DATA_DIR="${data_dir}" \
229+ DP_TARGET_RELATIVE_PATH="rabbitmq/rmq-br-5400-rabbitmq-2" \
230+ DP_BACKUP_BASE_PATH="/backup/base/rabbitmq/rmq-br-5400-rabbitmq-2" \
231+ EXPECTED_BACKUP_BASE_PATH="/backup/base/rabbitmq/rmq-br-5400-rabbitmq-2" \
232+ EXPECTED_TARGET_POD_NAME="rmq-br-5400-rabbitmq-2" \
233+ FAKE_ARCHIVE_PATH="${tmp_dir}/payload.tar" \
234+ bash "${restore_script}"
235+ test -f "${data_dir}/restored.txt"
236+ test ! -f "${data_dir}/.kb-data-protection"
237+ ' _ " ${restore_script} "
238+ The status should be success
239+ The stdout should include " restore prepareData completed"
240+ End
241+
242+ It " fails closed when the target relative path has an empty final segment"
243+ When call bash -c '
244+ set -Eeuo pipefail
245+ restore_script="$1"
246+ unset DP_TARGET_POD_NAME || true
247+ DATA_DIR="$(mktemp -d)" \
248+ DP_TARGET_RELATIVE_PATH="rabbitmq/" \
249+ DP_BACKUP_BASE_PATH="/backup/base/rabbitmq" \
250+ bash "${restore_script}"
251+ ' _ " ${restore_script} "
252+ The status should be failure
253+ The stderr should include " must be one pod segment or <target-name>/<target-pod-name>"
254+ End
255+
256+ It " fails closed when the target relative path has extra depth"
257+ When call bash -c '
258+ set -Eeuo pipefail
259+ restore_script="$1"
260+ unset DP_TARGET_POD_NAME || true
261+ DATA_DIR="$(mktemp -d)" \
262+ DP_TARGET_RELATIVE_PATH="repo/rabbitmq/rmq-br-5400-rabbitmq-2" \
263+ DP_BACKUP_BASE_PATH="/backup/base/repo/rabbitmq/rmq-br-5400-rabbitmq-2" \
264+ bash "${restore_script}"
265+ ' _ " ${restore_script} "
266+ The status should be failure
267+ The stderr should include " must be one pod segment or <target-name>/<target-pod-name>"
268+ End
269+
194270 It " fails closed when neither DP_TARGET_POD_NAME nor DP_TARGET_RELATIVE_PATH is set"
195271 When call bash -c '
196272 set -Eeuo pipefail
0 commit comments