Some CI tasks/commands like Iperf(), Ping() get multiple nodes (via XML parameter "nodes") to potentially run UEs on different nodes (hosts) at the same time. However, I argue that this is not good: - we don't actually use this -- where we specify multiple UEs, it's always "localhost localhost..." - it is inconsistent, as we typically have a single "node", not nodes, and there is a possibility to harmonize (see also next commit) - if we needed it, there would be better ways to achieve the same. First, for hardware-based UEs, the ci_infra.yaml can specify different UEs. For simulated UEs, it would be feasible to have multiple XML steps run in parallel, e.g., in the XML <parallel> tag, which would clarify that multiple UEs on different hosts run in parallel - it reduces code. Hence, make a single <node> for these XML steps.
85 lines
2.8 KiB
Python
85 lines
2.8 KiB
Python
import sys
|
|
import logging
|
|
logging.basicConfig(
|
|
level=logging.DEBUG,
|
|
stream=sys.stdout,
|
|
format="[%(asctime)s] %(levelname)8s: %(message)s"
|
|
)
|
|
import os
|
|
os.system(f'rm -rf cmake_targets')
|
|
os.system(f'mkdir -p cmake_targets/log')
|
|
import unittest
|
|
import tempfile
|
|
|
|
sys.path.append('./') # to find OAI imports below
|
|
import cls_oai_html
|
|
from cls_ci_helper import TestCaseCtx
|
|
import cls_oaicitest
|
|
import cls_cmd
|
|
|
|
class TestPingIperf(unittest.TestCase):
|
|
def setUp(self):
|
|
self.html = cls_oai_html.HTMLManagement()
|
|
self.html.testCaseId = "000000"
|
|
self.ci = cls_oaicitest.OaiCiTest()
|
|
self.ci.ue_ids = ["test"]
|
|
self.node = "localhost"
|
|
self.ctx = TestCaseCtx.Default(tempfile.mkdtemp())
|
|
def tearDown(self):
|
|
with cls_cmd.LocalCmd() as c:
|
|
c.run(f'rm -rf {self.ctx.logPath}')
|
|
|
|
def test_ping(self):
|
|
self.ci.ping_args = "-c3"
|
|
self.ci.ping_packetloss_threshold = "0"
|
|
self.ci.svr_id = "test"
|
|
infra_file = "tests/config/infra_ping_iperf.yaml"
|
|
# TODO Should need nothing but options and UE(s) to use
|
|
success = self.ci.Ping(self.ctx, self.node, self.html, infra_file=infra_file)
|
|
self.assertTrue(success)
|
|
|
|
def test_iperf(self):
|
|
# note: needs to be five seconds because Iperf() adds -O 3, so if it is
|
|
# too short, the server is terminated before the client loaded
|
|
# everything
|
|
self.ci.iperf_args = "-u -t 5 -b 1M -R"
|
|
self.ci.svr_id = "test"
|
|
self.ci.svr_node = "localhost"
|
|
self.ci.iperf_packetloss_threshold = "0"
|
|
self.ci.iperf_bitrate_threshold = "0"
|
|
self.ci.iperf_profile = "balanced"
|
|
infra_file = "tests/config/infra_ping_iperf.yaml"
|
|
# TODO Should need nothing but options and UE(s) to use
|
|
success = self.ci.Iperf(self.ctx, self.node, self.html, infra_file=infra_file)
|
|
self.assertTrue(success)
|
|
|
|
def test_iperf2_unidir(self):
|
|
self.ci.iperf_args = "-u -t 5 -b 1M"
|
|
self.ci.svr_id = "test"
|
|
self.ci.svr_node = "localhost"
|
|
self.ci.iperf_packetloss_threshold = "0"
|
|
self.ci.iperf_bitrate_threshold = "0"
|
|
self.ci.iperf_profile = "balanced"
|
|
infra_file = "tests/config/infra_ping_iperf.yaml"
|
|
# TODO Should need nothing but options and UE(s) to use
|
|
success = self.ci.Iperf2_Unidir(self.ctx, self.node, self.html, infra_file=infra_file)
|
|
self.assertTrue(success)
|
|
|
|
def test_iperf_highrate(self):
|
|
# note: needs to be five seconds because Iperf() adds -O 3, so if it is
|
|
# too short, the server is terminated before the client loaded
|
|
# everything
|
|
self.ci.iperf_args = "-u -t 5 -b 1000M -R -O 0"
|
|
self.ci.svr_id = "test"
|
|
self.ci.svr_node = "localhost"
|
|
self.ci.iperf_packetloss_threshold = "0"
|
|
self.ci.iperf_bitrate_threshold = "0"
|
|
self.ci.iperf_profile = "balanced"
|
|
infra_file = "tests/config/infra_ping_iperf.yaml"
|
|
# TODO Should need nothing but options and UE(s) to use
|
|
success = self.ci.Iperf(self.ctx, self.node, self.html, infra_file=infra_file)
|
|
self.assertTrue(success)
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|