Пример #1
0
 def test_remove(self, client):
     mfactory.MacPrefixPoolTableFactory()
     mfactory.BridgePoolTableFactory()
     bn = mfactory.BackendNetworkFactory(operstate='ACTIVE')
     for old_state in ['success', 'canceled', 'error']:
         for flavor in Network.FLAVORS.keys():
             bn.operstate = old_state
             bn.save()
             net = bn.network
             net.state = 'ACTIVE'
             net.flavor = flavor
             if flavor == 'PHYSICAL_VLAN':
                 net.link = allocate_resource('bridge')
             if flavor == 'MAC_FILTERED':
                 net.mac_prefix = allocate_resource('mac_prefix')
             net.save()
             msg = self.create_msg(operation='OP_NETWORK_REMOVE',
                                   network=net.backend_id,
                                   cluster=bn.backend.clustername)
             with mocked_quotaholder():
                 update_network(client, msg)
             self.assertTrue(client.basic_ack.called)
             self.assertFalse(BackendNetwork.objects.filter(id=bn.id)
                              .exists())
             db_net = Network.objects.get(id=net.id)
             self.assertEqual(db_net.state, 'DELETED', flavor)
             self.assertTrue(db_net.deleted)
             if flavor == 'PHYSICAL_VLAN':
                 pool = BridgePoolTable.get_pool()
                 self.assertTrue(pool.is_available(net.link))
             if flavor == 'MAC_FILTERED':
                 pool = MacPrefixPoolTable.get_pool()
                 self.assertTrue(pool.is_available(net.mac_prefix))
Пример #2
0
 def test_error_opcode(self, rapi, client):
     # Mock getting network, because code will lookup if network exists
     # in backend
     rapi().GetNetwork.return_value = {}
     mfactory.MacPrefixPoolTableFactory()
     mfactory.BridgePoolTableFactory()
     network = mfactory.NetworkFactory()
     mfactory.BackendNetworkFactory(network=network,
                                    operstate="ACTIVE")
     for state, _ in Network.OPER_STATES:
         bn = mfactory.BackendNetworkFactory(operstate="ACTIVE",
                                             network=network)
         bn.operstate = state
         bn.save()
         network = bn.network
         network.state = state
         network.save()
         for opcode, _ in BackendNetwork.BACKEND_OPCODES:
             if opcode in ['OP_NETWORK_REMOVE', 'OP_NETWORK_ADD']:
                 continue
             msg = self.create_msg(operation=opcode,
                                   network=bn.network.backend_id,
                                   status='error',
                                   add_reserved_ips=[],
                                   remove_reserved_ips=[],
                                   cluster=bn.backend.clustername)
             with mocked_quotaholder():
                 update_network(client, msg)
             self.assertTrue(client.basic_ack.called)
             db_bnet = BackendNetwork.objects.get(id=bn.id)
             self.assertEqual(bn.operstate, db_bnet.operstate)
             self.assertEqual(bn.network.state, db_bnet.network.state)
Пример #3
0
 def test_error_opcode(self, client):
     mfactory.MacPrefixPoolTableFactory()
     mfactory.BridgePoolTableFactory()
     for state, _ in Network.OPER_STATES:
         bn = mfactory.BackendNetworkFactory(operstate="ACTIVE")
         bn.operstate = state
         bn.save()
         network = bn.network
         network.state = state
         network.save()
         for opcode, _ in BackendNetwork.BACKEND_OPCODES:
             if opcode in ['OP_NETWORK_REMOVE', 'OP_NETWORK_ADD']:
                 continue
             msg = self.create_msg(operation=opcode,
                                   network=bn.network.backend_id,
                                   status='error',
                                   add_reserved_ips=[],
                                   remove_reserved_ips=[],
                                   cluster=bn.backend.clustername)
             with mocked_quotaholder():
                 update_network(client, msg)
             client.basic_ack.assert_called_once()
             db_bnet = BackendNetwork.objects.get(id=bn.id)
             self.assertEqual(bn.operstate, db_bnet.operstate)
             self.assertEqual(bn.network.state, db_bnet.network.state)
Пример #4
0
 def setUp(self):
     self.mac_prefixes = mfactory.MacPrefixPoolTableFactory()
     self.bridges = mfactory.BridgePoolTableFactory(base="link")
     self.user = '******'
     self.net1 = mfactory.NetworkFactory(userid=self.user)
     self.vm1 = mfactory.VirtualMachineFactory(userid=self.user)
     self.nic1 = mfactory.NetworkInterfaceFactory(network=self.net1,
                                                  machine=self.vm1)
     self.nic2 = mfactory.NetworkInterfaceFactory(network=self.net1,
                                                  machine=self.vm1)
     self.net2 = mfactory.NetworkFactory(userid=self.user)
     self.nic3 = mfactory.NetworkInterfaceFactory(network=self.net2)
     super(NetworkAPITest, self).setUp()
Пример #5
0
 def test_remove_error(self, rapi, client):
     mfactory.MacPrefixPoolTableFactory()
     mfactory.BridgePoolTableFactory()
     bn = mfactory.BackendNetworkFactory(operstate='ACTIVE')
     network = bn.network
     msg = self.create_msg(operation='OP_NETWORK_REMOVE',
                           network=network.backend_id,
                           status="error",
                           cluster=bn.backend.clustername)
     rapi().GetNetwork.return_value = {}
     update_network(client, msg)
     bn = BackendNetwork.objects.get(id=bn.id)
     self.assertNotEqual(bn.operstate, "DELETED")
     rapi().GetNetwork.side_effect = GanetiApiError(msg="foo", code=404)
     with mocked_quotaholder():
         update_network(client, msg)
     self.assertFalse(BackendNetwork.objects.filter(id=bn.id) .exists())
Пример #6
0
 def test_remove_offline_backend(self, client):
     """Test network removing when a backend is offline"""
     mfactory.BridgePoolTableFactory()
     net = mfactory.NetworkFactory(flavor='PHYSICAL_VLAN',
                                   state='ACTIVE',
                                   link='prv12')
     bn1 = mfactory.BackendNetworkFactory(network=net)
     mfactory.BackendNetworkFactory(network=net,
                                    operstate="ACTIVE",
                                    backend__offline=True)
     msg = self.create_msg(operation='OP_NETWORK_REMOVE',
                           network=net.backend_id,
                           cluster=bn1.backend.clustername)
     with mocked_quotaholder():
         update_network(client, msg)
     self.assertTrue(client.basic_ack.called)
     new_net = Network.objects.get(id=net.id)
     self.assertEqual(new_net.state, 'ACTIVE')
     self.assertFalse(new_net.deleted)
Пример #7
0
 def test_two_pools(self):
     mfact.BridgePoolTableFactory()
     mfact.BridgePoolTableFactory()
     self.assertRaises(MultipleObjectsReturned, BridgePoolTable.get_pool)
Пример #8
0
    def test_create(self):
        kwargs = {
            "name": "test",
            "userid": "user",
            "flavor": "CUSTOM",
        }
        # wrong flavor
        kw = copy(kwargs)
        kw["flavor"] = "UNKNOWN"
        self.assertRaises(faults.BadRequest, networks.create, **kw)
        # Test create objet
        kwargs["public"] = True
        with mocked_quotaholder():
            net = networks.create(**kwargs)
        self.assertEqual(net.public, True)
        self.assertEqual(net.flavor, "CUSTOM")
        self.assertEqual(net.action, "CREATE")
        self.assertEqual(net.state, "ACTIVE")
        self.assertEqual(net.name, "test")
        self.assertEqual(net.userid, "user")

        # Test for each for flavor type
        # MAC_FILTERED
        kwargs["flavor"] = "MAC_FILTERED"
        # Test exception if no rules exists
        self.assertRaises(faults.ServiceUnavailable, networks.create, **kwargs)
        mfactory.MacPrefixPoolTableFactory(base="aa:bb:0")
        with mocked_quotaholder():
                net = networks.create(**kwargs)
        self.assertEqual(net.mode, "bridged")
        self.assertEqual(net.mac_prefix, "aa:bb:1")
        self.assertEqual(net.link, settings.DEFAULT_MAC_FILTERED_BRIDGE)
        self.assertEqual(net.backend_tag, ["private-filtered"])
        pool = MacPrefixPoolTable.get_pool()
        self.assertFalse(pool.is_available("aa:bb:1"))

        # PHYSICAL_VLAN
        kwargs["flavor"] = "PHYSICAL_VLAN"
        # Test exception if no rules exists
        self.assertRaises(faults.ServiceUnavailable, networks.create, **kwargs)
        mfactory.BridgePoolTableFactory(base="prv")
        with mocked_quotaholder():
            net = networks.create(**kwargs)
        self.assertEqual(net.mode, "bridged")
        self.assertEqual(net.mac_prefix, settings.DEFAULT_MAC_PREFIX)
        self.assertEqual(net.link, "prv1")
        self.assertEqual(net.backend_tag, ["physical-vlan"])
        pool = BridgePoolTable.get_pool()
        self.assertFalse(pool.is_available(net.link))

        # IP_LESS_ROUTED
        kwargs["flavor"] = "IP_LESS_ROUTED"
        with mocked_quotaholder():
            net = networks.create(**kwargs)
        self.assertEqual(net.mode, "routed")
        self.assertEqual(net.mac_prefix, settings.DEFAULT_MAC_PREFIX)
        self.assertEqual(net.link, "%slink-%d" % (settings.BACKEND_PREFIX_ID,
                                                  net.id))
        self.assertEqual(net.backend_tag, ["ip-less-routed"])

        # CUSTOM
        kwargs["flavor"] = "CUSTOM"
        with mocked_quotaholder():
            net = networks.create(**kwargs)
        self.assertEqual(net.mode, "bridged")
        self.assertEqual(net.mac_prefix, settings.DEFAULT_MAC_PREFIX)
        self.assertEqual(net.link, settings.DEFAULT_BRIDGE)
        self.assertEqual(net.backend_tag, [])