Merge "New Baremetal provisioning framework."
This commit is contained in:
@@ -12,4 +12,4 @@
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
from nova.tests import *
|
||||
from nova.tests.baremetal import *
|
||||
|
||||
@@ -12,3 +12,4 @@
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
from nova.tests.baremetal.db import *
|
||||
|
||||
@@ -35,20 +35,3 @@ class BareMetalInterfaceTestCase(base.BMDBTestCase):
|
||||
pif2_id = db.bm_interface_create(self.context, 2, '11:11:11:11:11:11',
|
||||
'0x2', 2)
|
||||
self.assertTrue(pif2_id is not None)
|
||||
|
||||
def test_unique_vif_uuid(self):
|
||||
pif1_id = db.bm_interface_create(self.context, 1, '11:11:11:11:11:11',
|
||||
'0x1', 1)
|
||||
pif2_id = db.bm_interface_create(self.context, 2, '22:22:22:22:22:22',
|
||||
'0x2', 2)
|
||||
db.bm_interface_set_vif_uuid(self.context, pif1_id, 'AAAA')
|
||||
self.assertRaises(exception.NovaException,
|
||||
db.bm_interface_set_vif_uuid,
|
||||
self.context, pif2_id, 'AAAA')
|
||||
|
||||
def test_vif_not_found(self):
|
||||
pif_id = db.bm_interface_create(self.context, 1, '11:11:11:11:11:11',
|
||||
'0x1', 1)
|
||||
self.assertRaises(exception.NovaException,
|
||||
db.bm_interface_set_vif_uuid,
|
||||
self.context, pif_id + 1, 'AAAA')
|
||||
|
||||
@@ -60,7 +60,6 @@ def new_bm_interface(**kwargs):
|
||||
x.address = kwargs.pop('address', None)
|
||||
x.datapath_id = kwargs.pop('datapath_id', None)
|
||||
x.port_no = kwargs.pop('port_no', None)
|
||||
x.vif_uuid = kwargs.pop('vif_uuid', None)
|
||||
if len(kwargs) > 0:
|
||||
raise test.TestingException("unknown field: %s"
|
||||
% ','.join(kwargs.keys()))
|
||||
|
||||
173
nova/tests/baremetal/test_driver.py
Normal file
173
nova/tests/baremetal/test_driver.py
Normal file
@@ -0,0 +1,173 @@
|
||||
# Copyright (c) 2012 NTT DOCOMO, INC.
|
||||
# Copyright (c) 2011 University of Southern California / ISI
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
"""
|
||||
Tests for baremetal driver.
|
||||
"""
|
||||
|
||||
import mox
|
||||
|
||||
from nova import exception
|
||||
from nova.openstack.common import cfg
|
||||
from nova import test
|
||||
from nova.tests.baremetal.db import base
|
||||
from nova.tests.baremetal.db import utils
|
||||
from nova.tests.image import fake as fake_image
|
||||
from nova.tests import test_virt_drivers
|
||||
from nova.tests import utils as test_utils
|
||||
from nova.virt.baremetal import baremetal_states
|
||||
from nova.virt.baremetal import db
|
||||
from nova.virt.baremetal import driver as bm_driver
|
||||
from nova.virt.firewall import NoopFirewallDriver
|
||||
|
||||
|
||||
CONF = cfg.CONF
|
||||
|
||||
|
||||
FakeFirewallDriver = NoopFirewallDriver
|
||||
|
||||
|
||||
NODE = utils.new_bm_node(cpus=2, memory_mb=4096, service_host="host1")
|
||||
NICS = [
|
||||
{'address': '01:23:45:67:89:01', 'datapath_id': '0x1', 'port_no': 1, },
|
||||
{'address': '01:23:45:67:89:02', 'datapath_id': '0x2', 'port_no': 2, },
|
||||
]
|
||||
|
||||
|
||||
def class_path(class_):
|
||||
return class_.__module__ + '.' + class_.__name__
|
||||
|
||||
|
||||
COMMON_FLAGS = dict(
|
||||
baremetal_sql_connection='sqlite:///:memory:',
|
||||
baremetal_driver='nova.virt.baremetal.fake.Fake',
|
||||
power_manager='nova.virt.baremetal.fake.FakePowerManager',
|
||||
firewall_driver=class_path(FakeFirewallDriver),
|
||||
instance_type_extra_specs=['cpu_arch:test'],
|
||||
host=NODE['service_host'],
|
||||
)
|
||||
|
||||
|
||||
def _create_baremetal_stuff():
|
||||
context = test_utils.get_test_admin_context()
|
||||
node = db.bm_node_create(context, NODE)
|
||||
for nic in NICS:
|
||||
db.bm_interface_create(context,
|
||||
node['id'],
|
||||
nic['address'],
|
||||
nic['datapath_id'],
|
||||
nic['port_no'])
|
||||
return node
|
||||
|
||||
|
||||
class BaremetalDriverSpawnTestCase(base.Database):
|
||||
|
||||
def setUp(self):
|
||||
super(BaremetalDriverSpawnTestCase, self).setUp()
|
||||
self.flags(**COMMON_FLAGS)
|
||||
fake_image.stub_out_image_service(self.stubs)
|
||||
|
||||
self.node = _create_baremetal_stuff()
|
||||
self.node_id = self.node['id']
|
||||
|
||||
self.context = test_utils.get_test_admin_context()
|
||||
self.instance = test_utils.get_test_instance()
|
||||
self.network_info = test_utils.get_test_network_info()
|
||||
self.block_device_info = None
|
||||
self.image_meta = test_utils.get_test_image_info(None, self.instance)
|
||||
self.driver = bm_driver.BareMetalDriver(None)
|
||||
self.kwargs = dict(
|
||||
context=self.context,
|
||||
instance=self.instance,
|
||||
image_meta=self.image_meta,
|
||||
injected_files=[('/foo', 'bar'), ('/abc', 'xyz')],
|
||||
admin_password='testpass',
|
||||
network_info=self.network_info,
|
||||
block_device_info=self.block_device_info)
|
||||
self.addCleanup(fake_image.FakeImageService_reset)
|
||||
|
||||
def test_ok(self):
|
||||
self.instance['node'] = str(self.node_id)
|
||||
self.driver.spawn(**self.kwargs)
|
||||
node = db.bm_node_get(self.context, self.node_id)
|
||||
self.assertEqual(node['instance_uuid'], self.instance['uuid'])
|
||||
self.assertEqual(node['task_state'], baremetal_states.ACTIVE)
|
||||
|
||||
def test_without_node(self):
|
||||
self.assertRaises(
|
||||
exception.NovaException,
|
||||
self.driver.spawn,
|
||||
**self.kwargs)
|
||||
|
||||
def test_node_not_found(self):
|
||||
self.instance['node'] = "123456789"
|
||||
self.assertRaises(
|
||||
exception.InstanceNotFound,
|
||||
self.driver.spawn,
|
||||
**self.kwargs)
|
||||
|
||||
def test_node_in_use(self):
|
||||
self.instance['node'] = str(self.node_id)
|
||||
db.bm_node_update(self.context, self.node_id,
|
||||
{'instance_uuid': 'something'})
|
||||
self.assertRaises(
|
||||
exception.NovaException,
|
||||
self.driver.spawn,
|
||||
**self.kwargs)
|
||||
|
||||
|
||||
class BaremetalDriverTestCase(test_virt_drivers._VirtDriverTestCase,
|
||||
base.Database):
|
||||
|
||||
def setUp(self):
|
||||
super(BaremetalDriverTestCase, self).setUp()
|
||||
self.driver_module = 'nova.virt.baremetal.BareMetalDriver'
|
||||
self.flags(**COMMON_FLAGS)
|
||||
self.node = _create_baremetal_stuff()
|
||||
self.node_id = self.node['id']
|
||||
fake_image.stub_out_image_service(self.stubs)
|
||||
self.addCleanup(fake_image.FakeImageService_reset)
|
||||
|
||||
def _get_running_instance(self):
|
||||
instance_ref = test_utils.get_test_instance()
|
||||
instance_ref['node'] = str(self.node_id)
|
||||
network_info = test_utils.get_test_network_info()
|
||||
image_info = test_utils.get_test_image_info(None, instance_ref)
|
||||
self.connection.spawn(self.ctxt, instance_ref, image_info,
|
||||
[], 'herp', network_info=network_info)
|
||||
return instance_ref, network_info
|
||||
|
||||
def test_loading_baremetal_drivers(self):
|
||||
from nova.virt.baremetal import fake
|
||||
drv = bm_driver.BareMetalDriver(None)
|
||||
self.assertTrue(isinstance(drv.baremetal_nodes, fake.Fake))
|
||||
self.assertTrue(isinstance(drv._firewall_driver, FakeFirewallDriver))
|
||||
|
||||
def test_get_host_stats(self):
|
||||
self.flags(instance_type_extra_specs=['cpu_arch:x86_64',
|
||||
'x:123',
|
||||
'y:456', ])
|
||||
drv = bm_driver.BareMetalDriver(None)
|
||||
cap_list = drv.get_host_stats()
|
||||
self.assertTrue(isinstance(cap_list, list))
|
||||
self.assertEqual(len(cap_list), 1)
|
||||
cap = cap_list[0]
|
||||
self.assertEqual(cap['cpu_arch'], 'x86_64')
|
||||
self.assertEqual(cap['x'], '123')
|
||||
self.assertEqual(cap['y'], '456')
|
||||
self.assertEqual(cap['hypervisor_type'], 'baremetal')
|
||||
self.assertEqual(cap['baremetal_driver'],
|
||||
'nova.virt.baremetal.fake.Fake')
|
||||
Reference in New Issue
Block a user