Add metrics to the framework
[ric-plt/xapp-frame-cpp.git] / test / unit_test.sh
1 #!/usr/bin/env bash
2 # vim: ts=4 sw=4 noet:
3
4 #==================================================================================
5 #       Copyright (c) 2020 Nokia
6 #       Copyright (c) 2020 AT&T Intellectual Property.
7 #
8 #   Licensed under the Apache License, Version 2.0 (the "License");
9 #   you may not use this file except in compliance with the License.
10 #   You may obtain a copy of the License at
11 #
12 #       http://www.apache.org/licenses/LICENSE-2.0
13 #
14 #   Unless required by applicable law or agreed to in writing, software
15 #   distributed under the License is distributed on an "AS IS" BASIS,
16 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 #   See the License for the specific language governing permissions and
18 #   limitations under the License.
19 #==================================================================================
20
21 #
22 #       Mnemonic:       unit_test.sh
23 #       Abstract:       This drives the unit tests and combs out the needed .gcov
24 #                               files which are by some magic collected for Sonar.
25 #
26 #       Date:           23 March 2020
27 #       Author:         E. Scott Daniels
28 # -----------------------------------------------------------------------------
29
30
31 # Make a list of our modules under test so that we don't look at gcov
32 # files that are generated for system lib headers in /usr/*
33 # (bash makes the process of building a list of names  harder than it
34 # needs to be, so use caution with the printf() call.)
35 #
36 function mk_list {
37         grep -l "Source:\.\./src"  *.gcov | while read f
38         do
39                 printf "$f "            # do NOT use echo or add \n!
40         done
41 }
42
43 function abort_if_error {
44         if (( $1 == 0 ))
45         then
46                 return
47         fi
48
49         if [[ -n /tmp/PID$$.log ]]
50         then
51                 $spew /tmp/PID$$.log
52         fi
53         echo "abort: $2"
54
55         rm -f /tmp/PID$$.*
56         exit 1
57 }
58
59 # -------------------------------------------------------------------------
60
61 spew="cat"                                      # default to dumping all make output on failure (-q turns it to ~40 lines)
62
63 if [[ -d ../.build ]]
64 then
65         build_dir="../.build"
66 else
67         if [[ -d ../build ]]
68         then
69                 build_dir="../build"
70         fi
71 fi
72
73 while [[ $1 == "-"* ]]
74 do
75         case $1 in
76                 -q) spew="head -40";;
77                 -v)     spew="cat";;
78         esac
79
80         shift
81 done
82
83 while [[ $1 == *"="* ]]
84 do
85         case ${1%%=*} in
86                 CMBUILD)
87                         export build_dir=${1##*=}
88                         ;;
89         esac
90
91         shift
92 done
93
94 echo "## INFO ##"
95 echo "build dir=$build_dir"
96 find $build_dir -name "libricxfcpp.*"
97 echo "## INFO ##"
98
99 export LD_LIBRARY_PATH=$build_dir:/usr/local/lib:$LD_LIBRARY_PATH
100 export LIBRARY_PATH=$build_dir:/usr/local/lib:$LIBRARY_PATH
101
102 make nuke >/dev/null
103 make tests >/tmp/PID$$.log 2>&1
104 abort_if_error $? "unable to make"
105 echo "tests successfully built" >&2
106
107 spew="cat"
108
109 for x in unit_test jhash_test metrics_test
110 do
111         ./$x >/tmp/PID$$.log 2>&1
112         abort_if_error $? "test failed: $x"
113         gcov $x.c >/dev/null 2>&1
114 done
115
116 # wrapper_test is driven by jhash_test, but must be covered explicitly
117 gcov jwrapper_test.c >/dev/null 2>&1
118
119 ./scrub_gcov.sh                                                         # remove cruft
120
121 list=$( mk_list )
122 echo ""
123 echo "[INFO] coverage stats, discounted (raw), for the various modules:"
124 ./parse_gcov.sh $list                                           # generate simple, short, coverage stats
125
126 rm -f /tmp/PID$$.*
127