def test_node_revert_snapshot_shutoff( self, mock_conn, mock_set_snapshot_current, mock_node_active, mock_node_destroy): snapshot_name = factories.fuzzy_string('name_') domain_name = factories.fuzzy_string('domain_') disk1_path = factories.fuzzy_string('/path/to/') snapshot1_path = factories.fuzzy_string('/path/to/') domain_xml_tmpl = ''' <domain> <name>{0}</name> <cpu mode='host-model'/> <devices> <disk type='file' device='disk' snapshot='external'> <driver name='qemu' type='raw'/> <source file='{1}'/> <target dev='vda' bus='virtio'/> </disk> </devices> </domain>''' domain_xml = domain_xml_tmpl.format(domain_name, disk1_path) snapshot_xml = '''<domainsnapshot> <name>{0}</name> <state>shutoff</state> <memory snapshot='no'/> <disks> <disk name='vda' snapshot='external'> <driver type='qcow2'/> <source file='{1}'/> </disk> </disks> {2} </domainsnapshot>'''.format(snapshot_name, snapshot1_path, domain_xml) snapshot = mock.Mock() snapshot.numChildren.return_value = 0 snapshot.getXMLDesc.return_value = snapshot_xml domain = mock.Mock() domain.snapshotCreateXML.return_value = True domain.snapshotCurrent.return_value = snapshot domain.snapshotLookupByName.return_value = snapshot mock_conn.return_value.lookupByUUIDString.return_value = domain node = mock.Mock(uuid='test_node') mock_node_active.return_value = False dd = DevopsDriver() dd.node_revert_snapshot(node, snapshot_name) domain_xml_expected = domain_xml_tmpl.format(domain_name, snapshot1_path) self.assertEqual(mock_node_destroy.called, False) mock_conn().defineXML.assert_called_with( '{0}\n'.format(ET.tostring(ET.fromstring(domain_xml_expected)))) mock_set_snapshot_current.assert_called_with(node, snapshot_name)
def test_node_revert_snapshot_internal(self, mock_conn, mock_set_snapshot_current): snapshot_xml = '''<domainsnapshot> <state>running</state> <memory snapshot="internal"/> <disks/> <domain> <cpu mode='host-model'/> </domain> </domainsnapshot>''' snapshot = mock.Mock() snapshot.getXMLDesc.return_value = snapshot_xml domain = mock.Mock() domain.snapshotCreateXML.return_value = True domain.snapshotCurrent.return_value = snapshot domain.snapshotLookupByName.return_value = snapshot mock_conn.return_value.lookupByUUIDString.return_value = domain node = mock.Mock(uuid='test_node') dd = DevopsDriver() dd.node_revert_snapshot(node, 'snapname') self.assertEqual(mock_set_snapshot_current.called, False) domain.revertToSnapshot.assert_called_with(snapshot, 0)
def test_node_revert_snapshot_has_children( self, mock_conn, mock_set_snapshot_current, mock_node_active, mock_node_destroy): snapshot_name = factories.fuzzy_string('name_') domain_name = factories.fuzzy_string('domain_') memory_snapshot_path = factories.fuzzy_string('/path/to/') disk1_path = factories.fuzzy_string('/path/to/') disk2_path = factories.fuzzy_string('/path/to/') snapshot1_path = factories.fuzzy_string('/path/to/') snapshot2_path = factories.fuzzy_string('/path/to/') domain_xml_tmpl = ''' <domain> <name>{0}</name> <cpu mode='host-model'/> <devices> <disk type='file' device='disk' snapshot='external'> <driver name='qemu' type='raw'/> <source file='{1}'/> <target dev='vda' bus='virtio'/> </disk> <disk type='file' device='disk' snapshot='external'> <driver name='qemu' type='raw'/> <source file='{2}'/> <target dev='vdb' bus='virtio'/> </disk> </devices> </domain>''' domain_xml = domain_xml_tmpl.format( domain_name, disk1_path, disk2_path) snapshot_xml = '''<domainsnapshot> <name>{0}</name> <description>Snapshot of OS install and updates</description> <state>running</state> <creationTime>1270477159</creationTime> <parent> <name>bare-os-install</name> </parent> <memory file='{1}' snapshot='external'/> <disks> <disk name='vda' snapshot='external'> <driver type='qcow2'/> <source file='{2}'/> </disk> <disk name='vdb' snapshot='external'> <driver type='qcow2'/> <source file='{3}'/> </disk> </disks> {4} </domainsnapshot>'''.format(snapshot_name, memory_snapshot_path, snapshot1_path, snapshot2_path, domain_xml) snapshot = mock.Mock() snapshot.numChildren.return_value = 1 snapshot.getXMLDesc.return_value = snapshot_xml domain = mock.Mock() domain.isActive.return_value = True domain.snapshotCreateXML.return_value = True domain.snapshotCurrent.return_value = snapshot domain.snapshotLookupByName.return_value = snapshot mock_conn.return_value.lookupByUUIDString.return_value = domain node = mock.Mock(uuid='test_node') mock_node_active.return_value = True dd = DevopsDriver() dd.node_revert_snapshot(node, snapshot_name) mock_node_destroy.assert_called_with(node) mock_conn().restoreFlags.assert_called_with( memory_snapshot_path, dxml='{0}\n'.format(ET.tostring(ET.fromstring(domain_xml))), flags=libvirt.VIR_DOMAIN_SAVE_PAUSED) mock_set_snapshot_current.assert_called_with(node, snapshot_name)