-
Notifications
You must be signed in to change notification settings - Fork 24
Expand file tree
/
Copy pathdatabox-test
More file actions
executable file
·184 lines (142 loc) · 11.3 KB
/
databox-test
File metadata and controls
executable file
·184 lines (142 loc) · 11.3 KB
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
#!/bin/bash
#Some bad default password for testing
UI_AUTH_TOKEN="Some_bad_default_password_for_testing"
#Default test command from first argument HOST_ARCH form second
HOST_ARCH=${3}
DATABOX_COMMAND="${1} start ${2} --password ${UI_AUTH_TOKEN}"
DATABOX_STOP_COMMAND="${1} stop"
DATABOX_SLA_REG=${4}
DATABOX_VERSION=${5}
echo $DATABOX_COMMAND
function d_curl () { docker run --network host --rm -v $(pwd):/data databoxsystems/curl-7.61.0-r0:latest "$@" ;}
function red {
echo "\033[0;31m${1}\033[0m"
}
function green {
echo "\033[0;32m${1}\033[0m"
}
function fail {
echo -e "[$( red FAILED )] ${1} \nERROR: ${2}"
#output debug information
echo "docker version:"
docker version
echo "docker ps "
docker ps
echo "docker image ls "
docker image ls | grep databox
echo "docker service ls "
docker service ls
echo "service logs databox_container-manager "
docker service logs container-manager
echo "service logs core-ui "
docker service logs core-ui
echo "logs databox-network "
docker logs databox-network
exit 1
}
function success {
echo -e "[$( green OK )] $1"
}
function test_assert {
if [ "$1" != "$2" ]
then
fail "$3" "$1"
else
success "$3"
fi
}
function test_assert_contains {
if [[ "$1" != *"$2"* ]]
then
fail "$3" "$1"
else
success "$3"
fi
}
function install_osmon_app_and_driver {
#function to install app driver pair
#can we install the OS monitor driver
PAYLOAD="{\"manifest\":{\"manifest-version\":1,\"name\":\"driver-os-monitor\",\"databox-type\":\"driver\",\"version\":\"0.3.0\",\"description\":\"A Databox driver to monitor the local os\",\"author\":\"Anthony Brown <Anthony.Brown@nottingham.ac.uk> ()\",\"license\":\"MIT\",\"tags\":[\"monitor\",\"os\"],\"homepage\":\"https://github.com/me-box/driver-os-monitor\",\"repository\":{\"Type\":\"git\",\"url\":\"git+https://github.com/me-box/driver-os-monitor.git\"},\"packages\":null,\"datasources\":null,\"export-whitelist\":null,\"external-whitelist\":null,\"resource-requirements\":{\"store\":\"core-store\"},\"displayName\":\"\",\"storeUrl\":\"\"}}"
RES=$(d_curl -s --insecure --http1.1 --cookie /data/databox-jar -H "Content-Type: application/json" -X POST -d "${PAYLOAD}" -L 'https://127.0.0.1/core-ui/ui/api/install')
EXPECTED='{"status": 200}'
test_assert "$RES" "$EXPECTED" "Can we install the driver-os-monitor?"
#can we install the OS monitor app
PAYLOAD="{\"manifest\":{\"manifest-version\":1,\"name\":\"app-os-monitor\",\"databox-type\":\"app\",\"version\":\"0.3.0\",\"description\":\"An app in golang to plot the output of the os monitor driver.\",\"author\":\"Tosh Brown <Anthony.Brown@nottingham.ac.uk>\",\"license\":\"MIT\",\"tags\":[\"template\",\"app\",\"nodejs\"],\"homepage\":\"https://github.com/me-box/app-os-monitor\",\"repository\":{\"Type\":\"git\",\"url\":\"git+https://github.com/me-box/app-os-monitor\"},\"packages\":[{\"name\":\"OS monitor Plotter\",\"purpose\":\"To visualize your databox load and free memory\",\"install\":\"required\",\"risks\":\"None.\",\"benefits\":\"You can see the data!\",\"datastores\":[\"loadavg1\",\"loadavg5\",\"loadavg15\",\"freemem\",\"loadavg1Structured\",\"freememStructured\"]}],\"datasources\":[{\"type\":\"loadavg1\",\"required\":true,\"name\":\"loadavg1\",\"clientid\":\"loadavg1\",\"granularities\":[],\"hypercat\":{\"item-metadata\":[{\"rel\":\"urn:X-hypercat:rels:hasDescription:en\",\"val\":\"Databox load average 1 minute\"},{\"rel\":\"urn:X-hypercat:rels:isContentType\",\"val\":\"application/json\"},{\"rel\":\"urn:X-databox:rels:hasVendor\",\"val\":\"Databox Inc.\"},{\"rel\":\"urn:X-databox:rels:hasType\",\"val\":\"loadavg1\"},{\"rel\":\"urn:X-databox:rels:hasDatasourceid\",\"val\":\"loadavg1\"},{\"rel\":\"urn:X-databox:rels:hasStoreType\",\"val\":\"ts\"},{\"rel\":\"urn:X-databox:rels:hasUnit\",\"val\":\"%\"}],\"href\":\"tcp://driver-os-monitor-core-store:5555/ts/blob/loadavg1\"}},{\"type\":\"loadavg5\",\"required\":true,\"name\":\"loadavg5\",\"clientid\":\"loadavg5\",\"granularities\":[],\"hypercat\":{\"item-metadata\":[{\"rel\":\"urn:X-hypercat:rels:hasDescription:en\",\"val\":\"Databox load average over 5 minutes\"},{\"rel\":\"urn:X-hypercat:rels:isContentType\",\"val\":\"application/json\"},{\"rel\":\"urn:X-databox:rels:hasVendor\",\"val\":\"Databox Inc.\"},{\"rel\":\"urn:X-databox:rels:hasType\",\"val\":\"loadavg5\"},{\"rel\":\"urn:X-databox:rels:hasDatasourceid\",\"val\":\"loadavg5\"},{\"rel\":\"urn:X-databox:rels:hasStoreType\",\"val\":\"ts\"},{\"rel\":\"urn:X-databox:rels:hasUnit\",\"val\":\"%\"}],\"href\":\"tcp://driver-os-monitor-core-store:5555/ts/blob/loadavg5\"}},{\"type\":\"loadavg15\",\"required\":true,\"name\":\"loadavg15\",\"clientid\":\"loadavg15\",\"granularities\":[],\"hypercat\":{\"item-metadata\":[{\"rel\":\"urn:X-hypercat:rels:hasDescription:en\",\"val\":\"Databox load average over 15 minutes\"},{\"rel\":\"urn:X-hypercat:rels:isContentType\",\"val\":\"application/json\"},{\"rel\":\"urn:X-databox:rels:hasVendor\",\"val\":\"Databox Inc.\"},{\"rel\":\"urn:X-databox:rels:hasType\",\"val\":\"loadavg15\"},{\"rel\":\"urn:X-databox:rels:hasDatasourceid\",\"val\":\"loadavg15\"},{\"rel\":\"urn:X-databox:rels:hasStoreType\",\"val\":\"ts\"},{\"rel\":\"urn:X-databox:rels:hasUnit\",\"val\":\"%\"}],\"href\":\"tcp://driver-os-monitor-core-store:5555/ts/blob/loadavg15\"}},{\"type\":\"freemem\",\"required\":true,\"name\":\"freemem\",\"clientid\":\"freemem\",\"granularities\":[],\"hypercat\":{\"item-metadata\":[{\"rel\":\"urn:X-hypercat:rels:hasDescription:en\",\"val\":\"Databox free memory in bytes\"},{\"rel\":\"urn:X-hypercat:rels:isContentType\",\"val\":\"application/json\"},{\"rel\":\"urn:X-databox:rels:hasVendor\",\"val\":\"Databox Inc.\"},{\"rel\":\"urn:X-databox:rels:hasType\",\"val\":\"freemem\"},{\"rel\":\"urn:X-databox:rels:hasDatasourceid\",\"val\":\"freemem\"},{\"rel\":\"urn:X-databox:rels:hasStoreType\",\"val\":\"ts\"},{\"rel\":\"urn:X-databox:rels:hasUnit\",\"val\":\"bytes\"}],\"href\":\"tcp://driver-os-monitor-core-store:5555/ts/blob/freemem\"}},{\"type\":\"loadavg1Structured\",\"required\":true,\"name\":\"loadavg1Structured\",\"clientid\":\"loadavg1Structured\",\"granularities\":[],\"hypercat\":{\"item-metadata\":[{\"rel\":\"urn:X-hypercat:rels:hasDescription:en\",\"val\":\"Databox load average 1 minute structured\"},{\"rel\":\"urn:X-hypercat:rels:isContentType\",\"val\":\"application/json\"},{\"rel\":\"urn:X-databox:rels:hasVendor\",\"val\":\"Databox Inc.\"},{\"rel\":\"urn:X-databox:rels:hasType\",\"val\":\"loadavg1Structured\"},{\"rel\":\"urn:X-databox:rels:hasDatasourceid\",\"val\":\"loadavg1Structured\"},{\"rel\":\"urn:X-databox:rels:hasStoreType\",\"val\":\"ts\"},{\"rel\":\"urn:X-databox:rels:hasUnit\",\"val\":\"%\"}],\"href\":\"tcp://driver-os-monitor-core-store:5555/ts/loadavg1Structured\"}},{\"type\":\"freememStructured\",\"required\":true,\"name\":\"freememStructured\",\"clientid\":\"freememStructured\",\"granularities\":[],\"hypercat\":{\"item-metadata\":[{\"rel\":\"urn:X-hypercat:rels:hasDescription:en\",\"val\":\"Databox free memory in bytes structured\"},{\"rel\":\"urn:X-hypercat:rels:isContentType\",\"val\":\"application/json\"},{\"rel\":\"urn:X-databox:rels:hasVendor\",\"val\":\"Databox Inc.\"},{\"rel\":\"urn:X-databox:rels:hasType\",\"val\":\"freememStructured\"},{\"rel\":\"urn:X-databox:rels:hasDatasourceid\",\"val\":\"freememStructured\"},{\"rel\":\"urn:X-databox:rels:hasStoreType\",\"val\":\"ts\"},{\"rel\":\"urn:X-databox:rels:hasUnit\",\"val\":\"bytes\"}],\"href\":\"tcp://driver-os-monitor-core-store:5555/ts/freememStructured\"}}],\"export-whitelist\":[{\"url\":\"https://export.amar.io/\",\"description\":\"Exports the data to amar.io\"}],\"external-whitelist\":null,\"resource-requirements\":{\"store\":\"\"},\"displayName\":\"\",\"storeUrl\":\"\"}}"
RES=$(d_curl -s --insecure --http1.1 --cookie /data/databox-jar -H 'Content-Type: application/json' -X POST -d "${PAYLOAD}" -L 'https://127.0.0.1/core-ui/ui/api/install')
EXPECTED='{"status": 200}'
test_assert "$RES" "$EXPECTED" "Can we install the app-os-monitor?"
}
function test_app_os_monitor {
#Function test if app-os-monitor is running and can get data from the store
#is the OS monitor app up
STATUS=$(d_curl -s --insecure --http1.1 --cookie /data/databox-jar -w "%{http_code}\\n" "https://127.0.0.1/app-os-monitor/ui/mem.png" -o /dev/null)
test_assert "$STATUS" 200 "Is the app-os-monitor/ui available? ${1} test."
#is the OS monitor app able to get data
RES=$(d_curl -s --insecure --http1.1 --cookie /data/databox-jar -H 'Content-Type: application/json' -L 'https://127.0.0.1/app-os-monitor/ui/stats')
EXPECTED='"mem":{"min":'
test_assert_contains "$RES" "$EXPECTED" "Can we get data from app-os-monitor? ${1} test."
}
function setup_auth_cookie {
STATUS=$(d_curl -sL --cookie-jar /data/databox-jar -H "authorization:Token ${UI_AUTH_TOKEN}" --insecure --http1.1 -w "%{http_code}\\n" "https://127.0.0.1/api/connect" -o /dev/null)
test_assert $STATUS 200 "Is /api/connect available?"
}
#Start databox
$DATABOX_STOP_COMMAND
$DATABOX_COMMAND --flushSLAs &>/dev/null &
rm -rf ./databox-jar > /dev/null
echo "Sleeping...."
sleep 80
docker ps
#setup the auth cookie
setup_auth_cookie
#can we see the CM UI
STATUS=$(d_curl -sL --cookie /data/databox-jar --insecure --http1.1 -w "%{http_code}\\n" "https://127.0.0.1/" -o /dev/null)
test_assert $STATUS 200 "Is core-ui available?"
#TODO are the core-ui data endpoints working
#first install of the app and driver
install_osmon_app_and_driver
#first test of the app
sleep 120 # long sleep to wait for images to be pulled if needed!
test_app_os_monitor "first"
#Can we restart driver-os-monitor
PAYLOAD='{"name":"driver-os-monitor"}'
RES=$(d_curl -s --insecure --http1.1 --cookie /data/databox-jar -H 'Content-Type: application/json' -X POST -d "${PAYLOAD}" -L 'https://127.0.0.1/core-ui/ui/api/restart')
EXPECTED='{"status": 200}'
test_assert "$RES" "$EXPECTED" "Can we restart driver-os-monitor?"
#Can we restart app-os-monitor
PAYLOAD='{"name":"app-os-monitor"}'
RES=$(d_curl -s --insecure --http1.1 --cookie /data/databox-jar -H 'Content-Type: application/json' -X POST -d "${PAYLOAD}" -L 'https://127.0.0.1/core-ui/ui/api/restart')
EXPECTED='{"status": 200}'
test_assert "$RES" "$EXPECTED" "Can we restart app-os-monitor?"
#second test of the app
sleep 120
test_app_os_monitor "second"
#Can we uninstall driver-os-monitor
PAYLOAD='{"name":"driver-os-monitor"}'
RES=$(d_curl -s --insecure --http1.1 --cookie /data/databox-jar -H 'Content-Type: application/json' -X POST -d "${PAYLOAD}" -L 'https://127.0.0.1/core-ui/ui/api/uninstall')
EXPECTED='{"status": 200}'
test_assert "$RES" "$EXPECTED" "Can we uninstall driver-os-monitor?"
#Can we uninstall app-os-monitor
PAYLOAD='{"name":"app-os-monitor"}'
RES=$(d_curl -s --insecure --http1.1 --cookie /data/databox-jar -H 'Content-Type: application/json' -X POST -d "${PAYLOAD}" -L 'https://127.0.0.1/core-ui/ui/api/uninstall')
EXPECTED='{"status": 200}'
test_assert "$RES" "$EXPECTED" "Can we uninstall app-os-monitor?"
sleep 120
#can we reinstall os-monitor the app and driver
install_osmon_app_and_driver
#second test of the app
sleep 120
test_app_os_monitor "third"
#
# TEST app and driver persistence
#
echo "Stopping databox"
$DATABOX_STOP_COMMAND
echo "Restarting databox"
$DATABOX_COMMAND &>/dev/null &
sleep 180
#restarting databox clears session token get a new one
setup_auth_cookie
#fourth test of the app
test_app_os_monitor "fourth"
exit 0