config/sysinv/sysinv/sysinv/sysinv/tests/api/test_interface_network.py

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)