Updated test of info-types

Added tests of info-types
Added test of info type persistency

Issue-ID: NONRTRIC-497
Signed-off-by: BjornMagnussonXA <bjorn.magnusson@est.tech>
Change-Id: I2407b0914f688f236753c5dd2f0b84c14ab1539c
diff --git a/test/common/README.md b/test/common/README.md
index dd64c42..bdb2f0d 100644
--- a/test/common/README.md
+++ b/test/common/README.md
@@ -1308,6 +1308,121 @@
 | --------- | ----------- |
 | `<response-code>` | Expected http response code |
 
+## Function: ecs_api_idc_get_type_ids() ##
+Test of GET '/data-consumer/v1/info-types' and an optional check of the returned list of type ids.
+To test the response code only, provide the response code.
+To also test the response payload add list of expected type ids (or EMPTY if the list is expected to be empty).
+
+| arg list |
+|--|
+| `<response-code> [ EMPTY | <type-id>+]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<type-id>` | Id of the Info type  |
+| `EMPTY` | The expected list of type ids shall be empty  |
+
+## Function: ecs_api_idc_get_job_ids() ##
+Test of GET '/data-consumer/v1/info-jobs' and optional check of the array of returned job ids.
+To test the response code only, provide the response code parameter as well as a type id and an owner id.
+To also test the response payload add the 'EMPTY' for an expected empty array or repeat the last parameter for each expected job id.
+
+| arg list |
+|--|
+| `<response-code> <type-id>  <owner-id>|NOOWNER [ EMPTY | <job-id>+ ]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<type-id>` | Id of the Info type  |
+| `<owner-id>` | Id of the job owner  |
+| `NOOWNER` | No owner is given  |
+| `<job-id>` | Id of the expected job  |
+| `EMPTY` | The expected list of job id shall be empty  |
+
+## Function: ecs_api_idc_get_job() ##
+Test of GET '/data-consumer/v1/info-jobs/{infoJobId}' and optional check of the returned job.
+To test the response code only, provide the response code, type id and job id.
+To also test the response payload add the remaining parameters.
+
+| arg list |
+|--|
+| `<response-code> <type-id> <job-id> [<target-url> <owner-id> <template-job-file>]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<type-id>` | Id of the Info type  |
+| `<job-id>` | Id of the job  |
+| `<target-url>` | Expected target url for the job  |
+| `<owner-id>` | Expected owner for the job  |
+| `<template-job-file>` | Path to a job template for job parameters of the job  |
+
+## Function: ecs_api_idc_put_job() ##
+Test of PUT '​/data-consumer/v1/info-jobs/{infoJobId}'.
+To test, provide all the specified parameters.
+
+| arg list |
+|--|
+| `<response-code> <type-id> <job-id> <target-url> <owner-id> <template-job-file> [VALIDATE]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<type-id>` | Id of the Info type  |
+| `<job-id>` | Id of the job  |
+| `<target-url>` | Target url for the job  |
+| `<owner-id>` | Owner of the job  |
+| `<template-job-file>` | Path to a job template for job parameters of the job  |
+| `VALIIDATE` | Indicator to preform type validation at creation  |
+
+## Function: ecs_api_idc_delete_job() ##
+Test of DELETE '/A1-EI​/v1​/eitypes​/{eiTypeId}​/eijobs​/{eiJobId}'.
+To test, provide all the specified parameters.
+
+| arg list |
+|--|
+| `<response-code> <type-id> <job-id> |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<type-id>` | Id of the EI type  |
+| `<job-id>` | Id of the job  |
+
+## Function: ecs_api_idc_get_type() ##
+Test of GET '/data-consumer/v1/info-types/{infoTypeId} and optional check of the returned schema.
+To test the response code only, provide the response code parameter as well as the type-id.
+To also test the response payload add a path to the expected schema file.
+
+| arg list |
+|--|
+| `<response-code> <type-id> [<schema-file>]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<type-id>` | Id of the Info type  |
+| `<schema-file>` | Path to a schema file to compare with the returned schema  |
+
+## Function: ecs_api_idc_get_job_status() ##
+Test of GET '/data-consumer/v1/info-jobs/{infoJobId}/status' and optional check of the returned status.
+To test the response code only, provide the response code, type id and job id.
+To also test the response payload add the expected status.
+
+| arg list |
+|--|
+| `<response-code> <type-id> <job-id> [<status>]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<type-id>` | Id of the Info type  |
+| `<job-id>` | Id of the job  |
+| `<status>` | Expected status  |
+
+
 ## Function: ecs_api_admin_reset() ##
 Test of GET '/status'.
 
diff --git a/test/common/agent_api_functions.sh b/test/common/agent_api_functions.sh
index 82dde44..2a2f8a7 100644
--- a/test/common/agent_api_functions.sh
+++ b/test/common/agent_api_functions.sh
@@ -2124,7 +2124,7 @@
         return 1
     fi
 	if [ ! -f $2 ]; then
-		_log_test_fail_general "Config file "$2", does not exist"
+		__log_test_fail_general "Config file "$2", does not exist"
 		return 1
 	fi
 	inputJson=$(< $2)
@@ -2160,7 +2160,7 @@
         return 1
     fi
 	if [ ! -f $2 ]; then
-		_log_test_fail_general "Config file "$2" for comparison, does not exist"
+		__log_test_fail_general "Config file "$2" for comparison, does not exist"
 		return 1
 	fi
 
diff --git a/test/common/ecs_api_functions.sh b/test/common/ecs_api_functions.sh
index cf5f580..56167b6 100644
--- a/test/common/ecs_api_functions.sh
+++ b/test/common/ecs_api_functions.sh
@@ -806,7 +806,7 @@
 				jobfile=$(cat $6)
 				jobfile=$(echo "$jobfile" | sed "s/XXXX/$3/g")
 			else
-				_log_test_fail_general "Job template file "$6", does not exist"
+				__log_test_fail_general "Job template file "$6", does not exist"
 				return 1
 			fi
 			targetJson="{\"targetUri\": \"$4\",\"jobOwner\": \"$5\",\"jobParameters\": $jobfile}"
@@ -826,7 +826,7 @@
 				jobfile=$(cat $7)
 				jobfile=$(echo "$jobfile" | sed "s/XXXX/$2/g")
 			else
-				_log_test_fail_general "Job template file "$6", does not exist"
+				__log_test_fail_general "Job template file "$6", does not exist"
 				return 1
 			fi
 			targetJson="{\"eiTypeId\": \"$3\", \"jobResultUri\": \"$4\",\"jobOwner\": \"$5\",\"jobStatusNotificationUri\": \"$6\",\"jobDefinition\": $jobfile}"
@@ -894,7 +894,7 @@
 			jobfile=$(cat $6)
 			jobfile=$(echo "$jobfile" | sed "s/XXXX/$3/g")
 		else
-			_log_test_fail_general "Job template file "$6", does not exist"
+			__log_test_fail_general "Job template file "$6", does not exist"
 			return 1
 		fi
 
@@ -913,7 +913,7 @@
 			jobfile=$(cat $7)
 			jobfile=$(echo "$jobfile" | sed "s/XXXX/$2/g")
 		else
-			_log_test_fail_general "Job template file "$7", does not exist"
+			__log_test_fail_general "Job template file "$7", does not exist"
 			return 1
 		fi
 
@@ -1357,7 +1357,7 @@
 				if [ -f ${arr[$i+1]} ]; then
 					schema=$(cat ${arr[$i+1]})
 				else
-					_log_test_fail_general "Schema file "${arr[$i+1]}", does not exist"
+					__log_test_fail_general "Schema file "${arr[$i+1]}", does not exist"
 					return 1
 				fi
 
@@ -1494,7 +1494,7 @@
 			if [ -f ${arr[$i+1]} ]; then
 				schema=$(cat ${arr[$i+1]})
 			else
-				_log_test_fail_general "Schema file "${arr[$i+1]}", does not exist"
+				__log_test_fail_general "Schema file "${arr[$i+1]}", does not exist"
 				return 1
 			fi
 			inputJson=$inputJson"{\"ei_type_identity\":\"${arr[$i]}\",\"ei_job_data_schema\":$schema}"
@@ -1613,7 +1613,7 @@
 					jobfile=$(cat ${arr[$i+4]})
 					jobfile=$(echo "$jobfile" | sed "s/XXXX/${arr[$i]}/g")
 				else
-					_log_test_fail_general "Job template file "${arr[$i+4]}", does not exist"
+					__log_test_fail_general "Job template file "${arr[$i+4]}", does not exist"
 					return 1
 				fi
 				targetJson=$targetJson"{\"ei_job_identity\":\"${arr[$i]}\",\"ei_type_identity\":\"${arr[$i+1]}\",\"target_uri\":\"${arr[$i+2]}\",\"owner\":\"${arr[$i+3]}\",\"ei_job_data\":$jobfile}"
@@ -1677,7 +1677,7 @@
 					jobfile=$(cat ${arr[$i+4]})
 					jobfile=$(echo "$jobfile" | sed "s/XXXX/${arr[$i]}/g")
 				else
-					_log_test_fail_general "Job template file "${arr[$i+4]}", does not exist"
+					__log_test_fail_general "Job template file "${arr[$i+4]}", does not exist"
 					return 1
 				fi
 				targetJson=$targetJson"{\"ei_job_identity\":\"${arr[$i]}\",\"ei_type_identity\":\"${arr[$i+1]}\",\"target_uri\":\"${arr[$i+2]}\",\"owner\":\"${arr[$i+3]}\",\"ei_job_data\":$jobfile, \"last_updated\":\"????\"}"
@@ -1710,7 +1710,7 @@
 	__log_test_start $@
 
     if [ $# -lt 1 ]; then
-		__print_err "<response-code> [<producer-id>]*|NOID" $@
+		__print_err "<response-code>" $@
 		return 1
 	fi
 	res="$(__do_curl_to_api ECS GET /status)"
@@ -1723,6 +1723,332 @@
 	return 0
 }
 
+###########################################
+######### Info data consumer API ##########
+###########################################
+#Function prefix: ecs_api_idc
+
+
+# API Test function: GET /data-consumer/v1/info-types
+# args: <response-code> [ (EMPTY | [<type-id>]+) ]
+# (Function for test scripts)
+ecs_api_idc_get_type_ids() {
+	__log_test_start $@
+
+    if [ $# -lt 1 ]; then
+		__print_err "<response-code> [ (EMPTY | [<type-id>]+) ]" $@
+		return 1
+	fi
+
+	query="/data-consumer/v1/info-types"
+    res="$(__do_curl_to_api ECS GET $query)"
+    status=${res:${#res}-3}
+
+	if [ $status -ne $1 ]; then
+		__log_test_fail_status_code $1 $status
+		return 1
+	fi
+	if [ $# -gt 1 ]; then
+		body=${res:0:${#res}-3}
+		targetJson="["
+		if [ $2 != "EMPTY" ]; then
+			for pid in ${@:2} ; do
+				if [ "$targetJson" != "[" ]; then
+					targetJson=$targetJson","
+				fi
+				targetJson=$targetJson"\"$pid\""
+			done
+		fi
+		targetJson=$targetJson"]"
+		echo " TARGET JSON: $targetJson" >> $HTTPLOG
+		res=$(python3 ../common/compare_json.py "$targetJson" "$body")
+
+		if [ $res -ne 0 ]; then
+			__log_test_fail_body
+			return 1
+		fi
+	fi
+
+	__log_test_pass
+	return 0
+}
+
+# API Test function: GET /data-consumer/v1/info-jobs
+# args: <response-code> <type-id>|NOTYPE <owner-id>|NOOWNER [ EMPTY | <job-id>+ ]
+# (Function for test scripts)
+ecs_api_idc_get_job_ids() {
+	__log_test_start $@
+
+	# Valid number of parameters 4,5,6 etc
+	if [ $# -lt 3 ]; then
+		__print_err "<response-code> <type-id>|NOTYPE  <owner-id>|NOOWNER [ EMPTY | <job-id>+ ]" $@
+		return 1
+	fi
+	search=""
+	if [ $3 != "NOWNER" ]; then
+		search="?owner="$3
+	fi
+
+	if [ $2 != "NOTYPE" ]; then
+		if [ -z "$search" ]; then
+			search="?infoTypeId="$2
+		else
+			search=$search"&infoTypeId="$2
+		fi
+	fi
+	query="/data-consumer/v1/info-jobs$search"
+
+    res="$(__do_curl_to_api ECS GET $query)"
+    status=${res:${#res}-3}
+
+	if [ $status -ne $1 ]; then
+		__log_test_fail_status_code $1 $status
+		return 1
+	fi
+
+	if [ $# -gt 3 ]; then
+		body=${res:0:${#res}-3}
+		targetJson="["
+
+		for pid in ${@:4} ; do
+			if [ "$targetJson" != "[" ]; then
+				targetJson=$targetJson","
+			fi
+			if [ $pid != "EMPTY" ]; then
+				targetJson=$targetJson"\"$pid\""
+			fi
+		done
+
+		targetJson=$targetJson"]"
+		echo " TARGET JSON: $targetJson" >> $HTTPLOG
+		res=$(python3 ../common/compare_json.py "$targetJson" "$body")
+
+		if [ $res -ne 0 ]; then
+			__log_test_fail_body
+			return 1
+		fi
+	fi
+
+	__log_test_pass
+	return 0
+}
+
+# API Test function: GET /data-consumer/v1/info-jobs/{infoJobId}
+# args: <response-code> <job-id> [<type-id> <target-url> <owner-id> <template-job-file>]
+# (Function for test scripts)
+ecs_api_idc_get_job() {
+	__log_test_start $@
+
+	if [ $# -ne 2 ] && [ $# -ne 7 ]; then
+		__print_err "<response-code> <job-id> [<type-id> <target-url> <owner-id> <notification-url> <template-job-file>]" $@
+		return 1
+	fi
+	query="/data-consumer/v1/info-jobs/$2"
+    res="$(__do_curl_to_api ECS GET $query)"
+    status=${res:${#res}-3}
+
+	if [ $status -ne $1 ]; then
+		__log_test_fail_status_code $1 $status
+		return 1
+	fi
+
+	if [ $# -eq 7 ]; then
+		body=${res:0:${#res}-3}
+
+		if [ -f $7 ]; then
+			jobfile=$(cat $7)
+			jobfile=$(echo "$jobfile" | sed "s/XXXX/$2/g")
+		else
+			__log_test_fail_general "Job template file "$6", does not exist"
+			return 1
+		fi
+		targetJson="{\"infoTypeId\": \"$3\", \"jobResultUri\": \"$4\",\"jobOwner\": \"$5\",\"jobStatusNotificationUri\": \"$6\",\"jobDefinition\": $jobfile}"
+		echo " TARGET JSON: $targetJson" >> $HTTPLOG
+		res=$(python3 ../common/compare_json.py "$targetJson" "$body")
+
+		if [ $res -ne 0 ]; then
+			__log_test_fail_body
+			return 1
+		fi
+	fi
+
+	__log_test_pass
+	return 0
+}
+
+
+# API Test function: PUT ​/data-consumer/v1/info-jobs/{infoJobId}
+# args: <response-code> <job-id> <type-id> <target-url> <owner-id> <notification-url> <template-job-file> [ VALIDATE ]
+# (Function for test scripts)
+ecs_api_idc_put_job() {
+	__log_test_start $@
+
+	if [ $# -lt 7 ] || [ $# -gt 8 ]; then
+		__print_err "<response-code> <job-id> <type-id> <target-url> <owner-id> <notification-url> <template-job-file> [ VALIDATE ]" $@
+		return 1
+	fi
+	if [ -f $7 ]; then
+		jobfile=$(cat $7)
+		jobfile=$(echo "$jobfile" | sed "s/XXXX/$2/g")
+	else
+		__log_test_fail_general "Job template file "$7", does not exist"
+		return 1
+	fi
+
+	inputJson="{\"infoTypeId\": \"$3\", \"jobResultUri\": \"$4\",\"jobOwner\": \"$5\",\"jobStatusNotificationUri\": \"$6\",\"jobDefinition\": $jobfile}"
+	file="./tmp/.p.json"
+	echo "$inputJson" > $file
+
+	query="/data-consumer/v1/info-jobs/$2"
+
+	if [ $# -eq 8 ]; then
+		if [ $8 == "VALIDATE" ]; then
+			query=$query"?typeCheck=true"
+		fi
+	fi
+
+    res="$(__do_curl_to_api ECS PUT $query $file)"
+    status=${res:${#res}-3}
+
+	if [ $status -ne $1 ]; then
+		__log_test_fail_status_code $1 $status
+		return 1
+	fi
+
+	__log_test_pass
+	return 0
+}
+
+# API Test function: DELETE ​/data-consumer/v1/info-jobs/{infoJobId}
+# args: <response-code> <job-id>
+# (Function for test scripts)
+ecs_api_idc_delete_job() {
+	__log_test_start $@
+
+	if [ $# -ne 2 ]; then
+		__print_err "<response-code> <job-id>" $@
+		return 1
+	fi
+	query="/data-consumer/v1/info-jobs/$2"
+    res="$(__do_curl_to_api ECS DELETE $query)"
+    status=${res:${#res}-3}
+
+	if [ $status -ne $1 ]; then
+		__log_test_fail_status_code $1 $status
+		return 1
+	fi
+
+	__log_test_pass
+	return 0
+}
+
+# API Test function: GET ​/data-consumer/v1/info-types/{infoTypeId}
+# args: <response-code> <type-id> [<schema-file>]
+# (Function for test scripts)
+ecs_api_idc_get_type() {
+	__log_test_start $@
+
+    if [ $# -lt 2 ] || [ $# -gt 3 ]; then
+		__print_err "<response-code> <type-id> [<schema-file>]" $@
+		return 1
+	fi
+
+	query="/data-consumer/v1/info-types/$2"
+    res="$(__do_curl_to_api ECS GET $query)"
+    status=${res:${#res}-3}
+
+	if [ $status -ne $1 ]; then
+		__log_test_fail_status_code $1 $status
+		return 1
+	fi
+
+	if [ $# -eq 3 ]; then
+		body=${res:0:${#res}-3}
+		if [ -f $3 ]; then
+			schema=$(cat $3)
+		else
+			__log_test_fail_general "Schema file "$3", does not exist"
+			return 1
+		fi
+		targetJson="{\"consumer_job_data_schema\":$schema}"
+		echo " TARGET JSON: $targetJson" >> $HTTPLOG
+		res=$(python3 ../common/compare_json.py "$targetJson" "$body")
+
+		if [ $res -ne 0 ]; then
+			__log_test_fail_body
+			return 1
+		fi
+	fi
+
+	__log_test_pass
+	return 0
+}
+
+# API Test function: GET /data-consumer/v1/info-jobs/{infoJobId}/status
+# args: <response-code> <job-id> [<status> [<timeout>]]
+# (Function for test scripts)
+ecs_api_idc_get_job_status() {
+	__log_test_start $@
+
+	if [ $# -lt 2 ] && [ $# -gt 4 ]; then
+		__print_err "<response-code> <job-id> [<status> [<timeout>]]" $@
+		return 1
+	fi
+
+	query="/data-consumer/v1/info-jobs/$2/status"
+
+	start=$SECONDS
+	for (( ; ; )); do
+		res="$(__do_curl_to_api ECS GET $query)"
+		status=${res:${#res}-3}
+
+		if [ $# -eq 4 ]; then
+			duration=$((SECONDS-start))
+			echo -ne " Response=${status} after ${duration} seconds, waiting for ${3} ${SAMELINE}"
+			if [ $duration -gt $4 ]; then
+				echo ""
+				duration=-1  #Last iteration
+			fi
+		else
+			duration=-1 #single test, no wait
+		fi
+
+		if [ $status -ne $1 ]; then
+			if [ $duration -eq -1 ]; then
+				__log_test_fail_status_code $1 $status
+				return 1
+			fi
+		fi
+		if [ $# -ge 3 ] && [ $status -eq $1 ]; then
+			body=${res:0:${#res}-3}
+			targetJson="{\"eiJobStatus\": \"$3\"}"
+			echo " TARGET JSON: $targetJson" >> $HTTPLOG
+			res=$(python3 ../common/compare_json.py "$targetJson" "$body")
+
+			if [ $res -ne 0 ]; then
+				if [ $duration -eq -1 ]; then
+					__log_test_fail_body
+					return 1
+				fi
+			else
+				duration=-1  #Goto pass
+			fi
+		fi
+		if [ $duration -eq -1 ]; then
+			if [ $# -eq 4 ]; then
+				echo ""
+			fi
+			__log_test_pass
+			return 0
+		else
+			sleep 1
+		fi
+	done
+
+	__log_test_pass
+	return 0
+}
+
 
 ##########################################
 ####          Reset jobs              ####
diff --git a/test/common/prodstub_api_functions.sh b/test/common/prodstub_api_functions.sh
index 8aae95a..6b7a3d8 100644
--- a/test/common/prodstub_api_functions.sh
+++ b/test/common/prodstub_api_functions.sh
@@ -418,7 +418,7 @@
         jobfile=$(cat $7)
         jobfile=$(echo "$jobfile" | sed "s/XXXX/$3/g")
     else
-        _log_test_fail_general "Template file "$7" for jobdata, does not exist"
+    	__log_test_fail_general "Template file "$7" for jobdata, does not exist"
         return 1
     fi
     targetJson="{\"ei_job_identity\":\"$3\",\"ei_type_identity\":\"$4\",\"target_uri\":\"$5\",\"owner\":\"$6\", \"ei_job_data\":$jobfile}"
@@ -444,7 +444,7 @@
         jobfile=$(cat $7)
         jobfile=$(echo "$jobfile" | sed "s/XXXX/$3/g")
     else
-        _log_test_fail_general "Template file "$7" for jobdata, does not exist"
+    	__log_test_fail_general "Template file "$7" for jobdata, does not exist"
         return 1
     fi
     targetJson="{\"ei_job_identity\":\"$3\",\"ei_type_identity\":\"$4\",\"target_uri\":\"$5\",\"owner\":\"$6\", \"ei_job_data\":$jobfile,\"last_updated\":\"????\"}"
diff --git a/test/common/test_env-onap-honolulu.sh b/test/common/test_env-onap-honolulu.sh
index 8407662..0797912 100755
--- a/test/common/test_env-onap-honolulu.sh
+++ b/test/common/test_env-onap-honolulu.sh
@@ -89,7 +89,7 @@
 # ECS image and tag - uses cherry release
 ECS_IMAGE_BASE="o-ran-sc/nonrtric-enrichment-coordinator-service"
 ECS_IMAGE_TAG_REMOTE_RELEASE_ORAN="1.0.1"
-
+#Note: Update var ECS_FEATURE_LEVEL if image version is changed
 
 # Control Panel image and tag - uses cherry release
 CONTROL_PANEL_IMAGE_BASE="o-ran-sc/nonrtric-controlpanel"
@@ -224,6 +224,7 @@
 ECS_CONFIG_MOUNT_PATH=/opt/app/enrichment-coordinator-service/config # Internal container path for configuration
 ECS_CONFIG_FILE=application.yaml                         # Config file name
 ECS_VERSION="V1-2"                                       # Version where the types are added in the producer registration
+ECS_FEATURE_LEVEL=""                                     # Space separated list of features
 
 MR_DMAAP_APP_NAME="dmaap-mr"                             # Name for the Dmaap MR
 MR_STUB_APP_NAME="mr-stub"                               # Name of the MR stub
diff --git a/test/common/test_env-onap-istanbul.sh b/test/common/test_env-onap-istanbul.sh
index ea7c3e0..4711dfb 100644
--- a/test/common/test_env-onap-istanbul.sh
+++ b/test/common/test_env-onap-istanbul.sh
@@ -89,7 +89,7 @@
 # ECS image and tag - uses cherry release
 ECS_IMAGE_BASE="o-ran-sc/nonrtric-enrichment-coordinator-service"
 ECS_IMAGE_TAG_REMOTE_RELEASE_ORAN="1.0.1"
-
+#Note: Update var ECS_FEATURE_LEVEL if image version is changed
 
 # Control Panel image and tag - uses cherry release
 CONTROL_PANEL_IMAGE_BASE="o-ran-sc/nonrtric-controlpanel"
@@ -224,6 +224,7 @@
 ECS_CONFIG_MOUNT_PATH=/opt/app/enrichment-coordinator-service/config # Internal container path for configuration
 ECS_CONFIG_FILE=application.yaml                         # Config file name
 ECS_VERSION="V1-2"                                       # Version where the types are added in the producer registration
+ECS_FEATURE_LEVEL=""                                     # Space separated list of features
 
 MR_DMAAP_APP_NAME="dmaap-mr"                             # Name for the Dmaap MR
 MR_STUB_APP_NAME="mr-stub"                               # Name of the MR stub
diff --git a/test/common/test_env-oran-cherry.sh b/test/common/test_env-oran-cherry.sh
index c82a5d3..91b153a 100755
--- a/test/common/test_env-oran-cherry.sh
+++ b/test/common/test_env-oran-cherry.sh
@@ -227,6 +227,7 @@
 ECS_CONFIG_MOUNT_PATH=/opt/app/enrichment-coordinator-service/config # Internal container path for configuration
 ECS_CONFIG_FILE=application.yaml                         # Config file name
 ECS_VERSION="V1-2"                                       # Version where the types are added in the producer registration
+ECS_FEATURE_LEVEL=""                                     # Space separated list of features
 
 MR_DMAAP_APP_NAME="dmaap-mr"                             # Name for the Dmaap MR
 MR_STUB_APP_NAME="mr-stub"                               # Name of the MR stub
diff --git a/test/common/test_env-oran-d-release.sh b/test/common/test_env-oran-d-release.sh
index 08925a4..bc29ac9 100755
--- a/test/common/test_env-oran-d-release.sh
+++ b/test/common/test_env-oran-d-release.sh
@@ -71,7 +71,7 @@
 ECS_IMAGE_TAG_REMOTE_SNAPSHOT="1.1.0-SNAPSHOT"
 ECS_IMAGE_TAG_REMOTE="1.1.0"
 ECS_IMAGE_TAG_REMOTE_RELEASE="1.1.0"
-
+#Note: Update var ECS_FEATURE_LEVEL if image version is changed
 
 #Control Panel image and tags
 CONTROL_PANEL_IMAGE_BASE="o-ran-sc/nonrtric-controlpanel"
@@ -247,6 +247,7 @@
 ECS_CONFIG_MOUNT_PATH=/opt/app/enrichment-coordinator-service/config # Internal container path for configuration
 ECS_CONFIG_FILE=application.yaml                         # Config file name
 ECS_VERSION="V1-2"                                       # Version where the types are decoupled from the producer registration
+ECS_FEATURE_LEVEL="INFO-TYPES"                           # Space separated list of features
 
 MR_DMAAP_APP_NAME="dmaap-mr"                             # Name for the Dmaap MR
 MR_STUB_APP_NAME="mr-stub"                               # Name of the MR stub