Merge remote-tracking branch 'woju/pull/25/head' into core3-devel
This commit is contained in:
commit
f915115cfb
@ -437,14 +437,17 @@ class VMCollection(object):
|
|||||||
|
|
||||||
raise KeyError(key)
|
raise KeyError(key)
|
||||||
|
|
||||||
|
|
||||||
def __delitem__(self, key):
|
def __delitem__(self, key):
|
||||||
vm = self[key]
|
vm = self[key]
|
||||||
|
if not vm.is_halted():
|
||||||
|
msg = "Can't remove, vm {!s}, beacuse it's in state {!s}."
|
||||||
|
msg = msg.format(vm, vm.get_power_state())
|
||||||
|
raise qubes.exc.QubesVMNotHaltedError(msg)
|
||||||
self.app.fire_event_pre('domain-pre-delete', vm)
|
self.app.fire_event_pre('domain-pre-delete', vm)
|
||||||
|
vm.libvirt_domain.undefine()
|
||||||
del self._dict[vm.qid]
|
del self._dict[vm.qid]
|
||||||
self.app.fire_event('domain-delete', vm)
|
self.app.fire_event('domain-delete', vm)
|
||||||
|
|
||||||
|
|
||||||
def __contains__(self, key):
|
def __contains__(self, key):
|
||||||
return any((key == vm or key == vm.qid or key == vm.name)
|
return any((key == vm or key == vm.qid or key == vm.name)
|
||||||
for vm in self)
|
for vm in self)
|
||||||
|
@ -24,7 +24,6 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import unittest
|
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
import lxml.etree
|
import lxml.etree
|
||||||
@ -42,6 +41,18 @@ class TestVM(qubes.vm.BaseVM):
|
|||||||
netid = qid
|
netid = qid
|
||||||
uuid = uuid.uuid5(uuid.NAMESPACE_DNS, 'testvm')
|
uuid = uuid.uuid5(uuid.NAMESPACE_DNS, 'testvm')
|
||||||
|
|
||||||
|
class MockLibvirt(object):
|
||||||
|
def undefine(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
libvirt_domain = MockLibvirt()
|
||||||
|
|
||||||
|
def is_halted(self):
|
||||||
|
return True
|
||||||
|
|
||||||
|
def get_power_state(self):
|
||||||
|
return "Halted"
|
||||||
|
|
||||||
class TestApp(qubes.tests.TestEmitter):
|
class TestApp(qubes.tests.TestEmitter):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@ -157,7 +168,7 @@ class TC_90_Qubes(qubes.tests.QubesTestCase):
|
|||||||
os.unlink('/tmp/qubestest.xml')
|
os.unlink('/tmp/qubestest.xml')
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
app = qubes.Qubes.create_empty_store('/tmp/qubestest.xml')
|
qubes.Qubes.create_empty_store('/tmp/qubestest.xml')
|
||||||
|
|
||||||
@qubes.tests.skipUnlessGit
|
@qubes.tests.skipUnlessGit
|
||||||
def test_900_example_xml_in_doc(self):
|
def test_900_example_xml_in_doc(self):
|
||||||
|
@ -23,7 +23,6 @@
|
|||||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
#
|
#
|
||||||
|
|
||||||
import os
|
|
||||||
import unittest
|
import unittest
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
@ -70,7 +69,7 @@ class TC_10_property(qubes.tests.QubesTestCase):
|
|||||||
try:
|
try:
|
||||||
class MyTestHolder(qubes.tests.TestEmitter, qubes.PropertyHolder):
|
class MyTestHolder(qubes.tests.TestEmitter, qubes.PropertyHolder):
|
||||||
testprop1 = qubes.property('testprop1')
|
testprop1 = qubes.property('testprop1')
|
||||||
except: # pylint: disable=bare-except
|
except: # pylint: disable=bare-except
|
||||||
self.skipTest('MyTestHolder class definition failed')
|
self.skipTest('MyTestHolder class definition failed')
|
||||||
self.holder = MyTestHolder(None)
|
self.holder = MyTestHolder(None)
|
||||||
|
|
||||||
@ -120,6 +119,7 @@ class TC_10_property(qubes.tests.QubesTestCase):
|
|||||||
self.assertIs(prop, MyTestHolder.testprop1)
|
self.assertIs(prop, MyTestHolder.testprop1)
|
||||||
self.assertEquals(value, 'testvalue')
|
self.assertEquals(value, 'testvalue')
|
||||||
return 'settervalue'
|
return 'settervalue'
|
||||||
|
|
||||||
class MyTestHolder(qubes.tests.TestEmitter, qubes.PropertyHolder):
|
class MyTestHolder(qubes.tests.TestEmitter, qubes.PropertyHolder):
|
||||||
testprop1 = qubes.property('testprop1', setter=setter)
|
testprop1 = qubes.property('testprop1', setter=setter)
|
||||||
holder = MyTestHolder(None)
|
holder = MyTestHolder(None)
|
||||||
@ -219,7 +219,6 @@ class TC_20_PropertyHolder(qubes.tests.QubesTestCase):
|
|||||||
|
|
||||||
self.holder = TestHolder(xml)
|
self.holder = TestHolder(xml)
|
||||||
|
|
||||||
|
|
||||||
def test_000_property_list(self):
|
def test_000_property_list(self):
|
||||||
self.assertListEqual([p.__name__ for p in self.holder.property_list()],
|
self.assertListEqual([p.__name__ for p in self.holder.property_list()],
|
||||||
['testprop1', 'testprop2', 'testprop3', 'testprop4'])
|
['testprop1', 'testprop2', 'testprop3', 'testprop4'])
|
||||||
@ -293,6 +292,18 @@ class TestVM(qubes.vm.BaseVM):
|
|||||||
netid = qid
|
netid = qid
|
||||||
uuid = uuid.uuid5(uuid.NAMESPACE_DNS, 'testvm')
|
uuid = uuid.uuid5(uuid.NAMESPACE_DNS, 'testvm')
|
||||||
|
|
||||||
|
class MockLibvirt(object):
|
||||||
|
def undefine(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
libvirt_domain = MockLibvirt()
|
||||||
|
|
||||||
|
def is_halted(self):
|
||||||
|
return True
|
||||||
|
|
||||||
|
def get_power_state(self):
|
||||||
|
return "Halted"
|
||||||
|
|
||||||
class TestApp(qubes.tests.TestEmitter):
|
class TestApp(qubes.tests.TestEmitter):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -1094,6 +1094,11 @@ class QubesVM(qubes.vm.mix.net.NetVMMixin, qubes.vm.BaseVM):
|
|||||||
|
|
||||||
def remove_from_disk(self):
|
def remove_from_disk(self):
|
||||||
'''Remove domain remnants from disk.'''
|
'''Remove domain remnants from disk.'''
|
||||||
|
if not self.is_halted():
|
||||||
|
msg = "Can't remove, vm {!s}, beacuse it's in state {!s}."
|
||||||
|
msg = msg.format(self, self.get_power_state())
|
||||||
|
raise qubes.exc.QubesVMNotHaltedError(msg)
|
||||||
|
|
||||||
self.fire_event('domain-remove-from-disk')
|
self.fire_event('domain-remove-from-disk')
|
||||||
shutil.rmtree(self.dir_path)
|
shutil.rmtree(self.dir_path)
|
||||||
self.storage.remove()
|
self.storage.remove()
|
||||||
|
Loading…
Reference in New Issue
Block a user