Ejemplo n.º 1
0
 def test_context_creates_missing_element(self):
     # libvirt takes care of namespace massaging
     expected_xml = u'''<vm />'''
     dom = FakeDomain()
     self.md_desc.dump(dom)
     self.assertXMLEqual(dom.xml.get(xmlconstants.METADATA_VM_VDSM_URI),
                         expected_xml)
Ejemplo n.º 2
0
 def test_lookup_fail(self):
     dom_xml = u'''<vm>
         <device id='alias0' type='fancydev'>
             <mode type="int">42</mode>
         </device>
     </vm>'''
     dom = FakeDomain.with_metadata(dom_xml)
     self.md_desc.load(dom)
     with self.md_desc.device(id='alias999', type='fancydev') as dev:
         self.assertEqual(dev, {})
Ejemplo n.º 3
0
 def test_lookup_partial_attributes(self):
     dom_xml = u'''<vm>
         <device id='alias0' type='fancydev'>
             <mode type="int">42</mode>
         </device>
         <device id='alias1'>
             <mode type="int">33</mode>
         </device>
     </vm>'''
     dom = FakeDomain.with_metadata(dom_xml)
     self.md_desc.load(dom)
     with self.md_desc.device(type='fancydev') as dev:
         self.assertEqual(dev, {'mode': 42})
Ejemplo n.º 4
0
    def test_deeply_nested_metadata_preserved(self):
        conf = {
            'device': 'cdrom',
            'iface': 'ide',
            'index': '3',
            'path': '',
            'readonly': 'true',
            'specParams': {
                'vmPayload': {
                    'file': {
                        'openstack/content/0000': 'something',
                        'openstack/latest/meta_data.json': 'something',
                        'openstack/latest/user_data': 'something',
                    },
                    'volId': 'config-2',
                }
            },
            'type': 'disk',
        }

        expected_xml = """<?xml version='1.0' encoding='UTF-8'?>
<vm>
<device name="hdd" devtype="disk">
  <device>cdrom</device>
    <iface>ide</iface>
    <index>3</index>
    <path />
    <readonly>true</readonly>
    <type>disk</type>
    <specParams>
      <vmPayload>
        <volId>config-2</volId>
        <file path='openstack/content/0000'>something</file>
        <file path='openstack/latest/meta_data.json'>something</file>
        <file path='openstack/latest/user_data'>something</file>
      </vmPayload>
    </specParams>
  </device>
</vm>"""

        desc = metadata.Descriptor()
        with desc.device(devtype=conf['type'],
                         name=drivename.make(conf['iface'],
                                             conf['index'])) as dev:
            dev.update(conf)
        dom = FakeDomain()
        desc.dump(dom)
        # the first dump() used to -wrongly- modify the supplied data
        desc.dump(dom)
        for produced_xml in dom.xml.values():
            self.assertXMLEqual(produced_xml, expected_xml)
Ejemplo n.º 5
0
 def test_lookup_ambiguous_raises(self):
     dom_xml = u'''<vm>
         <device type='fancydev'>
             <mode type="int">1</mode>
         </device>
         <device type='fancydev'>
             <mode type="int">2</mode>
         </device>
     </vm>'''
     dom = FakeDomain.with_metadata(dom_xml)
     self.md_desc.load(dom)
     with self.assertRaises(metadata.MissingDevice):
         with self.md_desc.device(type='fancydev'):
             pass
Ejemplo n.º 6
0
 def test_lookup_multiple_devices(self):
     dom_xml = u'''<vm>
         <device id='alias0' type='devA' addr='pci_0000_00_1a_0'>
             <mode type="int">1200</mode>
         </device>
         <device id='alias1' type='devA' addr='pci_0000_00_02_0'>
             <mode type="int">900</mode>
         </device>
         <device id='alias2' type='devC' addr='pci_0000_00_1f_2'>
             <mode type="int">1440</mode>
         </device>
     </vm>'''
     dom = FakeDomain.with_metadata(dom_xml)
     self.md_desc.load(dom)
     with self.md_desc.device(addr='pci_0000_00_02_0') as dev:
         self.assertEqual(dev, {'mode': 900})
Ejemplo n.º 7
0
    def test_clear(self):
        dom_xml = u'''<vm>
            <device id='alias0'>
                <mode>12</mode>
            </device>
        </vm>'''
        expected_xml = u'''<vm/>'''
        dom = FakeDomain.with_metadata(dom_xml)
        self.md_desc.load(dom)
        with self.md_desc.device(id='alias0') as dev:
            dev.clear()
        self.md_desc.dump(dom)

        produced_xml = dom.metadata(libvirt.VIR_DOMAIN_METADATA_ELEMENT,
                                    xmlconstants.METADATA_VM_VDSM_URI, 0)
        self.assertXMLEqual(produced_xml, expected_xml)
Ejemplo n.º 8
0
 def test_all_devices(self):
     dom_xml = u'''<vm>
         <device type='fancydev'>
             <mode type="int">1</mode>
         </device>
         <device class='otherdev' foo='1'>
             <mode type="float">0.333</mode>
         </device>
         <device type='fancydev' extra='ignored'>
             <mode type="int">2</mode>
         </device>
     </vm>'''
     dom = FakeDomain.with_metadata(dom_xml)
     self.md_desc.load(dom)
     assert list(self.md_desc.all_devices(type='fancydev')) == \
         [{'mode': 1}, {'mode': 2}]
Ejemplo n.º 9
0
    def test_all_devices_copy_data(self):
        dom_xml = u'''<vm>
            <device type='fancydev'>
                <mode type="int">1</mode>
            </device>
            <device type='fancydev' extra='ignored'>
                <mode type="int">2</mode>
            </device>
        </vm>'''
        dom = FakeDomain.with_metadata(dom_xml)
        self.md_desc.load(dom)

        for dev in self.md_desc.all_devices(type='fancydev'):
            dev['mode'] = 3

        assert list(self.md_desc.all_devices(type='fancydev')) == \
            [{'mode': 1}, {'mode': 2}]
Ejemplo n.º 10
0
 def test_update_domain(self):
     # libvirt takes care of namespace massaging
     base_xml = u'''<vm>
       <foobar type="int">21</foobar>
     </vm>'''
     expected_xml = u'''<vm>
       <beer>cold</beer>
       <foobar type="int">42</foobar>
     </vm>'''
     dom = FakeDomain()
     dom.xml[xmlconstants.METADATA_VM_VDSM_URI] = base_xml
     self.md_desc.load(dom)
     with self.md_desc.values() as vals:
         vals['foobar'] = 42
         vals['beer'] = 'cold'
     self.md_desc.dump(dom)
     self.assertXMLEqual(dom.xml.get(xmlconstants.METADATA_VM_VDSM_URI),
                         expected_xml)
Ejemplo n.º 11
0
    def test_load_overwrites_content(self):
        test_xml = u"""<?xml version="1.0" encoding="utf-8"?>
<domain type="kvm" xmlns:ovirt-vm="http://ovirt.org/vm/1.0">
  <uuid>68c1f97c-9336-4e7a-a8a9-b4f052ababf1</uuid>
  <metadata>
    <ovirt-vm:vm>
      <ovirt-vm:version type="float">4.2</ovirt-vm:version>
      <ovirt-vm:custom>
        <ovirt-vm:foo>bar</ovirt-vm:foo>
      </ovirt-vm:custom>
    </ovirt-vm:vm>
  </metadata>
</domain>"""
        md_desc = metadata.Descriptor.from_xml(test_xml)
        dom = FakeDomain()
        md_desc.load(dom)
        with md_desc.values() as vals:
            self.assertEqual(vals, {})
        self.assertEqual(md_desc.custom, {})
Ejemplo n.º 12
0
    def test_update_device(self, dom_xml):
        expected_res = {
            'flag': True,
            'mode': 42,
        }
        dom = FakeDomain.with_metadata(dom_xml)
        self.md_desc.load(dom)
        with self.md_desc.device(id='alias0') as dev:
            dev['mode'] = 42
            dev['flag'] = True
            dev.pop('removeme', None)
        self.md_desc.dump(dom)

        # troubleshooting helper should the test fail
        print(
            dom.metadata(libvirt.VIR_DOMAIN_METADATA_ELEMENT,
                         xmlconstants.METADATA_VM_VDSM_URI, 0))
        # our assertXMLEqual consider the order of XML attributes
        # significant, while according to XML spec is not.
        with self.md_desc.device(id='alias0') as dev:
            self.assertEqual(dev, expected_res)
Ejemplo n.º 13
0
 def test_get_device(self, dom_xml, expected_dev):
     dom = FakeDomain.with_metadata(dom_xml)
     self.md_desc.load(dom)
     with self.md_desc.device(id='alias0') as dev:
         self.assertEqual(dev, expected_dev)
Ejemplo n.º 14
0
 def test_empty_get(self):
     dom = FakeDomain()
     self.md_desc.load(dom)
     with self.md_desc.values() as vals:
         self.assertEqual(vals, {})
Ejemplo n.º 15
0
 def test_empty_get(self):
     dom = FakeDomain()
     self.md_desc.load(dom)
     with self.md_desc.values() as vals:
         assert vals == {}