summaryrefslogtreecommitdiffstats
path: root/nova/tests
diff options
context:
space:
mode:
authorKevin L. Mitchell <kevin.mitchell@rackspace.com>2011-11-02 14:11:00 -0500
committerKevin L. Mitchell <kevin.mitchell@rackspace.com>2011-11-09 12:39:25 -0600
commit2ab61322583767f02cd87d7f60bb71d6ce035bea (patch)
tree79d5641dea683caae9280de4d56f87cb3c185c8d /nova/tests
parent96cf15ce782c4362daea4b178f418738846bb074 (diff)
Get MAC addresses from Melange.
Add support for obtaining MAC addresses for VIFs from Melange. Adds the --use_melange_mac_generation flag to enable this support. Change-Id: I00b3622531f244bf5f15910752a1e444b821e91a
Diffstat (limited to 'nova/tests')
-rw-r--r--nova/tests/test_quantum.py116
1 files changed, 84 insertions, 32 deletions
diff --git a/nova/tests/test_quantum.py b/nova/tests/test_quantum.py
index 7d387faaf..d5cd09f37 100644
--- a/nova/tests/test_quantum.py
+++ b/nova/tests/test_quantum.py
@@ -15,6 +15,8 @@
# License for the specific language governing permissions and limitations
# under the License.
+import stubout
+
from nova import context
from nova import db
from nova.db.sqlalchemy import models
@@ -23,8 +25,10 @@ from nova import exception
from nova import ipv6
from nova import log as logging
from nova.network.quantum import manager as quantum_manager
+from nova.network.quantum import melange_connection
from nova import test
from nova import utils
+from nova.network import manager
import mox
@@ -185,25 +189,56 @@ networks = [{'label': 'project1-net1',
# this is a base class to be used by all other Quantum Test classes
-class QuantumTestCaseBase(object):
+class QuantumNovaTestCase(test.TestCase):
+ def setUp(self):
+ super(QuantumNovaTestCase, self).setUp()
+
+ self.net_man = quantum_manager.QuantumManager(
+ ipam_lib="nova.network.quantum.nova_ipam_lib",
+ q_conn=FakeQuantumClientConnection())
+
+ # Tests seem to create some networks by default, which
+ # we don't want. So we delete them.
+
+ ctx = context.RequestContext('user1', 'fake_project1').elevated()
+ for n in db.network_get_all(ctx):
+ db.network_delete_safe(ctx, n['id'])
+
+ # Other unit tests (e.g., test_compute.py) have a nasty
+ # habit of of creating fixed IPs and not cleaning up, which
+ # can confuse these tests, so we remove all existing fixed
+ # ips before starting.
+ session = get_session()
+ result = session.query(models.FixedIp).all()
+ with session.begin():
+ for fip_ref in result:
+ session.delete(fip_ref)
+ def _create_network(self, n):
+ ctx = context.RequestContext('user1', n['project_id'])
+ nwks = self.net_man.create_networks(
+ ctx,
+ label=n['label'], cidr=n['cidr'],
+ multi_host=n['multi_host'],
+ num_networks=1, network_size=256,
+ cidr_v6=n['cidr_v6'],
+ gateway=n['gateway'],
+ gateway_v6=n['gateway_v6'], bridge=None,
+ bridge_interface=None, dns1=n['dns1'],
+ dns2=n['dns2'],
+ project_id=n['project_id'],
+ priority=n['priority'])
+ n['uuid'] = nwks[0]['uuid']
+
+
+class QuantumNovaIPAMTestCase(QuantumNovaTestCase):
def test_create_and_delete_nets(self):
self._create_nets()
self._delete_nets()
def _create_nets(self):
for n in networks:
- ctx = context.RequestContext('user1', n['project_id'])
- nwks = self.net_man.create_networks(ctx,
- label=n['label'], cidr=n['cidr'],
- multi_host=n['multi_host'],
- num_networks=1, network_size=256, cidr_v6=n['cidr_v6'],
- gateway=n['gateway'],
- gateway_v6=n['gateway_v6'], bridge=None,
- bridge_interface=None, dns1=n['dns1'],
- dns2=n['dns2'], project_id=n['project_id'],
- priority=n['priority'])
- n['uuid'] = nwks[0]['uuid']
+ self._create_network(n)
def _delete_nets(self):
for n in networks:
@@ -336,28 +371,45 @@ class QuantumTestCaseBase(object):
self.net_man.validate_networks, ctx, [("", None)])
-class QuantumNovaIPAMTestCase(QuantumTestCaseBase, test.TestCase):
+class QuantumNovaMACGenerationTestCase(QuantumNovaTestCase):
+ def test_local_mac_address_creation(self):
+ self.flags(use_melange_mac_generation=False)
+ fake_mac = "ab:cd:ef:ab:cd:ef"
+ self.stubs.Set(manager.FlatManager, "generate_mac_address",
+ lambda x: fake_mac)
+ project_id = "fake_project1"
+ ctx = context.RequestContext('user1', project_id)
+ self._create_network(networks[0])
- def setUp(self):
- super(QuantumNovaIPAMTestCase, self).setUp()
+ net_ids = self.net_man.q_conn.get_networks_for_tenant(project_id)
+ requested_networks = [(net_id, None) for net_id in net_ids['networks']]
- self.net_man = quantum_manager.QuantumManager(
- ipam_lib="nova.network.quantum.nova_ipam_lib",
- q_conn=FakeQuantumClientConnection())
+ instance_ref = db.api.instance_create(ctx,
+ {"project_id": project_id})
+ nw_info = self.net_man.allocate_for_instance(ctx,
+ instance_id=instance_ref['id'], host="",
+ instance_type_id=instance_ref['instance_type_id'],
+ project_id=project_id,
+ requested_networks=requested_networks)
+ self.assertEqual(nw_info[0][1]['mac'], fake_mac)
- # Tests seem to create some networks by default, which
- # we don't want. So we delete them.
+ def test_melange_mac_address_creation(self):
+ self.flags(use_melange_mac_generation=True)
+ fake_mac = "ab:cd:ef:ab:cd:ef"
+ self.stubs.Set(melange_connection.MelangeConnection, "create_vif",
+ lambda w, x, y, z: fake_mac)
+ project_id = "fake_project1"
+ ctx = context.RequestContext('user1', project_id)
+ self._create_network(networks[0])
- ctx = context.RequestContext('user1', 'fake_project1').elevated()
- for n in db.network_get_all(ctx):
- db.network_delete_safe(ctx, n['id'])
+ net_ids = self.net_man.q_conn.get_networks_for_tenant(project_id)
+ requested_networks = [(net_id, None) for net_id in net_ids['networks']]
- # Other unit tests (e.g., test_compute.py) have a nasty
- # habit of of creating fixed IPs and not cleaning up, which
- # can confuse these tests, so we remove all existing fixed
- # ips before starting.
- session = get_session()
- result = session.query(models.FixedIp).all()
- with session.begin():
- for fip_ref in result:
- session.delete(fip_ref)
+ instance_ref = db.api.instance_create(ctx,
+ {"project_id": project_id})
+ nw_info = self.net_man.allocate_for_instance(ctx,
+ instance_id=instance_ref['id'], host="",
+ instance_type_id=instance_ref['instance_type_id'],
+ project_id=project_id,
+ requested_networks=requested_networks)
+ self.assertEqual(nw_info[0][1]['mac'], fake_mac)