#!/bin/bash
#-----------------------
# Testing neutron-api
#-----------------------
set -e

mysql -u root << EOF
DROP DATABASE IF EXISTS neutron;
DROP USER IF EXISTS 'neutron'@'localhost';
DROP USER IF EXISTS 'neutron'@'%';
CREATE DATABASE neutron;
CREATE USER 'neutron'@'localhost' IDENTIFIED BY 'changeme';
CREATE USER 'neutron'@'%'         IDENTIFIED BY 'changeme';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%';
EOF

crudini --set /etc/neutron/neutron.conf database connection mysql+pymysql://neutron:changeme@localhost/neutron
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 type_drivers local
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 mechanism_drivers ovn
neutron-db-manage upgrade head

# Permit remote database access
ovn-nbctl set-connection ptcp:6641:0.0.0.0 -- \
          set connection . inactivity_probe=60000
ovn-sbctl set-connection ptcp:6642:0.0.0.0 -- \
          set connection . inactivity_probe=60000

DAEMONS=(
    'apache2'
    'neutron-ovn-maintenance-worker'
    'neutron-periodic-workers'
    'neutron-rpc-server'
)
for daemon in "${DAEMONS[@]}"; do
    service $daemon restart
    TIMEOUT=50
    echo -n "Checking ${daemon} ... "
    while [ "$TIMEOUT" -gt 0 ]; do
        if service $daemon status > /dev/null; then
            echo "OK"
            break
        fi
        TIMEOUT=$((TIMEOUT - 1))
        sleep 0.5
    done

    if [ "$TIMEOUT" -le 0 ]; then
        echo "ERROR: ${daemon} IS NOT RUNNING"
        cat /var/log/neutron/*.log
        exit 1
    fi
done

echo -n "Checking neutron-api endpoint ... "
HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:9696/)

if [ "$HTTP_STATUS" -eq 200 ]; then
    echo "OK (received HTTP $HTTP_STATUS)"
else
    echo "ERROR: Unexpected response code ($HTTP_STATUS)"
    exit 1
fi
