74293367ff48b5ead67841da692de56b8ac4dcd3
[ric-app/mc.git] / src / sidecars / listener / verify.sh
1 #!/usr/bin/env bash
2 # vim: ts=4 sw=4 noet:
3 #----------------------------------------------------------------------------------
4 #
5 #       Copyright (c) 2018-2019 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
22 # ----------------------------------------------------------------------
23 # Mnemonic:     verify.sh
24 # Abstract: Simple script to attempt to verify that the mc_listener is
25 #                       capable of running. This will start a listener and a sender
26 #                       and then will cat a few lines from one of the FIFOs.
27 #                       This script is designed to run using the geneated runtime
28 #                       image; in other words, it expects to find the binaries
29 #                       in /playpen/bin.
30 #
31 # Date:         26 August 2019
32 # Author:       E. Scott Daniels
33 # ----------------------------------------------------------------------
34
35 # set the various sleep values based on long test or short test
36 function set_wait_values {
37         if (( long_test ))
38         then
39                 export MCL_RDC_FREQ=13          # file cycle after 13s
40                 sender_wait=100
41                 listener_wait=105
42                 reader_wait=102
43                 main_wait=120
44         else
45                 sender_wait=10
46                 listener_wait=15
47                 reader_wait=12
48                 main_wait=20
49         fi
50 }
51
52 # run sender at a 2 msg/sec rate (500000 musec delay)
53 # sender sends msg types 0-6 and the route table in /tmp
54 # will direct them to the listener. We also need to switch
55 # the RT listen port so there is no collision with the listen
56 # preocess.
57 #
58 function run_sender {
59         echo "starting sender"
60         RMR_SEED_RT=/tmp/local.rt RMR_RTG_SVC=9989 /playpen/bin/sender 43086 10000 >/tmp/sender.log 2>&1 &
61         spid=$!
62         sleep $sender_wait
63
64         echo "stopping sender"
65         kill -15 $spid
66 }
67
68 function run_listener {
69         echo "starting listener"
70         /playpen/bin/mc_listener $ext_hdr -r 1 -d $fifo_dir >/tmp/listen.log 2>&1 &
71         lpid=$!
72
73         sleep $listener_wait
74         echo "stopping listener"
75         kill -15 $lpid
76 }
77
78 # run a pipe reader for one message type
79 function run_pr {
80         echo "starting pipe reader $1"
81         /playpen/bin/pipe_reader $ext_hdr -m $1 -d $fifo_dir  >/tmp/pr.$1.log 2>&1 &
82         #/playpen/bin/pipe_reader -m $1 -d $fifo_dir & # >/tmp/pr.$1.log 2>&1 
83         typeset prpid=$!
84         
85         sleep $reader_wait
86         echo "stopping pipe reader $1"
87         kill -1 $prpid
88 }
89
90 # generate a dummy route table that the sender needs
91 function gen_rt {
92         cat <<endKat >/tmp/local.rt
93         newrt|start
94         mse | 0 | -1 | localhost:4560   
95         mse | 1 | -1 | localhost:4560   
96         mse | 2 | -1 | localhost:4560   
97         mse | 3 | -1 | localhost:4560   
98         mse | 4 | -1 | localhost:4560   
99         mse | 5 | -1 | localhost:4560   
100         mse | 6 | -1 | localhost:4560   
101         newrt|end
102 endKat
103 }
104
105 # ---- run everything ---------------------------------------------------
106
107 ext_hdr=""                                      # run with extended header enabled (-e turns extended off)
108 long_test=0
109 raw_capture=1
110 while [[ $1 == -* ]]
111 do
112         case $1 in 
113                 -l)     long_test=1;;
114                 -n)     raw_capture=0;;
115                 *)      echo "$1 is not a recognised option"
116                         exit 1
117                         ;;
118         esac
119
120         shift
121 done
122
123 set_wait_values
124
125 if (( ! raw_capture ))          # -n set, turn off capture
126 then
127         export MCL_RDC_ENABLE=0
128 fi
129
130 if [[ -d /data/final ]]                 # assume if we find data that final directory goes here
131 then
132         echo "### found /data/final using that as final directory"
133         export MCL_RDC_FINAL=/data/final
134 fi
135
136 if [[ -d /data/stage ]]
137 then
138         echo "### found /data/staging using that as stage directory"
139         export MCL_RDC_STAGE=/data/stage
140 fi
141 final_dir=${MCL_RDC_FINAL:-/tmp/rdc/final}
142 stage_dir=${MCL_RDC_STAGE:-/tmp/rdc/stage}
143
144 fifo_dir=/tmp/fifos
145 mkdir -p $fifo_dir                      # redirect fifos so we don't depend on mount
146
147 gen_rt                                          # generate a dummy route table
148 run_listener &
149 sleep 4
150
151 for p in 0 1 2 3 4 5 6
152 do
153         run_pr $p &
154 done
155 sleep 1
156 run_sender &
157
158 sleep $main_wait                        # long enough for all functions to finish w/o having to risk a wait hanging
159 echo "all functions stopped; looking at logs"
160
161 # ---------- validation -------------------------------------------------
162
163 errors=0
164
165 # logs should be > 0 in size
166 echo "----- logs ---------"
167 ls -al /tmp/*.log
168
169 # pipe reader log files 1-6 should have 'stand up and cheer' messages
170 # pipe reader log for MT 0 will likley be empty as sender sends only
171 # one of those and buffer not likely flushed. So, we only check 1-6
172 #
173 for l in 1 2 3 4 5 6
174 do
175         if [[ ! -s /tmp/pr.$l.log ]]
176         then
177                 echo "[FAIL] log $l was empty"
178                 (( errors++ ))
179         else
180                 if ! grep -q -i "stand up and cheer" /tmp/pr.$l.log
181                 then
182                         echo "[FAIL] pipe reader log did not have any valid messages: /tmp/pr.$l.log"
183                         (( errors++ ))
184                 fi
185         fi
186 done
187
188 if (( ! errors )) 
189 then
190         echo "[OK]    All logs seem good"
191 fi
192
193 nfifos=$( ls /tmp/fifos/MT_* | wc -l )
194 if (( nfifos < 7 ))
195 then
196         echo "didn't find enough fifos"
197         ls -al /tmp/fifos/*
198         (( errors++ ))
199 else
200         echo "[OK]    Found expected fifos"
201 fi
202
203 if (( raw_capture ))            # not an error if not capturing
204 then
205         if [[ -d $stage_dir ]]
206         then
207                 echo "[OK]    Found staging direcory ($stage_dir)"
208                 ls -al $stage_dir
209         else
210                 (( errors++ ))
211                 echo "[FAIL]  No staging directory found ($stage_dir)"
212         fi
213
214
215         if [[ -d $final_dir ]]
216         then
217                 echo "[OK]    Found final direcory ($final_dir)"
218                 ls -al $final_dir
219         
220                 if (( long_test ))              # look for files in final dir to ensure roll
221                 then
222                         found=$( ls $final_dir/MC* | wc -l )
223                         if (( found > 0 ))
224                         then
225                                 echo "[OK]   Found $found files in final directory ($final_dir)"
226                         else
227                                 echo "[FAIL] Did not find any files in the final directory ($final_dir)"
228                                 (( errors++ ))
229                         fi
230                 fi
231         else
232                 (( errors++ ))
233                 echo "[FAIL]  No final directory found"
234         fi
235 fi
236
237 if (( errors ))
238 then
239         echo "[FAIL] $errors errors noticed"
240 else
241         echo "[PASS]"
242 fi
243