#!/usr/bin/env bash set -euo pipefail ROOT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd) RUN_SCRIPT="$ROOT_DIR/scripts/run-ci-container.sh" FIXTURE_DIR=$(mktemp -d) CALL_LOG="$FIXTURE_DIR/docker-calls.log" FAKE_BIN="$FIXTURE_DIR/bin" SOURCE_DIR="$FIXTURE_DIR/source" EXTRA_SOURCE_DIR="$FIXTURE_DIR/extra-source" trap 'rm -rf "$FIXTURE_DIR"' EXIT mkdir -p "$FAKE_BIN" "$SOURCE_DIR" "$EXTRA_SOURCE_DIR" printf 'fixture\n' > "$SOURCE_DIR/pom.xml" printf 'extra fixture\n' > "$EXTRA_SOURCE_DIR/backend.java" cat > "$FAKE_BIN/docker" <<'EOF' #!/usr/bin/env bash set -euo pipefail printf '%s\n' "$*" >> "$DOCKER_CALL_LOG" case "$1" in create) printf 'ci-container-id\n' ;; start) exit "${DOCKER_START_EXIT_CODE:-0}" ;; esac EOF chmod +x "$FAKE_BIN/docker" DOCKER_CALL_LOG="$CALL_LOG" PATH="$FAKE_BIN:$PATH" \ bash "$RUN_SCRIPT" "$SOURCE_DIR" 'registry.local/test@sha256:abc' \ --copy "$EXTRA_SOURCE_DIR" /backend \ --env DOCKER_CONFIG=/workspace \ -- sh -c 'exit 0' grep --fixed-strings \ 'create --workdir /workspace --env DOCKER_CONFIG=/workspace registry.local/test@sha256:abc sh -c exit 0' \ "$CALL_LOG" >/dev/null grep --fixed-strings \ "cp $SOURCE_DIR/. ci-container-id:/workspace" \ "$CALL_LOG" >/dev/null grep --fixed-strings \ "cp $EXTRA_SOURCE_DIR/. ci-container-id:/backend" \ "$CALL_LOG" >/dev/null grep --fixed-strings 'start --attach ci-container-id' "$CALL_LOG" >/dev/null grep --fixed-strings 'rm --force ci-container-id' "$CALL_LOG" >/dev/null if grep -Eq '(^|[[:space:]])(-v|--volume)([[:space:]]|=)' "$CALL_LOG"; then printf 'Ошибка теста: helper использовал bind mount\n' >&2 exit 1 fi : > "$CALL_LOG" set +e DOCKER_CALL_LOG="$CALL_LOG" DOCKER_START_EXIT_CODE=17 PATH="$FAKE_BIN:$PATH" \ bash "$RUN_SCRIPT" "$SOURCE_DIR" 'registry.local/test@sha256:abc' \ -- sh -c 'exit 17' >/dev/null 2>&1 status=$? set -e if (( status != 17 )); then printf 'Ошибка теста: код контейнера 17 превратился в %d\n' "$status" >&2 exit 1 fi grep --fixed-strings 'rm --force ci-container-id' "$CALL_LOG" >/dev/null if PATH="$FAKE_BIN:$PATH" bash "$RUN_SCRIPT" "$FIXTURE_DIR/missing" \ 'registry.local/test@sha256:abc' -- true >/dev/null 2>&1; then printf 'Ошибка теста: отсутствующий каталог исходников не был отклонён\n' >&2 exit 1 fi printf 'Проверка запуска CI-контейнеров без bind mount завершена успешно\n'