def test_plug_network_when_network_cant_be_found(self):
     net_id = t_constants.MOCK_NOVA_INTERFACE.net_id
     interface_attach = self.driver.nova_client.servers.interface_attach
     interface_attach.side_effect = nova_exceptions.NotFound(
         404, message='Network not found')
     self.assertRaises(network_base.NetworkException,
                       self.driver.plug_network,
                       t_constants.MOCK_COMPUTE_ID, net_id)
    def test_plug_port(self):
        port = mock.MagicMock()
        port.id = self.PORT_ID
        interface_attach = self.driver.nova_client.servers.interface_attach
        amphora = data_models.Amphora(
            id=self.AMPHORA_ID, load_balancer_id=self.LB_ID,
            compute_id=self.COMPUTE_ID, status=self.ACTIVE,
            lb_network_ip=self.LB_NET_IP, ha_port_id=self.HA_PORT_ID,
            ha_ip=self.HA_IP)

        self.driver.plug_port(amphora, port)
        interface_attach.assert_called_once_with(server=amphora.compute_id,
                                                 net_id=None,
                                                 fixed_ip=None,
                                                 port_id=self.PORT_ID)

        # NotFound cases
        interface_attach.side_effect = nova_exceptions.NotFound(
            1, message='Instance')
        self.assertRaises(network_base.AmphoraNotFound,
                          self.driver.plug_port,
                          amphora,
                          port)
        interface_attach.side_effect = nova_exceptions.NotFound(
            1, message='Network')
        self.assertRaises(network_base.NetworkNotFound,
                          self.driver.plug_port,
                          amphora,
                          port)
        interface_attach.side_effect = nova_exceptions.NotFound(
            1, message='bogus')
        self.assertRaises(network_base.PlugNetworkException,
                          self.driver.plug_port,
                          amphora,
                          port)

        # Already plugged case should not raise an exception
        interface_attach.side_effect = nova_exceptions.Conflict(1)
        self.driver.plug_port(amphora, port)

        # Unknown error case
        interface_attach.side_effect = TypeError
        self.assertRaises(network_base.PlugNetworkException,
                          self.driver.plug_port,
                          amphora,
                          port)
    def test_plug_vip_errors_when_nova_cant_find_network_to_attach(self):
        lb = dmh.generate_load_balancer_tree()
        show_subnet = self.driver.neutron_client.show_subnet
        show_subnet.return_value = {'subnet': {'id': lb.vip.subnet_id}}
        list_security_groups = self.driver.neutron_client.list_security_groups
        lsc_side_effect = [None, {'security_groups': [{'id': 'lb-sec-grp1'}]}]
        list_security_groups.side_effect = lsc_side_effect

        interface_attach = self.driver.nova_client.servers.interface_attach
        interface_attach.side_effect = nova_exceptions.NotFound(404, "Network")
        self.assertRaises(network_base.PlugVIPException, self.driver.plug_vip,
                          lb, lb.vip)