diff options
| author | Soren Hansen <soren.hansen@rackspace.com> | 2010-10-12 22:04:46 +0200 |
|---|---|---|
| committer | Soren Hansen <soren.hansen@rackspace.com> | 2010-10-12 22:04:46 +0200 |
| commit | e0dff8694ed11f03760bf4dc251fccc422035acf (patch) | |
| tree | 3faf4865371d726866602739ecf1e99fc8ebc14a | |
| parent | ac1dfd25c4b356c1725339709e535d4147feda3c (diff) | |
| parent | 70b8321347c02e9c0799cabd3e9c670f80b031a8 (diff) | |
| download | nova-e0dff8694ed11f03760bf4dc251fccc422035acf.tar.gz nova-e0dff8694ed11f03760bf4dc251fccc422035acf.tar.xz nova-e0dff8694ed11f03760bf4dc251fccc422035acf.zip | |
Merge trunk.
| -rwxr-xr-x | bin/nova-manage | 9 | ||||
| -rw-r--r-- | nova/auth/manager.py | 5 | ||||
| -rw-r--r-- | nova/db/api.py | 6 | ||||
| -rw-r--r-- | nova/tests/virt_unittest.py | 96 | ||||
| -rw-r--r-- | run_tests.py | 1 |
5 files changed, 84 insertions, 33 deletions
diff --git a/bin/nova-manage b/bin/nova-manage index 5b72c170f..e19bf70b7 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -89,11 +89,16 @@ class VpnCommands(object): def list(self): """Print a listing of the VPNs for all projects.""" print "%-12s\t" % 'project', - print "%-12s\t" % 'ip:port', + print "%-20s\t" % 'ip:port', print "%s" % 'state' for project in self.manager.get_projects(): print "%-12s\t" % project.name, - print "%s:%s\t" % (project.vpn_ip, project.vpn_port), + + try: + s = "%s:%s" % (project.vpn_ip, project.vpn_port) + except exception.NotFound: + s = "None" + print "%-20s\t" % s, vpn = self._vpn_for(project.id) if vpn: diff --git a/nova/auth/manager.py b/nova/auth/manager.py index 8718cb00a..58e33969b 100644 --- a/nova/auth/manager.py +++ b/nova/auth/manager.py @@ -655,7 +655,10 @@ class AuthManager(object): zippy.writestr(FLAGS.credential_key_file, private_key) zippy.writestr(FLAGS.credential_cert_file, signed_cert) - (vpn_ip, vpn_port) = self.get_project_vpn_data(project) + try: + (vpn_ip, vpn_port) = self.get_project_vpn_data(project) + except exception.NotFound: + vpn_ip = None if vpn_ip: configfile = open(FLAGS.vpn_client_template, "r") s = string.Template(configfile.read()) diff --git a/nova/db/api.py b/nova/db/api.py index 4d3ff3871..4be8df397 100644 --- a/nova/db/api.py +++ b/nova/db/api.py @@ -437,7 +437,11 @@ def network_update(context, network_id, values): def project_get_network(context, project_id): - """Return the network associated with the project.""" + """Return the network associated with the project. + + Raises NotFound if no such network can be found. + + """ return IMPL.project_get_network(context, project_id) diff --git a/nova/tests/virt_unittest.py b/nova/tests/virt_unittest.py index 8b0de6c29..db1541852 100644 --- a/nova/tests/virt_unittest.py +++ b/nova/tests/virt_unittest.py @@ -14,7 +14,8 @@ # License for the specific language governing permissions and limitations # under the License. -from xml.dom.minidom import parseString +from xml.etree.ElementTree import fromstring as xml_to_tree +from xml.dom.minidom import parseString as xml_to_dom from nova import db from nova import flags @@ -22,38 +23,63 @@ from nova import test from nova.api import context from nova.api.ec2 import cloud from nova.auth import manager + +# Needed to get FLAGS.instances_path defined: +from nova.compute import manager as compute_manager from nova.virt import libvirt_conn FLAGS = flags.FLAGS - class LibvirtConnTestCase(test.TrialTestCase): - def bitrot_test_get_uri_and_template(self): - class MockDataModel(object): - def __getitem__(self, name): - return self.datamodel[name] - - def __init__(self): - self.datamodel = { 'name' : 'i-cafebabe', - 'memory_kb' : '1024000', - 'basepath' : '/some/path', - 'bridge_name' : 'br100', - 'mac_address' : '02:12:34:46:56:67', - 'vcpus' : 2, - 'project_id' : None } + def setUp(self): + self.manager = manager.AuthManager() + self.user = self.manager.create_user('fake', 'fake', 'fake', admin=True) + self.project = self.manager.create_project('fake', 'fake', 'fake') + FLAGS.instances_path = '' + + def test_get_uri_and_template(self): + ip = '10.11.12.13' + + instance = { 'internal_id' : '1', + 'memory_kb' : '1024000', + 'basepath' : '/some/path', + 'bridge_name' : 'br100', + 'mac_address' : '02:12:34:46:56:67', + 'vcpus' : 2, + 'project_id' : 'fake', + 'bridge' : 'br101', + 'instance_type' : 'm1.small'} + + instance_ref = db.instance_create(None, instance) + network_ref = db.project_get_network(None, self.project.id) + + fixed_ip = { 'address' : ip, + 'network_id' : network_ref['id'] } + + fixed_ip_ref = db.fixed_ip_create(None, fixed_ip) + db.fixed_ip_update(None, ip, { 'allocated' : True, + 'instance_id' : instance_ref['id'] }) type_uri_map = { 'qemu' : ('qemu:///system', - [lambda s: '<domain type=\'qemu\'>' in s, - lambda s: 'type>hvm</type' in s, - lambda s: 'emulator>/usr/bin/kvm' not in s]), + [(lambda t: t.find('.').get('type'), 'qemu'), + (lambda t: t.find('./os/type').text, 'hvm'), + (lambda t: t.find('./devices/emulator'), None)]), 'kvm' : ('qemu:///system', - [lambda s: '<domain type=\'kvm\'>' in s, - lambda s: 'type>hvm</type' in s, - lambda s: 'emulator>/usr/bin/qemu<' not in s]), + [(lambda t: t.find('.').get('type'), 'kvm'), + (lambda t: t.find('./os/type').text, 'hvm'), + (lambda t: t.find('./devices/emulator'), None)]), 'uml' : ('uml:///system', - [lambda s: '<domain type=\'uml\'>' in s, - lambda s: 'type>uml</type' in s]), - } + [(lambda t: t.find('.').get('type'), 'uml'), + (lambda t: t.find('./os/type').text, 'uml')]), + } + + common_checks = [(lambda t: t.find('.').tag, 'domain'), + (lambda t: \ + t.find('./devices/interface/filterref/parameter') \ + .get('name'), 'IP'), + (lambda t: \ + t.find('./devices/interface/filterref/parameter') \ + .get('value'), '10.11.12.13')] for (libvirt_type,(expected_uri, checks)) in type_uri_map.iteritems(): FLAGS.libvirt_type = libvirt_type @@ -62,9 +88,17 @@ class LibvirtConnTestCase(test.TrialTestCase): uri, template = conn.get_uri_and_template() self.assertEquals(uri, expected_uri) - for i, check in enumerate(checks): - xml = conn.to_xml(MockDataModel()) - self.assertTrue(check(xml), '%s failed check %d' % (xml, i)) + xml = conn.to_xml(instance_ref) + tree = xml_to_tree(xml) + for i, (check, expected_result) in enumerate(checks): + self.assertEqual(check(tree), + expected_result, + '%s failed check %d' % (xml, i)) + + for i, (check, expected_result) in enumerate(common_checks): + self.assertEqual(check(tree), + expected_result, + '%s failed common check %d' % (xml, i)) # Deliberately not just assigning this string to FLAGS.libvirt_uri and # checking against that later on. This way we make sure the @@ -78,6 +112,10 @@ class LibvirtConnTestCase(test.TrialTestCase): self.assertEquals(uri, testuri) + def tearDown(self): + self.manager.delete_project(self.project) + self.manager.delete_user(self.user) + class NWFilterTestCase(test.TrialTestCase): def setUp(self): super(NWFilterTestCase, self).setUp() @@ -118,7 +156,7 @@ class NWFilterTestCase(test.TrialTestCase): xml = self.fw.security_group_to_nwfilter_xml(security_group.id) - dom = parseString(xml) + dom = xml_to_dom(xml) self.assertEqual(dom.firstChild.tagName, 'filter') rules = dom.getElementsByTagName('rule') @@ -172,7 +210,7 @@ class NWFilterTestCase(test.TrialTestCase): self.recursive_depends[f] = [] def _filterDefineXMLMock(xml): - dom = parseString(xml) + dom = xml_to_dom(xml) name = dom.firstChild.getAttribute('name') self.recursive_depends[name] = [] for f in dom.getElementsByTagName('filterref'): diff --git a/run_tests.py b/run_tests.py index 8bb068ed1..0b27ec6cf 100644 --- a/run_tests.py +++ b/run_tests.py @@ -63,6 +63,7 @@ from nova.tests.rpc_unittest import * from nova.tests.scheduler_unittest import * from nova.tests.service_unittest import * from nova.tests.validator_unittest import * +from nova.tests.virt_unittest import * from nova.tests.volume_unittest import * from nova.tests.virt_unittest import * |
