diff --git a/ci-scripts/Jenkinsfile-GitLab-COTS-UE-Test b/ci-scripts/Jenkinsfile-GitLab-COTS-UE-Test index 0c8efa674152b3a64cabd31bf2c1692b5db1215d..25090eec757eb241f2fc19daec6fc4724bce9499 100644 --- a/ci-scripts/Jenkinsfile-GitLab-COTS-UE-Test +++ b/ci-scripts/Jenkinsfile-GitLab-COTS-UE-Test @@ -163,6 +163,7 @@ pipeline { sleep 60 sh "oc describe pod &>> archives/describe-pods.logs" sh "oc get pods -o wide" + CollectLogsFromPods() coreStatus = checkCoreNetworkDeployment() if (coreStatus > 0) { error ('Core Deployment went wrong') @@ -511,7 +512,7 @@ def checkCoreNetworkDeployment() { return status } -def retrieveLogsFromPods() { +def CollectLogsFromPods() { sh "mkdir -p archives" for (ii = 0; ii < imageNames.size(); ii++) { podName = sh returnStdout: true, script: "oc get pods | grep ${imageNames[ii]} | awk {'print \$1'} || true" @@ -520,11 +521,14 @@ def retrieveLogsFromPods() { nrfPod = podName } try { - sh "oc logs ${podName} ${containerInPods[ii]} &> archives/${imageNames[ii]}.logs" + sh "nohup oc logs -f ${podName} ${containerInPods[ii]} &> archives/${imageNames[ii]}.logs &" } catch (Exception e) { echo "Getting logs from ${podName} failed" } } +} + +def retrieveLogsFromPods() { // Retrieving mysql logs podName = sh returnStdout: true, script: "oc get pods | grep mysql | awk {'print \$1'} || true" podName = podName.trim() diff --git a/ci-scripts/charts/oai-amf/values.yaml b/ci-scripts/charts/oai-amf/values.yaml index c8838c974d3c5a65bf138406a7067cdd3b8aeb35..6f845e96cc586e98d7c217c9042ed28cffc3fd16 100644 --- a/ci-scripts/charts/oai-amf/values.yaml +++ b/ci-scripts/charts/oai-amf/values.yaml @@ -97,7 +97,7 @@ readinessProbe: false livenessProbe: false -terminationGracePeriodSeconds: 5 +terminationGracePeriodSeconds: 60 nodeSelector: {} diff --git a/ci-scripts/charts/oai-ausf/values.yaml b/ci-scripts/charts/oai-ausf/values.yaml index d951cb0bd8bfbe68bdd4d9df206c516819f6900b..0e24dc9402775b94fa14cd193a90c287dc1a4473 100644 --- a/ci-scripts/charts/oai-ausf/values.yaml +++ b/ci-scripts/charts/oai-ausf/values.yaml @@ -81,7 +81,7 @@ readinessProbe: true livenessProbe: false -terminationGracePeriodSeconds: 5 +terminationGracePeriodSeconds: 60 nodeSelector: {} diff --git a/ci-scripts/charts/oai-nrf/values.yaml b/ci-scripts/charts/oai-nrf/values.yaml index b90c63231fd5eea1cda15cdfdd94964ddbea90a3..167a6c20f9a168b5b73515f3dab3bc4431048aab 100644 --- a/ci-scripts/charts/oai-nrf/values.yaml +++ b/ci-scripts/charts/oai-nrf/values.yaml @@ -73,7 +73,7 @@ resources: cpu: 100m memory: 128Mi -terminationGracePeriodSeconds: 5 +terminationGracePeriodSeconds: 60 readinessProbe: true diff --git a/ci-scripts/charts/oai-smf/values.yaml b/ci-scripts/charts/oai-smf/values.yaml index 911f91e8c06127056ab0644d1c6a366424c32023..8e208e8e13a19f3f76f9a37d54f00435793b4ce6 100644 --- a/ci-scripts/charts/oai-smf/values.yaml +++ b/ci-scripts/charts/oai-smf/values.yaml @@ -94,7 +94,7 @@ resources: readinessProbe: true livenessProbe: false -terminationGracePeriodSeconds: 5 +terminationGracePeriodSeconds: 60 nodeSelector: {} diff --git a/ci-scripts/charts/oai-udm/values.yaml b/ci-scripts/charts/oai-udm/values.yaml index 0020bdc3bf724d595a9dc78ff61c329d99346681..881610612c80c057981c270b453c029f0ac7c32a 100644 --- a/ci-scripts/charts/oai-udm/values.yaml +++ b/ci-scripts/charts/oai-udm/values.yaml @@ -79,7 +79,7 @@ readinessProbe: true livenessProbe: false -terminationGracePeriodSeconds: 5 +terminationGracePeriodSeconds: 60 nodeSelector: {} diff --git a/ci-scripts/charts/oai-upf/values.yaml b/ci-scripts/charts/oai-upf/values.yaml index 7ba4caeef84d777b3885fca8ba8e56098be1a76f..86be0e9fb9b3cfa66c68fa50eb39f7e022642d96 100644 --- a/ci-scripts/charts/oai-upf/values.yaml +++ b/ci-scripts/charts/oai-upf/values.yaml @@ -112,7 +112,7 @@ readinessProbe: true livenessProbe: false -terminationGracePeriodSeconds: 5 +terminationGracePeriodSeconds: 60 nodeSelector: {} diff --git a/ci-scripts/checkCOTS-UE-Testing.py b/ci-scripts/checkCOTS-UE-Testing.py index d91a0094a2a7dc0a85c4652ef2fd203a118f8efd..2213e87ff63da6eac936b951f8587d8a3b658792 100755 --- a/ci-scripts/checkCOTS-UE-Testing.py +++ b/ci-scripts/checkCOTS-UE-Testing.py @@ -255,6 +255,32 @@ def detailsCoreDeployment(): detailsHtml += generate_button_footer() return (status, detailsHtml) +def detailsCoreUndeployment(): + cwd = os.getcwd() + status = True + detailsHtml = generate_button_header('cn5g-undeploy-details', 'Details on the OAI CN5G Undeployment') + detailsHtml += generate_list_header() + coreElements = ['oai-nrf', 'oai-amf', 'oai-smf', 'oai-upf', 'oai-ausf', 'oai-udm', 'oai-udr'] + for element in coreElements: + byeMessagePresent = False + if not os.path.isfile(f'{cwd}/archives/{element}.logs'): + detailsHtml += generate_list_row(f'{element} has NO LOGS', 'remove-sign') + status = False + continue + with open(f'{cwd}/archives/{element}.logs', mode='r', errors='ignore') as nfRuntimeLogFile: + for line in nfRuntimeLogFile: + result = re.search('system.*info.* Bye. Shutdown Procedure took (?P<duration>[0-9]+) ms', line) + if result is not None: + byeMessagePresent = True + duration = int(result.group('duration')) + detailsHtml += generate_list_row(f'{element} has the bye message -- Shutdown took {duration} ms', 'info-sign') + if not byeMessagePresent: + detailsHtml += generate_list_row(f'{element} has NO Bye message', 'remove-sign') + status = False + detailsHtml += generate_list_footer() + detailsHtml += generate_button_footer() + return (status, detailsHtml) + def checkAMFconnection(): cwd = os.getcwd() count = 0 @@ -446,6 +472,7 @@ if __name__ == '__main__': ueStop1Status = True else: ueStop1Status = False + (undeployStatus, undeployDetails) = detailsCoreUndeployment() cwd = os.getcwd() with open(os.path.join(cwd, REPORT_NAME), 'w') as wfile: @@ -464,7 +491,8 @@ if __name__ == '__main__': wfile.write(ueStartTest1) wfile.write(generate_chapter('Second COTS-UE Deconnection', 'PDU Session release / Deregistration', ueStop1Status)) wfile.write(ueStopTest1) - wfile.write(generate_chapter('Post-Run PCAP Analysis', 'To be done', True)) + wfile.write(generate_chapter('Shutdown Analysis', 'Status for undeployment', undeployStatus)) + wfile.write(undeployDetails) wfile.write(generate_footer()) if not coreStatus or not ranStatus or not ueStart0Status or not ueStop0Status or not ueStart1Status or not ueStop1Status: sys.exit(1)