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()
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)
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) ])
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)
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)
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)
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]])
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")]))
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)
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) ])
def test_eq(self): self.assertEqual(xapi.VIF("1", "2"), xapi.VIF("1", "2"))
def test_repr(self): rec = {"MAC": '2'} self.assertEqual(repr(xapi.VIF("1", rec, "3")), "VIF('1', '2', '3')")
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"))
def test_str(self): rec = {"MAC": 2} self.assertEqual(str(xapi.VIF("1", rec, "3")), "1.2.3")
def test_hashable(self): self.assertEqual(tuple(set([xapi.VIF("1", "2"), xapi.VIF("1", "2")])), (xapi.VIF("1", "2"), ))
def test_from_string(self): self.assertEqual(xapi.VIF.from_string("1.2"), xapi.VIF("1", "2"))
def test_str(self): self.assertEqual(str(xapi.VIF("1", "2")), "1.2")
def test_repr(self): self.assertEqual(repr(xapi.VIF("1", "2")), "VIF('1', '2')")
def test_eq(self): rec = {"MAC": '2'} self.assertEqual(xapi.VIF("1", rec, "3"), xapi.VIF("1", rec, "3"))