Merge w/ trunk.

This commit is contained in:
Dan Prince
2011-05-26 10:32:58 -04:00
9 changed files with 99 additions and 74 deletions

View File

@@ -17,6 +17,7 @@ Christian Berendt <berendt@b1-systems.de>
Chuck Short <zulcss@ubuntu.com> Chuck Short <zulcss@ubuntu.com>
Cory Wright <corywright@gmail.com> Cory Wright <corywright@gmail.com>
Dan Prince <dan.prince@rackspace.com> Dan Prince <dan.prince@rackspace.com>
Dave Walker <DaveWalker@ubuntu.com>
David Pravec <David.Pravec@danix.org> David Pravec <David.Pravec@danix.org>
Dean Troyer <dtroyer@gmail.com> Dean Troyer <dtroyer@gmail.com>
Devin Carlen <devin.carlen@gmail.com> Devin Carlen <devin.carlen@gmail.com>

View File

@@ -108,6 +108,13 @@ def main():
interface = os.environ.get('DNSMASQ_INTERFACE', FLAGS.dnsmasq_interface) interface = os.environ.get('DNSMASQ_INTERFACE', FLAGS.dnsmasq_interface)
if int(os.environ.get('TESTING', '0')): if int(os.environ.get('TESTING', '0')):
from nova.tests import fake_flags from nova.tests import fake_flags
#if FLAGS.fake_rabbit:
# LOG.debug(_("leasing ip"))
# network_manager = utils.import_object(FLAGS.network_manager)
## reload(fake_flags)
# from nova.tests import fake_flags
action = argv[1] action = argv[1]
if action in ['add', 'del', 'old']: if action in ['add', 'del', 'old']:
mac = argv[2] mac = argv[2]

View File

@@ -98,7 +98,7 @@ flags.DECLARE('vlan_start', 'nova.network.manager')
flags.DECLARE('vpn_start', 'nova.network.manager') flags.DECLARE('vpn_start', 'nova.network.manager')
flags.DECLARE('fixed_range_v6', 'nova.network.manager') flags.DECLARE('fixed_range_v6', 'nova.network.manager')
flags.DECLARE('images_path', 'nova.image.local') flags.DECLARE('images_path', 'nova.image.local')
flags.DECLARE('libvirt_type', 'nova.virt.libvirt_conn') flags.DECLARE('libvirt_type', 'nova.virt.libvirt.connection')
flags.DEFINE_flag(flags.HelpFlag()) flags.DEFINE_flag(flags.HelpFlag())
flags.DEFINE_flag(flags.HelpshortFlag()) flags.DEFINE_flag(flags.HelpshortFlag())
flags.DEFINE_flag(flags.HelpXMLFlag()) flags.DEFINE_flag(flags.HelpXMLFlag())
@@ -418,12 +418,16 @@ class ProjectCommands(object):
arguments: project_id [key] [value]""" arguments: project_id [key] [value]"""
ctxt = context.get_admin_context() ctxt = context.get_admin_context()
if key: if key:
if value.lower() == 'unlimited':
value = None
try: try:
db.quota_update(ctxt, project_id, key, value) db.quota_update(ctxt, project_id, key, value)
except exception.ProjectQuotaNotFound: except exception.ProjectQuotaNotFound:
db.quota_create(ctxt, project_id, key, value) db.quota_create(ctxt, project_id, key, value)
project_quota = quota.get_quota(ctxt, project_id) project_quota = quota.get_project_quotas(ctxt, project_id)
for key, value in project_quota.iteritems(): for key, value in project_quota.iteritems():
if value is None:
value = 'unlimited'
print '%s: %s' % (key, value) print '%s: %s' % (key, value)
def remove(self, project_id, user_id): def remove(self, project_id, user_id):

View File

@@ -110,7 +110,7 @@ class FlagValues(gflags.FlagValues):
return name in self.__dict__['__dirty'] return name in self.__dict__['__dirty']
def ClearDirty(self): def ClearDirty(self):
self.__dict__['__is_dirty'] = [] self.__dict__['__dirty'] = []
def WasAlreadyParsed(self): def WasAlreadyParsed(self):
return self.__dict__['__was_already_parsed'] return self.__dict__['__was_already_parsed']
@@ -119,11 +119,12 @@ class FlagValues(gflags.FlagValues):
if '__stored_argv' not in self.__dict__: if '__stored_argv' not in self.__dict__:
return return
new_flags = FlagValues(self) new_flags = FlagValues(self)
for k in self.__dict__['__dirty']: for k in self.FlagDict().iterkeys():
new_flags[k] = gflags.FlagValues.__getitem__(self, k) new_flags[k] = gflags.FlagValues.__getitem__(self, k)
new_flags.Reset()
new_flags(self.__dict__['__stored_argv']) new_flags(self.__dict__['__stored_argv'])
for k in self.__dict__['__dirty']: for k in new_flags.FlagDict().iterkeys():
setattr(self, k, getattr(new_flags, k)) setattr(self, k, getattr(new_flags, k))
self.ClearDirty() self.ClearDirty()

View File

@@ -21,24 +21,24 @@ from nova import flags
FLAGS = flags.FLAGS FLAGS = flags.FLAGS
flags.DECLARE('volume_driver', 'nova.volume.manager') flags.DECLARE('volume_driver', 'nova.volume.manager')
FLAGS.volume_driver = 'nova.volume.driver.FakeISCSIDriver' FLAGS['volume_driver'].SetDefault('nova.volume.driver.FakeISCSIDriver')
FLAGS.connection_type = 'fake' FLAGS['connection_type'].SetDefault('fake')
FLAGS.fake_rabbit = True FLAGS['fake_rabbit'].SetDefault(True)
flags.DECLARE('auth_driver', 'nova.auth.manager') flags.DECLARE('auth_driver', 'nova.auth.manager')
FLAGS.auth_driver = 'nova.auth.dbdriver.DbDriver' FLAGS['auth_driver'].SetDefault('nova.auth.dbdriver.DbDriver')
flags.DECLARE('network_size', 'nova.network.manager') flags.DECLARE('network_size', 'nova.network.manager')
flags.DECLARE('num_networks', 'nova.network.manager') flags.DECLARE('num_networks', 'nova.network.manager')
flags.DECLARE('fake_network', 'nova.network.manager') flags.DECLARE('fake_network', 'nova.network.manager')
FLAGS.network_size = 8 FLAGS['network_size'].SetDefault(8)
FLAGS.num_networks = 2 FLAGS['num_networks'].SetDefault(2)
FLAGS.fake_network = True FLAGS['fake_network'].SetDefault(True)
FLAGS.image_service = 'nova.image.local.LocalImageService' FLAGS['image_service'].SetDefault('nova.image.local.LocalImageService')
flags.DECLARE('num_shelves', 'nova.volume.driver') flags.DECLARE('num_shelves', 'nova.volume.driver')
flags.DECLARE('blades_per_shelf', 'nova.volume.driver') flags.DECLARE('blades_per_shelf', 'nova.volume.driver')
flags.DECLARE('iscsi_num_targets', 'nova.volume.driver') flags.DECLARE('iscsi_num_targets', 'nova.volume.driver')
FLAGS.num_shelves = 2 FLAGS['num_shelves'].SetDefault(2)
FLAGS.blades_per_shelf = 4 FLAGS['blades_per_shelf'].SetDefault(4)
FLAGS.iscsi_num_targets = 8 FLAGS['iscsi_num_targets'].SetDefault(8)
FLAGS.verbose = True FLAGS['verbose'].SetDefault(True)
FLAGS.sqlite_db = "tests.sqlite" FLAGS['sqlite_db'].SetDefault("tests.sqlite")
FLAGS.use_ipv6 = True FLAGS['use_ipv6'].SetDefault(True)

View File

@@ -1,26 +0,0 @@
# vim: tabstop=4 shiftwidth=4 softtabstop=4
# Copyright 2010 United States Government as represented by the
# Administrator of the National Aeronautics and Space Administration.
# 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.
from nova import flags
FLAGS = flags.FLAGS
FLAGS.connection_type = 'libvirt'
FLAGS.fake_rabbit = False
FLAGS.fake_network = False
FLAGS.verbose = False

View File

@@ -224,6 +224,29 @@ class ApiEc2TestCase(test.TestCase):
self.manager.delete_project(project) self.manager.delete_project(project)
self.manager.delete_user(user) self.manager.delete_user(user)
def test_create_duplicate_key_pair(self):
"""Test that, after successfully generating a keypair,
requesting a second keypair with the same name fails sanely"""
self.expect_http()
self.mox.ReplayAll()
keyname = "".join(random.choice("sdiuisudfsdcnpaqwertasd") \
for x in range(random.randint(4, 8)))
user = self.manager.create_user('fake', 'fake', 'fake')
project = self.manager.create_project('fake', 'fake', 'fake')
# NOTE(vish): create depends on pool, so call helper directly
self.ec2.create_key_pair('test')
try:
self.ec2.create_key_pair('test')
except EC2ResponseError, e:
if e.code == 'KeyPairExists':
pass
else:
self.fail("Unexpected EC2ResponseError: %s "
"(expected KeyPairExists)" % e.code)
else:
self.fail('Exception not raised.')
def test_get_all_security_groups(self): def test_get_all_security_groups(self):
"""Test that we can retrieve security groups""" """Test that we can retrieve security groups"""
self.expect_http() self.expect_http()

View File

@@ -91,6 +91,20 @@ class FlagsTestCase(test.TestCase):
self.assert_('runtime_answer' in self.global_FLAGS) self.assert_('runtime_answer' in self.global_FLAGS)
self.assertEqual(self.global_FLAGS.runtime_answer, 60) self.assertEqual(self.global_FLAGS.runtime_answer, 60)
def test_long_vs_short_flags(self):
flags.DEFINE_string('duplicate_answer_long', 'val', 'desc',
flag_values=self.global_FLAGS)
argv = ['flags_test', '--duplicate_answer=60', 'extra_arg']
args = self.global_FLAGS(argv)
self.assert_('duplicate_answer' not in self.global_FLAGS)
self.assert_(self.global_FLAGS.duplicate_answer_long, 60)
flags.DEFINE_integer('duplicate_answer', 60, 'desc',
flag_values=self.global_FLAGS)
self.assertEqual(self.global_FLAGS.duplicate_answer, 60)
self.assertEqual(self.global_FLAGS.duplicate_answer_long, 'val')
def test_flag_leak_left(self): def test_flag_leak_left(self):
self.assertEqual(FLAGS.flags_unittest, 'foo') self.assertEqual(FLAGS.flags_unittest, 'foo')
FLAGS.flags_unittest = 'bar' FLAGS.flags_unittest = 'bar'

View File

@@ -32,7 +32,8 @@ from nova import utils
from nova.api.ec2 import cloud from nova.api.ec2 import cloud
from nova.auth import manager from nova.auth import manager
from nova.compute import power_state from nova.compute import power_state
from nova.virt import libvirt_conn from nova.virt.libvirt import connection
from nova.virt.libvirt import firewall
libvirt = None libvirt = None
FLAGS = flags.FLAGS FLAGS = flags.FLAGS
@@ -83,7 +84,7 @@ class CacheConcurrencyTestCase(test.TestCase):
def test_same_fname_concurrency(self): def test_same_fname_concurrency(self):
"""Ensures that the same fname cache runs at a sequentially""" """Ensures that the same fname cache runs at a sequentially"""
conn = libvirt_conn.LibvirtConnection conn = connection.LibvirtConnection
wait1 = eventlet.event.Event() wait1 = eventlet.event.Event()
done1 = eventlet.event.Event() done1 = eventlet.event.Event()
eventlet.spawn(conn._cache_image, _concurrency, eventlet.spawn(conn._cache_image, _concurrency,
@@ -104,7 +105,7 @@ class CacheConcurrencyTestCase(test.TestCase):
def test_different_fname_concurrency(self): def test_different_fname_concurrency(self):
"""Ensures that two different fname caches are concurrent""" """Ensures that two different fname caches are concurrent"""
conn = libvirt_conn.LibvirtConnection conn = connection.LibvirtConnection
wait1 = eventlet.event.Event() wait1 = eventlet.event.Event()
done1 = eventlet.event.Event() done1 = eventlet.event.Event()
eventlet.spawn(conn._cache_image, _concurrency, eventlet.spawn(conn._cache_image, _concurrency,
@@ -125,7 +126,7 @@ class CacheConcurrencyTestCase(test.TestCase):
class LibvirtConnTestCase(test.TestCase): class LibvirtConnTestCase(test.TestCase):
def setUp(self): def setUp(self):
super(LibvirtConnTestCase, self).setUp() super(LibvirtConnTestCase, self).setUp()
libvirt_conn._late_load_cheetah() connection._late_load_cheetah()
self.flags(fake_call=True) self.flags(fake_call=True)
self.manager = manager.AuthManager() self.manager = manager.AuthManager()
@@ -171,8 +172,8 @@ class LibvirtConnTestCase(test.TestCase):
return False return False
global libvirt global libvirt
libvirt = __import__('libvirt') libvirt = __import__('libvirt')
libvirt_conn.libvirt = __import__('libvirt') connection.libvirt = __import__('libvirt')
libvirt_conn.libxml2 = __import__('libxml2') connection.libxml2 = __import__('libxml2')
return True return True
def create_fake_libvirt_mock(self, **kwargs): def create_fake_libvirt_mock(self, **kwargs):
@@ -182,7 +183,7 @@ class LibvirtConnTestCase(test.TestCase):
class FakeLibvirtConnection(object): class FakeLibvirtConnection(object):
pass pass
# A fake libvirt_conn.IptablesFirewallDriver # A fake connection.IptablesFirewallDriver
class FakeIptablesFirewallDriver(object): class FakeIptablesFirewallDriver(object):
def __init__(self, **kwargs): def __init__(self, **kwargs):
@@ -198,11 +199,11 @@ class LibvirtConnTestCase(test.TestCase):
for key, val in kwargs.items(): for key, val in kwargs.items():
fake.__setattr__(key, val) fake.__setattr__(key, val)
# Inevitable mocks for libvirt_conn.LibvirtConnection # Inevitable mocks for connection.LibvirtConnection
self.mox.StubOutWithMock(libvirt_conn.utils, 'import_class') self.mox.StubOutWithMock(connection.utils, 'import_class')
libvirt_conn.utils.import_class(mox.IgnoreArg()).AndReturn(fakeip) connection.utils.import_class(mox.IgnoreArg()).AndReturn(fakeip)
self.mox.StubOutWithMock(libvirt_conn.LibvirtConnection, '_conn') self.mox.StubOutWithMock(connection.LibvirtConnection, '_conn')
libvirt_conn.LibvirtConnection._conn = fake connection.LibvirtConnection._conn = fake
def create_service(self, **kwargs): def create_service(self, **kwargs):
service_ref = {'host': kwargs.get('host', 'dummy'), service_ref = {'host': kwargs.get('host', 'dummy'),
@@ -214,7 +215,7 @@ class LibvirtConnTestCase(test.TestCase):
return db.service_create(context.get_admin_context(), service_ref) return db.service_create(context.get_admin_context(), service_ref)
def test_preparing_xml_info(self): def test_preparing_xml_info(self):
conn = libvirt_conn.LibvirtConnection(True) conn = connection.LibvirtConnection(True)
instance_ref = db.instance_create(self.context, self.test_instance) instance_ref = db.instance_create(self.context, self.test_instance)
result = conn._prepare_xml_info(instance_ref, False) result = conn._prepare_xml_info(instance_ref, False)
@@ -229,7 +230,7 @@ class LibvirtConnTestCase(test.TestCase):
self.assertTrue(len(result['nics']) == 2) self.assertTrue(len(result['nics']) == 2)
def test_get_nic_for_xml_v4(self): def test_get_nic_for_xml_v4(self):
conn = libvirt_conn.LibvirtConnection(True) conn = connection.LibvirtConnection(True)
network, mapping = _create_network_info()[0] network, mapping = _create_network_info()[0]
self.flags(use_ipv6=False) self.flags(use_ipv6=False)
params = conn._get_nic_for_xml(network, mapping)['extra_params'] params = conn._get_nic_for_xml(network, mapping)['extra_params']
@@ -237,7 +238,7 @@ class LibvirtConnTestCase(test.TestCase):
self.assertTrue(params.find('PROJMASKV6') == -1) self.assertTrue(params.find('PROJMASKV6') == -1)
def test_get_nic_for_xml_v6(self): def test_get_nic_for_xml_v6(self):
conn = libvirt_conn.LibvirtConnection(True) conn = connection.LibvirtConnection(True)
network, mapping = _create_network_info()[0] network, mapping = _create_network_info()[0]
self.flags(use_ipv6=True) self.flags(use_ipv6=True)
params = conn._get_nic_for_xml(network, mapping)['extra_params'] params = conn._get_nic_for_xml(network, mapping)['extra_params']
@@ -282,7 +283,7 @@ class LibvirtConnTestCase(test.TestCase):
def test_multi_nic(self): def test_multi_nic(self):
instance_data = dict(self.test_instance) instance_data = dict(self.test_instance)
network_info = _create_network_info(2) network_info = _create_network_info(2)
conn = libvirt_conn.LibvirtConnection(True) conn = connection.LibvirtConnection(True)
instance_ref = db.instance_create(self.context, instance_data) instance_ref = db.instance_create(self.context, instance_data)
xml = conn.to_xml(instance_ref, False, network_info) xml = conn.to_xml(instance_ref, False, network_info)
tree = xml_to_tree(xml) tree = xml_to_tree(xml)
@@ -313,7 +314,7 @@ class LibvirtConnTestCase(test.TestCase):
'instance_id': instance_ref['id']}) 'instance_id': instance_ref['id']})
self.flags(libvirt_type='lxc') self.flags(libvirt_type='lxc')
conn = libvirt_conn.LibvirtConnection(True) conn = connection.LibvirtConnection(True)
uri = conn.get_uri() uri = conn.get_uri()
self.assertEquals(uri, 'lxc:///') self.assertEquals(uri, 'lxc:///')
@@ -419,7 +420,7 @@ class LibvirtConnTestCase(test.TestCase):
for (libvirt_type, (expected_uri, checks)) in type_uri_map.iteritems(): for (libvirt_type, (expected_uri, checks)) in type_uri_map.iteritems():
FLAGS.libvirt_type = libvirt_type FLAGS.libvirt_type = libvirt_type
conn = libvirt_conn.LibvirtConnection(True) conn = connection.LibvirtConnection(True)
uri = conn.get_uri() uri = conn.get_uri()
self.assertEquals(uri, expected_uri) self.assertEquals(uri, expected_uri)
@@ -446,7 +447,7 @@ class LibvirtConnTestCase(test.TestCase):
FLAGS.libvirt_uri = testuri FLAGS.libvirt_uri = testuri
for (libvirt_type, (expected_uri, checks)) in type_uri_map.iteritems(): for (libvirt_type, (expected_uri, checks)) in type_uri_map.iteritems():
FLAGS.libvirt_type = libvirt_type FLAGS.libvirt_type = libvirt_type
conn = libvirt_conn.LibvirtConnection(True) conn = connection.LibvirtConnection(True)
uri = conn.get_uri() uri = conn.get_uri()
self.assertEquals(uri, testuri) self.assertEquals(uri, testuri)
db.instance_destroy(user_context, instance_ref['id']) db.instance_destroy(user_context, instance_ref['id'])
@@ -470,13 +471,13 @@ class LibvirtConnTestCase(test.TestCase):
self.create_fake_libvirt_mock(getVersion=getVersion, self.create_fake_libvirt_mock(getVersion=getVersion,
getType=getType, getType=getType,
listDomainsID=listDomainsID) listDomainsID=listDomainsID)
self.mox.StubOutWithMock(libvirt_conn.LibvirtConnection, self.mox.StubOutWithMock(connection.LibvirtConnection,
'get_cpu_info') 'get_cpu_info')
libvirt_conn.LibvirtConnection.get_cpu_info().AndReturn('cpuinfo') connection.LibvirtConnection.get_cpu_info().AndReturn('cpuinfo')
# Start test # Start test
self.mox.ReplayAll() self.mox.ReplayAll()
conn = libvirt_conn.LibvirtConnection(False) conn = connection.LibvirtConnection(False)
conn.update_available_resource(self.context, 'dummy') conn.update_available_resource(self.context, 'dummy')
service_ref = db.service_get(self.context, service_ref['id']) service_ref = db.service_get(self.context, service_ref['id'])
compute_node = service_ref['compute_node'][0] compute_node = service_ref['compute_node'][0]
@@ -510,7 +511,7 @@ class LibvirtConnTestCase(test.TestCase):
self.create_fake_libvirt_mock() self.create_fake_libvirt_mock()
self.mox.ReplayAll() self.mox.ReplayAll()
conn = libvirt_conn.LibvirtConnection(False) conn = connection.LibvirtConnection(False)
self.assertRaises(exception.ComputeServiceUnavailable, self.assertRaises(exception.ComputeServiceUnavailable,
conn.update_available_resource, conn.update_available_resource,
self.context, 'dummy') self.context, 'dummy')
@@ -545,7 +546,7 @@ class LibvirtConnTestCase(test.TestCase):
# Start test # Start test
self.mox.ReplayAll() self.mox.ReplayAll()
try: try:
conn = libvirt_conn.LibvirtConnection(False) conn = connection.LibvirtConnection(False)
conn.firewall_driver.setattr('setup_basic_filtering', fake_none) conn.firewall_driver.setattr('setup_basic_filtering', fake_none)
conn.firewall_driver.setattr('prepare_instance_filter', fake_none) conn.firewall_driver.setattr('prepare_instance_filter', fake_none)
conn.firewall_driver.setattr('instance_filter_exists', fake_none) conn.firewall_driver.setattr('instance_filter_exists', fake_none)
@@ -594,7 +595,7 @@ class LibvirtConnTestCase(test.TestCase):
# Start test # Start test
self.mox.ReplayAll() self.mox.ReplayAll()
conn = libvirt_conn.LibvirtConnection(False) conn = connection.LibvirtConnection(False)
self.assertRaises(libvirt.libvirtError, self.assertRaises(libvirt.libvirtError,
conn._live_migration, conn._live_migration,
self.context, instance_ref, 'dest', '', self.context, instance_ref, 'dest', '',
@@ -623,7 +624,7 @@ class LibvirtConnTestCase(test.TestCase):
# Start test # Start test
self.mox.ReplayAll() self.mox.ReplayAll()
conn = libvirt_conn.LibvirtConnection(False) conn = connection.LibvirtConnection(False)
conn.firewall_driver.setattr('setup_basic_filtering', fake_none) conn.firewall_driver.setattr('setup_basic_filtering', fake_none)
conn.firewall_driver.setattr('prepare_instance_filter', fake_none) conn.firewall_driver.setattr('prepare_instance_filter', fake_none)
@@ -647,7 +648,7 @@ class LibvirtConnTestCase(test.TestCase):
self.assertTrue(count) self.assertTrue(count)
def test_get_host_ip_addr(self): def test_get_host_ip_addr(self):
conn = libvirt_conn.LibvirtConnection(False) conn = connection.LibvirtConnection(False)
ip = conn.get_host_ip_addr() ip = conn.get_host_ip_addr()
self.assertEquals(ip, FLAGS.my_ip) self.assertEquals(ip, FLAGS.my_ip)
@@ -671,7 +672,7 @@ class IptablesFirewallTestCase(test.TestCase):
class FakeLibvirtConnection(object): class FakeLibvirtConnection(object):
pass pass
self.fake_libvirt_connection = FakeLibvirtConnection() self.fake_libvirt_connection = FakeLibvirtConnection()
self.fw = libvirt_conn.IptablesFirewallDriver( self.fw = firewall.IptablesFirewallDriver(
get_connection=lambda: self.fake_libvirt_connection) get_connection=lambda: self.fake_libvirt_connection)
def tearDown(self): def tearDown(self):
@@ -895,7 +896,7 @@ class NWFilterTestCase(test.TestCase):
self.fake_libvirt_connection = Mock() self.fake_libvirt_connection = Mock()
self.fw = libvirt_conn.NWFilterFirewall( self.fw = firewall.NWFilterFirewall(
lambda: self.fake_libvirt_connection) lambda: self.fake_libvirt_connection)
def tearDown(self): def tearDown(self):