Skip to content

Commit 7e45102

Browse files
committed
Implement storage nfs-on-slave test
This new test ensures that the "nfs-on-slave" host-plugin does check something, and return different result based on the environment. Signed-off-by: Anthony PERARD <[email protected]>
1 parent 12622d0 commit 7e45102

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

tests/storage/nfs/test_nfs_sr.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
1+
from __future__ import annotations
2+
13
import pytest
24

5+
from lib.commands import SSHCommandFailed
36
from lib.common import vm_image, wait_for
7+
from lib.vdi import VDI
48
from tests.storage import vdi_is_open
59

10+
from typing import TYPE_CHECKING
11+
12+
if TYPE_CHECKING:
13+
from lib.vm import VM
14+
615
# Requirements:
716
# - one XCP-ng host >= 8.0 with an additional unused disk for the SR
817

@@ -30,6 +39,39 @@ def test_vdi_is_not_open(self, dispatch_nfs):
3039
vdi = dispatch_nfs
3140
assert not vdi_is_open(vdi)
3241

42+
@pytest.mark.small_vm
43+
@pytest.mark.usefixtures('hostA2')
44+
# Make sure this fixture is called before the parametrized one
45+
@pytest.mark.usefixtures('vm_ref')
46+
@pytest.mark.parametrize('dispatch_nfs', ['vm_on_nfs_sr', 'vm_on_nfs4_sr'], indirect=True)
47+
def test_plugin_nfs_on_on_slave(self, dispatch_nfs: VM):
48+
vm = dispatch_nfs
49+
vm.start()
50+
vm.wait_for_os_booted()
51+
host = vm.get_residence_host()
52+
53+
vdi = vm.vdis[0]
54+
image_format = vdi.get_image_format() or "vhd"
55+
56+
vdi_path = f"/run/sr-mount/{vdi.sr.uuid}/{vdi.uuid}.{image_format}"
57+
58+
# nfs-on-slave returns an error when the VDI is open on the host.
59+
# Otherwise, it return "success", including in case "path" doesn't exist
60+
with pytest.raises(SSHCommandFailed) as excinfo:
61+
host.call_plugin("nfs-on-slave", "check", {"path": vdi_path})
62+
63+
# The output of the host plugin would have "stdout: NfsCheckException"
64+
# and information about which process has the path open.
65+
assert "NfsCheckException" in excinfo.value.stdout
66+
67+
for member in host.pool.hosts:
68+
# skip the host where the VM is running
69+
if member.uuid == host.uuid:
70+
continue
71+
member.call_plugin("nfs-on-slave", "check", {"path": vdi_path})
72+
73+
vm.shutdown(verify=True)
74+
3375
@pytest.mark.small_vm # run with a small VM to test the features
3476
@pytest.mark.big_vm # and ideally with a big VM to test it scales
3577
# Make sure this fixture is called before the parametrized one

0 commit comments

Comments
 (0)