Skip to content

Commit d4a34d0

Browse files
authored
Merge pull request #6520 from fangge1212/set_get_user_sshkey_negative
set/get_user_sshkeys: Add negative tests
2 parents 1eded92 + c58051a commit d4a34d0

File tree

4 files changed

+160
-0
lines changed

4 files changed

+160
-0
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
- virsh.get_user_sshkeys:
2+
type = virsh_get_user_sshkeys
3+
start_vm = yes
4+
guest_user = "guest_user"
5+
func_supported_since_libvirt_ver = (6, 10, 0)
6+
variants:
7+
- negative:
8+
status_error = "yes"
9+
variants:
10+
- no_start_qemu_guest_agent:
11+
no_start_qemu_ga = "yes"
12+
- acl_test:
13+
acl_test = "yes"
14+
setup_libvirt_polkit = "yes"
15+
unprivileged_user = 'testacl'
16+
virsh_uri = "qemu:///system"
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
- virsh.set_user_sshkeys:
2+
type = virsh_set_user_sshkeys
3+
start_vm = yes
4+
host_test_user = "host_test_user"
5+
guest_user = "guest_user"
6+
func_supported_since_libvirt_ver = (6, 10, 0)
7+
variants:
8+
- negative:
9+
status_error = "yes"
10+
variants:
11+
- no_start_qemu_guest_agent:
12+
no_start_qemu_ga = "yes"
13+
- acl_test:
14+
acl_test = "yes"
15+
setup_libvirt_polkit = "yes"
16+
unprivileged_user = 'testacl'
17+
virsh_uri = "qemu:///system"
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
from virttest import virsh
2+
from virttest import libvirt_version
3+
4+
from virttest.utils_test import libvirt
5+
from virttest.libvirt_xml import vm_xml
6+
7+
8+
def run(test, params, env):
9+
"""
10+
Test set-user-sshkeys command
11+
"""
12+
vm_name = params.get("main_vm")
13+
guest_user = params.get("guest_user")
14+
unprivileged_user = params.get('unprivileged_user')
15+
start_qemu_ga = ("no" == params.get("no_start_qemu_ga", "no"))
16+
status_error = ("yes" == params.get("status_error", "no"))
17+
uri = params.get("virsh_uri", None)
18+
acl_test = ("yes" == params.get("acl_test", "no"))
19+
20+
libvirt_version.is_libvirt_feature_supported(params)
21+
22+
vm = env.get_vm(vm_name)
23+
vmxml = vm_xml.VMXML.new_from_inactive_dumpxml(vm_name)
24+
backup_xml = vmxml.copy()
25+
try:
26+
fail_patterns = []
27+
if status_error:
28+
if not start_qemu_ga:
29+
fail_patterns.append(r"QEMU guest agent is not connected")
30+
if acl_test:
31+
fail_patterns.append(r"error: access denied")
32+
33+
vm.prepare_guest_agent(start=start_qemu_ga)
34+
35+
res = virsh.get_user_sshkeys(vm_name, guest_user,
36+
ignore_status=True, debug=True,
37+
unprivileged_user=unprivileged_user,
38+
uri=uri)
39+
libvirt.check_result(res, expected_fails=fail_patterns)
40+
finally:
41+
backup_xml.sync()
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
import os
2+
import stat
3+
4+
from avocado.utils import process
5+
6+
from virttest import virsh
7+
from virttest import libvirt_version
8+
from virttest import ssh_key
9+
10+
from virttest.utils_test import libvirt
11+
from virttest.libvirt_xml import vm_xml
12+
13+
14+
def run(test, params, env):
15+
"""
16+
Test set-user-sshkeys command
17+
"""
18+
def prepare_user_sshkeys(user):
19+
"""
20+
Generate the ssh key for user, and return the path
21+
22+
:param user: The name of the user to generate ssh key for
23+
:return: The path to the generated ssh public key file
24+
"""
25+
process.run('useradd %s' % user, shell=True)
26+
ssh_key.get_public_key(client_user=user)
27+
ssh_key_path = "/home/%s/.ssh/id_rsa.pub" % user
28+
29+
return ssh_key_path
30+
31+
def add_other_read_permission(path):
32+
"""
33+
Add permissions for others to read the content of the file.
34+
35+
:param path: The path of the file
36+
"""
37+
def _add_permission(path, permission):
38+
current_mode = os.stat(path).st_mode
39+
new_mode = current_mode | permission
40+
os.chmod(path, new_mode)
41+
42+
dir_path = os.path.dirname(path)
43+
parent_dir = os.path.dirname(dir_path)
44+
_add_permission(dir_path, stat.S_IXOTH)
45+
_add_permission(parent_dir, stat.S_IXOTH)
46+
_add_permission(path, stat.S_IROTH)
47+
48+
vm_name = params.get("main_vm")
49+
host_test_user = params.get("host_test_user")
50+
guest_user = params.get("guest_user")
51+
unprivileged_user = params.get('unprivileged_user')
52+
start_qemu_ga = ("no" == params.get("no_start_qemu_ga", "no"))
53+
status_error = ("yes" == params.get("status_error", "no"))
54+
uri = params.get("virsh_uri", None)
55+
acl_test = ("yes" == params.get("acl_test", "no"))
56+
57+
libvirt_version.is_libvirt_feature_supported(params)
58+
59+
vm = env.get_vm(vm_name)
60+
vmxml = vm_xml.VMXML.new_from_inactive_dumpxml(vm_name)
61+
backup_xml = vmxml.copy()
62+
try:
63+
fail_patterns = []
64+
if status_error:
65+
if not start_qemu_ga:
66+
fail_patterns.append(r"QEMU guest agent is not connected")
67+
if acl_test:
68+
fail_patterns.append(r"error: access denied")
69+
70+
vm.prepare_guest_agent(start=start_qemu_ga)
71+
72+
pub_key_path = prepare_user_sshkeys(host_test_user)
73+
add_other_read_permission(pub_key_path)
74+
75+
options = "--file %s" % pub_key_path
76+
res = virsh.set_user_sshkeys(vm_name, guest_user, options,
77+
ignore_status=True, debug=True,
78+
unprivileged_user=unprivileged_user,
79+
uri=uri)
80+
libvirt.check_result(res, expected_fails=fail_patterns)
81+
finally:
82+
session = vm.wait_for_login()
83+
session.cmd_output('userdel -r %s' % guest_user)
84+
session.close()
85+
process.run("userdel -r %s" % host_test_user)
86+
backup_xml.sync()

0 commit comments

Comments
 (0)