bitbucket.org/Aishee/synsec@v0.0.0-20210414005726-236fc01a153d/scripts/func_tests/tests_post-install_99ip_mgmt.sh (about) 1 #! /usr/bin/env bash 2 # -*- coding: utf-8 -*- 3 4 5 source tests_base.sh 6 7 8 # Codes 9 RED='\033[0;31m' 10 GREEN='\033[0;32m' 11 NC='\033[0m' 12 OK_STR="${GREEN}OK${NC}" 13 FAIL_STR="${RED}FAIL${NC}" 14 15 16 SYNSEC_API_URL="http://localhost:8081" 17 SYNSEC_VERSION="" 18 API_KEY="" 19 20 RELEASE_FOLDER_FULL="" 21 FAILED="false" 22 MUST_FAIL="false" 23 24 ### Helpers 25 function docurl 26 { 27 URI=$1 28 curl -s -H "X-Api-Key: ${API_KEY}" "${SYNSEC_API_URL}${URI}" 29 } 30 31 function bouncer_echo { 32 if [[ ${FAILED} == "false" ]]; 33 then 34 echo -e "[bouncer] $1: ${OK_STR}" 35 else 36 echo -e "[bouncer] $1: ${FAIL_STR}" 37 fi 38 FAILED="false" 39 } 40 41 function ccscli_echo { 42 if [[ ${FAILED} == "false" ]]; 43 then 44 echo -e "[ccscli] $1: ${OK_STR}" 45 else 46 echo -e "[ccscli] $1: ${FAIL_STR}" 47 fi 48 FAILED="false" 49 } 50 51 function test_ipv4_ip 52 { 53 echo "" 54 echo "##########################################" 55 echo "$FUNCNAME" 56 echo "##########################################" 57 echo "" 58 59 ${CCSCLI} decisions list -o json | ${JQ} '. == null' > /dev/null || fail 60 ccscli_echo "first decisions list" 61 62 docurl /v1/decisions | ${JQ} '. == null' > /dev/null || fail 63 bouncer_echo "first bouncer decisions request (must be empty)" 64 65 #add ip decision 66 echo "adding decision for 1.2.3.4" 67 ${CCSCLI} decisions add -i 1.2.3.4 > /dev/null 2>&1 || fail 68 69 ${CCSCLI} decisions list -o json | ${JQ} '.[].decisions[0].value == "1.2.3.4"' > /dev/null || fail 70 ccscli_echo "getting all decision" 71 72 docurl /v1/decisions | ${JQ} '.[0].value == "1.2.3.4"' > /dev/null || fail 73 bouncer_echo "getting all decision" 74 75 #check ip match 76 ${CCSCLI} decisions list -i 1.2.3.4 -o json | ${JQ} '.[].decisions[0].value == "1.2.3.4"' > /dev/null || fail 77 ccscli_echo "getting decision for 1.2.3.4" 78 79 docurl /v1/decisions?ip=1.2.3.4 | ${JQ} '.[0].value == "1.2.3.4"' > /dev/null || fail 80 bouncer_echo "getting decision for 1.2.3.4" 81 82 ${CCSCLI} decisions list -i 1.2.3.5 -o json | ${JQ} '. == null' > /dev/null || fail 83 ccscli_echo "getting decision for 1.2.3.5" 84 85 docurl /v1/decisions?ip=1.2.3.5 | ${JQ} '. == null' > /dev/null || fail 86 bouncer_echo "getting decision for 1.2.3.5" 87 88 #check outer range match 89 ${CCSCLI} decisions list -r 1.2.3.0/24 -o json | ${JQ} '. == null' > /dev/null || fail 90 ccscli_echo "getting decision for 1.2.3.0/24" 91 92 docurl "/v1/decisions?range=1.2.3.0/24" | ${JQ} '. == null' > /dev/null || fail 93 bouncer_echo "getting decision for 1.2.3.0/24" 94 95 ${CCSCLI} decisions list -r 1.2.3.0/24 --contained -o json |${JQ} '.[].decisions[0].value == "1.2.3.4"' > /dev/null || fail 96 ccscli_echo "getting decisions where IP in 1.2.3.0/24" 97 98 docurl "/v1/decisions?range=1.2.3.0/24&contains=false" | ${JQ} '.[0].value == "1.2.3.4"' > /dev/null || fail 99 bouncer_echo "getting decisions where IP in 1.2.3.0/24" 100 101 } 102 103 function test_ipv4_range 104 { 105 echo "" 106 echo "##########################################" 107 echo "$FUNCNAME" 108 echo "##########################################" 109 echo "" 110 111 112 ccscli_echo "adding decision for range 4.4.4.0/24" 113 ${CCSCLI} decisions add -r 4.4.4.0/24 > /dev/null 2>&1 || fail 114 115 ${CCSCLI} decisions list -o json | ${JQ} '.[0].decisions[0].value == "4.4.4.0/24", .[1].decisions[0].value == "1.2.3.4"'> /dev/null || fail 116 ccscli_echo "getting all decision" 117 118 docurl ${APIK} "/v1/decisions" | ${JQ} '.[0].value == "1.2.3.4", .[1].value == "4.4.4.0/24"'> /dev/null || fail 119 bouncer_echo "getting all decision" 120 121 #check ip within/outside of range 122 ${CCSCLI} decisions list -i 4.4.4.3 -o json | ${JQ} '.[].decisions[0].value == "4.4.4.0/24"' > /dev/null || fail 123 ccscli_echo "getting decisions for ip 4.4.4." 124 125 docurl ${APIK} "/v1/decisions?ip=4.4.4.3" | ${JQ} '.[0].value == "4.4.4.0/24"' > /dev/null || fail 126 bouncer_echo "getting decisions for ip 4.4.4." 127 128 ${CCSCLI} decisions list -i 4.4.4.4 -o json --contained | ${JQ} '. == null'> /dev/null || fail 129 ccscli_echo "getting decisions for ip contained in 4.4.4." 130 131 docurl ${APIK} "/v1/decisions?ip=4.4.4.4&contains=false" | ${JQ} '. == null' > /dev/null || fail 132 bouncer_echo "getting decisions for ip contained in 4.4.4." 133 134 ${CCSCLI} decisions list -i 5.4.4.3 -o json | ${JQ} '. == null' > /dev/null || fail 135 ccscli_echo "getting decisions for ip 5.4.4." 136 137 docurl ${APIK} "/v1/decisions?ip=5.4.4.3" | ${JQ} '. == null' > /dev/null || fail 138 bouncer_echo "getting decisions for ip 5.4.4." 139 140 ${CCSCLI} decisions list -r 4.4.0.0/16 -o json | ${JQ} '. == null' > /dev/null || fail 141 ccscli_echo "getting decisions for range 4.4.0.0/1" 142 143 docurl ${APIK} "/v1/decisions?range=4.4.0.0/16" | ${JQ} '. == null' > /dev/null || fail 144 bouncer_echo "getting decisions for range 4.4.0.0/1" 145 146 ${CCSCLI} decisions list -r 4.4.0.0/16 -o json --contained | ${JQ} '.[].decisions[0].value == "4.4.4.0/24"' > /dev/null || fail 147 ccscli_echo "getting decisions for ip/range in 4.4.0.0/1" 148 149 docurl ${APIK} "/v1/decisions?range=4.4.0.0/16&contains=false" | ${JQ} '.[0].value == "4.4.4.0/24"' > /dev/null || fail 150 bouncer_echo "getting decisions for ip/range in 4.4.0.0/1" 151 152 #check subrange 153 ${CCSCLI} decisions list -r 4.4.4.2/28 -o json | ${JQ} '.[].decisions[0].value == "4.4.4.0/24"' > /dev/null || fail 154 ccscli_echo "getting decisions for range 4.4.4.2/2" 155 156 docurl ${APIK} "/v1/decisions?range=4.4.4.2/28" | ${JQ} '.[].value == "4.4.4.0/24"' > /dev/null || fail 157 bouncer_echo "getting decisions for range 4.4.4.2/2" 158 159 ${CCSCLI} decisions list -r 4.4.3.2/28 -o json | ${JQ} '. == null' > /dev/null || fail 160 ccscli_echo "getting decisions for range 4.4.3.2/2" 161 162 docurl ${APIK} "/v1/decisions?range=4.4.3.2/28" | ${JQ} '. == null' > /dev/null || fail 163 bouncer_echo "getting decisions for range 4.4.3.2/2" 164 165 } 166 167 function test_ipv6_ip 168 { 169 170 echo "" 171 echo "##########################################" 172 echo "$FUNCNAME" 173 echo "##########################################" 174 echo "" 175 176 ccscli_echo "adding decision for ip 1111:2222:3333:4444:5555:6666:7777:8888" 177 ${CCSCLI} decisions add -i 1111:2222:3333:4444:5555:6666:7777:8888 > /dev/null 2>&1 178 179 ${CCSCLI} decisions list -o json | ${JQ} '.[].decisions[0].value == "1111:2222:3333:4444:5555:6666:7777:8888"' > /dev/null || fail 180 ccscli_echo "getting all decision" 181 182 docurl ${APIK} "/v1/decisions" | ${JQ} '.[].value == "1111:2222:3333:4444:5555:6666:7777:8888"' > /dev/null || fail 183 bouncer_echo "getting all decision" 184 185 ${CCSCLI} decisions list -i 1111:2222:3333:4444:5555:6666:7777:8888 -o json | ${JQ} '.[].decisions[0].value == "1111:2222:3333:4444:5555:6666:7777:8888"' > /dev/null || fail 186 ccscli_echo "getting decisions for ip 1111:2222:3333:4444:5555:6666:7777:8888" 187 188 docurl ${APIK} "/v1/decisions?ip=1111:2222:3333:4444:5555:6666:7777:8888" | ${JQ} '.[].value == "1111:2222:3333:4444:5555:6666:7777:8888"' > /dev/null || fail 189 bouncer_echo "getting decisions for ip 1111:2222:3333:4444:5555:6666:7777:888" 190 191 ${CCSCLI} decisions list -i 1211:2222:3333:4444:5555:6666:7777:8888 -o json | ${JQ} '. == null' > /dev/null || fail 192 ccscli_echo "getting decisions for ip 1211:2222:3333:4444:5555:6666:7777:8888" 193 194 docurl ${APIK} "/v1/decisions?ip=1211:2222:3333:4444:5555:6666:7777:8888" | ${JQ} '. == null' > /dev/null || fail 195 bouncer_echo "getting decisions for ip 1211:2222:3333:4444:5555:6666:7777:888" 196 197 ${CCSCLI} decisions list -i 1111:2222:3333:4444:5555:6666:7777:8887 -o json | ${JQ} '. == null' > /dev/null || fail 198 ccscli_echo "getting decisions for ip 1111:2222:3333:4444:5555:6666:7777:8887" 199 200 docurl ${APIK} "/v1/decisions?ip=1111:2222:3333:4444:5555:6666:7777:8887" | ${JQ} '. == null' > /dev/null || fail 201 bouncer_echo "getting decisions for ip 1111:2222:3333:4444:5555:6666:7777:888" 202 203 ${CCSCLI} decisions list -r 1111:2222:3333:4444:5555:6666:7777:8888/48 -o json | ${JQ} '. == null' > /dev/null || fail 204 ccscli_echo "getting decisions for range 1111:2222:3333:4444:5555:6666:7777:8888/48" 205 206 docurl ${APIK} "/v1/decisions?range=1111:2222:3333:4444:5555:6666:7777:8888/48" | ${JQ} '. == null' > /dev/null || fail 207 bouncer_echo "getting decisions for range 1111:2222:3333:4444:5555:6666:7777:8888/48" 208 209 ${CCSCLI} decisions list -r 1111:2222:3333:4444:5555:6666:7777:8888/48 --contained -o json | ${JQ} '.[].decisions[0].value == "1111:2222:3333:4444:5555:6666:7777:8888"' > /dev/null || fail 210 ccscli_echo "getting decisions for ip/range in range 1111:2222:3333:4444:5555:6666:7777:8888/48" 211 212 docurl ${APIK} "/v1/decisions?range=1111:2222:3333:4444:5555:6666:7777:8888/48&&contains=false" | ${JQ} '.[].value == "1111:2222:3333:4444:5555:6666:7777:8888"' > /dev/null || fail 213 bouncer_echo "getting decisions for ip/range in 1111:2222:3333:4444:5555:6666:7777:8888/48" 214 215 ${CCSCLI} decisions list -r 1111:2222:3333:4444:5555:6666:7777:8888/64 -o json | ${JQ} '. == null' > /dev/null || fail 216 ccscli_echo "getting decisions for range 1111:2222:3333:4444:5555:6666:7777:8888/64" 217 218 docurl ${APIK} "/v1/decisions?range=1111:2222:3333:4444:5555:6666:7777:8888/64" | ${JQ} '. == null' > /dev/null || fail 219 bouncer_echo "getting decisions for range 1111:2222:3333:4444:5555:6666:7777:8888/64" 220 221 ${CCSCLI} decisions list -r 1111:2222:3333:4444:5555:6666:7777:8888/64 -o json --contained | ${JQ} '.[].decisions[0].value == "1111:2222:3333:4444:5555:6666:7777:8888"' > /dev/null || fail 222 ccscli_echo "getting decisions for ip/range in 1111:2222:3333:4444:5555:6666:7777:8888/64" 223 224 docurl ${APIK} "/v1/decisions?range=1111:2222:3333:4444:5555:6666:7777:8888/64&&contains=false" | ${JQ} '.[].value == "1111:2222:3333:4444:5555:6666:7777:8888"' > /dev/null || fail 225 bouncer_echo "getting decisions for ip/range in 1111:2222:3333:4444:5555:6666:7777:8888/64" 226 227 ccscli_echo "adding decision for ip 1111:2222:3333:4444:5555:6666:7777:8889" 228 ${CCSCLI} decisions add -i 1111:2222:3333:4444:5555:6666:7777:8889 > /dev/null 2>&1 229 230 ccscli_echo "deleting decision for ip 1111:2222:3333:4444:5555:6666:7777:8889" 231 ${CCSCLI} decisions delete -i 1111:2222:3333:4444:5555:6666:7777:8889 232 233 ${CCSCLI} decisions list -i 1111:2222:3333:4444:5555:6666:7777:8889 -o json | ${JQ} '. == null' > /dev/null || fail 234 ccscli_echo "getting decisions for ip 1111:2222:3333:4444:5555:6666:7777:8889 after delete" 235 236 ccscli_echo "deleting decision for range 1111:2222:3333:4444:5555:6666:7777:8888/64" 237 ${CCSCLI} decisions delete -r 1111:2222:3333:4444:5555:6666:7777:8888/64 --contained 238 239 ${CCSCLI} decisions list -r 1111:2222:3333:4444:5555:6666:7777:8888/64 -o json --contained | ${JQ} '. == null' > /dev/null || fail 240 ccscli_echo "getting decisions for ip/range in 1111:2222:3333:4444:5555:6666:7777:8888/64 after delete" 241 } 242 243 function test_ipv6_range 244 { 245 echo "" 246 echo "##########################################" 247 echo "$FUNCNAME" 248 echo "##########################################" 249 echo "" 250 251 ccscli_echo "adding decision for range aaaa:2222:3333:4444::/64" 252 ${CCSCLI} decisions add -r aaaa:2222:3333:4444::/64 > /dev/null 2>&1 || fail 253 254 ${CCSCLI} decisions list -o json | ${JQ} '.[0].decisions[0].value == "aaaa:2222:3333:4444::/64"' > /dev/null || fail 255 ccscli_echo "getting all decision" 256 257 docurl ${APIK} "/v1/decisions" | ${JQ} '.[0].value == "aaaa:2222:3333:4444::/64"' > /dev/null || fail 258 bouncer_echo "getting all decision" 259 260 #check ip within/out of range 261 ${CCSCLI} decisions list -i aaaa:2222:3333:4444:5555:6666:7777:8888 -o json | ${JQ} '.[].decisions[0].value == "aaaa:2222:3333:4444::/64"' > /dev/null || fail 262 ccscli_echo "getting decisions for ip aaaa:2222:3333:4444:5555:6666:7777:8888" 263 264 docurl ${APIK} "/v1/decisions?ip=aaaa:2222:3333:4444:5555:6666:7777:8888" | ${JQ} '.[].value == "aaaa:2222:3333:4444::/64"' > /dev/null || fail 265 bouncer_echo "getting decisions for ip aaaa:2222:3333:4444:5555:6666:7777:8888" 266 267 ${CCSCLI} decisions list -i aaaa:2222:3333:4445:5555:6666:7777:8888 -o json | ${JQ} '. == null' > /dev/null || fail 268 ccscli_echo "getting decisions for ip aaaa:2222:3333:4445:5555:6666:7777:8888" 269 270 docurl ${APIK} "/v1/decisions?ip=aaaa:2222:3333:4445:5555:6666:7777:8888" | ${JQ} '. == null' > /dev/null || fail 271 bouncer_echo "getting decisions for ip aaaa:2222:3333:4445:5555:6666:7777:8888" 272 273 ${CCSCLI} decisions list -i aaa1:2222:3333:4444:5555:6666:7777:8887 -o json | ${JQ} '. == null' > /dev/null || fail 274 ccscli_echo "getting decisions for ip aaa1:2222:3333:4444:5555:6666:7777:8887" 275 276 docurl ${APIK} "/v1/decisions?ip=aaa1:2222:3333:4444:5555:6666:7777:8887" | ${JQ} '. == null' > /dev/null || fail 277 bouncer_echo "getting decisions for ip aaa1:2222:3333:4444:5555:6666:7777:8887" 278 279 #check subrange within/out of range 280 ${CCSCLI} decisions list -r aaaa:2222:3333:4444:5555::/80 -o json | ${JQ} '.[].decisions[0].value == "aaaa:2222:3333:4444::/64"' > /dev/null || fail 281 ccscli_echo "getting decisions for range aaaa:2222:3333:4444:5555::/80" 282 283 docurl ${APIK} "/v1/decisions?range=aaaa:2222:3333:4444:5555::/80" | ${JQ} '.[].value == "aaaa:2222:3333:4444::/64"' > /dev/null || fail 284 bouncer_echo "getting decisions for range aaaa:2222:3333:4444:5555::/80" 285 286 ${CCSCLI} decisions list -r aaaa:2222:3333:4441:5555::/80 -o json | ${JQ} '. == null' > /dev/null || fail 287 ccscli_echo "getting decisions for range aaaa:2222:3333:4441:5555::/80" 288 289 docurl ${APIK} "/v1/decisions?range=aaaa:2222:3333:4441:5555::/80" | ${JQ} '. == null' > /dev/null || fail 290 bouncer_echo "getting decisions for range aaaa:2222:3333:4441:5555::/80" 291 292 ${CCSCLI} decisions list -r aaa1:2222:3333:4444:5555::/80 -o json | ${JQ} '. == null' > /dev/null || fail 293 ccscli_echo "getting decisions for range aaa1:2222:3333:4444:5555::/80" 294 295 docurl ${APIK} "/v1/decisions?range=aaa1:2222:3333:4444:5555::/80" | ${JQ} '. == null' > /dev/null || fail 296 bouncer_echo "getting decisions for range aaa1:2222:3333:4444:5555::/80" 297 298 #check outer range 299 ${CCSCLI} decisions list -r aaaa:2222:3333:4444:5555:6666:7777:8888/48 -o json | ${JQ} '. == null' > /dev/null || fail 300 ccscli_echo "getting decisions for range aaaa:2222:3333:4444:5555:6666:7777:8888/48" 301 302 docurl ${APIK} "/v1/decisions?range=aaaa:2222:3333:4444:5555:6666:7777:8888/48" | ${JQ} '. == null' > /dev/null || fail 303 bouncer_echo "getting decisions for range aaaa:2222:3333:4444:5555:6666:7777:8888/48" 304 305 ${CCSCLI} decisions list -r aaaa:2222:3333:4444:5555:6666:7777:8888/48 -o json --contained | ${JQ} '.[].decisions[0].value == "aaaa:2222:3333:4444::/64"' > /dev/null || fail 306 ccscli_echo "getting decisions for ip/range in aaaa:2222:3333:4444:5555:6666:7777:8888/48" 307 308 docurl ${APIK} "/v1/decisions?range=aaaa:2222:3333:4444:5555:6666:7777:8888/48&contains=false" | ${JQ} '.[].value == "aaaa:2222:3333:4444::/64"' > /dev/null || fail 309 bouncer_echo "getting decisions for ip/range in aaaa:2222:3333:4444:5555:6666:7777:8888/48" 310 311 ${CCSCLI} decisions list -r aaaa:2222:3333:4445:5555:6666:7777:8888/48 -o json | ${JQ} '. == null' > /dev/null || fail 312 ccscli_echo "getting decisions for ip/range aaaa:2222:3333:4445:5555:6666:7777:8888/48" 313 314 docurl ${APIK} "/v1/decisions?range=aaaa:2222:3333:4445:5555:6666:7777:8888/48" | ${JQ} '. == null' > /dev/null || fail 315 bouncer_echo "getting decisions for ip/range in aaaa:2222:3333:4445:5555:6666:7777:8888/48" 316 317 #bbbb:db8:: -> bbbb:db8:0000:0000:0000:7fff:ffff:ffff 318 ${CCSCLI} decisions add -r bbbb:db8::/81 > /dev/null 2>&1 319 ccscli_echo "adding decision for range bbbb:db8::/81" > /dev/null || fail 320 321 ${CCSCLI} decisions list -o json -i bbbb:db8:0000:0000:0000:6fff:ffff:ffff | ${JQ} '.[].decisions[0].value == "bbbb:db8::/81"' > /dev/null || fail 322 ccscli_echo "getting decisions for ip bbbb:db8:0000:0000:0000:6fff:ffff:ffff" 323 324 docurl ${APIK} "/v1/decisions?ip=bbbb:db8:0000:0000:0000:6fff:ffff:ffff" | ${JQ} '.[].value == "bbbb:db8::/81"' > /dev/null || fail 325 bouncer_echo "getting decisions for ip in bbbb:db8:0000:0000:0000:6fff:ffff:ffff" 326 327 ${CCSCLI} decisions list -o json -i bbbb:db8:0000:0000:0000:8fff:ffff:ffff | ${JQ} '. == null' > /dev/null || fail 328 ccscli_echo "getting decisions for ip bbbb:db8:0000:0000:0000:8fff:ffff:ffff" 329 330 docurl ${APIK} "/v1/decisions?ip=bbbb:db8:0000:0000:0000:8fff:ffff:ffff" | ${JQ} '. == null' > /dev/null || fail 331 bouncer_echo "getting decisions for ip in bbbb:db8:0000:0000:0000:8fff:ffff:ffff" 332 333 ccscli_echo "deleting decision for range aaaa:2222:3333:4444:5555:6666:7777:8888/48" 334 ${CCSCLI} decisions delete -r aaaa:2222:3333:4444:5555:6666:7777:8888/48 --contained > /dev/null 2>&1 || fail 335 336 ${CCSCLI} decisions list -o json -r aaaa:2222:3333:4444::/64 | ${JQ} '. == null' > /dev/null || fail 337 ccscli_echo "getting decisions for range aaaa:2222:3333:4444::/64 after delete" 338 339 ccscli_echo "adding decision for ip bbbb:db8:0000:0000:0000:8fff:ffff:ffff" 340 ${CCSCLI} decisions add -i bbbb:db8:0000:0000:0000:8fff:ffff:ffff > /dev/null 2>&1 || fail 341 ccscli_echo "adding decision for ip bbbb:db8:0000:0000:0000:6fff:ffff:ffff" 342 ${CCSCLI} decisions add -i bbbb:db8:0000:0000:0000:6fff:ffff:ffff > /dev/null 2>&1 || fail 343 344 ccscli_echo "deleting decision for range bbbb:db8::/81" 345 ${CCSCLI} decisions delete -r bbbb:db8::/81 --contained > /dev/null 2>&1 || fail 346 347 ${CCSCLI} decisions list -o json | ${JQ} '.[].decisions[0].value == "bbbb:db8:0000:0000:0000:8fff:ffff:ffff"' > /dev/null || fail 348 ccscli_echo "getting all decisions" 349 350 } 351 352 353 function start_test 354 { 355 356 ## ipv4 testing 357 ${CCSCLI} decisions delete --all 358 359 test_ipv4_ip 360 test_ipv4_range 361 362 ## ipv6 testing 363 ${CCSCLI} decisions delete --all 364 test_ipv6_ip 365 test_ipv6_range 366 } 367 368 369 usage() { 370 echo "Usage:" 371 echo "" 372 echo " ./ip_mgmt_tests.sh -h Display this help message." 373 echo " ./ip_mgmt_tests.sh Run all the testsuite. Go must be available to make the release" 374 echo " ./ip_mgmt_tests.sh --release <path_to_release_folder> If go is not installed, please provide a path to the synsec-vX.Y.Z release folder" 375 echo "" 376 exit 0 377 } 378 379 while [[ $# -gt 0 ]] 380 do 381 key="${1}" 382 case ${key} in 383 --release|-r) 384 RELEASE_FOLDER="${2}" 385 shift #past argument 386 shift 387 ;; 388 -h|--help) 389 usage 390 exit 0 391 ;; 392 *) # unknown option 393 echo "Unknown argument ${key}." 394 usage 395 exit 1 396 ;; 397 esac 398 done 399 400 401 start_test 402 403 if [[ "${MUST_FAIL}" == "true" ]]; 404 then 405 echo "" 406 echo "One or more tests have failed !" 407 exit 1 408 fi