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