#!/usr/bin/env bash

test_description='guardutil/cli'

. lib/test-lib.sh

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

test_begin_subtest "print system info"
guardutil print TEST0 \
    | sed "s|$GUARD_MODULE_PATH|MOD_PATH|" >OUTPUT
cat <<EOF >EXPECTED
ifo: T1
name: TEST0
module:
  MOD_PATH/TEST0.py
CA prefix: 
nominal state: NONE
initial request: NONE
states (*=requestable):
    3 * C
    2   B
    1 * A
  -10   J
    0 * INIT
EOF
test_expect_equal_file OUTPUT EXPECTED

test_begin_subtest "print inherited system info"
guardutil print TEST1 \
    | sed "s|$GUARD_MODULE_PATH|MOD_PATH|" >OUTPUT
cat <<EOF >EXPECTED
ifo: T1
name: TEST1
module:
  MOD_PATH/TEST1.py
usercode:
  MOD_PATH/TEST0.py
CA prefix: TEST-
nominal state: D
initial request: A
states (*=requestable):
  100 * D
    3 * C
    2   B
    1 * A
  -10   J
    0 * INIT
EOF
test_expect_equal_file OUTPUT EXPECTED

test_begin_subtest "print system info, assigned indices"
guardutil print TEST_indices \
    | sed "s|$GUARD_MODULE_PATH|MOD_PATH|" >OUTPUT
cat <<EOF >EXPECTED
ifo: T1
name: TEST_indices
module:
  MOD_PATH/TEST_indices.py
CA prefix: 
nominal state: NONE
initial request: NONE
states (*=requestable):
  2382 * D
    10 * C
     1   B
   -10 * A
     0 * INIT
EOF
test_expect_equal_file OUTPUT EXPECTED

test_begin_subtest "print states"
guardutil states TEST1 \
    | sed "s|$GUARD_MODULE_PATH|MOD_PATH|" >OUTPUT
cat <<EOF >EXPECTED
100 D
  3 C
  2 B
  1 A
-10 J
  0 INIT
EOF
test_expect_equal_file OUTPUT EXPECTED

test_begin_subtest "print edges"
guardutil edges TEST1 \
    | sed "s|$GUARD_MODULE_PATH|MOD_PATH|" | sort >OUTPUT
cat <<EOF >EXPECTED
(A, B, 1)
(B, A, 1)
(B, C, 1)
(C, A, 1)
(C, D, 1)
(D, A, 1)
(INIT, A, 1)
(J, A, 1)
EOF
test_expect_equal_file OUTPUT EXPECTED

test_begin_subtest "print weighted edges"
guardutil edges TEST_multipath \
    | sed "s|$GUARD_MODULE_PATH|MOD_PATH|" | sort >OUTPUT
cat <<EOF >EXPECTED
(A, B1, 1)
(A, C1, 1)
(B1, B2, 1)
(B2, D, 1)
(C1, C2, 2)
(C2, D, 1)
EOF
test_expect_equal_file OUTPUT EXPECTED

test_begin_subtest "print path"
guardutil path TEST1 A D \
    | sed "s|$GUARD_MODULE_PATH|MOD_PATH|" >OUTPUT
cat <<EOF >EXPECTED
A
B
C
D
EOF
test_expect_equal_file OUTPUT EXPECTED

test_begin_subtest "print weighted path"
guardutil path TEST_multipath A D \
    | sed "s|$GUARD_MODULE_PATH|MOD_PATH|" >OUTPUT
cat <<EOF >EXPECTED
A
B1
B2
D
EOF
test_expect_equal_file OUTPUT EXPECTED

test_begin_subtest "print files"
guardutil files TEST1 \
    | sed "s|$GUARD_MODULE_PATH|MOD_PATH|" >OUTPUT
cat <<EOF >EXPECTED
MOD_PATH/TEST1.py
MOD_PATH/TEST0.py
EOF
test_expect_equal_file OUTPUT EXPECTED

# test_begin_subtest "print graph"
# guardutil graph -i -f dot TEST1 -o
# cat <<EOF >EXPECTED
# digraph G {
# 	graph [labelloc=t, rankdir=BT, label=<Guardian: TEST1>];
# 	node [label="\N"];
# 	graph [lp="67.5,475.5",
# 		bb="0,0,135,487"];
# 	{
# 		graph [rank=source,
# 			lp="",
# 			bb=""];
# 		INIT [label="INIT (0)", index=0, style=filled, code=<class 'TEST0.INIT'>, goto=False, color=black, request=True, shape=doublecircle, fillcolor="/set19/4", fontcolor=white, pos="67.5,52", width="1.4444", height="1.4444"];
# 	}
# 	{
# 		graph [rank=same,
# 			lp="",
# 			bb=""];
# 		A [label="A (1)", index=1, style=filled, code=<class 'TEST0.A'>, goto=True, color=black, request=True, shape=oval, fillcolor="/set19/3", fontcolor=white, pos="67.5,230", width="0.94444", height="0.5"];
# 	}
# 	{
# 		graph [lp="",
# 			bb=""];
# 		C [label="C (3)", index=3, style=filled, code=<class 'TEST0.C'>, goto=False, color=black, request=True, shape=oval, fillcolor="/set19/2", fontcolor=white, pos="67.5,374", width="0.94444", height="0.5"];
# 		B [label="B (2)", index=2, style=filled, code=<class 'TEST0.B'>, goto=False, color=black, request=False, shape=oval, fillcolor="/pastel19/2", fontcolor=grey30, pos="67.5,302", width="0.94444", height="0.5"];
# 		D [label="D (100)", index=100, style=filled, code=<class 'TEST1.D'>, goto=False, color=black, request=True, shape=oval, fillcolor="/set19/2", fontcolor=white, pos="67.5,446", width="1.3333", height="0.5"];
# 		J [label="J (-10)", index="-10", style=filled, code=<class 'TEST0.J'>, goto=False, color=black, request=False, shape=oval, fillcolor="/pastel19/2", fontcolor=grey30, pos="67.5,158", width="1.1389", height="0.5"];
# 	}
# 	A -> B [key=0, pos="e,67.5,283.59 67.5,248.17 67.5,255.87 67.5,265.03 67.5,273.58"];
# 	C -> D [key=0, pos="e,67.5,427.59 67.5,392.17 67.5,399.87 67.5,409.03 67.5,417.58"];
# 	B -> C [key=0, pos="e,67.5,355.59 67.5,320.17 67.5,327.87 67.5,337.03 67.5,345.58"];
# 	J -> A [key=0, pos="e,67.5,211.59 67.5,176.17 67.5,183.87 67.5,193.03 67.5,201.58"];
# }
# EOF
# test_expect_equal_file TEST1.dot EXPECTED

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

test_done
