Skip to content

Commit 1eea8fb

Browse files
virtio_fs_rlimit_nofile: new case
1. Create a shared directory for testing on the host. 2. Touch 1024 files in the shared directory. 3. Start the virtiofsd daemon with rlimit-nofile and check. Signed-off-by: Tingting Mao <[email protected]>
1 parent 39966b3 commit 1eea8fb

File tree

2 files changed

+169
-0
lines changed

2 files changed

+169
-0
lines changed
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
- virtio_fs_rlimit_nofile:
2+
only Linux
3+
no RHEL.6 RHEL.7 RHEL.8.0 RHEL.8.1
4+
no Host_RHEL.m6 Host_RHEL.m7 Host_RHEL.m8.u0 Host_RHEL.m8.u1
5+
type = virtio_fs_rlimit_nofile
6+
required_virtiofsd_version = [1.13.2-1,)
7+
virtiofsd_version_cmd = rpm -q virtiofsd | cut -d- -f2
8+
Win10.i386:
9+
mem = 4096
10+
fs_source_dir = /var/tmp/virtiofs_rlimit_nofile
11+
force_create_fs_source = yes
12+
remove_fs_source = yes
13+
14+
pre_command = "cd ${fs_source_dir}"
15+
pre_command += " && for i in $(seq 1 1024); do touch file_$i.txt; done"
16+
virtiofs_socket_path = '/var/tmp/virtiofs_rlimit_nofile.sock'
17+
cmd_run_virtiofsd = '/usr/libexec/virtiofsd --socket-path ${virtiofs_socket_path} --shared-dir ${fs_source_dir}'
18+
19+
vm_mem_share = yes
20+
vm_mem_backend = memory-backend-file
21+
vm_mem_backend_path = /dev/shm
22+
share_mem = yes
23+
!s390, s390x:
24+
mem_devs = mem1
25+
backend_mem_mem1 = memory-backend-file
26+
mem-path_mem1 = /dev/shm
27+
size_mem1 = ${mem}M
28+
use_mem_mem1 = no
29+
guest_numa_nodes = shm0
30+
numa_memdev_shm0 = mem-mem1
31+
numa_nodeid_shm0 = 0
32+
Windows:
33+
# install winfsp tool
34+
i386, i686:
35+
install_winfsp_path = 'C:\Program Files'
36+
devcon_dirname = 'x86'
37+
x86_64:
38+
install_winfsp_path = 'C:\Program Files (x86)'
39+
devcon_dirname = 'amd64'
40+
install_winfsp_cmd = 'msiexec /i WIN_UTILS:\winfsp.msi /qn'
41+
check_installed_cmd = 'dir "%s" |findstr /I winfsp'
42+
viofs_log_file = C:\viofs_log.txt
43+
viofs_svc_name = VirtioFsSvc
44+
viofs_exe_path = C:\virtiofs.exe
45+
viofs_exe_copy_cmd = xcopy %s C:\ /Y
46+
viofs_sc_create_cmd = 'sc create ${viofs_svc_name} binpath=${viofs_exe_path} start=auto'
47+
viofs_sc_create_cmd += ' depend="WinFsp.Launcher/VirtioFsDrv" DisplayName="Virtio FS Service"'
48+
viofs_sc_start_cmd = 'sc start ${viofs_svc_name}'
49+
viofs_sc_query_cmd = 'sc query ${viofs_svc_name}'
50+
viofs_sc_delete_cmd = 'sc delete ${viofs_svc_name}'
51+
debug_log_operation = 'enable'
52+
viofs_debug_enable_cmd = 'reg add HKLM\Software\VirtIO-FS /v DebugFlags /d 0xFFFFFFFF /t REG_DWORD'
53+
viofs_log_enable_cmd = 'reg add HKLM\Software\VirtIO-FS /v DebugLogFile /d ${viofs_log_file} /t REG_SZ'
54+
viofs_debug_delete_cmd = 'reg delete HKLM\Software\VirtIO-FS /v DebugFlags /f'
55+
viofs_log_delete_cmd = 'reg delete HKLM\Software\VirtIO-FS /v DebugLogFile /f'
56+
viofs_reg_query_cmd = 'reg query HKLM\Software\VirtIO-FS'
57+
virtio_win_media_type = iso
58+
cdroms += " virtio"
59+
check_str = 'A device attached to the system is not functioning'
60+
read_file_cmd = "type %s\${test_file}"
61+
write_file_cmd = "echo new_${test_data} > %s\${test_file}"
62+
variants:
63+
- rlimit_nofile_512:
64+
rlimit_nofile = 512
65+
cmd_run_virtiofsd += " --rlimit-nofile ${rlimit_nofile}"
66+
expected_msg = "Maximum number of file descriptors too small: Limit is 512, must be at least 610"
67+
- rlimit_nofile_610:
68+
rlimit_nofile = 610
69+
cmd_run_virtiofsd += " --rlimit-nofile ${rlimit_nofile}"
70+
expected_msg = "File descriptor count limit is very small, leaving only 0 file descriptors for the guest"
71+
- rlimit_nofile_1024:
72+
kill_vm = yes
73+
start_vm = yes
74+
filesystems = fs
75+
fs_driver = virtio-fs
76+
fs_source_type = mount
77+
force_create_fs_source = yes
78+
remove_fs_source = yes
79+
fs_target = 'myfs'
80+
fs_driver_props = {"queue-size": 1024}
81+
fs_dest = '/mnt/${fs_target}'
82+
driver_name = viofs
83+
rlimit_nofile = 1024
84+
fs_binary_extra_options += " --rlimit-nofile ${rlimit_nofile}"
85+
- rlimit_nofile_2048:
86+
kill_vm = yes
87+
start_vm = yes
88+
filesystems = fs
89+
fs_driver = virtio-fs
90+
fs_source_type = mount
91+
force_create_fs_source = yes
92+
remove_fs_source = yes
93+
fs_target = 'myfs'
94+
fs_driver_props = {"queue-size": 1024}
95+
fs_dest = '/mnt/${fs_target}'
96+
driver_name = viofs
97+
rlimit_nofile = 2048
98+
fs_binary_extra_options += " --rlimit-nofile ${rlimit_nofile}"
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import aexpect
2+
from virttest import error_context
3+
from avocado.utils import process
4+
from virttest import env_process, error_context, utils_disk, utils_misc, utils_test
5+
6+
7+
@error_context.context_aware
8+
def run(test, params, env):
9+
"""
10+
Test virtio-fs rlimit-nofile.
11+
Steps:
12+
1. Create a shared directory for testing on the host.
13+
2. Touch 1024 files in the shared directory.
14+
3. Start the virtiofsd daemon with rlimit-nofile and check.
15+
16+
:param test: QEMU test object.
17+
:param params: Dictionary with the test parameters.
18+
:param env: Dictionary with test environment.
19+
"""
20+
rlimit_nofile = params.get("rlimit_nofile")
21+
cmd_run_virtiofsd = params["cmd_run_virtiofsd"]
22+
23+
if rlimit_nofile == "512":
24+
expected_msg = params["expected_msg"]
25+
error_context.context(
26+
"Starting virtiofsd with rlimit-nofile=%s" % rlimit_nofile,
27+
test.log.info)
28+
result = process.run(
29+
cmd_run_virtiofsd,
30+
shell=True,
31+
ignore_status=True,
32+
verbose=True,
33+
)
34+
status, out = result.exit_status, result.stdout.decode()
35+
if status == 0:
36+
test.fail("virtiofsd unexpectedly started successfully with rlimit-nofile=512")
37+
elif expected_msg not in out:
38+
test.fail(
39+
"virtiofsd failed but without expected message. Output: %s" % out)
40+
error_context.context(
41+
"virtiofsd failed as expected with the required message present",
42+
test.log.info)
43+
elif rlimit_nofile == "610":
44+
expected_msg = params["expected_msg"]
45+
error_context.context(
46+
"Starting virtiofsd with rlimit-nofile=%s" % rlimit_nofile,
47+
test.log.info)
48+
session = aexpect.ShellSession(
49+
cmd_run_virtiofsd,
50+
auto_close=False,
51+
output_func=utils_misc.log_line,
52+
output_params=("virtiofs_fs-virtiofs.log",),
53+
prompt=r"^\[.*\][\#\$]\s*$",
54+
)
55+
try:
56+
session.expect(expected_msg, timeout=10)
57+
test.log.info("virtiofsd started successfully with the required message present")
58+
except aexpect.ExpectTimeout as e:
59+
test.fail("Timeout for virtiofsd start with rlimit-nofile=610: %s" % e)
60+
finally:
61+
session.close()
62+
elif rlimit_nofile == "1024":
63+
error_context.context(
64+
"Starting virtiofsd with rlimit-nofile=%s" % rlimit_nofile,
65+
test.log.info)
66+
vm = env.get_vm(params.get("main_vm"))
67+
vm.verify_alive()
68+
session = vm.wait_for_login()
69+
session.close()
70+
else:
71+
test.fail("Invalid rlimit-nofile: %s" % rlimit_nofile)

0 commit comments

Comments
 (0)