Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions qubesadmin/tests/vm/properties.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

# pylint: disable=missing-docstring

import qubesadmin.vm
import qubesadmin.tests.vm


Expand Down Expand Up @@ -305,3 +306,10 @@ def test_015_mem(self):
('test-vm', 'admin.vm.CurrentState', None, None)] = \
b'0\x00mem=1234'
self.assertEqual(self.vm.get_mem(), 1234)

def test_020_klass(self):
vm = qubesadmin.vm.QubesVM(self.app, "test-vm")
self.app.expected_calls[("test-vm", "admin.vm.List", None, None)] = \
b"0\x00test-vm class=AppVM state=Running\n"
self.assertEqual(vm.klass, "AppVM")
self.assertAllCalled()
17 changes: 15 additions & 2 deletions qubesadmin/vm/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -446,8 +446,21 @@ def klass(self):
"""Qube class"""
# use cached value if available
if self._klass is None:
# pylint: disable=no-member
self._klass = super().klass
try:
# use List method as that should be allowed for VMs that are
# visible
vm_list_data = self.qubesd_call(
self._method_dest, "admin.vm.List"
)
assert vm_list_data.count(b"\n") == 1
vm_name, props = vm_list_data.decode("ascii").split(" ", 1)
assert vm_name == self.name
props = props.split(" ")
props_dict = dict([vm_prop.split("=", 1) for vm_prop in props])
self._klass = props_dict["class"]
except qubesadmin.exc.QubesDaemonAccessError:
# pylint: disable=no-member
self._klass = super().klass
return self._klass

def get_notes(self) -> str:
Expand Down