Skip to content

Commit 6c665f6

Browse files
Merge branch 'main' into library_check
2 parents 2ec1071 + 244f277 commit 6c665f6

File tree

35 files changed

+766
-429
lines changed

35 files changed

+766
-429
lines changed

tests/validation/configs/test_config.yaml

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@ media_path: /mnt/media
44
capture_cfg:
55
enable: false
66
test_name: test_name
7-
pcap_dir: /home/ubuntu/pcap_files
7+
pcap_dir: /mnt/ramdisk/pcap
88
capture_time: 5
99
interface: null
1010
ramdisk:
11-
pcap_dir: /home/ubuntu/pcap_files
12-
tmpfs_size: 768G
13-
tmpfs_name: tmpfs_name
14-
use_sudo: true
11+
media:
12+
mountpoint: /mnt/ramdisk/media
13+
size_gib: 32
14+
pcap:
15+
mountpoint: /mnt/ramdisk/pcap
16+
size_gib: 768

tests/validation/conftest.py

Lines changed: 59 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
# # SPDX-License-Identifier: BSD-3-Clause
2-
# # Copyright 2024-2025 Intel Corporation
3-
# # Media Communications Mesh
1+
# SPDX-License-Identifier: BSD-3-Clause
2+
# Copyright 2024-2025 Intel Corporation
3+
# Media Communications Mesh
4+
45
import datetime
56
import logging
67
import os
@@ -10,15 +11,16 @@
1011

1112
import pytest
1213
from common.nicctl import Nicctl
13-
from create_pcap_file.ramdisk import RamdiskPreparer
1414
from mfd_common_libs.custom_logger import add_logging_level
1515
from mfd_common_libs.log_levels import TEST_FAIL, TEST_INFO, TEST_PASS
16+
from mfd_connect.exceptions import ConnectionCalledProcessError
1617
from mtl_engine.const import LOG_FOLDER, TESTCMD_LVL
1718
from mtl_engine.csv_report import (
1819
csv_add_test,
1920
csv_write_report,
2021
update_compliance_result,
2122
)
23+
from mtl_engine.ramdisk import Ramdisk
2224
from mtl_engine.stash import (
2325
clear_issue,
2426
clear_result_log,
@@ -111,8 +113,8 @@ def nic_port_list(hosts: dict, mtl_path) -> None:
111113
for host in hosts.values():
112114
nicctl = Nicctl(mtl_path, host)
113115
if int(host.network_interfaces[0].virtualization.get_current_vfs()) == 0:
114-
vfs = nicctl.create_vfs(host.network_interfaces[0].pci_address)
115-
vfs = nicctl.vfio_list()
116+
vfs = nicctl.create_vfs(host.network_interfaces[0].pci_address.lspci)
117+
vfs = nicctl.vfio_list(host.network_interfaces[0].pci_address.lspci)
116118
# Store VFs on the host object for later use
117119
host.vfs = vfs
118120

@@ -135,20 +137,60 @@ def prepare_ramdisk(hosts, test_config):
135137
ramdisk_cfg = test_config.get("ramdisk", {})
136138
capture_cfg = test_config.get("capture_cfg", {})
137139
pcap_dir = ramdisk_cfg.get("pcap_dir", "/home/pcap_files")
138-
tmpfs_size = ramdisk_cfg.get("tmpfs_size", "768G")
139-
tmpfs_name = ramdisk_cfg.get("tmpfs_name", "new_disk_name")
140-
use_sudo = ramdisk_cfg.get("use_sudo", True)
140+
tmpfs_size_gib = ramdisk_cfg.get("tmpfs_size_gib", "768")
141141

142142
if capture_cfg.get("enable", False):
143-
for host in hosts.values():
144-
preparer = RamdiskPreparer(
145-
host=host,
146-
pcap_dir=pcap_dir,
147-
tmpfs_size=tmpfs_size,
148-
tmpfs_name=tmpfs_name,
149-
use_sudo=use_sudo,
143+
ramdisks = [
144+
Ramdisk(host=host, mount_point=pcap_dir, size_gib=tmpfs_size_gib)
145+
for host in hosts.values()
146+
]
147+
for ramdisk in ramdisks:
148+
ramdisk.mount()
149+
150+
151+
@pytest.fixture(scope="session")
152+
def media_ramdisk(hosts, test_config):
153+
ramdisk_config = test_config.get("ramdisk", {}).get("media", {})
154+
ramdisk_mountpoint = ramdisk_config.get("mountpoint", "/mnt/ramdisk/media")
155+
ramdisk_size_gib = ramdisk_config.get("size_gib", 32)
156+
ramdisks = [
157+
Ramdisk(host=host, mount_point=ramdisk_mountpoint, size_gib=ramdisk_size_gib)
158+
for host in hosts.values()
159+
]
160+
for ramdisk in ramdisks:
161+
ramdisk.mount()
162+
yield
163+
for ramdisk in ramdisks:
164+
ramdisk.unmount()
165+
166+
167+
@pytest.fixture(scope="function")
168+
def media_file(media_ramdisk, request, hosts, test_config):
169+
media_file_info = request.param
170+
ramdisk_config = test_config.get("ramdisk", {}).get("media", {})
171+
ramdisk_mountpoint = ramdisk_config.get("mountpoint", "/mnt/ramdisk/media")
172+
media_path = test_config.get("media_path", "/mnt/media")
173+
src_media_file_path = os.path.join(media_path, media_file_info["filename"])
174+
ramdisk_media_file_path = os.path.join(
175+
ramdisk_mountpoint, media_file_info["filename"]
176+
)
177+
for host in hosts.values():
178+
cmd = f"cp {src_media_file_path} {ramdisk_media_file_path}"
179+
try:
180+
host.connection.execute_command(cmd)
181+
except ConnectionCalledProcessError as e:
182+
logging.log(
183+
level=logging.ERROR, msg=f"Failed to execute command {cmd}: {e}"
184+
)
185+
yield media_file_info, ramdisk_media_file_path
186+
for host in hosts.values():
187+
cmd = f"rm {ramdisk_media_file_path}"
188+
try:
189+
host.connection.execute_command(cmd)
190+
except ConnectionCalledProcessError as e:
191+
logging.log(
192+
level=logging.ERROR, msg=f"Failed to execute command {cmd}: {e}"
150193
)
151-
preparer.start()
152194

153195

154196
def pytest_addoption(parser):

tests/validation/create_pcap_file/ramdisk.py

Lines changed: 0 additions & 67 deletions
This file was deleted.

tests/validation/mtl_engine/media_files.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,27 +366,31 @@
366366
"format": "YUV_422_10bit",
367367
"width": 720,
368368
"height": 480,
369+
"fps": "60",
369370
},
370371
ParkJoy_576p={
371372
"filename": "ParkJoy_720x576_interlace_10bit_50Hz_P422.yuv",
372373
"file_format": "YUV422RFC4175PG2BE10",
373374
"format": "YUV_422_10bit",
374375
"width": 720,
375376
"height": 576,
377+
"fps": "50",
376378
},
377379
Crosswalk_1080p={
378380
"filename": "Netflix_Crosswalk_1920x1080_interlace_10bit_60Hz_P422.yuv",
379381
"file_format": "YUV422RFC4175PG2BE10",
380382
"format": "YUV_422_10bit",
381383
"width": 1920,
382384
"height": 1080,
385+
"fps": "60",
383386
},
384387
ParkJoy_1080p={
385388
"filename": "ParkJoy_1920x1080_interlace_10bit_50Hz_P422.yuv",
386389
"file_format": "YUV422RFC4175PG2BE10",
387390
"format": "YUV_422_10bit",
388391
"width": 1920,
389392
"height": 1080,
393+
"fps": "50",
390394
},
391395
)
392396

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import logging
2+
3+
from mfd_connect.exceptions import ConnectionCalledProcessError
4+
5+
6+
class Ramdisk:
7+
def __init__(self, host, mount_point, size_gib):
8+
self._host = host
9+
self._mount_point = mount_point
10+
self._size_gib = size_gib
11+
12+
def mount(self):
13+
cmd = f"mkdir -p {self._mount_point} && mount -t ramfs -o size={self._size_gib}G ramfs {self._mount_point}"
14+
try:
15+
self._host.connection.execute_command(cmd)
16+
except ConnectionCalledProcessError as e:
17+
logging.log(
18+
level=logging.ERROR, msg=f"Failed to execute command {cmd}: {e}"
19+
)
20+
21+
def unmount(self):
22+
cmd = f"umount {self._mount_point} && rmdir {self._mount_point}"
23+
try:
24+
self._host.connection.execute_command(cmd)
25+
except ConnectionCalledProcessError as e:
26+
logging.log(
27+
level=logging.ERROR, msg=f"Failed to execute command {cmd}: {e}"
28+
)

tests/validation/tests/single/rss_mode/audio/test_rss_mode_audio.py

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,41 +4,62 @@
44

55
import mtl_engine.RxTxApp as rxtxapp
66
import pytest
7+
from mtl_engine.execute import LOG_FOLDER
78
from mtl_engine.media_files import audio_files
89

910

11+
@pytest.mark.parametrize(
12+
"media_file",
13+
[
14+
audio_files["PCM8"],
15+
audio_files["PCM16"],
16+
audio_files["PCM24"],
17+
],
18+
indirect=["media_file"],
19+
ids=[
20+
"PCM8",
21+
"PCM16",
22+
"PCM24",
23+
],
24+
)
1025
@pytest.mark.parametrize("rss_mode", ["l3_l4", "l3", "none"])
11-
@pytest.mark.parametrize("audio_format", ["PCM8", "PCM16", "PCM24"])
1226
def test_rss_mode_audio(
1327
hosts,
1428
build,
1529
media,
1630
nic_port_list,
1731
test_time,
18-
audio_format,
1932
rss_mode,
2033
test_config,
2134
prepare_ramdisk,
35+
media_file,
2236
):
23-
audio_file = audio_files[audio_format]
37+
media_file_info, media_file_path = media_file
2438
host = list(hosts.values())[0]
2539

2640
# Get capture configuration from test_config.yaml
2741
# This controls whether tcpdump capture is enabled, where to store the pcap, etc.
2842
capture_cfg = dict(test_config.get("capture_cfg", {}))
29-
capture_cfg["test_name"] = f"test_rss_mode_audio_{audio_format}_{rss_mode}"
43+
capture_cfg["test_name"] = (
44+
f"test_rss_mode_audio_{media_file_info['format']}_{rss_mode}"
45+
)
46+
47+
# Ensure the output directory exists.
48+
log_dir = os.path.join(os.getcwd(), LOG_FOLDER, "latest")
49+
os.makedirs(log_dir, exist_ok=True)
50+
out_file_url = os.path.join(log_dir, "out.wav")
3051

3152
config = rxtxapp.create_empty_config()
3253
config = rxtxapp.add_st30p_sessions(
3354
config=config,
3455
nic_port_list=host.vfs,
3556
test_mode="unicast",
36-
audio_format=audio_format,
57+
audio_format=media_file_info["format"],
3758
audio_channel=["U02"],
3859
audio_sampling="48kHz",
3960
audio_ptime="1",
40-
filename=os.path.join(media, audio_file["filename"]),
41-
out_url=os.path.join(media, audio_file["filename"]),
61+
filename=media_file_path,
62+
out_url=out_file_url,
4263
)
4364
config = rxtxapp.change_rss_mode(content=config, rss_mode=rss_mode)
4465

0 commit comments

Comments
 (0)