| #!/usr/bin/env bash |
| |
| source vars |
| |
| args= |
| focused_test=0 |
| persist_set=0 |
| dryrun_set=0 |
| unconfigure_set=0 |
| debug_set=0 |
| leak_check_set=0 |
| debug_build= |
| ginkgo_args= |
| tc_names=() |
| dryrun= |
| |
| for i in "$@" |
| do |
| case "${i}" in |
| --persist=*) |
| persist="${i#*=}" |
| if [ "$persist" = "true" ]; then |
| args="$args -persist" |
| persist_set=1 |
| fi |
| ;; |
| --debug=*) |
| debug="${i#*=}" |
| if [ "$debug" = "true" ]; then |
| args="$args -debug" |
| debug_set=1 |
| fi |
| ;; |
| --debug_build=*) |
| debug_build="${i#*=}" |
| if [ "$debug_build" = "true" ]; then |
| args="$args -debug_build" |
| fi |
| ;; |
| --verbose=*) |
| verbose="${i#*=}" |
| if [ "$verbose" = "true" ]; then |
| args="$args -verbose" |
| fi |
| ;; |
| --unconfigure=*) |
| unconfigure="${i#*=}" |
| if [ "$unconfigure" = "true" ]; then |
| args="$args -unconfigure" |
| unconfigure_set=1 |
| fi |
| ;; |
| --cpus=*) |
| args="$args -cpus ${i#*=}" |
| ;; |
| --vppsrc=*) |
| args="$args -vppsrc ${i#*=}" |
| ;; |
| --test=*) |
| tc_list="${i#*=}" |
| ginkgo_args="$ginkgo_args -v" |
| if [ "$tc_list" != "all" ]; then |
| focused_test=1 |
| IFS=',' read -r -a tc_names <<< "$tc_list" |
| args="$args -verbose" |
| fi |
| ;; |
| --parallel=*) |
| ginkgo_args="$ginkgo_args -procs=${i#*=}" |
| ;; |
| --repeat=*) |
| ginkgo_args="$ginkgo_args --repeat=${i#*=}" |
| ;; |
| --cpu0=*) |
| cpu0="${i#*=}" |
| if [ "$cpu0" = "true" ]; then |
| args="$args -cpu0" |
| fi |
| ;; |
| --dryrun=*) |
| dryrun="${i#*=}" |
| if [ "$dryrun" = "true" ]; then |
| args="$args -dryrun" |
| dryrun_set=1 |
| fi |
| ;; |
| --leak_check=*) |
| leak_check="${i#*=}" |
| if [ "$leak_check" = "true" ]; then |
| args="$args -leak_check" |
| leak_check_set=1 |
| fi |
| ;; |
| esac |
| done |
| |
| if [ ${#tc_names[@]} -gt 1 ] |
| then |
| focused_test=0 |
| fi |
| |
| for name in "${tc_names[@]}"; do |
| ginkgo_args="$ginkgo_args --focus $name" |
| done |
| |
| if [ $focused_test -eq 0 ] && { [ $persist_set -eq 1 ] || [ $dryrun_set -eq 1 ]; }; then |
| echo -e "\e[1;31mpersist/dryrun flag is not supported while running all tests!\e[1;0m" |
| exit 2 |
| fi |
| |
| if [ $unconfigure_set -eq 1 ] && [ $focused_test -eq 0 ]; then |
| echo -e "\e[1;31ma single test has to be specified when unconfigure is set\e[1;0m" |
| exit 2 |
| fi |
| |
| if [ $persist_set -eq 1 ] && [ $unconfigure_set -eq 1 ]; then |
| echo -e "\e[1;31msetting persist flag and unconfigure flag is not allowed\e[1;0m" |
| exit 2 |
| fi |
| |
| if [ $focused_test -eq 0 ] && [ $debug_set -eq 1 ]; then |
| echo -e "\e[1;31mVPP debug flag is not supported while running all tests!\e[1;0m" |
| exit 2 |
| fi |
| |
| if [ $leak_check_set -eq 1 ]; then |
| if [ $focused_test -eq 0 ]; then |
| echo -e "\e[1;31ma single test has to be specified when leak_check is set\e[1;0m" |
| exit 2 |
| fi |
| ginkgo_args="--focus ${tc_names[0]}" |
| sudo -E go run github.com/onsi/ginkgo/v2/ginkgo $ginkgo_args -- $args |
| exit 0 |
| fi |
| |
| if [ -n "${BUILD_NUMBER}" ]; then |
| ginkgo_args="$ginkgo_args --no-color" |
| fi |
| |
| mkdir -p summary |
| # shellcheck disable=SC2086 |
| sudo -E go run github.com/onsi/ginkgo/v2/ginkgo --json-report=summary/report.json $ginkgo_args -- $args |
| |
| if [ $? != 0 ]; then |
| jq -r '.[0] | .SpecReports[] | select((.State == "failed") or (.State == "timedout") or (.State == "panicked")) | select(.Failure != null) | |
| "TestName: |
| \(.LeafNodeText) |
| Suite: |
| \(.Failure.FailureNodeLocation.FileName) |
| Message:\n" |
| +(if .ReportEntries? then .ReportEntries[] | select(.Name == "VPP Backtrace") | |
| "\tVPP crashed |
| Full Back Trace: |
| \(.Value.Representation | ltrimstr("{{red}}") | rtrimstr("{{/}}"))" else |
| "\(.Failure.Message)" |
| + (if .Failure.Message == "A spec timeout occurred" then "\n" else |
| "\nFull Stack Trace: |
| \(.Failure.Location.FullStackTrace)\n" end) end)' summary/report.json > summary/failed-summary.log \ |
| && echo "Summary generated -> summary/failed-summary.log" |
| else |
| if [ -e "summary/failed-summary.log" ]; then |
| rm summary/failed-summary.log |
| fi |
| fi |