#!/bin/bash

. ./tests/docker/test-setup-sonobuoy

# ---

cluster-pre-hook() {
  mkdir -p $TEST_DIR/db/$LABEL_SUFFIX/metadata
  local testID=$(basename $TEST_DIR)
  local name=$(echo ${LABEL_SUFFIX}-${testID,,} | tee $TEST_DIR/db/$LABEL_SUFFIX/metadata/name)
  local port=$(timeout --foreground 5s bash -c get-port | tee $TEST_DIR/db/$LABEL_SUFFIX/metadata/port)
  local secret=$(echo "${RANDOM}${RANDOM}${RANDOM}" | tee $TEST_DIR/db/$LABEL_SUFFIX/metadata/secret)

  docker run --name $name \
    --privileged \
    -p 0.0.0.0:$port:3306 \
    -e MYSQL_ROOT_PASSWORD=$secret \
    -e MYSQL_ROOT_HOST=% \
    -d mysql:latest \
    >/dev/null

  local ip=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' $name | tee $TEST_DIR/db/$LABEL_SUFFIX/metadata/ip)
  # local host=host.docker.internal
  local host=172.17.0.1

  DB_CONNECTION_TEST="
    docker run
      --rm mysql
      mysql
        -h$host
        -P$port
        -uroot
        -p$secret
        -e status" \
    timeout --foreground 1m bash -c "wait-for-db-connection"

  echo "Started $LABEL_SUFFIX db @ $host"
  export SERVER_ARGS="${SERVER_ARGS}
    --datastore-endpoint=mysql://root:$secret@tcp($host:$port)/testdb
  "
}
export -f cluster-pre-hook

test-post-hook() {
  if [[ $1 -eq 0 ]] || [[ ! -f "$TEST_DIR/sonobuoy/plugins/e2e/results/global/e2e.log" ]]; then
    return $1
  fi
  local failures=$(awk '/^Summarizing .* Failures?:$/,0' "$TEST_DIR/sonobuoy/plugins/e2e/results/global/e2e.log")
  # Ignore sonobuoy failures if only these flaky tests have failed
  flakyFails=$( grep -scF -f ./tests/docker/flaky-tests <<< "$failures" )
  totalFails=$( grep -scF -e "[Fail]" <<< "$failures" )
  [ "$totalFails" -le "$flakyFails" ]
}
export -f test-post-hook
