#!/usr/bin/env bash

test_description='guardctrl'

. lib/test-lib.sh

if ! which chpst >/dev/null ; then
    echo " MISSING BINARY: chpst"
    echo " TEST SKIPPED"
    test_done
fi

export GUARD_HOST='localhost'
export GUARD_TARGET="${TMP_DIRECTORY}/target"
export GUARD_CHANFILE="${GUARD_TARGET}/chans"

mkdir -p "$GUARD_TARGET"/service

################################################################

test_expect_success "create node" \
    'guardctrl create TEST1'

test_begin_subtest "created node1 contents"
find ${TMP_DIRECTORY}/target/nodes/TEST1 \
    | sed "s|${GUARD_TARGET}|TARGET|" \
    | sort >OUTPUT
cat <<EOF >EXPECTED
TARGET/nodes/TEST1
TARGET/nodes/TEST1/down
TARGET/nodes/TEST1/env
TARGET/nodes/TEST1/env/GUARD_LOG_NOTIME
TARGET/nodes/TEST1/finish
TARGET/nodes/TEST1/guardian
TARGET/nodes/TEST1/log
TARGET/nodes/TEST1/log/config
TARGET/nodes/TEST1/log/main
TARGET/nodes/TEST1/log/run
TARGET/nodes/TEST1/log/supervise
TARGET/nodes/TEST1/run
TARGET/nodes/TEST1/supervise
EOF
test_expect_equal_file OUTPUT EXPECTED

test_begin_subtest "check log config link"
readlink ${TMP_DIRECTORY}/target/nodes/TEST1/log/main/config \
    | sed "s|${GUARD_TARGET}|TARGET|" >OUTPUT
cat <<EOF >EXPECTED
TARGET/nodes/TEST1/log/config
EOF
test_expect_equal_file OUTPUT EXPECTED

test_expect_success "create second node" \
    'guardctrl create TEST3'

test_begin_subtest "chan ini file"
cat <<EOF >EXPECTED
[default]
gain=1.00
datatype=4
ifoid=0
slope=6.1028e-05
acquire=3
offset=0
units=V
dcuid=4
datarate=16
[T1:GRD-TEST1_VERSION]
[T1:GRD-TEST1_EZCA]
[T1:GRD-TEST1_OP]
[T1:GRD-TEST1_MODE]
[T1:GRD-TEST1_STATUS]
[T1:GRD-TEST1_WORKER]
[T1:GRD-TEST1_LOAD_STATUS]
[T1:GRD-TEST1_ERROR]
[T1:GRD-TEST1_CONNECT]
[T1:GRD-TEST1_EXECTIME]
[T1:GRD-TEST1_STALLED]
[T1:GRD-TEST1_NOTIFICATION]
[T1:GRD-TEST1_NOMINAL_N]
[T1:GRD-TEST1_REQUEST_N]
[T1:GRD-TEST1_STATE_N]
[T1:GRD-TEST1_TARGET_N]
[T1:GRD-TEST1_OK]
[T1:GRD-TEST1_ARCHIVE_ID]
[T1:GRD-TEST1_TIME_UP]
[T1:GRD-TEST3_VERSION]
[T1:GRD-TEST3_EZCA]
[T1:GRD-TEST3_OP]
[T1:GRD-TEST3_MODE]
[T1:GRD-TEST3_STATUS]
[T1:GRD-TEST3_WORKER]
[T1:GRD-TEST3_LOAD_STATUS]
[T1:GRD-TEST3_ERROR]
[T1:GRD-TEST3_CONNECT]
[T1:GRD-TEST3_EXECTIME]
[T1:GRD-TEST3_STALLED]
[T1:GRD-TEST3_NOTIFICATION]
[T1:GRD-TEST3_NOMINAL_N]
[T1:GRD-TEST3_REQUEST_N]
[T1:GRD-TEST3_STATE_N]
[T1:GRD-TEST3_TARGET_N]
[T1:GRD-TEST3_OK]
[T1:GRD-TEST3_ARCHIVE_ID]
[T1:GRD-TEST3_TIME_UP]
EOF
test_expect_equal_file "$GUARD_CHANFILE" EXPECTED

test_expect_success "destroy node" \
    'guardctrl destroy TEST1'

test_begin_subtest "destroyed node contents"
guardctrl destroy TEST1
find ${TMP_DIRECTORY}/target/nodes/TEST1 \
    | sed "s|${GUARD_TARGET}|TARGET|" \
    | sort >OUTPUT
cat <<EOF >EXPECTED
EOF
test_expect_equal_file OUTPUT EXPECTED

test_begin_subtest "chan ini file"
cat <<EOF >EXPECTED
[default]
gain=1.00
datatype=4
ifoid=0
slope=6.1028e-05
acquire=3
offset=0
units=V
dcuid=4
datarate=16
[T1:GRD-TEST3_VERSION]
[T1:GRD-TEST3_EZCA]
[T1:GRD-TEST3_OP]
[T1:GRD-TEST3_MODE]
[T1:GRD-TEST3_STATUS]
[T1:GRD-TEST3_WORKER]
[T1:GRD-TEST3_LOAD_STATUS]
[T1:GRD-TEST3_ERROR]
[T1:GRD-TEST3_CONNECT]
[T1:GRD-TEST3_EXECTIME]
[T1:GRD-TEST3_STALLED]
[T1:GRD-TEST3_NOTIFICATION]
[T1:GRD-TEST3_NOMINAL_N]
[T1:GRD-TEST3_REQUEST_N]
[T1:GRD-TEST3_STATE_N]
[T1:GRD-TEST3_TARGET_N]
[T1:GRD-TEST3_OK]
[T1:GRD-TEST3_ARCHIVE_ID]
[T1:GRD-TEST3_TIME_UP]
EOF
test_expect_equal_file "$GUARD_CHANFILE" EXPECTED

test_expect_code 1 "node create fail non-existant node" \
    'guardctrl create TEST_FOO'

################################################################

test_done
