Skip to content

Commit

Permalink
Added a servicevm feature extension
Browse files Browse the repository at this point in the history
Used by vm.icon method, at the moment features['servicevm'] is set
when a VM provides_network.
  • Loading branch information
marmarta committed May 10, 2020
1 parent 7241b54 commit 419b4d5
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 0 deletions.
22 changes: 22 additions & 0 deletions qubes/ext/core_features.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,3 +62,25 @@ def qubes_features_request(self, vm, event, untrusted_features):
# if this is the first time qrexec was advertised, now can finish
# template setup
yield from vm.fire_event_async('template-postinstall')

# pylint: disable=no-self-use
def set_servicevm_feature(self, subject):
if getattr(subject, 'provides_network', False):
subject.features['servicevm'] = 1
elif 'servicevm' in subject.features:
del subject.features['servicevm']

@qubes.ext.handler('property-set:provides_network')
def on_property_set(self, subject, event, name, newvalue, oldvalue=None):
# pylint: disable=unused-argument
self.set_servicevm_feature(subject)

@qubes.ext.handler('property-del:provides_network')
def on_property_del(self, subject, event, name):
# pylint: disable=unused-argument
self.set_servicevm_feature(subject)

@qubes.ext.handler('domain-load')
def on_domain_load(self, subject, event):
# pylint: disable=unused-argument
self.set_servicevm_feature(subject)
13 changes: 13 additions & 0 deletions qubes/tests/ext.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,11 @@ def setUp(self):
self.features = {}
self.vm.configure_mock(**{
'features.get.side_effect': self.features.get,
'features.items.side_effect': self.features.items,
'features.__iter__.side_effect': self.features.__iter__,
'features.__contains__.side_effect': self.features.__contains__,
'features.__setitem__.side_effect': self.features.__setitem__,
'features.__delitem__.side_effect': self.features.__delitem__,
})

def test_010_notify_tools(self):
Expand Down Expand Up @@ -181,6 +184,16 @@ def test_018_notify_tools_already_installed(self):
('features.__contains__', ('gui',), {}),
])

def test_100_servicevm_feature(self):
self.vm.provides_network = True
self.ext.set_servicevm_feature(self.vm)
self.assertEqual(self.features['servicevm'], 1)

self.vm.provides_network = False
self.ext.set_servicevm_feature(self.vm)
self.assertNotIn('servicevm', self.features)


class TC_10_WindowsFeatures(qubes.tests.QubesTestCase):
def setUp(self):
super().setUp()
Expand Down

0 comments on commit 419b4d5

Please sign in to comment.