Commit 00ef792d authored by Raphael Defosseux's avatar Raphael Defosseux

chore(ci): post-review changes

Signed-off-by: default avatarRaphael Defosseux <raphael.defosseux@eurecom.fr>
parent 19ffb7be
...@@ -75,7 +75,7 @@ class LocalCmd(Cmd): ...@@ -75,7 +75,7 @@ class LocalCmd(Cmd):
def __init__(self, d = None): def __init__(self, d = None):
self.cwd = d self.cwd = d
if self.cwd is not None: if self.cwd is not None:
logging.debug(f'Working dir will be {self.cwd}') logging.debug(f'Working dir is {self.cwd}')
self.cp = sp.CompletedProcess(args='', returncode=0, stdout='') self.cp = sp.CompletedProcess(args='', returncode=0, stdout='')
def run(self, line, timeout=300, silent=False, reportNonZero=True): def run(self, line, timeout=300, silent=False, reportNonZero=True):
...@@ -94,7 +94,11 @@ class LocalCmd(Cmd): ...@@ -94,7 +94,11 @@ class LocalCmd(Cmd):
return ret return ret
def command(self, commandline, expectedline=None, timeout=300, silent=False, resync=False): def command(self, commandline, expectedline=None, timeout=300, silent=False, resync=False):
self.run(commandline, timeout, silent) line = [s for s in commandline.split(' ') if len(s) > 0]
if line[0] == 'cd':
self.cd(line[1], silent)
else:
self.run(line, timeout, silent)
return 0 return 0
def close(self): def close(self):
......
...@@ -745,7 +745,7 @@ class Containerize(): ...@@ -745,7 +745,7 @@ class Containerize():
cmd = 'docker login -u oaicicd -p oaicicd porcepix.sboai.cs.eurecom.fr' cmd = 'docker login -u oaicicd -p oaicicd porcepix.sboai.cs.eurecom.fr'
response = myCmd.run(cmd) response = myCmd.run(cmd)
if re.search('Login Succeeded', response.stdout) is None: if response.returncode != 0:
msg = 'Could not log into local registry' msg = 'Could not log into local registry'
logging.error(msg) logging.error(msg)
myCmd.close() myCmd.close()
...@@ -756,7 +756,7 @@ class Containerize(): ...@@ -756,7 +756,7 @@ class Containerize():
tagToUse = self.ImageTagToUse(image) tagToUse = self.ImageTagToUse(image)
cmd = f'docker pull {tagToUse}' cmd = f'docker pull {tagToUse}'
response = myCmd.run(cmd, timeout=120) response = myCmd.run(cmd, timeout=120)
if re.search('Status: Downloaded newer image for |Status: Image is up to date for', response.stdout) is None: if response.returncode != 0:
logging.debug(response) logging.debug(response)
msg = f'Could not pull {image} from local registry : {tagToUse}' msg = f'Could not pull {image} from local registry : {tagToUse}'
logging.error(msg) logging.error(msg)
...@@ -766,7 +766,7 @@ class Containerize(): ...@@ -766,7 +766,7 @@ class Containerize():
cmd = 'docker logout porcepix.sboai.cs.eurecom.fr' cmd = 'docker logout porcepix.sboai.cs.eurecom.fr'
response = myCmd.run(cmd) response = myCmd.run(cmd)
if re.search('Removing login credentials', response.stdout) is None: if response.returncode != 0:
msg = 'Could not log off from local registry' msg = 'Could not log off from local registry'
logging.error(msg) logging.error(msg)
myCmd.close() myCmd.close()
...@@ -1053,15 +1053,15 @@ class Containerize(): ...@@ -1053,15 +1053,15 @@ class Containerize():
return return
cmd = 'cp docker-compose.y*ml docker-compose-ci.yml' cmd = 'cp docker-compose.y*ml docker-compose-ci.yml'
myCmd.command(cmd, silent=self.displayedNewTags) myCmd.run(cmd, silent=self.displayedNewTags)
imageNames = ['oai-enb', 'oai-gnb', 'oai-lte-ue', 'oai-nr-ue', 'oai-lte-ru'] imageNames = ['oai-enb', 'oai-gnb', 'oai-lte-ue', 'oai-nr-ue', 'oai-lte-ru']
for image in imageNames: for image in imageNames:
tagToUse = self.ImageTagToUse(image) tagToUse = self.ImageTagToUse(image)
cmd = f'sed -i -e "s@oaisoftwarealliance/{image}:develop@{tagToUse}@" docker-compose-ci.yml' cmd = f'sed -i -e "s@oaisoftwarealliance/{image}:develop@{tagToUse}@" docker-compose-ci.yml'
myCmd.command(cmd, silent=self.displayedNewTags) myCmd.run(cmd, silent=self.displayedNewTags)
self.displayedNewTags = True self.displayedNewTags = True
cmd = 'docker-compose -f docker-compose-ci.yml up -d ' + self.services[0] cmd = f'docker-compose -f docker-compose-ci.yml up -d {self.services[0]}'
deployStatus = myCmd.run(cmd, timeout=100) deployStatus = myCmd.run(cmd, timeout=100)
if deployStatus.returncode != 0: if deployStatus.returncode != 0:
myCmd.close() myCmd.close()
...@@ -1156,6 +1156,12 @@ class Containerize(): ...@@ -1156,6 +1156,12 @@ class Containerize():
self.UndeployGenObject(HTML, RAN, UE) self.UndeployGenObject(HTML, RAN, UE)
self.exitStatus = 1 self.exitStatus = 1
# pyshark livecapture launches 2 processes:
# * One using dumpcap -i lIfs -w - (ie redirecting the packets to STDOUT)
# * One using tshark -i - -w loFile (ie capturing from STDIN from previous process)
# but in fact the packets are read by the following loop before being in fact
# really written to loFile.
# So it is mandatory to keep the loop
def LaunchPySharkCapture(self, lIfs, lFilter, loFile): def LaunchPySharkCapture(self, lIfs, lFilter, loFile):
capture = pyshark.LiveCapture(interface=lIfs, bpf_filter=lFilter, output_file=loFile, debug=False) capture = pyshark.LiveCapture(interface=lIfs, bpf_filter=lFilter, output_file=loFile, debug=False)
for packet in capture.sniff_continuously(): for packet in capture.sniff_continuously():
...@@ -1197,12 +1203,12 @@ class Containerize(): ...@@ -1197,12 +1203,12 @@ class Containerize():
myCmd = cls_cmd.LocalCmd(d = self.yamlPath[0]) myCmd = cls_cmd.LocalCmd(d = self.yamlPath[0])
cmd = 'cp docker-compose.y*ml docker-compose-ci.yml' cmd = 'cp docker-compose.y*ml docker-compose-ci.yml'
myCmd.command(cmd, silent=self.displayedNewTags) myCmd.run(cmd, silent=self.displayedNewTags)
imageNames = ['oai-enb', 'oai-gnb', 'oai-lte-ue', 'oai-nr-ue', 'oai-lte-ru'] imageNames = ['oai-enb', 'oai-gnb', 'oai-lte-ue', 'oai-nr-ue', 'oai-lte-ru']
for image in imageNames: for image in imageNames:
tagToUse = self.ImageTagToUse(image) tagToUse = self.ImageTagToUse(image)
cmd = f'sed -i -e "s@oaisoftwarealliance/{image}:develop@{tagToUse}@" docker-compose-ci.yml' cmd = f'sed -i -e "s@oaisoftwarealliance/{image}:develop@{tagToUse}@" docker-compose-ci.yml'
myCmd.command(cmd, silent=self.displayedNewTags) myCmd.run(cmd, silent=self.displayedNewTags)
self.displayedNewTags = True self.displayedNewTags = True
# check which containers are running for log recovery later # check which containers are running for log recovery later
...@@ -1223,10 +1229,9 @@ class Containerize(): ...@@ -1223,10 +1229,9 @@ class Containerize():
anyLogs = False anyLogs = False
logging.debug('Working dir is now . (ie ci-scripts)') logging.debug('Working dir is now . (ie ci-scripts)')
myCmd.cwd = '.' myCmd2 = cls_cmd.LocalCmd()
myCmd.command(f'mkdir -p {logPath}') myCmd2.run(f'mkdir -p {logPath}')
logging.debug(f'Working dir is now {logPath}') myCmd2.cd(logPath)
myCmd.cwd = logPath
for state in deployStatusLogs.stdout.split('\n'): for state in deployStatusLogs.stdout.split('\n'):
res = re.search('Name|NAME|----------', state) res = re.search('Name|NAME|----------', state)
if res is not None: if res is not None:
...@@ -1237,19 +1242,19 @@ class Containerize(): ...@@ -1237,19 +1242,19 @@ class Containerize():
if res is not None: if res is not None:
anyLogs = True anyLogs = True
cName = res.group('container_name') cName = res.group('container_name')
cmd = 'docker logs ' + cName + ' > ' + cName + '.log 2>&1' cmd = f'docker logs {cName} > {cName}.log 2>&1'
myCmd.run(cmd, timeout=30, reportNonZero=False) myCmd2.run(cmd, timeout=30, reportNonZero=False)
if re.search('magma-mme', cName) is not None: if re.search('magma-mme', cName) is not None:
cmd = 'docker cp -L ' + cName + ':/var/log/mme.log ' + cName + '-full.log' cmd = f'docker cp -L {cName}:/var/log/mme.log {cName}-full.log'
myCmd.run(cmd, timeout=30, reportNonZero=False) myCmd2.run(cmd, timeout=30, reportNonZero=False)
fullStatus = True fullStatus = True
if anyLogs: if anyLogs:
# Analyzing log file(s)! # Analyzing log file(s)!
listOfPossibleRanContainers = ['enb', 'gnb', 'cu', 'du'] listOfPossibleRanContainers = ['enb', 'gnb', 'cu', 'du']
for container in listOfPossibleRanContainers: for container in listOfPossibleRanContainers:
filenames = './*-oai-' + container + '.log' filenames = './*-oai-' + container + '.log'
cmd = 'ls ' + filenames cmd = f'ls {filenames}'
lsStatus = myCmd.run(cmd, silent=True, reportNonZero=False) lsStatus = myCmd2.run(cmd, silent=True, reportNonZero=False)
if lsStatus.returncode != 0: if lsStatus.returncode != 0:
continue continue
filenames = str(lsStatus.stdout).strip() filenames = str(lsStatus.stdout).strip()
...@@ -1267,9 +1272,8 @@ class Containerize(): ...@@ -1267,9 +1272,8 @@ class Containerize():
listOfPossibleUeContainers = ['lte-ue*', 'nr-ue*'] listOfPossibleUeContainers = ['lte-ue*', 'nr-ue*']
for container in listOfPossibleUeContainers: for container in listOfPossibleUeContainers:
filenames = './*-oai-' + container + '.log' filenames = './*-oai-' + container + '.log'
cmd = 'ls ' + filenames cmd = f'ls {filenames}'
containerStatus = True lsStatus = myCmd2.run(cmd, silent=True, reportNonZero=False)
lsStatus = myCmd.run(cmd, silent=True, reportNonZero=False)
if lsStatus.returncode != 0: if lsStatus.returncode != 0:
continue continue
filenames = str(lsStatus.stdout).strip() filenames = str(lsStatus.stdout).strip()
...@@ -1286,16 +1290,19 @@ class Containerize(): ...@@ -1286,16 +1290,19 @@ class Containerize():
if self.tsharkStarted: if self.tsharkStarted:
self.tsharkStarted = True self.tsharkStarted = True
cmd = 'killall tshark' cmd = 'killall tshark'
myCmd.run(cmd, reportNonZero=False) myCmd2.run(cmd, reportNonZero=False)
cmd = 'killall dumpcap'
myCmd2.run(cmd, reportNonZero=False)
time.sleep(5)
ymlPath = self.yamlPath[0].split('/') ymlPath = self.yamlPath[0].split('/')
# The working dir is still logPath # The working dir is still logPath
cmd = 'mv /tmp/capture_' + ymlPath[1] + '.pcap .' cmd = f'mv /tmp/capture_{ymlPath[1]}.pcap .'
myCmd.run(cmd, timeout=100, reportNonZero=False) myCmd2.run(cmd, timeout=100, reportNonZero=False)
self.tsharkStarted = False self.tsharkStarted = False
myCmd2.close()
logging.debug('\u001B[1m Undeploying \u001B[0m') logging.debug('\u001B[1m Undeploying \u001B[0m')
logging.debug(f'Working dir is back {self.yamlPath[0]}') logging.debug(f'Working dir is back {self.yamlPath[0]}')
myCmd.cwd = self.yamlPath[0]
cmd = 'docker-compose -f docker-compose-ci.yml down' cmd = 'docker-compose -f docker-compose-ci.yml down'
deployStatus = myCmd.run(cmd, timeout=100) deployStatus = myCmd.run(cmd, timeout=100)
if deployStatus.returncode != 0: if deployStatus.returncode != 0:
...@@ -1358,10 +1365,10 @@ class Containerize(): ...@@ -1358,10 +1365,10 @@ class Containerize():
self.exitStatus = 0 self.exitStatus = 0
ymlPath = self.yamlPath[0].split('/') ymlPath = self.yamlPath[0].split('/')
logPath = '../cmake_targets/log/' + ymlPath[1] logPath = '../cmake_targets/log/' + ymlPath[1]
cmd = 'mkdir -p ' + logPath cmd = f'mkdir -p {logPath}'
myCmd.run(cmd, silent=True) myCmd.run(cmd, silent=True)
cmd = 'docker exec ' + self.pingContName + ' /bin/bash -c "ping ' + self.pingOptions + '" 2>&1 | tee ' + logPath + '/ping_' + HTML.testCase_id + '.log' cmd = f'docker exec {self.pingContName} /bin/bash -c "ping {self.pingOptions}" 2>&1 | tee {logPath}/ping_{HTML.testCase_id}.log'
pingStatus = myCmd.run(cmd, timeout=100, reportNonZero=False) pingStatus = myCmd.run(cmd, timeout=100, reportNonZero=False)
myCmd.close() myCmd.close()
...@@ -1433,12 +1440,12 @@ class Containerize(): ...@@ -1433,12 +1440,12 @@ class Containerize():
ymlPath = self.yamlPath[0].split('/') ymlPath = self.yamlPath[0].split('/')
logPath = '../cmake_targets/log/' + ymlPath[1] logPath = '../cmake_targets/log/' + ymlPath[1]
cmd = 'mkdir -p ' + logPath cmd = f'mkdir -p {logPath}'
myCmd.run(cmd, silent=True) myCmd.run(cmd, silent=True)
# Start the server process # Start the server process
cmd = f'docker exec -d {self.svrContName} /bin/bash -c "nohup iperf {self.svrOptions} > /tmp/iperf_server.log 2>&1"' cmd = f'docker exec -d {self.svrContName} /bin/bash -c "nohup iperf {self.svrOptions} > /tmp/iperf_server.log 2>&1"'
myCmd.run(cmd, reportNonZero=False) myCmd.run(cmd)
time.sleep(3) time.sleep(3)
# Start the client process # Start the client process
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment