293 lines
12 KiB
Python
293 lines
12 KiB
Python
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
|
# -*- encoding: utf-8 -*-
|
|
#
|
|
#
|
|
# Copyright (c) 2013-2018 Wind River Systems, Inc.
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
|
|
from six.moves import http_client
|
|
|
|
from sysinv.common import constants
|
|
from sysinv.tests.api import base
|
|
from sysinv.tests.db import utils as dbutils
|
|
|
|
|
|
class InterfaceNetworkTestCase(base.FunctionalTest):
|
|
def setUp(self):
|
|
super(InterfaceNetworkTestCase, self).setUp()
|
|
self.system = dbutils.create_test_isystem()
|
|
self.load = dbutils.create_test_load()
|
|
self.controller = dbutils.create_test_ihost(
|
|
id='1',
|
|
uuid=None,
|
|
forisystemid=self.system.id,
|
|
hostname='controller-0',
|
|
personality=constants.CONTROLLER,
|
|
subfunctions=constants.CONTROLLER,
|
|
invprovision=constants.PROVISIONED,
|
|
)
|
|
self.worker = dbutils.create_test_ihost(
|
|
id='2',
|
|
uuid=None,
|
|
forisystemid=self.system.id,
|
|
hostname='worker-0',
|
|
personality=constants.WORKER,
|
|
subfunctions=constants.WORKER,
|
|
mgmt_mac='01:02.03.04.05.C0',
|
|
mgmt_ip='192.168.24.12',
|
|
invprovision=constants.PROVISIONED,
|
|
)
|
|
self.address_pool_mgmt = dbutils.create_test_address_pool(
|
|
id=1,
|
|
network='192.168.204.0',
|
|
name='management',
|
|
ranges=[['192.168.204.2', '192.168.204.254']],
|
|
prefix=24)
|
|
self.mgmt_network = dbutils.create_test_network(
|
|
id=1,
|
|
name='mgmt',
|
|
type=constants.NETWORK_TYPE_MGMT,
|
|
link_capacity=1000,
|
|
vlan_id=2,
|
|
address_pool_id=self.address_pool_mgmt.id)
|
|
self.address_pool_infra = dbutils.create_test_address_pool(
|
|
id=2,
|
|
network='192.168.205.0',
|
|
name='infrastructure',
|
|
ranges=[['192.168.205.2', '192.168.205.254']],
|
|
prefix=24)
|
|
self.infra_network = dbutils.create_test_network(
|
|
id=2,
|
|
name='infra',
|
|
type=constants.NETWORK_TYPE_INFRA,
|
|
link_capacity=10000,
|
|
vlan_id=3,
|
|
address_pool_id=self.address_pool_infra.id)
|
|
self.address_pool_oam = dbutils.create_test_address_pool(
|
|
id=3,
|
|
network='128.224.150.0',
|
|
name='oam',
|
|
ranges=[['128.224.150.1', '128.224.151.254']],
|
|
prefix=23)
|
|
self.oam_network = dbutils.create_test_network(
|
|
id=3,
|
|
name='oam',
|
|
type=constants.NETWORK_TYPE_OAM,
|
|
address_pool_id=self.address_pool_oam.id)
|
|
self.address_pool_pxeboot = dbutils.create_test_address_pool(
|
|
id=4,
|
|
network='192.168.202.0',
|
|
name='pxeboot',
|
|
ranges=[['192.168.202.2', '192.168.202.254']],
|
|
prefix=23)
|
|
self.pxeboot_network = dbutils.create_test_network(
|
|
id=4,
|
|
type=constants.NETWORK_TYPE_PXEBOOT,
|
|
address_pool_id=self.address_pool_pxeboot.id)
|
|
|
|
def _post_and_check(self, ndict, expect_errors=False):
|
|
response = self.post_json('%s' % self._get_path(), ndict,
|
|
expect_errors)
|
|
if expect_errors:
|
|
self.assertEqual(http_client.BAD_REQUEST, response.status_int)
|
|
self.assertEqual('application/json', response.content_type)
|
|
self.assertTrue(response.json['error_message'])
|
|
else:
|
|
self.assertEqual(http_client.OK, response.status_int)
|
|
return response
|
|
|
|
def _get_path(self, path=None):
|
|
if path:
|
|
return '/interface_networks/' + path
|
|
else:
|
|
return '/interface_networks'
|
|
|
|
|
|
class InterfaceNetworkCreateTestCase(InterfaceNetworkTestCase):
|
|
|
|
def setUp(self):
|
|
super(InterfaceNetworkCreateTestCase, self).setUp()
|
|
|
|
def test_create_mgmt_interface_network(self):
|
|
controller_interface = dbutils.create_test_interface(
|
|
ifname='enp0s8',
|
|
forihostid=self.controller.id)
|
|
worker_interface = dbutils.create_test_interface(
|
|
ifname='enp0s8',
|
|
forihostid=self.worker.id)
|
|
|
|
controller_interface_network = dbutils.post_get_test_interface_network(
|
|
interface_uuid=controller_interface.uuid,
|
|
network_uuid=self.mgmt_network.uuid)
|
|
self._post_and_check(controller_interface_network, expect_errors=False)
|
|
|
|
worker_interface_network = dbutils.post_get_test_interface_network(
|
|
interface_uuid=worker_interface.uuid,
|
|
network_uuid=self.mgmt_network.uuid)
|
|
self._post_and_check(worker_interface_network, expect_errors=False)
|
|
|
|
def test_create_infra_interface_network(self):
|
|
controller_interface = dbutils.create_test_interface(
|
|
ifname='enp0s8',
|
|
forihostid=self.controller.id)
|
|
worker_interface = dbutils.create_test_interface(
|
|
ifname='enp0s8',
|
|
forihostid=self.worker.id)
|
|
|
|
controller_interface_network = dbutils.post_get_test_interface_network(
|
|
interface_uuid=controller_interface.uuid,
|
|
network_uuid=self.infra_network.uuid)
|
|
self._post_and_check(controller_interface_network, expect_errors=False)
|
|
|
|
worker_interface_network = dbutils.post_get_test_interface_network(
|
|
interface_uuid=worker_interface.uuid,
|
|
network_uuid=self.infra_network.uuid)
|
|
self._post_and_check(worker_interface_network, expect_errors=False)
|
|
|
|
def test_create_oam_interface_network(self):
|
|
controller_interface = dbutils.create_test_interface(
|
|
ifname='enp0s8',
|
|
forihostid=self.controller.id)
|
|
worker_interface = dbutils.create_test_interface(
|
|
ifname='enp0s8',
|
|
forihostid=self.worker.id)
|
|
|
|
controller_interface_network = dbutils.post_get_test_interface_network(
|
|
interface_uuid=controller_interface.uuid,
|
|
network_uuid=self.oam_network.uuid)
|
|
self._post_and_check(controller_interface_network, expect_errors=False)
|
|
|
|
worker_interface_network = dbutils.post_get_test_interface_network(
|
|
interface_uuid=worker_interface.uuid,
|
|
network_uuid=self.oam_network.uuid)
|
|
self._post_and_check(worker_interface_network, expect_errors=False)
|
|
|
|
def test_create_pxeboot_interface_network(self):
|
|
controller_interface = dbutils.create_test_interface(
|
|
ifname='enp0s8',
|
|
forihostid=self.controller.id)
|
|
worker_interface = dbutils.create_test_interface(
|
|
ifname='enp0s8',
|
|
forihostid=self.worker.id)
|
|
|
|
controller_interface_network = dbutils.post_get_test_interface_network(
|
|
interface_uuid=controller_interface.uuid,
|
|
network_uuid=self.pxeboot_network.uuid)
|
|
self._post_and_check(controller_interface_network, expect_errors=False)
|
|
|
|
worker_interface_network = dbutils.post_get_test_interface_network(
|
|
interface_uuid=worker_interface.uuid,
|
|
network_uuid=self.pxeboot_network.uuid)
|
|
self._post_and_check(worker_interface_network, expect_errors=False)
|
|
|
|
def test_create_mgmt_infra_interface_network(self):
|
|
controller_interface = dbutils.create_test_interface(
|
|
ifname='enp0s8',
|
|
forihostid=self.controller.id)
|
|
dbutils.create_test_interface_network(
|
|
interface_id=controller_interface.id,
|
|
network_id=self.mgmt_network.id)
|
|
|
|
worker_interface = dbutils.create_test_interface(
|
|
ifname='enp0s8',
|
|
forihostid=self.worker.id)
|
|
dbutils.create_test_interface_network(
|
|
interface_id=worker_interface.id,
|
|
network_id=self.mgmt_network.id)
|
|
|
|
controller_interface_network = dbutils.post_get_test_interface_network(
|
|
interface_uuid=controller_interface.uuid,
|
|
network_uuid=self.infra_network.uuid)
|
|
self._post_and_check(controller_interface_network, expect_errors=False)
|
|
|
|
worker_interface_network = dbutils.post_get_test_interface_network(
|
|
interface_uuid=worker_interface.uuid,
|
|
network_uuid=self.infra_network.uuid)
|
|
self._post_and_check(worker_interface_network, expect_errors=False)
|
|
|
|
# Expected error:
|
|
# You cannot assign a network of type 'oam' to an interface
|
|
# which is already assigned with a different network
|
|
def test_create_invalid_mgmt_oam_interface_network(self):
|
|
controller_interface = dbutils.create_test_interface(
|
|
ifname='enp0s8',
|
|
forihostid=self.controller.id)
|
|
dbutils.create_test_interface_network(
|
|
interface_id=controller_interface.id,
|
|
network_id=self.mgmt_network.id)
|
|
|
|
worker_interface = dbutils.create_test_interface(
|
|
ifname='enp0s8',
|
|
forihostid=self.worker.id)
|
|
dbutils.create_test_interface_network(
|
|
interface_id=worker_interface.id,
|
|
network_id=self.mgmt_network.id)
|
|
|
|
controller_interface_network = dbutils.post_get_test_interface_network(
|
|
interface_uuid=controller_interface.uuid,
|
|
network_uuid=self.oam_network.uuid)
|
|
self._post_and_check(controller_interface_network, expect_errors=True)
|
|
|
|
worker_interface_network = dbutils.post_get_test_interface_network(
|
|
interface_uuid=worker_interface.uuid,
|
|
network_uuid=self.oam_network.uuid)
|
|
self._post_and_check(worker_interface_network, expect_errors=True)
|
|
|
|
# Expected error:
|
|
# You cannot assign a network of type 'pxeboot' to an interface
|
|
# which is already assigned with a different network
|
|
def test_create_invalid_mgmt_pxeboot_interface_network(self):
|
|
controller_interface = dbutils.create_test_interface(
|
|
ifname='enp0s8',
|
|
forihostid=self.controller.id)
|
|
dbutils.create_test_interface_network(
|
|
interface_id=controller_interface.id,
|
|
network_id=self.mgmt_network.id)
|
|
|
|
worker_interface = dbutils.create_test_interface(
|
|
ifname='enp0s8',
|
|
forihostid=self.worker.id)
|
|
dbutils.create_test_interface_network(
|
|
interface_id=worker_interface.id,
|
|
network_id=self.mgmt_network.id)
|
|
|
|
controller_interface_network = dbutils.post_get_test_interface_network(
|
|
interface_uuid=controller_interface.uuid,
|
|
network_uuid=self.pxeboot_network.uuid)
|
|
self._post_and_check(controller_interface_network, expect_errors=True)
|
|
|
|
worker_interface_network = dbutils.post_get_test_interface_network(
|
|
interface_uuid=worker_interface.uuid,
|
|
network_uuid=self.pxeboot_network.uuid)
|
|
self._post_and_check(worker_interface_network, expect_errors=True)
|
|
|
|
# Expected error:
|
|
# Interface network with interface ID '%s' and
|
|
# network ID '%s' already exists."
|
|
def test_create_invalid_duplicate_mgmt_interface_network(self):
|
|
controller_interface = dbutils.create_test_interface(
|
|
ifname='enp0s8',
|
|
forihostid=self.controller.id)
|
|
dbutils.create_test_interface_network(
|
|
interface_id=controller_interface.id,
|
|
network_id=self.mgmt_network.id)
|
|
|
|
worker_interface = dbutils.create_test_interface(
|
|
ifname='enp0s8',
|
|
forihostid=self.worker.id)
|
|
dbutils.create_test_interface_network(
|
|
interface_id=worker_interface.id,
|
|
network_id=self.mgmt_network.id)
|
|
|
|
controller_interface_network = dbutils.post_get_test_interface_network(
|
|
interface_uuid=controller_interface.uuid,
|
|
network_uuid=self.mgmt_network.uuid)
|
|
self._post_and_check(controller_interface_network, expect_errors=True)
|
|
|
|
worker_interface_network = dbutils.post_get_test_interface_network(
|
|
interface_uuid=worker_interface.uuid,
|
|
network_uuid=self.mgmt_network.uuid)
|
|
self._post_and_check(worker_interface_network, expect_errors=True)
|