Skip to content

Commit ef3eaa9

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 c34bce5 commit ef3eaa9

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

tests/storage/nfs/test_nfs_sr.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
import pytest
22

3+
from lib.commands import SSHCommandFailed
34
from lib.common import vm_image, wait_for
5+
from lib.vdi import VDI
46
from tests.storage import vdi_is_open
57

8+
from typing import TYPE_CHECKING
9+
10+
if TYPE_CHECKING:
11+
from lib.vm import VM
12+
613
# Requirements:
714
# - one XCP-ng host >= 8.0 with an additional unused disk for the SR
815

@@ -30,6 +37,39 @@ def test_vdi_is_not_open(self, dispatch_nfs):
3037
vdi = dispatch_nfs
3138
assert not vdi_is_open(vdi)
3239

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

0 commit comments

Comments
 (0)