CI: harmonize test case identifier
Remove unused testCase_id definitions and replace all occurrences of test_id with test_idx across the ci-scripts folder.
This commit is contained in:
@@ -24,14 +24,14 @@ from typing import NamedTuple
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
class TestCaseCtx(NamedTuple):
|
class TestCaseCtx(NamedTuple):
|
||||||
test_id: int
|
test_idx: int
|
||||||
logPath: str
|
logPath: str
|
||||||
|
|
||||||
def Default(logPath):
|
def Default(logPath):
|
||||||
return TestCaseCtx(112233, logPath)
|
return TestCaseCtx(112233, logPath)
|
||||||
def baseFilename(self):
|
def baseFilename(self):
|
||||||
# typically, the test ID is of form 001234 (6 digits)
|
# typically, the test ID is of form 001234 (6 digits)
|
||||||
return f"{self.logPath}/{self.test_id:06d}"
|
return f"{self.logPath}/{self.test_idx:06d}"
|
||||||
|
|
||||||
def archiveArtifact(cmd, ctx, remote_path):
|
def archiveArtifact(cmd, ctx, remote_path):
|
||||||
base = os.path.basename(remote_path)
|
base = os.path.basename(remote_path)
|
||||||
|
|||||||
@@ -164,7 +164,6 @@ class Cluster:
|
|||||||
|
|
||||||
def PullClusterImage(self, HTML, node, images, tag_prefix):
|
def PullClusterImage(self, HTML, node, images, tag_prefix):
|
||||||
logging.debug(f'Pull OC image {images} to server {node}')
|
logging.debug(f'Pull OC image {images} to server {node}')
|
||||||
self.testCase_id = HTML.testCase_id
|
|
||||||
with cls_cmd.getConnection(node) as cmd:
|
with cls_cmd.getConnection(node) as cmd:
|
||||||
succeeded = OC_login(cmd, self.OCUserName, self.OCPassword, CI_OC_RAN_NAMESPACE)
|
succeeded = OC_login(cmd, self.OCUserName, self.OCPassword, CI_OC_RAN_NAMESPACE)
|
||||||
if not succeeded:
|
if not succeeded:
|
||||||
@@ -211,8 +210,6 @@ class Cluster:
|
|||||||
logging.debug(f'Building on cluster triggered from server: {node}')
|
logging.debug(f'Building on cluster triggered from server: {node}')
|
||||||
self.cmd = cls_cmd.RemoteCmd(node)
|
self.cmd = cls_cmd.RemoteCmd(node)
|
||||||
|
|
||||||
self.testCase_id = HTML.testCase_id
|
|
||||||
|
|
||||||
# Workaround for some servers, we need to erase completely the workspace
|
# Workaround for some servers, we need to erase completely the workspace
|
||||||
self.cmd.cd(lSourcePath)
|
self.cmd.cd(lSourcePath)
|
||||||
# to reduce the amount of data send to OpenShift, we
|
# to reduce the amount of data send to OpenShift, we
|
||||||
@@ -412,7 +409,7 @@ class Cluster:
|
|||||||
# the groovy scripts expects all logs in
|
# the groovy scripts expects all logs in
|
||||||
# <jenkins-workspace>/<pipeline>/ci-scripts, so copy it there
|
# <jenkins-workspace>/<pipeline>/ci-scripts, so copy it there
|
||||||
with cls_cmd.LocalCmd() as c:
|
with cls_cmd.LocalCmd() as c:
|
||||||
c.run(f'mkdir -p {os.getcwd()}/test_log_{ctx.test_id}/')
|
c.run(f'mkdir -p {os.getcwd()}/test_log_{ctx.test_idx}/')
|
||||||
c.run(f'cp -r {ctx.logPath} {os.getcwd()}/test_log_{ctx.test_id}/')
|
c.run(f'cp -r {ctx.logPath} {os.getcwd()}/test_log_{ctx.test_idx}/')
|
||||||
|
|
||||||
return status
|
return status
|
||||||
|
|||||||
@@ -34,9 +34,8 @@ DPDK_PATH = '/opt/dpdk-t2-22.11.0'
|
|||||||
|
|
||||||
class Native():
|
class Native():
|
||||||
|
|
||||||
def Build(ctx, node, test_case, HTML, directory, options):
|
def Build(ctx, node, HTML, directory, options):
|
||||||
logging.debug(f'Building on server: {node}')
|
logging.debug(f'Building on server: {node}')
|
||||||
HTML.testCase_id = test_case
|
|
||||||
|
|
||||||
with cls_cmd.getConnection(node) as ssh:
|
with cls_cmd.getConnection(node) as ssh:
|
||||||
base = f"{directory}/cmake_targets"
|
base = f"{directory}/cmake_targets"
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ class HTMLManagement():
|
|||||||
self.htmlUEFailureMsg = ''
|
self.htmlUEFailureMsg = ''
|
||||||
|
|
||||||
self.startTime = int(round(time.time() * 1000))
|
self.startTime = int(round(time.time() * 1000))
|
||||||
self.testCase_id = ''
|
self.testCaseIdx = ''
|
||||||
self.desc = ''
|
self.desc = ''
|
||||||
|
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
@@ -191,7 +191,7 @@ class HTMLManagement():
|
|||||||
self.htmlFile.write(' <table class="table" border = "1">\n')
|
self.htmlFile.write(' <table class="table" border = "1">\n')
|
||||||
self.htmlFile.write(' <tr bgcolor = "#33CCFF" >\n')
|
self.htmlFile.write(' <tr bgcolor = "#33CCFF" >\n')
|
||||||
self.htmlFile.write(' <th style="width:5%">Relative Time (s)</th>\n')
|
self.htmlFile.write(' <th style="width:5%">Relative Time (s)</th>\n')
|
||||||
self.htmlFile.write(' <th style="width:5%">Test Id</th>\n')
|
self.htmlFile.write(' <th style="width:5%">Test Index</th>\n')
|
||||||
self.htmlFile.write(' <th>Test Desc</th>\n')
|
self.htmlFile.write(' <th>Test Desc</th>\n')
|
||||||
self.htmlFile.write(' <th>Test Options</th>\n')
|
self.htmlFile.write(' <th>Test Options</th>\n')
|
||||||
self.htmlFile.write(' <th style="width:5%">Test Status</th>\n')
|
self.htmlFile.write(' <th style="width:5%">Test Status</th>\n')
|
||||||
@@ -259,7 +259,7 @@ class HTMLManagement():
|
|||||||
currentTime = int(round(time.time() * 1000)) - self.startTime
|
currentTime = int(round(time.time() * 1000)) - self.startTime
|
||||||
self.htmlFile.write(' <tr>\n')
|
self.htmlFile.write(' <tr>\n')
|
||||||
self.htmlFile.write(' <td bgcolor = "lightcyan" >' + format(currentTime / 1000, '.1f') + '</td>\n')
|
self.htmlFile.write(' <td bgcolor = "lightcyan" >' + format(currentTime / 1000, '.1f') + '</td>\n')
|
||||||
self.htmlFile.write(' <td bgcolor = "lightcyan" >' + self.testCase_id + '</td>\n')
|
self.htmlFile.write(' <td bgcolor = "lightcyan" >' + self.testCaseIdx + '</td>\n')
|
||||||
self.htmlFile.write(' <td>' + self.desc + '</td>\n')
|
self.htmlFile.write(' <td>' + self.desc + '</td>\n')
|
||||||
self.htmlFile.write(' <td>' + str(options) + '</td>\n')
|
self.htmlFile.write(' <td>' + str(options) + '</td>\n')
|
||||||
if (str(status) == 'OK'):
|
if (str(status) == 'OK'):
|
||||||
@@ -374,7 +374,7 @@ class HTMLManagement():
|
|||||||
addOrangeBK = False
|
addOrangeBK = False
|
||||||
self.htmlFile.write(' <tr>\n')
|
self.htmlFile.write(' <tr>\n')
|
||||||
self.htmlFile.write(' <td bgcolor = "lightcyan" >' + format(currentTime / 1000, '.1f') + '</td>\n')
|
self.htmlFile.write(' <td bgcolor = "lightcyan" >' + format(currentTime / 1000, '.1f') + '</td>\n')
|
||||||
self.htmlFile.write(' <td bgcolor = "lightcyan" >' + self.testCase_id + '</td>\n')
|
self.htmlFile.write(' <td bgcolor = "lightcyan" >' + self.testCaseIdx + '</td>\n')
|
||||||
self.htmlFile.write(' <td>' + self.desc + '</td>\n')
|
self.htmlFile.write(' <td>' + self.desc + '</td>\n')
|
||||||
self.htmlFile.write(' <td>' + str(options) + '</td>\n')
|
self.htmlFile.write(' <td>' + str(options) + '</td>\n')
|
||||||
if (str(status) == 'OK'):
|
if (str(status) == 'OK'):
|
||||||
|
|||||||
@@ -88,7 +88,6 @@ class StaticCodeAnalysis():
|
|||||||
raise ValueError(f"{lSourcePath=} {node=}")
|
raise ValueError(f"{lSourcePath=} {node=}")
|
||||||
logging.debug('Building on server: ' + node)
|
logging.debug('Building on server: ' + node)
|
||||||
cmd = cls_cmd.getConnection(node)
|
cmd = cls_cmd.getConnection(node)
|
||||||
self.testCase_id = HTML.testCase_id
|
|
||||||
# on RedHat/CentOS .git extension is mandatory
|
# on RedHat/CentOS .git extension is mandatory
|
||||||
result = re.search('([a-zA-Z0-9\:\-\.\/])+\.git', self.ranRepository)
|
result = re.search('([a-zA-Z0-9\:\-\.\/])+\.git', self.ranRepository)
|
||||||
if result is not None:
|
if result is not None:
|
||||||
@@ -187,8 +186,6 @@ class StaticCodeAnalysis():
|
|||||||
raise ValueError(f"{lSourcePath=} {node=}")
|
raise ValueError(f"{lSourcePath=} {node=}")
|
||||||
logging.debug('Building on server: ' + node)
|
logging.debug('Building on server: ' + node)
|
||||||
cmd = cls_cmd.getConnection(node)
|
cmd = cls_cmd.getConnection(node)
|
||||||
self.testCase_id = HTML.testCase_id
|
|
||||||
|
|
||||||
check_options = ''
|
check_options = ''
|
||||||
if self.ranAllowMerge:
|
if self.ranAllowMerge:
|
||||||
check_options = f'--build-arg MERGE_REQUEST=true --build-arg SRC_BRANCH={self.ranBranch}'
|
check_options = f'--build-arg MERGE_REQUEST=true --build-arg SRC_BRANCH={self.ranBranch}'
|
||||||
|
|||||||
+8
-8
@@ -98,7 +98,7 @@ def ExecuteActionWithParam(action, ctx, node):
|
|||||||
if proxy_commit is not None:
|
if proxy_commit is not None:
|
||||||
CONTAINERS.proxyCommit = proxy_commit
|
CONTAINERS.proxyCommit = proxy_commit
|
||||||
if action == 'Build_eNB':
|
if action == 'Build_eNB':
|
||||||
success = cls_native.Native.Build(ctx, node, HTML.testCase_id, HTML, RAN.eNBSourceCodePath, RAN.Build_eNB_args)
|
success = cls_native.Native.Build(ctx, node, HTML, RAN.eNBSourceCodePath, RAN.Build_eNB_args)
|
||||||
elif action == 'Build_Image':
|
elif action == 'Build_Image':
|
||||||
success = CONTAINERS.BuildImage(ctx, node, HTML)
|
success = CONTAINERS.BuildImage(ctx, node, HTML)
|
||||||
elif action == 'Build_Proxy':
|
elif action == 'Build_Proxy':
|
||||||
@@ -308,7 +308,7 @@ def receive_signal(signum, frame):
|
|||||||
|
|
||||||
def ShowTestID(ctx, desc):
|
def ShowTestID(ctx, desc):
|
||||||
logging.info(f'\u001B[1m----------------------------------------\u001B[0m')
|
logging.info(f'\u001B[1m----------------------------------------\u001B[0m')
|
||||||
logging.info(f'\u001B[1m Test ID: {ctx.test_id} \u001B[0m')
|
logging.info(f'\u001B[1m Test #{ctx.test_idx} \u001B[0m')
|
||||||
logging.info(f'\u001B[1m {desc} \u001B[0m')
|
logging.info(f'\u001B[1m {desc} \u001B[0m')
|
||||||
logging.info(f'\u001B[1m----------------------------------------\u001B[0m')
|
logging.info(f'\u001B[1m----------------------------------------\u001B[0m')
|
||||||
|
|
||||||
@@ -470,16 +470,16 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
|
|||||||
for index, test in enumerate(all_tests, start=1):
|
for index, test in enumerate(all_tests, start=1):
|
||||||
if test_runner_abort:
|
if test_runner_abort:
|
||||||
task_set_succeeded = False
|
task_set_succeeded = False
|
||||||
test_case_id = f"{index:06d}"
|
test_case_idx = f"{index:06d}"
|
||||||
ctx = TestCaseCtx(int(test_case_id), logPath)
|
ctx = TestCaseCtx(int(test_case_idx), logPath)
|
||||||
HTML.testCase_id = test_case_id
|
HTML.testCaseIdx = test_case_idx
|
||||||
desc = test.findtext('desc')
|
desc = test.findtext('desc')
|
||||||
node = test.findtext('node') if not force_local else 'localhost'
|
node = test.findtext('node') if not force_local else 'localhost'
|
||||||
always_exec = test.findtext('always_exec') in ['True', 'true', 'Yes', 'yes']
|
always_exec = test.findtext('always_exec') in ['True', 'true', 'Yes', 'yes']
|
||||||
may_fail = test.findtext('may_fail') in ['True', 'true', 'Yes', 'yes']
|
may_fail = test.findtext('may_fail') in ['True', 'true', 'Yes', 'yes']
|
||||||
HTML.desc = desc
|
HTML.desc = desc
|
||||||
action = test.findtext('class')
|
action = test.findtext('class')
|
||||||
if not CheckClassValidity(xml_class_list, action, test_case_id):
|
if not CheckClassValidity(xml_class_list, action, test_case_idx):
|
||||||
task_set_succeeded = False
|
task_set_succeeded = False
|
||||||
continue
|
continue
|
||||||
ShowTestID(ctx, desc)
|
ShowTestID(ctx, desc)
|
||||||
@@ -491,9 +491,9 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
|
|||||||
try:
|
try:
|
||||||
test_succeeded = ExecuteActionWithParam(action, ctx, node)
|
test_succeeded = ExecuteActionWithParam(action, ctx, node)
|
||||||
if not test_succeeded and may_fail:
|
if not test_succeeded and may_fail:
|
||||||
logging.warning(f"test ID {test_case_id} action {action} may or may not fail, proceeding despite error")
|
logging.warning(f"test ID {test_case_idx} action {action} may or may not fail, proceeding despite error")
|
||||||
elif not test_succeeded:
|
elif not test_succeeded:
|
||||||
logging.error(f"test ID {test_case_id} action {action} failed ({test_succeeded}), skipping next tests")
|
logging.error(f"test ID {test_case_idx} action {action} failed ({test_succeeded}), skipping next tests")
|
||||||
task_set_succeeded = False
|
task_set_succeeded = False
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
s = traceback.format_exc()
|
s = traceback.format_exc()
|
||||||
|
|||||||
@@ -67,7 +67,6 @@ class RANManagement():
|
|||||||
self.eNBOptions = ['', '', '']
|
self.eNBOptions = ['', '', '']
|
||||||
self.eNBmbmsEnables = [False, False, False]
|
self.eNBmbmsEnables = [False, False, False]
|
||||||
self.eNBstatuses = [-1, -1, -1]
|
self.eNBstatuses = [-1, -1, -1]
|
||||||
self.testCase_id = ''
|
|
||||||
self.runtime_stats= ''
|
self.runtime_stats= ''
|
||||||
self.datalog_rt_stats={}
|
self.datalog_rt_stats={}
|
||||||
self.datalog_rt_stats_file='datalog_rt_stats.default.yaml'
|
self.datalog_rt_stats_file='datalog_rt_stats.default.yaml'
|
||||||
@@ -88,7 +87,6 @@ class RANManagement():
|
|||||||
raise ValueError(f"{node=}")
|
raise ValueError(f"{node=}")
|
||||||
logging.debug('Starting eNB/gNB on server: ' + node)
|
logging.debug('Starting eNB/gNB on server: ' + node)
|
||||||
|
|
||||||
self.testCase_id = HTML.testCase_id
|
|
||||||
lSourcePath = self.eNBSourceCodePath
|
lSourcePath = self.eNBSourceCodePath
|
||||||
cmd = cls_cmd.getConnection(node)
|
cmd = cls_cmd.getConnection(node)
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import cls_cmd
|
|||||||
class TestBuild(unittest.TestCase):
|
class TestBuild(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.html = cls_oai_html.HTMLManagement()
|
self.html = cls_oai_html.HTMLManagement()
|
||||||
self.html.testCase_id = "000000"
|
self.html.testCaseIdx = "000000"
|
||||||
self.cont = cls_containerize.Containerize()
|
self.cont = cls_containerize.Containerize()
|
||||||
self._d = tempfile.mkdtemp()
|
self._d = tempfile.mkdtemp()
|
||||||
logging.warning(f"temporary directory: {self._d}")
|
logging.warning(f"temporary directory: {self._d}")
|
||||||
|
|||||||
Reference in New Issue
Block a user