Ejemplo n.º 1
0
 def setUp(self):
     self.vif_recs = [
         self._vif_rec(1, False),
         self._vif_rec(2, True),
         self._vif_rec(3, True),
         self._vif_rec(4, False),
         self._vif_rec(5, False)
     ]
     self.interfaces = [
         xapi.VIF("added", self.vif_recs[0], "added_ref"),
         xapi.VIF("updated", self.vif_recs[1], "updated_ref"),
         xapi.VIF("removed", self.vif_recs[2], "removed_ref"),
         xapi.VIF("no groups", self.vif_recs[3], "no groups ref"),
         xapi.VIF("self heal", self.vif_recs[4], "self heal ref")
     ]
     self.ack = sg.SECURITY_GROUP_ACK
     self.rules = sg.SECURITY_GROUP_HASH_ATTR
     self.sg_states = {
         self.interfaces[0]: {
             self.ack: False,
             self.rules: []
         },
         self.interfaces[1]: {
             self.ack: False,
             self.rules: []
         },
         self.interfaces[4]: {
             self.ack: True,
             self.rules: []
         }
     }
     self.client = sg.SecurityGroupsClient()
Ejemplo n.º 2
0
    def test_ne(self):
        rec1 = {"MAC": '2'}
        rec2 = {"MAC": '3'}
        vif1 = xapi.VIF("1", rec1, "4")
        vif2 = xapi.VIF("1", rec2, "4")
        vif3 = xapi.VIF("3", rec1, "4")
        vif4 = xapi.VIF("3", rec2, "4")

        self.assertNotEqual(vif1, vif2)
        self.assertNotEqual(vif1, vif3)
        self.assertNotEqual(vif1, vif4)
Ejemplo n.º 3
0
    def test_update_interfaces_added(self):
        instances = {"opaque1": "device_id1"}
        interfaces = [xapi.VIF("device_id1", "00:11:22:33:44:55")]
        location = "vm-data/networking/001122334455"
        vm = {"xenstore_data": {location: json.dumps({"key": "value"})}}
        self.session.xenapi.VM.get_record.return_value = vm

        self.xclient.update_interfaces(instances, interfaces, [], [])

        xenapi_VM = self.session.xenapi.VM
        xenapi_VM.get_record.assert_called_once_with("opaque1")
        xenapi_VM.remove_from_xenstore_data.assert_called_once_with(
            "opaque1", location)
        new_data = json.dumps({"failmode": "secure", "key": "value"})
        xenapi_VM.add_to_xenstore_data.assert_called_once_with(
            "opaque1", location, new_data)

        expected_args_1 = dict(
            host_uuid=self.session.xenapi.host.get_uuid.return_value,
            path=location,
            value=new_data,
            dom_id=self.session.xenapi.VM.get_domid.return_value)
        expected_args_2 = dict(
            host_uuid=self.session.xenapi.host.get_uuid.return_value,
            uuid="device_id1")
        self.session.xenapi.host.call_plugin.assert_has_calls([
            mock.call(self.session.xenapi.session.get_this_host.return_value,
                      "xenstore.py", "write_record", expected_args_1),
            mock.call(self.session.xenapi.session.get_this_host.return_value,
                      "post_live_migrate", "instance_post_live_migration",
                      expected_args_2)
        ])
Ejemplo n.º 4
0
    def test_update_interfaces_removed_raises(self):
        rec = {"MAC": "00:11:22:33:44:55"}
        interfaces = [xapi.VIF("device_id1", rec,
                               "opaque_vif1")]

        dom_id = "1"
        vif_index = "0"

        vif_rec = {"device": vif_index, "VM": "opaqueref"}
        vm_rec = {"domid": dom_id}

        expected_args = dict(dom_id=dom_id, vif_index=vif_index)
        self.session.xenapi.VIF.get_record.return_value = vif_rec
        self.session.xenapi.VM.get_record.return_value = vm_rec
        xenapi_VIF = self.session.xenapi.VIF

        # Without the try/except in _unset, this raises and the test fails
        xenapi_VIF.remove_from_other_config.side_effect = XenAPI.Failure(
            "HANDLE_INVALID")

        self.xclient.update_interfaces([], [], interfaces)

        self.assertEqual(xenapi_VIF.add_to_other_config.call_count, 0)
        xenapi_VIF.remove_from_other_config.assert_called_once_with(
            "opaque_vif1", "security_groups")

        self.session.xenapi.host.call_plugin.assert_called_once_with(
            self.session.xenapi.session.get_this_host.return_value,
            "neutron_vif_flow", "online_instance_flows",
            expected_args)
Ejemplo n.º 5
0
    def test_update_interfaces_added(self, get_instances):
        instances = {"opaque1": xapi.VM(uuid="device_id1",
                                        ref="opaque1",
                                        vifs=["opaque_vif1"],
                                        dom_id="1")}
        get_instances.return_value = instances
        rec = {"MAC": "00:11:22:33:44:55"}
        interfaces = [xapi.VIF("device_id1", rec,
                               "opaque_vif1")]

        dom_id = "1"
        vif_index = "0"

        vif_rec = {"device": vif_index, "VM": "opaqueref"}
        vm_rec = {"domid": dom_id}

        expected_args = dict(dom_id=dom_id, vif_index=vif_index)
        self.session.xenapi.VIF.get_record.return_value = vif_rec
        self.session.xenapi.VM.get_record.return_value = vm_rec
        self.xclient.update_interfaces(interfaces, [], [])

        xenapi_VIF = self.session.xenapi.VIF
        xenapi_VIF.add_to_other_config.assert_called_once_with(
            "opaque_vif1", "security_groups", "enabled")
        self.assertEqual(xenapi_VIF.remove_from_other_config.call_count, 0)

        self.session.xenapi.host.call_plugin.assert_called_once_with(
            self.session.xenapi.session.get_this_host.return_value,
            "neutron_vif_flow", "online_instance_flows",
            expected_args)
Ejemplo n.º 6
0
 def test_get_interfaces(self, get_instances):
     instances = {"opaque1": xapi.VM(uuid="device_id1",
                                     ref="opaque1",
                                     vifs=["opaque_vif1"],
                                     dom_id="1")}
     get_instances.return_value = instances
     self.session.xenapi.VIF.get_all_records.return_value = {
         "opaque_vif1": {"VM": "opaque1", "MAC": "00:11:22:33:44:55"},
         "opaque_vif2": {"VM": "opaque2", "MAC": "55:44:33:22:11:00"},
     }
     interfaces = self.xclient.get_interfaces()
     rec = {"MAC": "00:11:22:33:44:55", "VM": "opaque1"}
     expected = set([xapi.VIF("device_id1", rec, "opaque_vif1")])
     self.assertEqual(interfaces, expected)
Ejemplo n.º 7
0
    def test_partition_vifs(self, sess):
        def _vif_rec(mac, tagged):
            rec = {"MAC": mac, "other_config": {}}
            if tagged:
                rec["other_config"] = {"security_groups": "enabled"}
            return rec

        vif_recs = [
            _vif_rec(1, False),
            _vif_rec(2, True),
            _vif_rec(3, True),
            _vif_rec(4, False),
            _vif_rec(5, False)
        ]

        interfaces = [
            xapi.VIF("added", vif_recs[0], "added_ref"),
            xapi.VIF("updated", vif_recs[1], "updated_ref"),
            xapi.VIF("removed", vif_recs[2], "removed_ref"),
            xapi.VIF("no groups", vif_recs[3], "no groups ref"),
            xapi.VIF("self heal", vif_recs[4], "self heal ref")
        ]

        sg_states = {
            interfaces[0]: False,
            interfaces[1]: False,
            interfaces[4]: True
        }

        xapi_client = xapi.XapiClient()

        added, updated, removed = agent.partition_vifs(xapi_client, interfaces,
                                                       sg_states)

        self.assertEqual(added, [interfaces[0], interfaces[4]])
        self.assertEqual(updated, [interfaces[1]])
        self.assertEqual(removed, [interfaces[2]])
Ejemplo n.º 8
0
 def test_get_interfaces(self):
     instances = {"opaque1": "device_id1"}
     self.session.xenapi.VIF.get_all_records.return_value = {
         "opaque_vif1": {
             "VM": "opaque1",
             "MAC": "00:11:22:33:44:55"
         },
         "opaque_vif2": {
             "VM": "opaque2",
             "MAC": "55:44:33:22:11:00"
         },
     }
     interfaces = self.xclient.get_interfaces(instances)
     self.assertEqual(interfaces,
                      set([xapi.VIF("device_id1", "00:11:22:33:44:55")]))
Ejemplo n.º 9
0
    def test_update_interfaces_removed_vm_removed(self):
        rec = {"MAC": "00:11:22:33:44:55"}
        interfaces = [xapi.VIF("device_id1", rec,
                               "opaque_vif1")]

        self.session.xenapi.VIF.get_record.side_effect = XenAPI.Failure(
            "HANDLE_INVALID")
        self.session.xenapi.VM.get_record.return_value = XenAPI.Failure(
            "HANDLE_INVALID")
        self.xclient.update_interfaces([], [], interfaces)

        xenapi_VIF = self.session.xenapi.VIF
        self.assertEqual(xenapi_VIF.add_to_other_config.call_count, 0)
        xenapi_VIF.remove_from_other_config.assert_called_once_with(
            "opaque_vif1", "security_groups")

        self.assertEqual(self.session.xenapi.host.call_plugin.call_count, 0)
Ejemplo n.º 10
0
    def test_update_interfaces_updated(self):
        instances = {"opaque1": "device_id1"}
        interfaces = [xapi.VIF("device_id1", "00:11:22:33:44:55")]
        location = "vm-data/networking/001122334455"
        vm = {"xenstore_data": {location: json.dumps({"key": "value"})}}
        self.session.xenapi.VM.get_record.return_value = vm

        self.xclient.update_interfaces(instances, [], interfaces, [])

        xenapi_VM = self.session.xenapi.VM
        self.assertEqual(xenapi_VM.get_record.call_count, 0)
        self.assertEqual(xenapi_VM.remove_from_xenstore_data.call_count, 0)
        self.assertEqual(xenapi_VM.add_to_xenstore_data.call_count, 0)

        expected_args_2 = dict(
            host_uuid=self.session.xenapi.host.get_uuid.return_value,
            uuid="device_id1")
        self.session.xenapi.host.call_plugin.assert_has_calls([
            mock.call(self.session.xenapi.session.get_this_host.return_value,
                      "post_live_migrate", "instance_post_live_migration",
                      expected_args_2)
        ])
Ejemplo n.º 11
0
 def test_eq(self):
     self.assertEqual(xapi.VIF("1", "2"), xapi.VIF("1", "2"))
Ejemplo n.º 12
0
 def test_repr(self):
     rec = {"MAC": '2'}
     self.assertEqual(repr(xapi.VIF("1", rec, "3")), "VIF('1', '2', '3')")
Ejemplo n.º 13
0
 def test_ne(self):
     self.assertNotEqual(xapi.VIF("1", "2"), xapi.VIF("1", "3"))
     self.assertNotEqual(xapi.VIF("1", "2"), xapi.VIF("3", "2"))
     self.assertNotEqual(xapi.VIF("1", "2"), xapi.VIF("3", "4"))
Ejemplo n.º 14
0
 def test_str(self):
     rec = {"MAC": 2}
     self.assertEqual(str(xapi.VIF("1", rec, "3")), "1.2.3")
Ejemplo n.º 15
0
 def test_hashable(self):
     self.assertEqual(tuple(set([xapi.VIF("1", "2"),
                                 xapi.VIF("1", "2")])),
                      (xapi.VIF("1", "2"), ))
Ejemplo n.º 16
0
 def test_from_string(self):
     self.assertEqual(xapi.VIF.from_string("1.2"), xapi.VIF("1", "2"))
Ejemplo n.º 17
0
 def test_str(self):
     self.assertEqual(str(xapi.VIF("1", "2")), "1.2")
Ejemplo n.º 18
0
 def test_repr(self):
     self.assertEqual(repr(xapi.VIF("1", "2")), "VIF('1', '2')")
Ejemplo n.º 19
0
 def test_eq(self):
     rec = {"MAC": '2'}
     self.assertEqual(xapi.VIF("1", rec, "3"), xapi.VIF("1", rec, "3"))