#!/bin/bash
# Place the scripts in run order:

export DB_USER=pmsh
export DB_PASSWORD=pmsh

TEST_PLANS_DIR=$WORKSPACE/plans/dcaegen2-services-pmsh/testsuite

docker-compose -f ${TEST_PLANS_DIR}/docker-compose.yml up -d db aai cbs-sim mr-sim

# Slow machine running CSITs can affect db coming up in time for PMSH
echo "Waiting for postgres db to come up..."
for i in {1..30}; do
    docker exec -i db bash -c "PGPASSWORD=$DB_PASSWORD;psql -U $DB_USER  -c '\q'"
    db_response=$?
    if [[ "$db_response" == "0" ]]
    then
      break
    else
      sleep 2
    fi
done
[[ "$db_response" != "0" ]] && echo "Error: postgres db not accessible" && exit 1

docker-compose -f ${TEST_PLANS_DIR}/docker-compose.yml up -d pmsh

PMSH_IP=$(docker inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" pmsh)

# Slow machine running CSITs can affect PMSH coming up before CSITs are run
echo "Waiting for PMSH to come up..."
for i in {1..30}; do
    pmsh_response=$(curl -k -s -o /dev/null -w "%{http_code}" https://${PMSH_IP}:8443/healthcheck)
    if [[ "$pmsh_response" == "200" ]]
    then
      break
    else
      sleep 2
    fi
done
[[ "$pmsh_response" != "200" ]] && echo "Error: PMSH container state not healthy" && exit 1

# Set log level to DEBUG
docker exec pmsh /bin/sh -c "cat > log_config.yaml <<EOF
version: 1

disable_existing_loggers: true

loggers:
  onap_logger:
    level: DEBUG
    handlers: [onap_log_handler, stdout_handler]
    propagate: false
handlers:
  onap_log_handler:
    class: logging.handlers.RotatingFileHandler
    filename: /var/log/ONAP/dcaegen2/services/pmsh/application.log
    mode: a
    maxBytes: 10000000
    backupCount: 10
    formatter: mdcFormatter
  stdout_handler:
    class: logging.StreamHandler
    formatter: mdcFormatter
formatters:
  mdcFormatter:
    format: '%(asctime)s | %(threadName)s | %(thread)d | %(levelname)s | %(module)s
      | %(funcName)s | %(mdc)s | %(message)s'
    mdcfmt: '{ServiceName} | {RequestID} | {InvocationID}'
    datefmt: '%Y-%m-%dT%H:%M:%S%z'
    (): onaplogging.mdcformatter.MDCFormatter
EOF"

# Wait for initialization of Docker containers
containers_ok="false"
for i in {0..5}; do
    if [[ "$containers_ok" == "true" ]]
    then
        echo "All required docker containers are up."
        break
    else
        sleep ${i}
    fi
    if [[ $(docker inspect --format '{{ .State.Running }}' cbs-sim) ]] && \
       [[ $(docker inspect --format '{{ .State.Running }}' aai-sim) ]] && \
       [[ $(docker inspect --format '{{ .State.Running }}' mr-sim) ]] && \
       [[ $(docker inspect --format '{{ .State.Running }}' db) ]] && \
       [[ $(docker inspect --format '{{ .State.Running }}' pmsh) ]]
    then
        containers_ok="true"
    fi
done
[[ "$containers_ok" == "false" ]] && echo "Error: required container not running." && exit 1

DB_IP_ADDRESS=$(docker inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" db)
MR_SIM_IP_ADDRESS=$(docker inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" mr-sim)
CBS_SIM_IP_ADDRESS=$(docker inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" cbs-sim)

#Pass any variables required by Robot test suites in ROBOT_VARIABLES
ROBOT_VARIABLES="-v PMSH_IP:${PMSH_IP} -v MR_SIM_IP_ADDRESS:${MR_SIM_IP_ADDRESS} -v DB_IP_ADDRESS:${DB_IP_ADDRESS} -v CBS_SIM_IP_ADDRESS:${CBS_SIM_IP_ADDRESS}"
