Functional Test Updates for I Release
[nonrtric.git] / test / auto-test / FTC3001.sh
1 #!/usr/bin/env bash
2
3 #  ============LICENSE_START===============================================
4 #  Copyright (C) 2020-2023 Nordix Foundation. All rights reserved.
5 #  Copyright (C) 2023 OpenInfra Foundation Europe. All rights reserved.
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 #  ============LICENSE_END=================================================
19 #
20
21 TC_ONELINE_DESCR="App test DMAAP Meditor and DMAAP Adapter with 100 jobs,types and topics"
22
23 #App names to include in the test when running docker, space separated list
24 DOCKER_INCLUDED_IMAGES="ICS DMAAPMED DMAAPADP KUBEPROXY MR DMAAPMR CR KAFKAPC HTTPPROXY"
25
26 #App names to include in the test when running kubernetes, space separated list
27 KUBE_INCLUDED_IMAGES=" ICS DMAAPMED DMAAPADP KUBEPROXY MR DMAAPMR CR KAFKAPC HTTPPROXY"
28
29 #Pre-started app (not started by script) to include in the test when running kubernetes, space separated list
30 KUBE_PRESTARTED_IMAGES=""
31
32 #Ignore image in DOCKER_INCLUDED_IMAGES, KUBE_INCLUDED_IMAGES if
33 #the image is not configured in the supplied env_file
34 #Used for images not applicable to all supported profile
35 CONDITIONALLY_IGNORED_IMAGES=""
36
37 #Supported test environment profiles
38 SUPPORTED_PROFILES="ORAN-G-RELEASE ORAN-H-RELEASE ORAN-I-RELEASE"
39 #Supported run modes
40 SUPPORTED_RUNMODES="DOCKER KUBE"
41
42 . ../common/testcase_common.sh $@
43
44 setup_testenvironment
45
46 #### TEST BEGIN ####
47
48 #Local vars in test script
49 ##########################
50
51 NUM_CR=1 # Number of callback receivers, max 1
52 ## Note: The number jobs must be a multiple of the number of CRs in order to calculate the number of expected event in each CR
53 NUM_JOBS=100  # Mediator and adapter gets same number of jobs for every type
54 if [ $NUM_CR -gt 1 ]; then
55     __log_conf_fail_general "Max number of callback receivers is one in this test"
56 fi
57
58 clean_environment
59
60 #use_cr_https
61 use_cr_http
62 use_ics_rest_https
63 use_mr_https
64 use_dmaapadp_https
65 use_dmaapmed_https
66
67 start_kube_proxy
68
69 start_cr $NUM_CR
70
71 start_ics NOPROXY $SIM_GROUP/$ICS_COMPOSE_DIR/$ICS_CONFIG_FILE
72
73 set_ics_trace
74
75 start_mr
76
77 start_kafkapc
78
79 for ((i=1; i<=$NUM_JOBS; i++))
80 do
81     kafkapc_api_create_topic 201 "unauthenticated.dmaapadp_kafka.text$i" "text/plain"
82
83     kafkapc_api_start_sending 200 "unauthenticated.dmaapadp_kafka.text$i"
84 done
85
86 adp_med_type_list=""
87 adp_config_data='{"types": ['
88 for ((i=1; i<=$NUM_JOBS; i++))
89 do
90     if [ $i -ne 1 ]; then
91         adp_config_data=$adp_config_data','
92     fi
93     adp_config_data=$adp_config_data'{"id": "ADPKafkaType'$i'","kafkaInputTopic": "unauthenticated.dmaapadp_kafka.text'$i'","useHttpProxy": false}'
94     adp_med_type_list="$adp_med_type_list ADPKafkaType$i "
95 done
96 adp_config_data=$adp_config_data']}'
97 echo $adp_config_data > tmp/adp_config_data.json
98
99 start_dmaapadp NOPROXY $SIM_GROUP/$DMAAP_ADP_COMPOSE_DIR/$DMAAP_ADP_CONFIG_FILE_TEMPLATE tmp/adp_config_data.json
100
101 set_dmaapadp_trace
102
103 if [[ "$DMAAP_MED_FEATURE_LEVEL" == *"KAFKATYPES"* ]]; then
104     for ((i=1; i<=$NUM_JOBS; i++))
105     do
106         kafkapc_api_create_topic 201 "unauthenticated.dmaapmed_kafka.text$i" "text/plain"
107
108         kafkapc_api_start_sending 200 "unauthenticated.dmaapmed_kafka.text$i"
109     done
110 fi
111
112 med_config_data='{"types": ['
113 for ((i=1; i<=$NUM_JOBS; i++))
114 do
115     if [ $i -ne 1 ]; then
116         med_config_data=$med_config_data','
117     fi
118     med_config_data=$med_config_data'{"id": "MEDKafkaType'$i'","kafkaInputTopic": "unauthenticated.dmaapmed_kafka.text'$i'"}'
119     adp_med_type_list="$adp_med_type_list MEDKafkaType$i "
120 done
121 med_config_data=$med_config_data']}'
122 echo $med_config_data > tmp/med_config_data.json
123
124 start_dmaapmed NOPROXY tmp/med_config_data.json
125
126 ics_equal json:data-producer/v1/info-producers 2 60
127
128 # Check producers
129 ics_api_idc_get_job_ids 200 NOTYPE NOWNER EMPTY
130 if [[ "$DMAAP_ADP_FEATURE_LEVEL" == *"GENERATED_PROD_NAME"* ]]; then
131     if [ $RUNMODE == "KUBE" ]; then
132         __NAME="https:__$DMAAP_ADP_APP_NAME.$KUBE_NONRTRIC_NAMESPACE:$DMAAP_ADP_EXTERNAL_SECURE_PORT"
133     else
134         __NAME="https:__$DMAAP_ADP_APP_NAME:$DMAAP_ADP_INTERNAL_SECURE_PORT"
135     fi
136     ics_api_edp_get_producer_ids_2 200 NOTYPE $__NAME DMaaP_Mediator_Producer
137 else
138     ics_api_edp_get_producer_ids_2 200 NOTYPE DmaapGenericInfoProducer DMaaP_Mediator_Producer
139 fi
140
141 ics_api_idc_get_type_ids 200 $adp_med_type_list
142
143
144 # Create jobs for adapter kafka - CR stores data as MD5 hash
145 start_timer "Create adapter (kafka) jobs: $NUM_JOBS"
146 for ((i=1; i<=$NUM_JOBS; i++))
147 do
148     # Max buffer timeout for is about 160 sec for Adapter jobs"
149     adp_timeout=$(($i*1000))
150     if [[ "$DMAAP_ADP_FEATURE_LEVEL" == *"FILTERSPEC"* ]]; then
151         deviation "It is possible to give filter without filtertype without error indication"
152         if [[ "$DMAAP_ADP_FEATURE_LEVEL" == *"FILTERSCHEMA"* ]]; then
153             adp_config_data='{"filterType": "regexp", "filter":"Message*","maxConcurrency": 1,"bufferTimeout": {"maxSize": 100,"maxTimeMilliseconds": '$adp_timeout'}}'
154         else
155             adp_config_data='{"filterType": "regexp", "filter":"Message*","maxConcurrency": 1,"bufferTimeout": {"maxSize": 100,"maxTimeMiliseconds": '$adp_timeout'}}'
156         fi
157     else
158         if [[ "$DMAAP_ADP_FEATURE_LEVEL" == *"FILTERSCHEMA"* ]]; then
159             adp_config_data='{"filter":"Message*","maxConcurrency": 1,"bufferTimeout": {"maxSize": 100,"maxTimeMilliseconds": '$adp_timeout'}}'
160         else
161             adp_config_data='{"filter":"Message*","maxConcurrency": 1,"bufferTimeout": {"maxSize": 100,"maxTimeMiliseconds": '$adp_timeout'}}'
162         fi
163     fi
164     echo $adp_config_data > tmp/adp_config_data.json
165
166     cr_index=$(($i%$NUM_CR))
167     service_text="CR_SERVICE_TEXT_PATH_"$cr_index
168     service_app="CR_SERVICE_APP_PATH_"$cr_index
169     ics_api_idc_put_job 201 job-adp-kafka-$i "ADPKafkaType$i" ${!service_text}/job-adp-kafka-data$i"?storeas=md5" info-owner-adp-kafka-$i ${!service_app}/callbacks-null tmp/adp_config_data.json
170
171 done
172 print_timer
173
174 if [[ "$DMAAP_MED_FEATURE_LEVEL" == *"KAFKATYPES"* ]]; then
175     # Create jobs for mediator kafka - CR stores data as MD5 hash
176     start_timer "Create mediator (kafka) jobs: $NUM_JOBS"
177     for ((i=1; i<=$NUM_JOBS; i++))
178     do
179         med_timeout=$(($i*5000))
180         if [[ "$DMAAP_MED_FEATURE_LEVEL" == *"FILTERSCHEMA"* ]]; then
181             med_config_data='{"bufferTimeout": {"maxSize": 100,"maxTimeMilliseconds": '$med_timeout'}}'
182         else
183             med_config_data='{"bufferTimeout": {"maxSize": 100,"maxTimeMiliseconds": '$med_timeout'}}'
184         fi
185         echo $med_config_data > tmp/med_config_data.json
186         cr_index=$(($i%$NUM_CR))
187         service_text="CR_SERVICE_TEXT_PATH_"$cr_index
188         service_app="CR_SERVICE_APP_PATH_"$cr_index
189         ics_api_idc_put_job 201 job-med-kafka-$i "MEDKafkaType$i" ${!service_text}/job-med-kafka-data$i"?storeas=md5" info-owner-med-kafka-$i ${!service_app}/callbacks-null     tmp/med_config_data.json
190     done
191     print_timer
192 fi
193
194 # Check job status
195 for ((i=1; i<=$NUM_JOBS; i++))
196 do
197     ics_api_a1_get_job_status 200 job-adp-kafka-$i ENABLED 30
198     if [[ "$DMAAP_MED_FEATURE_LEVEL" == *"KAFKATYPES"* ]]; then
199         ics_api_a1_get_job_status 200 job-med-kafka-$i ENABLED 30
200     fi
201 done
202
203
204 EXPECTED_DATA_DELIV=0 #Total delivered msg per CR
205 EXPECTED_BATCHES_DELIV=0 #Total delivered batches per CR
206 DATA_DELIV_JOBS=0 #Total delivered msg per job per CR
207
208 sleep_wait 60
209
210 start_timer "Data delivery adapter kafka, 2 strings per job (short buffer timeouts)"
211 # Send small text via message-router to adapter
212 for ((i=1; i<=$NUM_JOBS; i++))
213 do
214     kafkapc_api_post_msg 200 "unauthenticated.dmaapadp_kafka.text"$i "text/plain" 'Message-------1'$i
215     kafkapc_api_post_msg 200 "unauthenticated.dmaapadp_kafka.text"$i "text/plain" 'Discard-------3'$i #Should be filtered out
216     kafkapc_api_post_msg 200 "unauthenticated.dmaapadp_kafka.text"$i "text/plain" 'Message-------3'$i
217 done
218 for ((i=1; i<=$NUM_JOBS; i++))
219 do
220     kafkapc_equal topics/unauthenticated.dmaapadp_kafka.text$i/counters/sent 3 30
221 done
222
223 # Wait for data reception, adapter kafka
224 EXPECTED_DATA_DELIV=$(($NUM_JOBS*2/$NUM_CR+$EXPECTED_DATA_DELIV))
225 EXPECTED_BATCHES_DELIV=$(($NUM_JOBS/$NUM_CR+$EXPECTED_BATCHES_DELIV))
226
227 adp_timeout=$(($NUM_JOBS*1*2+60))  #NUM_JOBS*MIN_BUFFERTIMEOUT*2+60_SEC_DELAY
228 for ((i=0; i<$NUM_CR; i++))
229 do
230     cr_equal $i received_callbacks $EXPECTED_DATA_DELIV $adp_timeout
231     cr_greater_or_equal $i received_callback_batches $EXPECTED_BATCHES_DELIV
232 done
233 print_timer
234
235 # Check received data callbacks from adapter
236 for ((i=1; i<=$NUM_JOBS; i++))
237 do
238     cr_index=$(($i%$NUM_CR))
239     cr_api_check_single_generic_event_md5 200 $cr_index job-adp-kafka-data$i  'Message-------1'$i
240     cr_api_check_single_generic_event_md5 200 $cr_index job-adp-kafka-data$i  'Message-------3'$i
241 done
242
243 if [[ "$DMAAP_MED_FEATURE_LEVEL" == *"KAFKATYPES"* ]]; then
244
245     PREV_DATA_DELIV=$(cr_read 0 received_callbacks)
246     PREV_BATCHES_DELIV=$(cr_read 0 received_callback_batches)
247     start_timer "Data delivery mediator kafka, 2 strings per job (long buffer timeouts)"
248     # Send small text via message-router to mediator
249     for ((i=1; i<=$NUM_JOBS; i++))
250     do
251         kafkapc_api_post_msg 200 "unauthenticated.dmaapmed_kafka.text$i" "text/plain" 'Message-------0'$i
252         kafkapc_api_post_msg 200 "unauthenticated.dmaapmed_kafka.text$i" "text/plain" 'Message-------2'$i
253     done
254     for ((i=1; i<=$NUM_JOBS; i++))
255     do
256         kafkapc_equal topics/unauthenticated.dmaapmed_kafka.text$i/counters/sent 2 30
257     done
258
259     # Wait for data reception, adapter kafka
260
261     EXPECTED_DATA_DELIV=$(($NUM_JOBS*2/$NUM_CR+$PREV_DATA_DELIV))
262     EXPECTED_BATCHES_DELIV=$(($NUM_JOBS/$NUM_CR+$PREV_BATCHES_DELIV))
263
264     med_timeout=$(($NUM_JOBS*5*2+60)) #NUM_JOBS*MIN_BUFFERTIMEOUT*2+60_SEC_DELAY
265     for ((i=0; i<$NUM_CR; i++))
266     do
267         cr_equal $i received_callbacks $EXPECTED_DATA_DELIV $med_timeout
268         cr_greater_or_equal $i received_callback_batches $EXPECTED_BATCHES_DELIV
269     done
270
271     print_timer
272
273     # Check received data callbacks from mediator
274     for ((i=1; i<=$NUM_JOBS; i++))
275     do
276         cr_index=$(($i%$NUM_CR))
277         cr_api_check_single_generic_event_md5 200 $cr_index job-med-kafka-data$i  'Message-------0'$i
278         cr_api_check_single_generic_event_md5 200 $cr_index job-med-kafka-data$i  'Message-------2'$i
279     done
280 fi
281
282 #### TEST COMPLETE ####
283
284 store_logs          END
285
286 print_result
287
288 auto_clean_environment