summaryrefslogtreecommitdiff
path: root/testing/upgrade/run.sh
blob: 41d3bb07be7c784b1bf4b05c3563fc6ecd6d53d9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/bin/bash

CTNG=${CTNG-../../ct-ng}

current_tc=unknown
fails_tc=0
fails_total=0

fail()
{
    fails_tc=$[fails_tc + 1]
    fails_total=$[fails_total + 1]
}

finish()
{
    if [ "${fails_tc}" != 0 ]; then
        echo ">>>>> $current_tc: FAIL" >&2
    else
        echo ">>>>> $current_tc: PASS" >&2
    fi
    fails_tc=0
}

run_sample()
{
    local -A expect_set expect_unset
    local o v ln

    # Basename for logging
    exec {LOG}>"logs/${current_tc}.log"

    # Determine expected values
    while read ln; do
        case "${ln}" in
            "## "*"="*)
                ln=${ln#* }
                o=${ln%%=*}
                v=${ln#*=}
                expect_set[${o}]=${v}
                ;;
            "## "*" is not set")
                ln=${ln#* }
                o=${ln%% *}
                expect_unset[${o}]=1
                ;;
        esac
    done < "samples/${current_tc}.config"

    # Now run the upgrade
    echo ">>>> Running the config through an upgrade" >&${LOG}
    cp "samples/${current_tc}.config" .config
    ${CTNG} upgradeconfig >&${LOG} 2>&${LOG}
    echo >&${LOG}
    echo ">>>> Checking the config after the upgrade" >&${LOG}
    while read ln; do
        case "${ln}" in
            *"="*)
                o=${ln%%=*}
                v=${ln#*=}
                if [ "${expect_unset[${o}]+set}" = "set" ]; then
                    echo "Expect ${o} to be unset" >&${LOG}
                    echo "Actual value of ${o}: ${v}" >&${LOG}
                    fail
                elif [ "${expect_set[${o}]+set}" = "set" ]; then
                    if [ "${expect_set[${o}]}" != "${v}" ]; then
                        echo "Expect value of ${o}: ${expect_set[${o}]}" >&${LOG}
                        echo "Actual value of ${o}: ${v}" >&${LOG}
                        fail
                    else
                        echo "Matched value of ${o}: ${v}" >&${LOG}
                    fi
                fi
                unset expect_set[${o}]
                unset expect_unset[${o}]
                ;;
            "# "*" is not set")
                ln=${ln#* }
                o=${ln%% *}
                if [ "${expect_set[${o}]+set}" = "set" ]; then
                    echo "Expect value of ${o}: ${expect_set[${o}]}" >&${LOG}
                    echo "Actual ${o} is unset" >&${LOG}
                    fail
                elif [ "${expect_unset[${o}]+set}" = "set" ]; then
                    echo "Matched unset ${o}" >&${LOG}
                fi
                unset expect_set[${o}]
                unset expect_unset[${o}]
                ;;
        esac
    done < .config
    for o in "${!expect_set[@]}"; do
        echo "Expect value of ${o}: ${expect_set[${o}]}" >&${LOG}
        echo "Variable ${o} not present" >&${LOG}
        fail
    done
    for o in "${!expect_unset[@]}"; do
        echo "Expect ${o} being unset" >&${LOG}
        echo "Variable ${o} not present" >&${LOG}
        fail
    done
    exec {LOG}>&-
    finish
}

mkdir -p logs
for i in samples/*.config; do
    current_tc=${i#samples/}
    current_tc=${current_tc%.config}
    run_sample
done

if [ "${fails_total}" != 0 ]; then
    exit 1
fi
exit 0