From 017e4339bb094e973f0065fd2fb731fff63f3594 Mon Sep 17 00:00:00 2001
From: hardy <remi.hardy@openairinterface.com>
Date: Fri, 24 Jul 2020 18:03:22 +0200
Subject: [PATCH] brought cde line arg parsing out of main.py, into a separated
 module

---
 ci-scripts/args_parse.py           | 229 +++++++++++++++++
 ci-scripts/main.py                 | 385 +++++++++++++++--------------
 ci-scripts/py_params.yaml          |   1 -
 ci-scripts/py_params_template.yaml |  97 ++++++++
 4 files changed, 524 insertions(+), 188 deletions(-)
 create mode 100644 ci-scripts/args_parse.py
 create mode 100644 ci-scripts/py_params_template.yaml

diff --git a/ci-scripts/args_parse.py b/ci-scripts/args_parse.py
new file mode 100644
index 00000000000..a36f619ee25
--- /dev/null
+++ b/ci-scripts/args_parse.py
@@ -0,0 +1,229 @@
+
+# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+# * contributor license agreements.  See the NOTICE file distributed with
+# * this work for additional information regarding copyright ownership.
+# * The OpenAirInterface Software Alliance licenses this file to You under
+# * the OAI Public License, Version 1.1  (the "License"); you may not use this file
+# * except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# *      http://www.openairinterface.org/?page_id=698
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# *-------------------------------------------------------------------------------
+# * For more information about the OpenAirInterface (OAI) Software Alliance:
+# *      contact@openairinterface.org
+# */
+#---------------------------------------------------------------------
+# Python for CI of OAI-eNB + COTS-UE
+#
+#   Required Python Version
+#     Python 3.x
+#
+#   Required Python Package
+#     pexpect
+#---------------------------------------------------------------------
+
+#-----------------------------------------------------------
+# Import Libs
+#-----------------------------------------------------------
+import sys		# arg
+import re		# reg
+import yaml
+
+
+#-----------------------------------------------------------
+# Parsing Command Line Arguements
+#-----------------------------------------------------------
+
+
+def ArgsParse(argvs,CiTestObj,RAN,HTML,ldpc,HELP):
+
+
+    py_param_file_present = False
+    py_params={}
+
+    while len(argvs) > 1:
+        myArgv = argvs.pop(1)	# 0th is this file's name
+
+	    #--help
+        if re.match('^\-\-help$', myArgv, re.IGNORECASE):
+            HELP.GenericHelp(CONST.Version)
+            sys.exit(0)
+
+	    #--apply=<filename> as parameters file, to replace inline parameters
+        elif re.match('^\-\-Apply=(.+)$', myArgv, re.IGNORECASE):
+            matchReg = re.match('^\-\-Apply=(.+)$', myArgv, re.IGNORECASE)
+            py_params_file = matchReg.group(1)
+            with open(py_params_file,'r') as file:
+          	# The FullLoader parameter handles the conversion from YAML
+        	# scalar values to Python dictionary format
+                py_params = yaml.load(file,Loader=yaml.FullLoader)
+                py_param_file_present = True #to be removed once validated
+	    		#AssignParams(py_params) #to be uncommented once validated
+
+	    #consider inline parameters
+        elif re.match('^\-\-mode=(.+)$', myArgv, re.IGNORECASE):
+            matchReg = re.match('^\-\-mode=(.+)$', myArgv, re.IGNORECASE)
+            mode = matchReg.group(1)
+        elif re.match('^\-\-eNBRepository=(.+)$|^\-\-ranRepository(.+)$', myArgv, re.IGNORECASE):
+            if re.match('^\-\-eNBRepository=(.+)$', myArgv, re.IGNORECASE):
+                matchReg = re.match('^\-\-eNBRepository=(.+)$', myArgv, re.IGNORECASE)
+            else:
+                matchReg = re.match('^\-\-ranRepository=(.+)$', myArgv, re.IGNORECASE)
+            CiTestObj.ranRepository = matchReg.group(1)
+            RAN.ranRepository=matchReg.group(1)
+            HTML.ranRepository=matchReg.group(1)
+            ldpc.ranRepository=matchReg.group(1)
+        elif re.match('^\-\-eNB_AllowMerge=(.+)$|^\-\-ranAllowMerge=(.+)$', myArgv, re.IGNORECASE):
+            if re.match('^\-\-eNB_AllowMerge=(.+)$', myArgv, re.IGNORECASE):
+                matchReg = re.match('^\-\-eNB_AllowMerge=(.+)$', myArgv, re.IGNORECASE)
+            else:
+                matchReg = re.match('^\-\-ranAllowMerge=(.+)$', myArgv, re.IGNORECASE)
+            doMerge = matchReg.group(1)
+            ldpc.ranAllowMerge=matchReg.group(1)
+            if ((doMerge == 'true') or (doMerge == 'True')):
+                CiTestObj.ranAllowMerge = True
+                RAN.ranAllowMerge=True
+                HTML.ranAllowMerge=True
+        elif re.match('^\-\-eNBBranch=(.+)$|^\-\-ranBranch=(.+)$', myArgv, re.IGNORECASE):
+            if re.match('^\-\-eNBBranch=(.+)$', myArgv, re.IGNORECASE):
+                matchReg = re.match('^\-\-eNBBranch=(.+)$', myArgv, re.IGNORECASE)
+            else:
+                matchReg = re.match('^\-\-ranBranch=(.+)$', myArgv, re.IGNORECASE)
+            CiTestObj.ranBranch = matchReg.group(1)
+            RAN.ranBranch=matchReg.group(1)
+            HTML.ranBranch=matchReg.group(1)
+            ldpc.ranBranch=matchReg.group(1)
+        elif re.match('^\-\-eNBCommitID=(.*)$|^\-\-ranCommitID=(.*)$', myArgv, re.IGNORECASE):
+            if re.match('^\-\-eNBCommitID=(.*)$', myArgv, re.IGNORECASE):
+                matchReg = re.match('^\-\-eNBCommitID=(.*)$', myArgv, re.IGNORECASE)
+            else:
+                matchReg = re.match('^\-\-ranCommitID=(.*)$', myArgv, re.IGNORECASE)
+            CiTestObj.ranCommitID = matchReg.group(1)
+            RAN.ranCommitID=matchReg.group(1)
+            HTML.ranCommitID=matchReg.group(1)
+            ldpc.ranCommitID=matchReg.group(1)
+        elif re.match('^\-\-eNBTargetBranch=(.*)$|^\-\-ranTargetBranch=(.*)$', myArgv, re.IGNORECASE):
+            if re.match('^\-\-eNBTargetBranch=(.*)$', myArgv, re.IGNORECASE):
+                matchReg = re.match('^\-\-eNBTargetBranch=(.*)$', myArgv, re.IGNORECASE)
+            else:
+                matchReg = re.match('^\-\-ranTargetBranch=(.*)$', myArgv, re.IGNORECASE)
+            CiTestObj.ranTargetBranch = matchReg.group(1)
+            RAN.ranTargetBranch=matchReg.group(1)
+            HTML.ranTargetBranch=matchReg.group(1)
+            ldpc.ranTargetBranch=matchReg.group(1)
+        elif re.match('^\-\-eNBIPAddress=(.+)$|^\-\-eNB[1-2]IPAddress=(.+)$', myArgv, re.IGNORECASE):
+            if re.match('^\-\-eNBIPAddress=(.+)$', myArgv, re.IGNORECASE):
+                matchReg = re.match('^\-\-eNBIPAddress=(.+)$', myArgv, re.IGNORECASE)
+                RAN.eNBIPAddress=matchReg.group(1)
+                ldpc.eNBIpAddr=matchReg.group(1)
+            elif re.match('^\-\-eNB1IPAddress=(.+)$', myArgv, re.IGNORECASE):
+                matchReg = re.match('^\-\-eNB1IPAddress=(.+)$', myArgv, re.IGNORECASE)
+                RAN.eNB1IPAddress=matchReg.group(1)
+            elif re.match('^\-\-eNB2IPAddress=(.+)$', myArgv, re.IGNORECASE):
+                matchReg = re.match('^\-\-eNB2IPAddress=(.+)$', myArgv, re.IGNORECASE)
+                RAN.eNB2IPAddress=matchReg.group(1)
+        elif re.match('^\-\-eNBUserName=(.+)$|^\-\-eNB[1-2]UserName=(.+)$', myArgv, re.IGNORECASE):
+            if re.match('^\-\-eNBUserName=(.+)$', myArgv, re.IGNORECASE):
+                matchReg = re.match('^\-\-eNBUserName=(.+)$', myArgv, re.IGNORECASE)
+                RAN.eNBUserName=matchReg.group(1)
+                ldpc.eNBUserName=matchReg.group(1)
+            elif re.match('^\-\-eNB1UserName=(.+)$', myArgv, re.IGNORECASE):
+                matchReg = re.match('^\-\-eNB1UserName=(.+)$', myArgv, re.IGNORECASE)
+                RAN.eNB1UserName=matchReg.group(1)
+            elif re.match('^\-\-eNB2UserName=(.+)$', myArgv, re.IGNORECASE):
+                matchReg = re.match('^\-\-eNB2UserName=(.+)$', myArgv, re.IGNORECASE)
+                RAN.eNB2UserName=matchReg.group(1)
+        elif re.match('^\-\-eNBPassword=(.+)$|^\-\-eNB[1-2]Password=(.+)$', myArgv, re.IGNORECASE):
+            if re.match('^\-\-eNBPassword=(.+)$', myArgv, re.IGNORECASE):
+                matchReg = re.match('^\-\-eNBPassword=(.+)$', myArgv, re.IGNORECASE)
+                RAN.eNBPassword=matchReg.group(1)
+                ldpc.eNBPassWord=matchReg.group(1)
+            elif re.match('^\-\-eNB1Password=(.+)$', myArgv, re.IGNORECASE):
+                matchReg = re.match('^\-\-eNB1Password=(.+)$', myArgv, re.IGNORECASE)
+                RAN.eNB1Password=matchReg.group(1)
+            elif re.match('^\-\-eNB2Password=(.+)$', myArgv, re.IGNORECASE):
+                matchReg = re.match('^\-\-eNB2Password=(.+)$', myArgv, re.IGNORECASE)
+                RAN.eNB2Password=matchReg.group(1)
+        elif re.match('^\-\-eNBSourceCodePath=(.+)$|^\-\-eNB[1-2]SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
+            if re.match('^\-\-eNBSourceCodePath=(.+)$', myArgv, re.IGNORECASE):
+                matchReg = re.match('^\-\-eNBSourceCodePath=(.+)$', myArgv, re.IGNORECASE)
+                RAN.eNBSourceCodePath=matchReg.group(1)
+                ldpc.eNBSourceCodePath=matchReg.group(1)
+            elif re.match('^\-\-eNB1SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
+                matchReg = re.match('^\-\-eNB1SourceCodePath=(.+)$', myArgv, re.IGNORECASE)
+                RAN.eNB1SourceCodePath=matchReg.group(1)
+            elif re.match('^\-\-eNB2SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
+                matchReg = re.match('^\-\-eNB2SourceCodePath=(.+)$', myArgv, re.IGNORECASE)
+                RAN.eNB2SourceCodePath=matchReg.group(1)
+        elif re.match('^\-\-EPCIPAddress=(.+)$', myArgv, re.IGNORECASE):
+            matchReg = re.match('^\-\-EPCIPAddress=(.+)$', myArgv, re.IGNORECASE)
+            EPC.IPAddress=matchReg.group(1)
+        elif re.match('^\-\-EPCUserName=(.+)$', myArgv, re.IGNORECASE):
+            matchReg = re.match('^\-\-EPCUserName=(.+)$', myArgv, re.IGNORECASE)
+            EPC.UserName=matchReg.group(1)
+        elif re.match('^\-\-EPCPassword=(.+)$', myArgv, re.IGNORECASE):
+            matchReg = re.match('^\-\-EPCPassword=(.+)$', myArgv, re.IGNORECASE)
+            EPC.Password=matchReg.group(1)
+        elif re.match('^\-\-EPCSourceCodePath=(.+)$', myArgv, re.IGNORECASE):
+            matchReg = re.match('^\-\-EPCSourceCodePath=(.+)$', myArgv, re.IGNORECASE)
+            EPC.SourceCodePath=matchReg.group(1)
+        elif re.match('^\-\-EPCType=(.+)$', myArgv, re.IGNORECASE):
+            matchReg = re.match('^\-\-EPCType=(.+)$', myArgv, re.IGNORECASE)
+            if re.match('OAI', matchReg.group(1), re.IGNORECASE) or re.match('ltebox', matchReg.group(1), re.IGNORECASE) or re.match('OAI-Rel14-CUPS', matchReg.group(1), re.IGNORECASE) or re.match('OAI-Rel14-Docker', matchReg.group(1), re.IGNORECASE):
+                EPC.Type=matchReg.group(1)
+            else:
+                sys.exit('Invalid EPC Type: ' + matchReg.group(1) + ' -- (should be OAI or ltebox or OAI-Rel14-CUPS or OAI-Rel14-Docker)')
+        elif re.match('^\-\-EPCContainerPrefix=(.+)$', myArgv, re.IGNORECASE):
+            matchReg = re.match('^\-\-EPCContainerPrefix=(.+)$', myArgv, re.IGNORECASE)
+            EPC.ContainerPrefix=matchReg.group(1)
+        elif re.match('^\-\-ADBIPAddress=(.+)$', myArgv, re.IGNORECASE):
+            matchReg = re.match('^\-\-ADBIPAddress=(.+)$', myArgv, re.IGNORECASE)
+            CiTestObj.ADBIPAddress = matchReg.group(1)
+        elif re.match('^\-\-ADBUserName=(.+)$', myArgv, re.IGNORECASE):
+            matchReg = re.match('^\-\-ADBUserName=(.+)$', myArgv, re.IGNORECASE)
+            CiTestObj.ADBUserName = matchReg.group(1)
+        elif re.match('^\-\-ADBType=(.+)$', myArgv, re.IGNORECASE):
+            matchReg = re.match('^\-\-ADBType=(.+)$', myArgv, re.IGNORECASE)
+            if re.match('centralized', matchReg.group(1), re.IGNORECASE) or re.match('distributed', matchReg.group(1), re.IGNORECASE):
+                if re.match('distributed', matchReg.group(1), re.IGNORECASE):
+                    CiTestObj.ADBCentralized = False
+                else:
+                    CiTestObj.ADBCentralized = True
+            else:
+                sys.exit('Invalid ADB Type: ' + matchReg.group(1) + ' -- (should be centralized or distributed)')
+        elif re.match('^\-\-ADBPassword=(.+)$', myArgv, re.IGNORECASE):
+            matchReg = re.match('^\-\-ADBPassword=(.+)$', myArgv, re.IGNORECASE)
+            CiTestObj.ADBPassword = matchReg.group(1)
+        elif re.match('^\-\-XMLTestFile=(.+)$', myArgv, re.IGNORECASE):
+            matchReg = re.match('^\-\-XMLTestFile=(.+)$', myArgv, re.IGNORECASE)
+            CiTestObj.testXMLfiles.append(matchReg.group(1))
+            HTML.testXMLfiles=matchReg.group(1)
+            HTML.nbTestXMLfiles=HTML.nbTestXMLfiles+1
+        elif re.match('^\-\-UEIPAddress=(.+)$', myArgv, re.IGNORECASE):
+            matchReg = re.match('^\-\-UEIPAddress=(.+)$', myArgv, re.IGNORECASE)
+            CiTestObj.UEIPAddress = matchReg.group(1)
+        elif re.match('^\-\-UEUserName=(.+)$', myArgv, re.IGNORECASE):
+            matchReg = re.match('^\-\-UEUserName=(.+)$', myArgv, re.IGNORECASE)
+            CiTestObj.UEUserName = matchReg.group(1)
+        elif re.match('^\-\-UEPassword=(.+)$', myArgv, re.IGNORECASE):
+            matchReg = re.match('^\-\-UEPassword=(.+)$', myArgv, re.IGNORECASE)
+            CiTestObj.UEPassword = matchReg.group(1)
+        elif re.match('^\-\-UESourceCodePath=(.+)$', myArgv, re.IGNORECASE):
+            matchReg = re.match('^\-\-UESourceCodePath=(.+)$', myArgv, re.IGNORECASE)
+            CiTestObj.UESourceCodePath = matchReg.group(1)
+        elif re.match('^\-\-finalStatus=(.+)$', myArgv, re.IGNORECASE):
+            matchReg = re.match('^\-\-finalStatus=(.+)$', myArgv, re.IGNORECASE)
+            finalStatus = matchReg.group(1)
+            if ((finalStatus == 'true') or (finalStatus == 'True')):
+                CiTestObj.finalStatus = True
+        else:
+            HELP.GenericHelp(CONST.Version)
+            sys.exit('Invalid Parameter: ' + myArgv)
+
+    return py_param_file_present, py_params, mode
\ No newline at end of file
diff --git a/ci-scripts/main.py b/ci-scripts/main.py
index 82a1da03901..9fc7b19d589 100644
--- a/ci-scripts/main.py
+++ b/ci-scripts/main.py
@@ -3100,11 +3100,9 @@ def CheckClassValidity(xml_class_list,action,id):
 
 #assigning parameters to object instance attributes (even if the attributes do not exist !!)
 def AssignParams(params_dict):
-	#--
-	mode=params_dict['mode']
-	#--
+
 	for key,value in params_dict.items():
-		setattr(CITestObj, key, value)
+		setattr(CiTestObj, key, value)
 		setattr(RAN, key, value)
 		setattr(HTML, key, value)
 		setattr(ldpc, key, value)
@@ -3330,191 +3328,193 @@ ldpc=cls_physim.PhySim()    #create an instance for LDPC test using GPU or CPU b
 
 
 #-----------------------------------------------------------
-# Parameter Check
+# Parsing Command Line Arguments
 #-----------------------------------------------------------
 
-argvs = sys.argv
-argc = len(argvs)
-cwd = os.getcwd()
-py_param_file_present = False
-while len(argvs) > 1:
-	myArgv = argvs.pop(1)	# 0th is this file's name
+import args_parse
+py_param_file_present, py_params, mode = args_parse.ArgsParse(sys.argv,CiTestObj,RAN,HTML,ldpc,HELP)
 
-	#--help
-	if re.match('^\-\-help$', myArgv, re.IGNORECASE):
-		HELP.GenericHelp(CONST.Version)
-		sys.exit(0)
-
-	#--apply=<filename> as parameters file, to replace inline parameters
-	elif re.match('^\-\-apply=(.+)$', myArgv, re.IGNORECASE):
-		matchReg = re.match('^\-\-apply=(.+)$', myArgv, re.IGNORECASE)
-		py_params_file = matchReg.group(1)
-		with open(py_params_file,'r') as file:
-    	# The FullLoader parameter handles the conversion from YAML
-    	# scalar values to Python dictionary format
-			py_params = yaml.load(file,Loader=yaml.FullLoader)
-			py_param_file_present = True #to be removed once validated
-			#AssignParams(py_params) #to be uncommented once validated
-
-	#consider inline parameters
-	elif re.match('^\-\-mode=(.+)$', myArgv, re.IGNORECASE):
-		matchReg = re.match('^\-\-mode=(.+)$', myArgv, re.IGNORECASE)
-		mode = matchReg.group(1)
-	elif re.match('^\-\-eNBRepository=(.+)$|^\-\-ranRepository(.+)$', myArgv, re.IGNORECASE):
-		if re.match('^\-\-eNBRepository=(.+)$', myArgv, re.IGNORECASE):
-			matchReg = re.match('^\-\-eNBRepository=(.+)$', myArgv, re.IGNORECASE)
-		else:
-			matchReg = re.match('^\-\-ranRepository=(.+)$', myArgv, re.IGNORECASE)
-		CiTestObj.ranRepository = matchReg.group(1)
-		RAN.ranRepository=matchReg.group(1)
-		HTML.ranRepository=matchReg.group(1)
-		ldpc.ranRepository=matchReg.group(1)
-	elif re.match('^\-\-eNB_AllowMerge=(.+)$|^\-\-ranAllowMerge=(.+)$', myArgv, re.IGNORECASE):
-		if re.match('^\-\-eNB_AllowMerge=(.+)$', myArgv, re.IGNORECASE):
-			matchReg = re.match('^\-\-eNB_AllowMerge=(.+)$', myArgv, re.IGNORECASE)
-		else:
-			matchReg = re.match('^\-\-ranAllowMerge=(.+)$', myArgv, re.IGNORECASE)
-		doMerge = matchReg.group(1)
-		ldpc.ranAllowMerge=matchReg.group(1)
-		if ((doMerge == 'true') or (doMerge == 'True')):
-			CiTestObj.ranAllowMerge = True
-			RAN.ranAllowMerge=True
-			HTML.ranAllowMerge=True
-	elif re.match('^\-\-eNBBranch=(.+)$|^\-\-ranBranch=(.+)$', myArgv, re.IGNORECASE):
-		if re.match('^\-\-eNBBranch=(.+)$', myArgv, re.IGNORECASE):
-			matchReg = re.match('^\-\-eNBBranch=(.+)$', myArgv, re.IGNORECASE)
-		else:
-			matchReg = re.match('^\-\-ranBranch=(.+)$', myArgv, re.IGNORECASE)
-		CiTestObj.ranBranch = matchReg.group(1)
-		RAN.ranBranch=matchReg.group(1)
-		HTML.ranBranch=matchReg.group(1)
-		ldpc.ranBranch=matchReg.group(1)
-	elif re.match('^\-\-eNBCommitID=(.*)$|^\-\-ranCommitID=(.*)$', myArgv, re.IGNORECASE):
-		if re.match('^\-\-eNBCommitID=(.*)$', myArgv, re.IGNORECASE):
-			matchReg = re.match('^\-\-eNBCommitID=(.*)$', myArgv, re.IGNORECASE)
-		else:
-			matchReg = re.match('^\-\-ranCommitID=(.*)$', myArgv, re.IGNORECASE)
-		CiTestObj.ranCommitID = matchReg.group(1)
-		RAN.ranCommitID=matchReg.group(1)
-		HTML.ranCommitID=matchReg.group(1)
-		ldpc.ranCommitID=matchReg.group(1)
-	elif re.match('^\-\-eNBTargetBranch=(.*)$|^\-\-ranTargetBranch=(.*)$', myArgv, re.IGNORECASE):
-		if re.match('^\-\-eNBTargetBranch=(.*)$', myArgv, re.IGNORECASE):
-			matchReg = re.match('^\-\-eNBTargetBranch=(.*)$', myArgv, re.IGNORECASE)
-		else:
-			matchReg = re.match('^\-\-ranTargetBranch=(.*)$', myArgv, re.IGNORECASE)
-		CiTestObj.ranTargetBranch = matchReg.group(1)
-		RAN.ranTargetBranch=matchReg.group(1)
-		HTML.ranTargetBranch=matchReg.group(1)
-		ldpc.ranTargetBranch=matchReg.group(1)
-	elif re.match('^\-\-eNBIPAddress=(.+)$|^\-\-eNB[1-2]IPAddress=(.+)$', myArgv, re.IGNORECASE):
-		if re.match('^\-\-eNBIPAddress=(.+)$', myArgv, re.IGNORECASE):
-			matchReg = re.match('^\-\-eNBIPAddress=(.+)$', myArgv, re.IGNORECASE)
-			RAN.eNBIPAddress=matchReg.group(1)
-			ldpc.eNBIpAddr=matchReg.group(1)
-		elif re.match('^\-\-eNB1IPAddress=(.+)$', myArgv, re.IGNORECASE):
-			matchReg = re.match('^\-\-eNB1IPAddress=(.+)$', myArgv, re.IGNORECASE)
-			RAN.eNB1IPAddress=matchReg.group(1)
-		elif re.match('^\-\-eNB2IPAddress=(.+)$', myArgv, re.IGNORECASE):
-			matchReg = re.match('^\-\-eNB2IPAddress=(.+)$', myArgv, re.IGNORECASE)
-			RAN.eNB2IPAddress=matchReg.group(1)
-	elif re.match('^\-\-eNBUserName=(.+)$|^\-\-eNB[1-2]UserName=(.+)$', myArgv, re.IGNORECASE):
-		if re.match('^\-\-eNBUserName=(.+)$', myArgv, re.IGNORECASE):
-			matchReg = re.match('^\-\-eNBUserName=(.+)$', myArgv, re.IGNORECASE)
-			RAN.eNBUserName=matchReg.group(1)
-			ldpc.eNBUserName=matchReg.group(1)
-		elif re.match('^\-\-eNB1UserName=(.+)$', myArgv, re.IGNORECASE):
-			matchReg = re.match('^\-\-eNB1UserName=(.+)$', myArgv, re.IGNORECASE)
-			RAN.eNB1UserName=matchReg.group(1)
-		elif re.match('^\-\-eNB2UserName=(.+)$', myArgv, re.IGNORECASE):
-			matchReg = re.match('^\-\-eNB2UserName=(.+)$', myArgv, re.IGNORECASE)
-			RAN.eNB2UserName=matchReg.group(1)
-	elif re.match('^\-\-eNBPassword=(.+)$|^\-\-eNB[1-2]Password=(.+)$', myArgv, re.IGNORECASE):
-		if re.match('^\-\-eNBPassword=(.+)$', myArgv, re.IGNORECASE):
-			matchReg = re.match('^\-\-eNBPassword=(.+)$', myArgv, re.IGNORECASE)
-			RAN.eNBPassword=matchReg.group(1)
-			ldpc.eNBPassWord=matchReg.group(1)
-		elif re.match('^\-\-eNB1Password=(.+)$', myArgv, re.IGNORECASE):
-			matchReg = re.match('^\-\-eNB1Password=(.+)$', myArgv, re.IGNORECASE)
-			RAN.eNB1Password=matchReg.group(1)
-		elif re.match('^\-\-eNB2Password=(.+)$', myArgv, re.IGNORECASE):
-			matchReg = re.match('^\-\-eNB2Password=(.+)$', myArgv, re.IGNORECASE)
-			RAN.eNB2Password=matchReg.group(1)
-	elif re.match('^\-\-eNBSourceCodePath=(.+)$|^\-\-eNB[1-2]SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
-		if re.match('^\-\-eNBSourceCodePath=(.+)$', myArgv, re.IGNORECASE):
-			matchReg = re.match('^\-\-eNBSourceCodePath=(.+)$', myArgv, re.IGNORECASE)
-			RAN.eNBSourceCodePath=matchReg.group(1)
-			ldpc.eNBSourceCodePath=matchReg.group(1)
-		elif re.match('^\-\-eNB1SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
-			matchReg = re.match('^\-\-eNB1SourceCodePath=(.+)$', myArgv, re.IGNORECASE)
-			RAN.eNB1SourceCodePath=matchReg.group(1)
-		elif re.match('^\-\-eNB2SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
-			matchReg = re.match('^\-\-eNB2SourceCodePath=(.+)$', myArgv, re.IGNORECASE)
-			RAN.eNB2SourceCodePath=matchReg.group(1)
-	elif re.match('^\-\-EPCIPAddress=(.+)$', myArgv, re.IGNORECASE):
-		matchReg = re.match('^\-\-EPCIPAddress=(.+)$', myArgv, re.IGNORECASE)
-		EPC.IPAddress=matchReg.group(1)
-	elif re.match('^\-\-EPCUserName=(.+)$', myArgv, re.IGNORECASE):
-		matchReg = re.match('^\-\-EPCUserName=(.+)$', myArgv, re.IGNORECASE)
-		EPC.UserName=matchReg.group(1)
-	elif re.match('^\-\-EPCPassword=(.+)$', myArgv, re.IGNORECASE):
-		matchReg = re.match('^\-\-EPCPassword=(.+)$', myArgv, re.IGNORECASE)
-		EPC.Password=matchReg.group(1)
-	elif re.match('^\-\-EPCSourceCodePath=(.+)$', myArgv, re.IGNORECASE):
-		matchReg = re.match('^\-\-EPCSourceCodePath=(.+)$', myArgv, re.IGNORECASE)
-		EPC.SourceCodePath=matchReg.group(1)
-	elif re.match('^\-\-EPCType=(.+)$', myArgv, re.IGNORECASE):
-		matchReg = re.match('^\-\-EPCType=(.+)$', myArgv, re.IGNORECASE)
-		if re.match('OAI', matchReg.group(1), re.IGNORECASE) or re.match('ltebox', matchReg.group(1), re.IGNORECASE) or re.match('OAI-Rel14-CUPS', matchReg.group(1), re.IGNORECASE) or re.match('OAI-Rel14-Docker', matchReg.group(1), re.IGNORECASE):
-			EPC.Type=matchReg.group(1)
-		else:
-			sys.exit('Invalid EPC Type: ' + matchReg.group(1) + ' -- (should be OAI or ltebox or OAI-Rel14-CUPS or OAI-Rel14-Docker)')
-	elif re.match('^\-\-EPCContainerPrefix=(.+)$', myArgv, re.IGNORECASE):
-		matchReg = re.match('^\-\-EPCContainerPrefix=(.+)$', myArgv, re.IGNORECASE)
-		EPC.ContainerPrefix=matchReg.group(1)
-	elif re.match('^\-\-ADBIPAddress=(.+)$', myArgv, re.IGNORECASE):
-		matchReg = re.match('^\-\-ADBIPAddress=(.+)$', myArgv, re.IGNORECASE)
-		CiTestObj.ADBIPAddress = matchReg.group(1)
-	elif re.match('^\-\-ADBUserName=(.+)$', myArgv, re.IGNORECASE):
-		matchReg = re.match('^\-\-ADBUserName=(.+)$', myArgv, re.IGNORECASE)
-		CiTestObj.ADBUserName = matchReg.group(1)
-	elif re.match('^\-\-ADBType=(.+)$', myArgv, re.IGNORECASE):
-		matchReg = re.match('^\-\-ADBType=(.+)$', myArgv, re.IGNORECASE)
-		if re.match('centralized', matchReg.group(1), re.IGNORECASE) or re.match('distributed', matchReg.group(1), re.IGNORECASE):
-			if re.match('distributed', matchReg.group(1), re.IGNORECASE):
-				CiTestObj.ADBCentralized = False
-			else:
-				CiTestObj.ADBCentralized = True
-		else:
-			sys.exit('Invalid ADB Type: ' + matchReg.group(1) + ' -- (should be centralized or distributed)')
-	elif re.match('^\-\-ADBPassword=(.+)$', myArgv, re.IGNORECASE):
-		matchReg = re.match('^\-\-ADBPassword=(.+)$', myArgv, re.IGNORECASE)
-		CiTestObj.ADBPassword = matchReg.group(1)
-	elif re.match('^\-\-XMLTestFile=(.+)$', myArgv, re.IGNORECASE):
-		matchReg = re.match('^\-\-XMLTestFile=(.+)$', myArgv, re.IGNORECASE)
-		CiTestObj.testXMLfiles.append(matchReg.group(1))
-		HTML.testXMLfiles=matchReg.group(1)
-		HTML.nbTestXMLfiles=HTML.nbTestXMLfiles+1
-	elif re.match('^\-\-UEIPAddress=(.+)$', myArgv, re.IGNORECASE):
-		matchReg = re.match('^\-\-UEIPAddress=(.+)$', myArgv, re.IGNORECASE)
-		CiTestObj.UEIPAddress = matchReg.group(1)
-	elif re.match('^\-\-UEUserName=(.+)$', myArgv, re.IGNORECASE):
-		matchReg = re.match('^\-\-UEUserName=(.+)$', myArgv, re.IGNORECASE)
-		CiTestObj.UEUserName = matchReg.group(1)
-	elif re.match('^\-\-UEPassword=(.+)$', myArgv, re.IGNORECASE):
-		matchReg = re.match('^\-\-UEPassword=(.+)$', myArgv, re.IGNORECASE)
-		CiTestObj.UEPassword = matchReg.group(1)
-	elif re.match('^\-\-UESourceCodePath=(.+)$', myArgv, re.IGNORECASE):
-		matchReg = re.match('^\-\-UESourceCodePath=(.+)$', myArgv, re.IGNORECASE)
-		CiTestObj.UESourceCodePath = matchReg.group(1)
-	elif re.match('^\-\-finalStatus=(.+)$', myArgv, re.IGNORECASE):
-		matchReg = re.match('^\-\-finalStatus=(.+)$', myArgv, re.IGNORECASE)
-		finalStatus = matchReg.group(1)
-		if ((finalStatus == 'true') or (finalStatus == 'True')):
-			CiTestObj.finalStatus = True
-	else:
-		HELP.GenericHelp(CONST.Version)
-		sys.exit('Invalid Parameter: ' + myArgv)
+#argvs = sys.argv
+#py_param_file_present = False
+#
+#while len(argvs) > 1:
+#	myArgv = argvs.pop(1)	# 0th is this file's name
+#
+#	#--help
+#	if re.match('^\-\-help$', myArgv, re.IGNORECASE):
+#		HELP.GenericHelp(CONST.Version)
+#		sys.exit(0)
+#
+#	#--apply=<filename> as parameters file, to replace inline parameters
+#	elif re.match('^\-\-Apply=(.+)$', myArgv, re.IGNORECASE):
+#		matchReg = re.match('^\-\-Apply=(.+)$', myArgv, re.IGNORECASE)
+#		py_params_file = matchReg.group(1)
+#		with open(py_params_file,'r') as file:
+#    	# The FullLoader parameter handles the conversion from YAML
+#    	# scalar values to Python dictionary format
+#			py_params = yaml.load(file,Loader=yaml.FullLoader)
+#			py_param_file_present = True #to be removed once validated
+#			#AssignParams(py_params) #to be uncommented once validated
+#
+#	#consider inline parameters
+#	elif re.match('^\-\-mode=(.+)$', myArgv, re.IGNORECASE):
+#		matchReg = re.match('^\-\-mode=(.+)$', myArgv, re.IGNORECASE)
+#		mode = matchReg.group(1)
+#	elif re.match('^\-\-eNBRepository=(.+)$|^\-\-ranRepository(.+)$', myArgv, re.IGNORECASE):
+#		if re.match('^\-\-eNBRepository=(.+)$', myArgv, re.IGNORECASE):
+#			matchReg = re.match('^\-\-eNBRepository=(.+)$', myArgv, re.IGNORECASE)
+#		else:
+#			matchReg = re.match('^\-\-ranRepository=(.+)$', myArgv, re.IGNORECASE)
+#		CiTestObj.ranRepository = matchReg.group(1)
+#		RAN.ranRepository=matchReg.group(1)
+#		HTML.ranRepository=matchReg.group(1)
+#		ldpc.ranRepository=matchReg.group(1)
+#	elif re.match('^\-\-eNB_AllowMerge=(.+)$|^\-\-ranAllowMerge=(.+)$', myArgv, re.IGNORECASE):
+#		if re.match('^\-\-eNB_AllowMerge=(.+)$', myArgv, re.IGNORECASE):
+#			matchReg = re.match('^\-\-eNB_AllowMerge=(.+)$', myArgv, re.IGNORECASE)
+#		else:
+#			matchReg = re.match('^\-\-ranAllowMerge=(.+)$', myArgv, re.IGNORECASE)
+#		doMerge = matchReg.group(1)
+#		ldpc.ranAllowMerge=matchReg.group(1)
+#		if ((doMerge == 'true') or (doMerge == 'True')):
+#			CiTestObj.ranAllowMerge = True
+#			RAN.ranAllowMerge=True
+#			HTML.ranAllowMerge=True
+#	elif re.match('^\-\-eNBBranch=(.+)$|^\-\-ranBranch=(.+)$', myArgv, re.IGNORECASE):
+#		if re.match('^\-\-eNBBranch=(.+)$', myArgv, re.IGNORECASE):
+#			matchReg = re.match('^\-\-eNBBranch=(.+)$', myArgv, re.IGNORECASE)
+#		else:
+#			matchReg = re.match('^\-\-ranBranch=(.+)$', myArgv, re.IGNORECASE)
+#		CiTestObj.ranBranch = matchReg.group(1)
+#		RAN.ranBranch=matchReg.group(1)
+#		HTML.ranBranch=matchReg.group(1)
+#		ldpc.ranBranch=matchReg.group(1)
+#	elif re.match('^\-\-eNBCommitID=(.*)$|^\-\-ranCommitID=(.*)$', myArgv, re.IGNORECASE):
+#		if re.match('^\-\-eNBCommitID=(.*)$', myArgv, re.IGNORECASE):
+#			matchReg = re.match('^\-\-eNBCommitID=(.*)$', myArgv, re.IGNORECASE)
+#		else:
+#			matchReg = re.match('^\-\-ranCommitID=(.*)$', myArgv, re.IGNORECASE)
+#		CiTestObj.ranCommitID = matchReg.group(1)
+#		RAN.ranCommitID=matchReg.group(1)
+#		HTML.ranCommitID=matchReg.group(1)
+#		ldpc.ranCommitID=matchReg.group(1)
+#	elif re.match('^\-\-eNBTargetBranch=(.*)$|^\-\-ranTargetBranch=(.*)$', myArgv, re.IGNORECASE):
+#		if re.match('^\-\-eNBTargetBranch=(.*)$', myArgv, re.IGNORECASE):
+#			matchReg = re.match('^\-\-eNBTargetBranch=(.*)$', myArgv, re.IGNORECASE)
+#		else:
+#			matchReg = re.match('^\-\-ranTargetBranch=(.*)$', myArgv, re.IGNORECASE)
+#		CiTestObj.ranTargetBranch = matchReg.group(1)
+#		RAN.ranTargetBranch=matchReg.group(1)
+#		HTML.ranTargetBranch=matchReg.group(1)
+#		ldpc.ranTargetBranch=matchReg.group(1)
+#	elif re.match('^\-\-eNBIPAddress=(.+)$|^\-\-eNB[1-2]IPAddress=(.+)$', myArgv, re.IGNORECASE):
+#		if re.match('^\-\-eNBIPAddress=(.+)$', myArgv, re.IGNORECASE):
+#			matchReg = re.match('^\-\-eNBIPAddress=(.+)$', myArgv, re.IGNORECASE)
+#			RAN.eNBIPAddress=matchReg.group(1)
+#			ldpc.eNBIpAddr=matchReg.group(1)
+#		elif re.match('^\-\-eNB1IPAddress=(.+)$', myArgv, re.IGNORECASE):
+#			matchReg = re.match('^\-\-eNB1IPAddress=(.+)$', myArgv, re.IGNORECASE)
+#			RAN.eNB1IPAddress=matchReg.group(1)
+#		elif re.match('^\-\-eNB2IPAddress=(.+)$', myArgv, re.IGNORECASE):
+#			matchReg = re.match('^\-\-eNB2IPAddress=(.+)$', myArgv, re.IGNORECASE)
+#			RAN.eNB2IPAddress=matchReg.group(1)
+#	elif re.match('^\-\-eNBUserName=(.+)$|^\-\-eNB[1-2]UserName=(.+)$', myArgv, re.IGNORECASE):
+#		if re.match('^\-\-eNBUserName=(.+)$', myArgv, re.IGNORECASE):
+#			matchReg = re.match('^\-\-eNBUserName=(.+)$', myArgv, re.IGNORECASE)
+#			RAN.eNBUserName=matchReg.group(1)
+#			ldpc.eNBUserName=matchReg.group(1)
+#		elif re.match('^\-\-eNB1UserName=(.+)$', myArgv, re.IGNORECASE):
+#			matchReg = re.match('^\-\-eNB1UserName=(.+)$', myArgv, re.IGNORECASE)
+#			RAN.eNB1UserName=matchReg.group(1)
+#		elif re.match('^\-\-eNB2UserName=(.+)$', myArgv, re.IGNORECASE):
+#			matchReg = re.match('^\-\-eNB2UserName=(.+)$', myArgv, re.IGNORECASE)
+#			RAN.eNB2UserName=matchReg.group(1)
+#	elif re.match('^\-\-eNBPassword=(.+)$|^\-\-eNB[1-2]Password=(.+)$', myArgv, re.IGNORECASE):
+#		if re.match('^\-\-eNBPassword=(.+)$', myArgv, re.IGNORECASE):
+#			matchReg = re.match('^\-\-eNBPassword=(.+)$', myArgv, re.IGNORECASE)
+#			RAN.eNBPassword=matchReg.group(1)
+#			ldpc.eNBPassWord=matchReg.group(1)
+#		elif re.match('^\-\-eNB1Password=(.+)$', myArgv, re.IGNORECASE):
+#			matchReg = re.match('^\-\-eNB1Password=(.+)$', myArgv, re.IGNORECASE)
+#			RAN.eNB1Password=matchReg.group(1)
+#		elif re.match('^\-\-eNB2Password=(.+)$', myArgv, re.IGNORECASE):
+#			matchReg = re.match('^\-\-eNB2Password=(.+)$', myArgv, re.IGNORECASE)
+#			RAN.eNB2Password=matchReg.group(1)
+#	elif re.match('^\-\-eNBSourceCodePath=(.+)$|^\-\-eNB[1-2]SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
+#		if re.match('^\-\-eNBSourceCodePath=(.+)$', myArgv, re.IGNORECASE):
+#			matchReg = re.match('^\-\-eNBSourceCodePath=(.+)$', myArgv, re.IGNORECASE)
+#			RAN.eNBSourceCodePath=matchReg.group(1)
+#			ldpc.eNBSourceCodePath=matchReg.group(1)
+#		elif re.match('^\-\-eNB1SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
+#			matchReg = re.match('^\-\-eNB1SourceCodePath=(.+)$', myArgv, re.IGNORECASE)
+#			RAN.eNB1SourceCodePath=matchReg.group(1)
+#		elif re.match('^\-\-eNB2SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
+#			matchReg = re.match('^\-\-eNB2SourceCodePath=(.+)$', myArgv, re.IGNORECASE)
+#			RAN.eNB2SourceCodePath=matchReg.group(1)
+#	elif re.match('^\-\-EPCIPAddress=(.+)$', myArgv, re.IGNORECASE):
+#		matchReg = re.match('^\-\-EPCIPAddress=(.+)$', myArgv, re.IGNORECASE)
+#		EPC.IPAddress=matchReg.group(1)
+#	elif re.match('^\-\-EPCUserName=(.+)$', myArgv, re.IGNORECASE):
+#		matchReg = re.match('^\-\-EPCUserName=(.+)$', myArgv, re.IGNORECASE)
+#		EPC.UserName=matchReg.group(1)
+#	elif re.match('^\-\-EPCPassword=(.+)$', myArgv, re.IGNORECASE):
+#		matchReg = re.match('^\-\-EPCPassword=(.+)$', myArgv, re.IGNORECASE)
+#		EPC.Password=matchReg.group(1)
+#	elif re.match('^\-\-EPCSourceCodePath=(.+)$', myArgv, re.IGNORECASE):
+#		matchReg = re.match('^\-\-EPCSourceCodePath=(.+)$', myArgv, re.IGNORECASE)
+#		EPC.SourceCodePath=matchReg.group(1)
+#	elif re.match('^\-\-EPCType=(.+)$', myArgv, re.IGNORECASE):
+#		matchReg = re.match('^\-\-EPCType=(.+)$', myArgv, re.IGNORECASE)
+#		if re.match('OAI', matchReg.group(1), re.IGNORECASE) or re.match('ltebox', matchReg.group(1), re.IGNORECASE) or re.match('OAI-Rel14-CUPS', matchReg.group(1), re.IGNORECASE) or re.match('OAI-Rel14-Docker', matchReg.group(1), re.IGNORECASE):
+#			EPC.Type=matchReg.group(1)
+#		else:
+#			sys.exit('Invalid EPC Type: ' + matchReg.group(1) + ' -- (should be OAI or ltebox or OAI-Rel14-CUPS or OAI-Rel14-Docker)')
+#	elif re.match('^\-\-EPCContainerPrefix=(.+)$', myArgv, re.IGNORECASE):
+#		matchReg = re.match('^\-\-EPCContainerPrefix=(.+)$', myArgv, re.IGNORECASE)
+#		EPC.ContainerPrefix=matchReg.group(1)
+#	elif re.match('^\-\-ADBIPAddress=(.+)$', myArgv, re.IGNORECASE):
+#		matchReg = re.match('^\-\-ADBIPAddress=(.+)$', myArgv, re.IGNORECASE)
+#		CiTestObj.ADBIPAddress = matchReg.group(1)
+#	elif re.match('^\-\-ADBUserName=(.+)$', myArgv, re.IGNORECASE):
+#		matchReg = re.match('^\-\-ADBUserName=(.+)$', myArgv, re.IGNORECASE)
+#		CiTestObj.ADBUserName = matchReg.group(1)
+#	elif re.match('^\-\-ADBType=(.+)$', myArgv, re.IGNORECASE):
+#		matchReg = re.match('^\-\-ADBType=(.+)$', myArgv, re.IGNORECASE)
+#		if re.match('centralized', matchReg.group(1), re.IGNORECASE) or re.match('distributed', matchReg.group(1), re.IGNORECASE):
+#			if re.match('distributed', matchReg.group(1), re.IGNORECASE):
+#				CiTestObj.ADBCentralized = False
+#			else:
+#				CiTestObj.ADBCentralized = True
+#		else:
+#			sys.exit('Invalid ADB Type: ' + matchReg.group(1) + ' -- (should be centralized or distributed)')
+#	elif re.match('^\-\-ADBPassword=(.+)$', myArgv, re.IGNORECASE):
+#		matchReg = re.match('^\-\-ADBPassword=(.+)$', myArgv, re.IGNORECASE)
+#		CiTestObj.ADBPassword = matchReg.group(1)
+#	elif re.match('^\-\-XMLTestFile=(.+)$', myArgv, re.IGNORECASE):
+#		matchReg = re.match('^\-\-XMLTestFile=(.+)$', myArgv, re.IGNORECASE)
+#		CiTestObj.testXMLfiles.append(matchReg.group(1))
+#		HTML.testXMLfiles=matchReg.group(1)
+#		HTML.nbTestXMLfiles=HTML.nbTestXMLfiles+1
+#	elif re.match('^\-\-UEIPAddress=(.+)$', myArgv, re.IGNORECASE):
+#		matchReg = re.match('^\-\-UEIPAddress=(.+)$', myArgv, re.IGNORECASE)
+#		CiTestObj.UEIPAddress = matchReg.group(1)
+#	elif re.match('^\-\-UEUserName=(.+)$', myArgv, re.IGNORECASE):
+#		matchReg = re.match('^\-\-UEUserName=(.+)$', myArgv, re.IGNORECASE)
+#		CiTestObj.UEUserName = matchReg.group(1)
+#	elif re.match('^\-\-UEPassword=(.+)$', myArgv, re.IGNORECASE):
+#		matchReg = re.match('^\-\-UEPassword=(.+)$', myArgv, re.IGNORECASE)
+#		CiTestObj.UEPassword = matchReg.group(1)
+#	elif re.match('^\-\-UESourceCodePath=(.+)$', myArgv, re.IGNORECASE):
+#		matchReg = re.match('^\-\-UESourceCodePath=(.+)$', myArgv, re.IGNORECASE)
+#		CiTestObj.UESourceCodePath = matchReg.group(1)
+#	elif re.match('^\-\-finalStatus=(.+)$', myArgv, re.IGNORECASE):
+#		matchReg = re.match('^\-\-finalStatus=(.+)$', myArgv, re.IGNORECASE)
+#		finalStatus = matchReg.group(1)
+#		if ((finalStatus == 'true') or (finalStatus == 'True')):
+#			CiTestObj.finalStatus = True
+#	else:
+#		HELP.GenericHelp(CONST.Version)
+#		sys.exit('Invalid Parameter: ' + myArgv)
 
 
 #-----------------------------------------------------------
@@ -3522,7 +3522,15 @@ while len(argvs) > 1:
 #-----------------------------------------------------------
 #temporary solution for testing:
 if py_param_file_present == True:
-	AssignParams(py_params) 
+	AssignParams(py_params)
+
+#for debug
+print(RAN.__dict__) 
+print(CiTestObj.__dict__) 
+print(HTML.__dict__) 
+print(ldpc.__dict__) 
+#for debug
+
 
 #-----------------------------------------------------------
 # COTS UE instanciation
@@ -3534,6 +3542,7 @@ COTS_UE=cls_cots_ue.CotsUe('oppo', CiTestObj.UEIPAddress, CiTestObj.UEUserName,C
 #-----------------------------------------------------------
 # XML class (action) analysis
 #-----------------------------------------------------------
+cwd = os.getcwd()
 
 if re.match('^TerminateeNB$', mode, re.IGNORECASE):
 	if RAN.eNBIPAddress == '' or RAN.eNBUserName == '' or RAN.eNBPassword == '':
@@ -3851,6 +3860,8 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
 	else:
 		logging.info('Testsuite passed after ' + str(CiTestObj.FailReportCnt) + ' time(s)')
 		HTML.CreateHtmlTabFooter(True)
+elif re.match('^LoadParams$', mode, re.IGNORECASE):
+	pass
 else:
 	HELP.GenericHelp(CONST.Version)
 	sys.exit('Invalid mode')
diff --git a/ci-scripts/py_params.yaml b/ci-scripts/py_params.yaml
index 68471763f73..303d5d10066 100644
--- a/ci-scripts/py_params.yaml
+++ b/ci-scripts/py_params.yaml
@@ -1,4 +1,3 @@
-mode : a
 eNBRepository : b
 ranRepository : c
 eNB_AllowMerge : 
diff --git a/ci-scripts/py_params_template.yaml b/ci-scripts/py_params_template.yaml
new file mode 100644
index 00000000000..aaf31c15765
--- /dev/null
+++ b/ci-scripts/py_params_template.yaml
@@ -0,0 +1,97 @@
+eNBRepository : b
+ranRepository : c
+eNB_AllowMerge : 
+ranAllowMerge : 
+eNBBranch : f
+ranBranch : g
+eNBCommitID :  
+ranCommitID : i
+eNBTargetBranch : j
+ranTargetBranch : k
+
+
+RAN:
+  RAN_inst_0:
+    name : RAN_1
+    nodes : 
+    - type : eNB
+      IPAddress : 001.1.1
+      UserName : toto
+      Password : qwe
+      SourceCodePath : l
+    - type : gNB
+      IPAddress : 002.2.2
+      UserName : tata
+      Password : asd
+      SourceCodePath : m  
+    - type : eNB
+      IPAddress : 003.3.3
+      UserName : titi
+      Password : zxc
+      SourceCodePath : n
+    - type : gNB
+      IPAddress : 004.4.4
+      UserName : caca
+      Password : pepe
+      SourceCodePath :  o        
+  RAN_inst_1:
+    name : RAN_2
+    nodes : 
+    - type : eNB
+      IPAddress : 101.1.1
+      UserName : toto
+      Password : qwe
+      SourceCodePath : l
+    - type : gNB
+      IPAddress : 102.2.2
+      UserName : zaza
+      Password : asd
+      SourceCodePath : m  
+    - type : eNB
+      IPAddress : 103.3.3
+      UserName : zizi
+      Password : zxc
+      SourceCodePath : n
+    - type : gNB
+      IPAddress : 104.4.4
+      UserName : aaaa
+      Password : pepe
+      SourceCodePath :  o   
+
+
+
+EPC:
+  EPC_inst_0:
+    EPCIPAddress : p
+    EPCUserName : q
+    EPCPassword : r
+    EPCSourceCodePath : s
+    EPCType : t
+    EPCContainerPrefix : u
+
+ADB:
+  ADBIPAddress : v
+  ADBUserName : w
+  ADBType : x
+  ADBPassword : y
+
+
+UE:
+  UE_inst_0:
+    name : UE_1 
+    type :
+    UEIPAddress : qqq  
+    UEUserName : www
+    UEPassword : eee
+    UESourceCodePath : yyy
+  UE_inst_1:
+    name : UE_2
+    type :
+    UEIPAddress : bloblob  
+    UEUserName : gwou
+    UEPassword : zebu
+    UESourceCodePath : pop
+
+
+XMLTestFile : z
+finalStatus : bbb
\ No newline at end of file
-- 
GitLab