From 86225c3b8fd4fb61ec8bfadb9cb5d3652a5e80df Mon Sep 17 00:00:00 2001
From: Remi Hardy <remi.hardy@openairinterface.org>
Date: Mon, 21 Jun 2021 14:35:14 +0200
Subject: [PATCH] implement optional Qlog trace

---
 ci-scripts/Jenkinsfile-trig-nsa          | 25 ++++++++----
 ci-scripts/cls_module_ue.py              | 48 +++++++++++++-----------
 ci-scripts/cls_oaicitest.py              |  7 +++-
 ci-scripts/main.py                       |  5 ++-
 ci-scripts/xml_files/fr1_nsa_quectel.xml |  1 +
 5 files changed, 52 insertions(+), 34 deletions(-)

diff --git a/ci-scripts/Jenkinsfile-trig-nsa b/ci-scripts/Jenkinsfile-trig-nsa
index 8f623ffb05..1c479a5a2a 100644
--- a/ci-scripts/Jenkinsfile-trig-nsa
+++ b/ci-scripts/Jenkinsfile-trig-nsa
@@ -55,14 +55,23 @@ pipeline {
                             string(name: 'eNB_TargetBranch', value: String.valueOf(TARGET_BRANCH)),
                             booleanParam(name: 'eNB_AllowMergeRequestProcess', value: Boolean.valueOf(ALLOW_MERGE))
                         ]
-                        //calling Benetel sub job
-                        //build job: "RAN-CI-BENETEL", wait : false, propagate : false, parameters: [
-                        //    string(name: 'eNB_MR', value: String.valueOf(MR)),                          
-                        //    string(name: 'eNB_Branch', value: String.valueOf(SRC_BRANCH)),
-                        //    string(name: 'eNB_CommitID', value: String.valueOf(COMMIT_ID)),
-                        //    string(name: 'eNB_TargetBranch', value: String.valueOf(TARGET_BRANCH)),
-                        //    booleanParam(name: 'eNB_AllowMergeRequestProcess', value: Boolean.valueOf(ALLOW_MERGE))
-                        //]
+                        //calling NSA long sub job
+                        build job: "RAN-NSA-Mini-Module-Long", wait : false, propagate : false, parameters: [
+                            string(name: 'eNB_MR', value: String.valueOf(MR)),                          
+                            string(name: 'eNB_Branch', value: String.valueOf(SRC_BRANCH)),
+                            string(name: 'eNB_CommitID', value: String.valueOf(COMMIT_ID)),
+                            string(name: 'eNB_TargetBranch', value: String.valueOf(TARGET_BRANCH)),
+                            booleanParam(name: 'eNB_AllowMergeRequestProcess', value: Boolean.valueOf(ALLOW_MERGE))
+                        ]
+                        //calling NSA attach/detach job
+                        build job: "RAN-NSA-Mini-Module-Attach-Detach", wait : false, propagate : false, parameters: [
+                            string(name: 'eNB_MR', value: String.valueOf(MR)),                          
+                            string(name: 'eNB_Branch', value: String.valueOf(SRC_BRANCH)),
+                            string(name: 'eNB_CommitID', value: String.valueOf(COMMIT_ID)),
+                            string(name: 'eNB_TargetBranch', value: String.valueOf(TARGET_BRANCH)),
+                            booleanParam(name: 'eNB_AllowMergeRequestProcess', value: Boolean.valueOf(ALLOW_MERGE))
+                        ]
+
                     }
                 }                                  
             }   
diff --git a/ci-scripts/cls_module_ue.py b/ci-scripts/cls_module_ue.py
index cb5c81e271..0ad493ad40 100644
--- a/ci-scripts/cls_module_ue.py
+++ b/ci-scripts/cls_module_ue.py
@@ -50,7 +50,8 @@ class Module_UE:
 			setattr(self, k, v)
 		self.UEIPAddress = ""
 		#dictionary linking command names and related module scripts
-		self.cmd_dict= {"wup": self.WakeupScript,"detach":self.DetachScript}#dictionary of function scripts		
+		self.cmd_dict= {"wup": self.WakeupScript,"detach":self.DetachScript}#dictionary of function scripts
+		self.ue_trace=''		
 
 
 
@@ -130,13 +131,14 @@ class Module_UE:
 				return -1
 
 	def EnableTrace(self):
-		mySSH = sshconnection.SSHConnection()
-		mySSH.open(self.HostIPAddress, self.HostUsername, self.HostPassword)
-		#delete old artifacts
-		mySSH.command('echo ' + self.HostPassword + ' | sudo -S rm -rf ci_qlog','\$',5)
-		#start Trace, artifact is created in home dir
-		mySSH.command('echo $USER; nohup sudo -E QLog/QLog -s ci_qlog -f NR5G.cfg &','\$', 5)
-		mySSH.close()
+		if self.ue_trace=="yes":
+			mySSH = sshconnection.SSHConnection()
+			mySSH.open(self.HostIPAddress, self.HostUsername, self.HostPassword)
+			#delete old artifacts
+			mySSH.command('echo ' + self.HostPassword + ' | sudo -S rm -rf ci_qlog','\$',5)
+			#start Trace, artifact is created in home dir
+			mySSH.command('echo $USER; nohup sudo -E QLog/QLog -s ci_qlog -f NR5G.cfg &','\$', 5)
+			mySSH.close()
 
 	def DisableTrace(self):
 		mySSH = sshconnection.SSHConnection()
@@ -153,18 +155,20 @@ class Module_UE:
 
 
 	def LogCollect(self):
-		mySSH = sshconnection.SSHConnection()
-		mySSH.open(self.HostIPAddress, self.HostUsername, self.HostPassword)
-		#archive qlog to USB stick in /media/usb-drive/ci_qlogs with datetime suffix
-		now=datetime.now()
-		now_string = now.strftime("%Y%m%d-%H%M")
-		source='ci_qlog'
-		destination='/media/usb-drive/ci_qlogs/ci_qlog_'+now_string+'.zip'
-		#qlog artifact is zipped into the target folder
-		mySSH.command('echo $USER; echo ' + self.HostPassword + ' | nohup sudo -S zip -r '+destination+' '+source+' &','\$', 10)
-		mySSH.close()
-		#post action : log cleaning to make sure enough space is reserved for the next run
-		Log_Mgt=cls_log_mgt.Log_Mgt(self.HostIPAddress, self.HostPassword, "/media/usb-drive/ci_qlogs")
-		Log_Mgt.LogRotation()
-
+		if self.ue_trace=="yes":
+			mySSH = sshconnection.SSHConnection()
+			mySSH.open(self.HostIPAddress, self.HostUsername, self.HostPassword)
+			#archive qlog to USB stick in /media/usb-drive/ci_qlogs with datetime suffix
+			now=datetime.now()
+			now_string = now.strftime("%Y%m%d-%H%M")
+			source='ci_qlog'
+			destination='/media/usb-drive/ci_qlogs/ci_qlog_'+now_string+'.zip'
+			#qlog artifact is zipped into the target folder
+			mySSH.command('echo $USER; echo ' + self.HostPassword + ' | nohup sudo -S zip -r '+destination+' '+source+' &','\$', 10)
+			mySSH.close()
+			#post action : log cleaning to make sure enough space is reserved for the next run
+			Log_Mgt=cls_log_mgt.Log_Mgt(self.HostIPAddress, self.HostPassword, "/media/usb-drive/ci_qlogs")
+			Log_Mgt.LogRotation()
+		else:
+			destination=""
 		return destination
diff --git a/ci-scripts/cls_oaicitest.py b/ci-scripts/cls_oaicitest.py
index 7283fba5af..6f61fddbc3 100644
--- a/ci-scripts/cls_oaicitest.py
+++ b/ci-scripts/cls_oaicitest.py
@@ -160,6 +160,7 @@ class OaiCiTest():
 		self.air_interface=''
 		self.expectedNbOfConnectedUEs = 0
 		self.ue_id = '' #used for module identification
+		self.ue_trace ='' #used to enable QLog trace for Module UE, passed to Module UE object at InitializeUE()
 
 
 	def BuildOAIUE(self,HTML):
@@ -367,7 +368,7 @@ class OaiCiTest():
 		except:
 			os.kill(os.getppid(),signal.SIGUSR1)
 
-	def InitializeUE(self,HTML,RAN,EPC, COTS_UE, InfraUE):
+	def InitializeUE(self,HTML,RAN,EPC, COTS_UE, InfraUE,ue_trace):
 		if self.ue_id=='':#no ID specified, then it is a COTS controlled by ADB
 			if self.ADBIPAddress == '' or self.ADBUserName == '' or self.ADBPassword == '':
 				HELP.GenericHelp(CONST.Version)
@@ -386,6 +387,7 @@ class OaiCiTest():
 		else: #if an ID is specified, it is a module from the yaml infrastructure file
 			#RH
 			Module_UE = cls_module_ue.Module_UE(InfraUE.ci_ue_infra[self.ue_id])
+			Module_UE.ue_trace=ue_trace
 			is_module=Module_UE.CheckCMProcess()
 			if is_module:
 				Module_UE.EnableTrace()
@@ -3102,7 +3104,7 @@ class OaiCiTest():
 		except:
 			os.kill(os.getppid(),signal.SIGUSR1)
 
-	def TerminateUE(self,HTML,COTS_UE):
+	def TerminateUE(self,HTML,COTS_UE,InfraUE,ue_trace):
 		if self.ue_id=='':#no ID specified, then it is a COTS controlled by ADB
 			terminate_ue_flag = False
 			self.GetAllUEDevices(terminate_ue_flag)
@@ -3119,6 +3121,7 @@ class OaiCiTest():
 			HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
 		else: #if an ID is specified, it is a module from the yaml infrastructure file
 			Module_UE = cls_module_ue.Module_UE(InfraUE.ci_ue_infra[self.ue_id])
+			Module_UE.ue_trace=ue_trace
 			Module_UE.Command("detach")	
 			Module_UE.DisableTrace()
 			Module_UE.DisableCM()
diff --git a/ci-scripts/main.py b/ci-scripts/main.py
index 142ecdf202..066e67d6be 100644
--- a/ci-scripts/main.py
+++ b/ci-scripts/main.py
@@ -197,6 +197,7 @@ def GetParametersFromXML(action):
 
 	elif action == 'Initialize_UE':
 		ue_id = test.findtext('id')
+		CiTestObj.ue_trace=test.findtext('UE_Trace')#temporary variable, to be passed to Module_UE in Initialize_UE call
 		if (ue_id is None):
 			CiTestObj.ue_id = ""
 		else:
@@ -727,9 +728,9 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
 				elif action == 'Terminate_eNB':
 					RAN.TerminateeNB(HTML, EPC)
 				elif action == 'Initialize_UE':
-					CiTestObj.InitializeUE(HTML,RAN, EPC, COTS_UE, InfraUE)
+					CiTestObj.InitializeUE(HTML,RAN, EPC, COTS_UE, InfraUE, CiTestObj.ue_trace)
 				elif action == 'Terminate_UE':
-					CiTestObj.TerminateUE(HTML,COTS_UE)
+					CiTestObj.TerminateUE(HTML,COTS_UE, InfraUE, CiTestObj.ue_trace)
 				elif action == 'Attach_UE':
 					CiTestObj.AttachUE(HTML,RAN,EPC,COTS_UE,InfraUE)
 				elif action == 'Detach_UE':
diff --git a/ci-scripts/xml_files/fr1_nsa_quectel.xml b/ci-scripts/xml_files/fr1_nsa_quectel.xml
index 980b55c30c..7ec3a5f140 100644
--- a/ci-scripts/xml_files/fr1_nsa_quectel.xml
+++ b/ci-scripts/xml_files/fr1_nsa_quectel.xml
@@ -48,6 +48,7 @@
 		<class>Initialize_UE</class>
 		<desc>Initialize Quectel</desc>
 		<id>idefix</id>
+		<UE_Trace>yes</UE_Trace>
 	</testCase>
 
 
-- 
2.26.2