apple-container-test.sh 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #!/bin/bash
  2. set -euo pipefail
  3. TEST_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  4. DEPLOY_DIR="$(cd "${TEST_DIR}/.." && pwd)"
  5. SCRIPT="${DEPLOY_DIR}/apple-container.sh"
  6. TEST_ROOT="$(mktemp -d "${TMPDIR:-/tmp}/sub2api-apple-test.XXXXXX")"
  7. STATE_DIR="${TEST_ROOT}/state"
  8. ENV_FILE="${TEST_ROOT}/sub2api.env"
  9. cleanup() {
  10. rm -rf "${TEST_ROOT}"
  11. }
  12. trap cleanup EXIT
  13. fail() {
  14. printf 'FAIL: %s\n' "$*" >&2
  15. exit 1
  16. }
  17. assert_exists() {
  18. [[ -e "$1" ]] || fail "Expected path to exist: $1"
  19. }
  20. assert_missing() {
  21. [[ ! -e "$1" ]] || fail "Expected path to be absent: $1"
  22. }
  23. export FAKE_CONTAINER_STATE="${STATE_DIR}"
  24. export PATH="${TEST_DIR}/fixtures/bin:${PATH}"
  25. export SUB2API_ENV_FILE="${ENV_FILE}"
  26. mkdir -p "${STATE_DIR}"
  27. "${SCRIPT}" init
  28. [[ "$(stat -f '%Lp' "${ENV_FILE}")" == "600" ]] || fail "init did not create a mode-600 env file"
  29. grep -q '^POSTGRES_PASSWORD=change_this_secure_password$' "${ENV_FILE}" && fail "init retained the placeholder password"
  30. chmod 644 "${ENV_FILE}"
  31. if "${SCRIPT}" up >/dev/null 2>&1; then
  32. fail "up accepted an insecure env file"
  33. fi
  34. chmod 600 "${ENV_FILE}"
  35. "${SCRIPT}" up
  36. assert_exists "${STATE_DIR}/containers/sub2api-apple"
  37. assert_exists "${STATE_DIR}/containers/sub2api-apple-postgres"
  38. assert_exists "${STATE_DIR}/containers/sub2api-apple-redis"
  39. assert_exists "${STATE_DIR}/running/sub2api-apple"
  40. [[ ! -s "${STATE_DIR}/network-subnets/sub2api-apple" ]] || \
  41. fail "up passed a subnet when APPLE_CONTAINER_NETWORK_SUBNET was unset"
  42. "${SCRIPT}" status >/dev/null
  43. "${SCRIPT}" up --recreate
  44. assert_exists "${STATE_DIR}/running/sub2api-apple"
  45. "${SCRIPT}" down
  46. assert_missing "${STATE_DIR}/running/sub2api-apple"
  47. assert_missing "${STATE_DIR}/running/sub2api-apple-postgres"
  48. assert_missing "${STATE_DIR}/running/sub2api-apple-redis"
  49. "${SCRIPT}" destroy --yes
  50. assert_missing "${STATE_DIR}/containers/sub2api-apple"
  51. assert_missing "${STATE_DIR}/networks/sub2api-apple"
  52. assert_exists "${STATE_DIR}/volumes/sub2api-apple-data"
  53. printf '\nAPPLE_CONTAINER_NETWORK_SUBNET=172.31.250.0/24\n' >>"${ENV_FILE}"
  54. "${SCRIPT}" up
  55. [[ "$(<"${STATE_DIR}/network-subnets/sub2api-apple")" == "172.31.250.0/24" ]] || \
  56. fail "up did not pass APPLE_CONTAINER_NETWORK_SUBNET to network creation"
  57. printf 'APPLE_CONTAINER_NETWORK_SUBNET=172.31.251.0/24\n' >>"${ENV_FILE}"
  58. if mismatch_output="$("${SCRIPT}" up 2>&1)"; then
  59. fail "up accepted a configured subnet that differs from the existing network"
  60. fi
  61. [[ "${mismatch_output}" == *"Existing network 'sub2api-apple' uses subnet '172.31.250.0/24'"* ]] || \
  62. fail "up did not explain the existing network subnet mismatch"
  63. [[ "${mismatch_output}" == *"destroy --yes"* ]] || \
  64. fail "up did not provide the network migration command"
  65. assert_exists "${STATE_DIR}/networks/sub2api-apple"
  66. assert_exists "${STATE_DIR}/containers/sub2api-apple"
  67. "${SCRIPT}" destroy --yes
  68. "${SCRIPT}" up
  69. "${SCRIPT}" destroy --volumes --yes
  70. assert_missing "${STATE_DIR}/volumes/sub2api-apple-data"
  71. assert_missing "${STATE_DIR}/volumes/sub2api-apple-postgres-data"
  72. assert_missing "${STATE_DIR}/volumes/sub2api-apple-redis-data"
  73. touch "${STATE_DIR}/system-running"
  74. touch "${STATE_DIR}/containers/sub2api-apple"
  75. touch "${STATE_DIR}/unowned/container/sub2api-apple"
  76. if "${SCRIPT}" status >/dev/null 2>&1; then
  77. fail "status accepted an unowned same-name container"
  78. fi
  79. printf 'Apple container lifecycle tests passed.\n'