Skip to content

Commit a8650a7

Browse files
committed
q-dev: update tests for qvm-device and app
1 parent 6468b20 commit a8650a7

File tree

5 files changed

+376
-166
lines changed

5 files changed

+376
-166
lines changed

qubesadmin/device_protocol.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@
3232
import string
3333
import sys
3434
from enum import Enum
35-
from typing import Optional, Dict, Any, List, Type, Union
35+
from typing import Optional, Dict, Any, List, Union
3636

37-
import qubesadmin
37+
import qubesadmin.exc
3838

3939

4040
class ProtocolError(AssertionError):
@@ -74,7 +74,8 @@ def qbool(value):
7474

7575

7676
class Device:
77-
ALLOWED_CHARS_KEY = string.digits + string.ascii_letters + string.punctuation + ' '
77+
ALLOWED_CHARS_KEY = (
78+
string.digits + string.ascii_letters + string.punctuation + ' ')
7879
ALLOWED_CHARS_PARAM = ALLOWED_CHARS_KEY + string.punctuation + ' '
7980

8081
def __init__(self, backend_domain, ident, devclass=None):
@@ -609,6 +610,7 @@ def deserialize(
609610

610611
try:
611612
device = cls._deserialize(rest, device)
613+
# pylint: disable=broad-exception-caught
612614
except Exception as exc:
613615
print(exc, file=sys.stderr)
614616

qubesadmin/devices.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ class is implemented by an extension.
3434
import itertools
3535
from typing import Optional, Iterable
3636

37-
import qubesadmin
3837
import qubesadmin.exc
3938
from qubesadmin.device_protocol import (Device, DeviceInfo, UnknownDevice,
4039
DeviceAssignment)
@@ -100,6 +99,9 @@ def unassign(self, assignment: DeviceAssignment) -> None:
10099
self._remove(assignment, 'unassign')
101100

102101
def _add(self, assignment: DeviceAssignment, action: str) -> None:
102+
"""
103+
Helper for attaching/assigning device.
104+
"""
103105
if not assignment.frontend_domain:
104106
assignment.frontend_domain = self._vm
105107
elif assignment.frontend_domain != self._vm:
@@ -120,6 +122,9 @@ def _add(self, assignment: DeviceAssignment, action: str) -> None:
120122
)
121123

122124
def _remove(self, assignment: DeviceAssignment, action: str) -> None:
125+
"""
126+
Helper for detaching/unassigning device.
127+
"""
123128
if (assignment.frontend_domain
124129
and assignment.frontend_domain != self._vm):
125130
raise qubesadmin.exc.QubesValueError(

qubesadmin/tests/app.py

Lines changed: 35 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -734,13 +734,25 @@ def test_043_clone_devices(self):
734734
b'0\0pci\n'
735735

736736
self.app.expected_calls[
737-
('test-vm', 'admin.vm.device.pci.List', None, None)] = \
738-
b'0\0test-vm2+dev1 ro=True\n' \
739-
b'test-vm3+dev2 required=True\n'
737+
('test-vm', 'admin.vm.device.pci.Assigned', None, None)] = \
738+
(b"0\0test-vm2+dev1 ident='dev1' devclass='pci' "
739+
b"backend_domain='test-vm2' attach_automatically='yes' "
740+
b"_ro='yes'\n"
741+
b"test-vm3+dev2 ident='dev2' devclass='pci' "
742+
b"backend_domain='test-vm3' attach_automatically='yes' "
743+
b"required='yes'\n")
740744

741745
self.app.expected_calls[
742-
('new-name', 'admin.vm.device.pci.Attach', 'test-vm3+dev2',
743-
b'required=True')] = b'0\0'
746+
('new-name', 'admin.vm.device.pci.Assign', 'test-vm2+dev1',
747+
b"required='no' attach_automatically='yes' ident='dev1' "
748+
b"devclass='pci' backend_domain='test-vm2' "
749+
b"frontend_domain='new-name' _ro='yes'")] = b'0\0'
750+
751+
self.app.expected_calls[
752+
('new-name', 'admin.vm.device.pci.Assign', 'test-vm3+dev2',
753+
b"required='yes' attach_automatically='yes' ident='dev2' "
754+
b"devclass='pci' backend_domain='test-vm3' "
755+
b"frontend_domain='new-name'")] = b'0\0'
744756

745757
new_vm = self.app.clone_vm('test-vm', 'new-name')
746758
self.assertEqual(new_vm.name, 'new-name')
@@ -770,20 +782,32 @@ def test_044_clone_devices_fail(self):
770782
b'0\0pci\n'
771783

772784
self.app.expected_calls[
773-
('test-vm', 'admin.vm.device.pci.List', None, None)] = \
774-
b'0\0test-vm2+dev1 ro=True\n' \
775-
b'test-vm3+dev2 required=True\n'
785+
('test-vm', 'admin.vm.device.pci.Assigned', None, None)] = \
786+
(b"0\0test-vm2+dev1 ident='dev1' devclass='pci' "
787+
b"backend_domain='test-vm2' attach_automatically='yes' "
788+
b"_ro='yes'\n"
789+
b"test-vm3+dev2 ident='dev2' devclass='pci' "
790+
b"backend_domain='test-vm3' attach_automatically='yes' "
791+
b"required='yes'\n")
776792

777793
self.app.expected_calls[
778-
('new-name', 'admin.vm.device.pci.Attach', 'test-vm3+dev2',
779-
b'required=True')] = \
794+
('new-name', 'admin.vm.device.pci.Assign', 'test-vm2+dev1',
795+
b"required='no' attach_automatically='yes' ident='dev1' "
796+
b"devclass='pci' backend_domain='test-vm2' "
797+
b"frontend_domain='new-name' _ro='yes'")] = b'0\0'
798+
799+
self.app.expected_calls[
800+
('new-name', 'admin.vm.device.pci.Assign', 'test-vm3+dev2',
801+
b"required='yes' attach_automatically='yes' ident='dev2' "
802+
b"devclass='pci' backend_domain='test-vm3' "
803+
b"frontend_domain='new-name'")] = \
780804
b'2\0QubesException\0\0something happened\0'
781805

782806
self.app.expected_calls[
783807
('new-name', 'admin.vm.Remove', None, None)] = b'0\0'
784808

785809
with self.assertRaises(qubesadmin.exc.QubesException):
786-
new_vm = self.app.clone_vm('test-vm', 'new-name')
810+
self.app.clone_vm('test-vm', 'new-name')
787811

788812
self.assertAllCalled()
789813

0 commit comments

Comments
 (0)