tests pass
This commit is contained in:
		@@ -34,23 +34,23 @@ from nova import db
 | 
				
			|||||||
from nova import flags
 | 
					from nova import flags
 | 
				
			||||||
from nova import rpc
 | 
					from nova import rpc
 | 
				
			||||||
from nova import utils
 | 
					from nova import utils
 | 
				
			||||||
from nova.network import linux_net
 | 
					 | 
				
			||||||
from nova.network import service
 | 
					 | 
				
			||||||
from nova import datastore # for redis_db flag
 | 
					from nova import datastore # for redis_db flag
 | 
				
			||||||
from nova.auth import manager # for auth flags
 | 
					from nova.auth import manager # for auth flags
 | 
				
			||||||
 | 
					from nova.network import manager # for network flags
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FLAGS = flags.FLAGS
 | 
					FLAGS = flags.FLAGS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
def add_lease(_mac, ip_address, _hostname, _interface):
 | 
					def add_lease(_mac, ip_address, _hostname, _interface):
 | 
				
			||||||
    """Set the IP that was assigned by the DHCP server."""
 | 
					    """Set the IP that was assigned by the DHCP server."""
 | 
				
			||||||
    if FLAGS.fake_rabbit:
 | 
					    if FLAGS.fake_rabbit:
 | 
				
			||||||
        logging.debug("leasing ip")
 | 
					        logging.debug("leasing ip")
 | 
				
			||||||
        service.VlanNetworkService().lease_fixed_ip(ip_address)
 | 
					        network_manager = utils.import_object(FLAGS.network_manager)
 | 
				
			||||||
 | 
					        network_manager.lease_fixed_ip(None, ip_address)
 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        rpc.cast("%s.%s" % (FLAGS.network_topic, FLAGS.node_name),
 | 
					        rpc.cast("%s.%s" % (FLAGS.network_topic, FLAGS.node_name),
 | 
				
			||||||
                 {"method": "lease_fixed_ip",
 | 
					                 {"method": "lease_fixed_ip",
 | 
				
			||||||
                  "args": {"address": ip_address}})
 | 
					                  "args": {"context": None,
 | 
				
			||||||
 | 
					                           "address": ip_address}})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def old_lease(_mac, _ip_address, _hostname, _interface):
 | 
					def old_lease(_mac, _ip_address, _hostname, _interface):
 | 
				
			||||||
@@ -62,20 +62,24 @@ def del_lease(_mac, ip_address, _hostname, _interface):
 | 
				
			|||||||
    """Called when a lease expires."""
 | 
					    """Called when a lease expires."""
 | 
				
			||||||
    if FLAGS.fake_rabbit:
 | 
					    if FLAGS.fake_rabbit:
 | 
				
			||||||
        logging.debug("releasing ip")
 | 
					        logging.debug("releasing ip")
 | 
				
			||||||
        service.VlanNetworkService().release_fixed_ip(ip_address)
 | 
					        network_manager = utils.import_object(FLAGS.network_manager)
 | 
				
			||||||
 | 
					        network_manager.release_fixed_ip(None, ip_address)
 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        rpc.cast("%s.%s" % (FLAGS.network_topic, FLAGS.node_name),
 | 
					        rpc.cast("%s.%s" % (FLAGS.network_topic, FLAGS.node_name),
 | 
				
			||||||
                 {"method": "release_fixed_ip",
 | 
					                 {"method": "release_fixed_ip",
 | 
				
			||||||
                  "args": {"address": ip_address}})
 | 
					                  "args": {"context": None,
 | 
				
			||||||
 | 
					                           "address": ip_address}})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def init_leases(interface):
 | 
					def init_leases(interface):
 | 
				
			||||||
    """Get the list of hosts for an interface."""
 | 
					    """Get the list of hosts for an interface."""
 | 
				
			||||||
    network_ref = db.network_get_by_bridge(None, interface)
 | 
					    network_ref = db.network_get_by_bridge(None, interface)
 | 
				
			||||||
    return linux_net.get_dhcp_hosts(None, network_ref['id'])
 | 
					    network_manager = utils.import_object(FLAGS.network_manager)
 | 
				
			||||||
 | 
					    return network_manager.driver.get_dhcp_hosts(None, network_ref['id'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def main():
 | 
					def main():
 | 
				
			||||||
 | 
					    global network_manager
 | 
				
			||||||
    """Parse environment and arguments and call the approproate action."""
 | 
					    """Parse environment and arguments and call the approproate action."""
 | 
				
			||||||
    flagfile = os.environ.get('FLAGFILE', FLAGS.dhcpbridge_flagfile)
 | 
					    flagfile = os.environ.get('FLAGFILE', FLAGS.dhcpbridge_flagfile)
 | 
				
			||||||
    utils.default_flagfile(flagfile)
 | 
					    utils.default_flagfile(flagfile)
 | 
				
			||||||
@@ -93,7 +97,6 @@ def main():
 | 
				
			|||||||
                                            '..',
 | 
					                                            '..',
 | 
				
			||||||
                                            '_trial_temp',
 | 
					                                            '_trial_temp',
 | 
				
			||||||
                                            'nova.sqlite'))
 | 
					                                            'nova.sqlite'))
 | 
				
			||||||
        print path
 | 
					 | 
				
			||||||
        FLAGS.sql_connection = 'sqlite:///%s' % path
 | 
					        FLAGS.sql_connection = 'sqlite:///%s' % path
 | 
				
			||||||
        #FLAGS.sql_connection = 'mysql://root@localhost/test'
 | 
					        #FLAGS.sql_connection = 'mysql://root@localhost/test'
 | 
				
			||||||
    action = argv[1]
 | 
					    action = argv[1]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -252,6 +252,7 @@ class AuthManager(object):
 | 
				
			|||||||
        __init__ is run every time AuthManager() is called, so we only
 | 
					        __init__ is run every time AuthManager() is called, so we only
 | 
				
			||||||
        reset the driver if it is not set or a new driver is specified.
 | 
					        reset the driver if it is not set or a new driver is specified.
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
 | 
					        self.network_manager = utils.import_object(FLAGS.network_manager)
 | 
				
			||||||
        if driver or not getattr(self, 'driver', None):
 | 
					        if driver or not getattr(self, 'driver', None):
 | 
				
			||||||
            self.driver = utils.import_class(driver or FLAGS.auth_driver)
 | 
					            self.driver = utils.import_class(driver or FLAGS.auth_driver)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -525,7 +526,8 @@ class AuthManager(object):
 | 
				
			|||||||
            if project_dict:
 | 
					            if project_dict:
 | 
				
			||||||
                project = Project(**project_dict)
 | 
					                project = Project(**project_dict)
 | 
				
			||||||
                try:
 | 
					                try:
 | 
				
			||||||
                    db.network_allocate(context, project.id)
 | 
					                    self.network_manager.allocate_network(context,
 | 
				
			||||||
 | 
					                                                          project.id)
 | 
				
			||||||
                except:
 | 
					                except:
 | 
				
			||||||
                    drv.delete_project(project.id)
 | 
					                    drv.delete_project(project.id)
 | 
				
			||||||
                    raise
 | 
					                    raise
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -60,7 +60,7 @@ class CloudController(object):
 | 
				
			|||||||
 sent to the other nodes.
 | 
					 sent to the other nodes.
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
    def __init__(self):
 | 
					    def __init__(self):
 | 
				
			||||||
        self.network_manager = utils.load_object(FLAGS.network_manager)
 | 
					        self.network_manager = utils.import_object(FLAGS.network_manager)
 | 
				
			||||||
        self.setup()
 | 
					        self.setup()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __str__(self):
 | 
					    def __str__(self):
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,8 +27,8 @@ from xml.etree import ElementTree
 | 
				
			|||||||
from nova import flags
 | 
					from nova import flags
 | 
				
			||||||
from nova import rpc
 | 
					from nova import rpc
 | 
				
			||||||
from nova import test
 | 
					from nova import test
 | 
				
			||||||
 | 
					from nova import utils
 | 
				
			||||||
from nova.auth import manager
 | 
					from nova.auth import manager
 | 
				
			||||||
from nova.compute import service
 | 
					 | 
				
			||||||
from nova.endpoint import api
 | 
					from nova.endpoint import api
 | 
				
			||||||
from nova.endpoint import cloud
 | 
					from nova.endpoint import cloud
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -53,7 +53,7 @@ class CloudTestCase(test.BaseTestCase):
 | 
				
			|||||||
        self.injected.append(self.cloud_consumer.attach_to_tornado(self.ioloop))
 | 
					        self.injected.append(self.cloud_consumer.attach_to_tornado(self.ioloop))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # set up a service
 | 
					        # set up a service
 | 
				
			||||||
        self.compute = service.ComputeService()
 | 
					        self.compute = utils.import_class(FLAGS.compute_manager)
 | 
				
			||||||
        self.compute_consumer = rpc.AdapterConsumer(connection=self.conn,
 | 
					        self.compute_consumer = rpc.AdapterConsumer(connection=self.conn,
 | 
				
			||||||
                                                     topic=FLAGS.compute_topic,
 | 
					                                                     topic=FLAGS.compute_topic,
 | 
				
			||||||
                                                     proxy=self.compute)
 | 
					                                                     proxy=self.compute)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,7 +27,6 @@ from nova import flags
 | 
				
			|||||||
from nova import test
 | 
					from nova import test
 | 
				
			||||||
from nova import utils
 | 
					from nova import utils
 | 
				
			||||||
from nova.auth import manager
 | 
					from nova.auth import manager
 | 
				
			||||||
from nova.compute import service
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FLAGS = flags.FLAGS
 | 
					FLAGS = flags.FLAGS
 | 
				
			||||||
@@ -60,7 +59,7 @@ class ComputeConnectionTestCase(test.TrialTestCase):
 | 
				
			|||||||
        super(ComputeConnectionTestCase, self).setUp()
 | 
					        super(ComputeConnectionTestCase, self).setUp()
 | 
				
			||||||
        self.flags(connection_type='fake',
 | 
					        self.flags(connection_type='fake',
 | 
				
			||||||
                   fake_storage=True)
 | 
					                   fake_storage=True)
 | 
				
			||||||
        self.compute = service.ComputeService()
 | 
					        self.compute = utils.import_object(FLAGS.compute_manager)
 | 
				
			||||||
        self.manager = manager.AuthManager()
 | 
					        self.manager = manager.AuthManager()
 | 
				
			||||||
        user = self.manager.create_user('fake', 'fake', 'fake')
 | 
					        user = self.manager.create_user('fake', 'fake', 'fake')
 | 
				
			||||||
        project = self.manager.create_project('fake', 'fake', 'fake')
 | 
					        project = self.manager.create_project('fake', 'fake', 'fake')
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,13 +20,19 @@ from nova import flags
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
FLAGS = flags.FLAGS
 | 
					FLAGS = flags.FLAGS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FLAGS.connection_type = 'fake'
 | 
					flags.DECLARE('fake_storage', 'nova.volume.manager')
 | 
				
			||||||
FLAGS.fake_storage = True
 | 
					FLAGS.fake_storage = True
 | 
				
			||||||
 | 
					FLAGS.connection_type = 'fake'
 | 
				
			||||||
FLAGS.fake_rabbit = True
 | 
					FLAGS.fake_rabbit = True
 | 
				
			||||||
FLAGS.fake_network = True
 | 
					 | 
				
			||||||
FLAGS.auth_driver = 'nova.auth.ldapdriver.FakeLdapDriver'
 | 
					FLAGS.auth_driver = 'nova.auth.ldapdriver.FakeLdapDriver'
 | 
				
			||||||
 | 
					flags.DECLARE('network_size', 'nova.network.manager')
 | 
				
			||||||
 | 
					flags.DECLARE('num_networks', 'nova.network.manager')
 | 
				
			||||||
 | 
					flags.DECLARE('fake_network', 'nova.network.manager')
 | 
				
			||||||
FLAGS.network_size = 16
 | 
					FLAGS.network_size = 16
 | 
				
			||||||
FLAGS.num_networks = 5
 | 
					FLAGS.num_networks = 5
 | 
				
			||||||
 | 
					FLAGS.fake_network = True
 | 
				
			||||||
 | 
					flags.DECLARE('num_shelves', 'nova.volume.manager')
 | 
				
			||||||
 | 
					flags.DECLARE('blades_per_shelf', 'nova.volume.manager')
 | 
				
			||||||
FLAGS.num_shelves = 2
 | 
					FLAGS.num_shelves = 2
 | 
				
			||||||
FLAGS.blades_per_shelf = 4
 | 
					FLAGS.blades_per_shelf = 4
 | 
				
			||||||
FLAGS.verbose = True
 | 
					FLAGS.verbose = True
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -49,14 +49,15 @@ class NetworkTestCase(test.TrialTestCase):
 | 
				
			|||||||
        self.manager = manager.AuthManager()
 | 
					        self.manager = manager.AuthManager()
 | 
				
			||||||
        self.user = self.manager.create_user('netuser', 'netuser', 'netuser')
 | 
					        self.user = self.manager.create_user('netuser', 'netuser', 'netuser')
 | 
				
			||||||
        self.projects = []
 | 
					        self.projects = []
 | 
				
			||||||
        self.service = service.VlanNetworkService()
 | 
					        self.network = utils.import_object(FLAGS.network_manager)
 | 
				
			||||||
 | 
					        self.context = None
 | 
				
			||||||
        for i in range(5):
 | 
					        for i in range(5):
 | 
				
			||||||
            name = 'project%s' % i
 | 
					            name = 'project%s' % i
 | 
				
			||||||
            self.projects.append(self.manager.create_project(name,
 | 
					            self.projects.append(self.manager.create_project(name,
 | 
				
			||||||
                                                             'netuser',
 | 
					                                                             'netuser',
 | 
				
			||||||
                                                             name))
 | 
					                                                             name))
 | 
				
			||||||
            # create the necessary network data for the project
 | 
					            # create the necessary network data for the project
 | 
				
			||||||
            self.service.set_network_host(self.projects[i].id)
 | 
					            self.network.set_network_host(self.context, self.projects[i].id)
 | 
				
			||||||
        instance_id = db.instance_create(None,
 | 
					        instance_id = db.instance_create(None,
 | 
				
			||||||
                                         {'mac_address': utils.generate_mac()})
 | 
					                                         {'mac_address': utils.generate_mac()})
 | 
				
			||||||
        self.instance_id = instance_id
 | 
					        self.instance_id = instance_id
 | 
				
			||||||
@@ -92,16 +93,17 @@ class NetworkTestCase(test.TrialTestCase):
 | 
				
			|||||||
            db.floating_ip_get_by_address(None, ip_str)
 | 
					            db.floating_ip_get_by_address(None, ip_str)
 | 
				
			||||||
        except exception.NotFound:
 | 
					        except exception.NotFound:
 | 
				
			||||||
            db.floating_ip_create(None, ip_str, FLAGS.node_name)
 | 
					            db.floating_ip_create(None, ip_str, FLAGS.node_name)
 | 
				
			||||||
        float_addr = self.service.allocate_floating_ip(self.projects[0].id)
 | 
					        float_addr = self.network.allocate_floating_ip(self.context,
 | 
				
			||||||
 | 
					                                                       self.projects[0].id)
 | 
				
			||||||
        fix_addr = self._create_address(0)
 | 
					        fix_addr = self._create_address(0)
 | 
				
			||||||
        self.assertEqual(float_addr, str(pubnet[0]))
 | 
					        self.assertEqual(float_addr, str(pubnet[0]))
 | 
				
			||||||
        self.service.associate_floating_ip(float_addr, fix_addr)
 | 
					        self.network.associate_floating_ip(self.context, float_addr, fix_addr)
 | 
				
			||||||
        address = db.instance_get_floating_address(None, self.instance_id)
 | 
					        address = db.instance_get_floating_address(None, self.instance_id)
 | 
				
			||||||
        self.assertEqual(address, float_addr)
 | 
					        self.assertEqual(address, float_addr)
 | 
				
			||||||
        self.service.disassociate_floating_ip(float_addr)
 | 
					        self.network.disassociate_floating_ip(self.context, float_addr)
 | 
				
			||||||
        address = db.instance_get_floating_address(None, self.instance_id)
 | 
					        address = db.instance_get_floating_address(None, self.instance_id)
 | 
				
			||||||
        self.assertEqual(address, None)
 | 
					        self.assertEqual(address, None)
 | 
				
			||||||
        self.service.deallocate_floating_ip(float_addr)
 | 
					        self.network.deallocate_floating_ip(self.context, float_addr)
 | 
				
			||||||
        db.fixed_ip_deallocate(None, fix_addr)
 | 
					        db.fixed_ip_deallocate(None, fix_addr)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_allocate_deallocate_fixed_ip(self):
 | 
					    def test_allocate_deallocate_fixed_ip(self):
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,10 +30,16 @@ from nova import flags
 | 
				
			|||||||
from nova import rpc
 | 
					from nova import rpc
 | 
				
			||||||
from nova import test
 | 
					from nova import test
 | 
				
			||||||
from nova import service
 | 
					from nova import service
 | 
				
			||||||
 | 
					from nova import manager
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FLAGS = flags.FLAGS
 | 
					FLAGS = flags.FLAGS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					flags.DEFINE_string("fake_manager", "nova.tests.service_unittest.FakeManager",
 | 
				
			||||||
 | 
					                    "Manager for testing")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class FakeManager(manager.Manager):
 | 
				
			||||||
 | 
					    """Fake manager for tests"""
 | 
				
			||||||
 | 
					    pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ServiceTestCase(test.BaseTestCase):
 | 
					class ServiceTestCase(test.BaseTestCase):
 | 
				
			||||||
    """Test cases for rpc"""
 | 
					    """Test cases for rpc"""
 | 
				
			||||||
@@ -46,12 +52,12 @@ class ServiceTestCase(test.BaseTestCase):
 | 
				
			|||||||
        self.mox.StubOutWithMock(
 | 
					        self.mox.StubOutWithMock(
 | 
				
			||||||
                service.task, 'LoopingCall', use_mock_anything=True)
 | 
					                service.task, 'LoopingCall', use_mock_anything=True)
 | 
				
			||||||
        rpc.AdapterConsumer(connection=mox.IgnoreArg(),
 | 
					        rpc.AdapterConsumer(connection=mox.IgnoreArg(),
 | 
				
			||||||
                            topic='run_tests.py',
 | 
					                            topic='fake',
 | 
				
			||||||
                            proxy=mox.IsA(service.Service)
 | 
					                            proxy=mox.IsA(service.Service)
 | 
				
			||||||
                            ).AndReturn(rpc.AdapterConsumer)
 | 
					                            ).AndReturn(rpc.AdapterConsumer)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        rpc.AdapterConsumer(connection=mox.IgnoreArg(),
 | 
					        rpc.AdapterConsumer(connection=mox.IgnoreArg(),
 | 
				
			||||||
                            topic='run_tests.py.%s' % FLAGS.node_name,
 | 
					                            topic='fake.%s' % FLAGS.node_name,
 | 
				
			||||||
                            proxy=mox.IsA(service.Service)
 | 
					                            proxy=mox.IsA(service.Service)
 | 
				
			||||||
                            ).AndReturn(rpc.AdapterConsumer)
 | 
					                            ).AndReturn(rpc.AdapterConsumer)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -67,7 +73,7 @@ class ServiceTestCase(test.BaseTestCase):
 | 
				
			|||||||
        rpc.AdapterConsumer.attach_to_twisted()
 | 
					        rpc.AdapterConsumer.attach_to_twisted()
 | 
				
			||||||
        self.mox.ReplayAll()
 | 
					        self.mox.ReplayAll()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        app = service.Service.create()
 | 
					        app = service.Service.create(bin_name='nova-fake')
 | 
				
			||||||
        self.assert_(app)
 | 
					        self.assert_(app)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # We're testing sort of weird behavior in how report_state decides
 | 
					    # We're testing sort of weird behavior in how report_state decides
 | 
				
			||||||
@@ -82,7 +88,7 @@ class ServiceTestCase(test.BaseTestCase):
 | 
				
			|||||||
                      'binary': binary,
 | 
					                      'binary': binary,
 | 
				
			||||||
                      'report_count': 0,
 | 
					                      'report_count': 0,
 | 
				
			||||||
                      'id': 1}
 | 
					                      'id': 1}
 | 
				
			||||||
 | 
					        service.db.__getattr__('report_state')
 | 
				
			||||||
        service.db.daemon_get_by_args(None,
 | 
					        service.db.daemon_get_by_args(None,
 | 
				
			||||||
                                      node_name,
 | 
					                                      node_name,
 | 
				
			||||||
                                      binary).AndReturn(daemon_ref)
 | 
					                                      binary).AndReturn(daemon_ref)
 | 
				
			||||||
@@ -105,6 +111,7 @@ class ServiceTestCase(test.BaseTestCase):
 | 
				
			|||||||
                      'report_count': 0,
 | 
					                      'report_count': 0,
 | 
				
			||||||
                      'id': 1}
 | 
					                      'id': 1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        service.db.__getattr__('report_state')
 | 
				
			||||||
        service.db.daemon_get_by_args(None,
 | 
					        service.db.daemon_get_by_args(None,
 | 
				
			||||||
                                      node_name,
 | 
					                                      node_name,
 | 
				
			||||||
                                      binary).AndRaise(exception.NotFound())
 | 
					                                      binary).AndRaise(exception.NotFound())
 | 
				
			||||||
@@ -126,6 +133,7 @@ class ServiceTestCase(test.BaseTestCase):
 | 
				
			|||||||
                      'report_count': 0,
 | 
					                      'report_count': 0,
 | 
				
			||||||
                      'id': 1}
 | 
					                      'id': 1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        service.db.__getattr__('report_state')
 | 
				
			||||||
        service.db.daemon_get_by_args(None,
 | 
					        service.db.daemon_get_by_args(None,
 | 
				
			||||||
                                      node_name,
 | 
					                                      node_name,
 | 
				
			||||||
                                      binary).AndRaise(Exception())
 | 
					                                      binary).AndRaise(Exception())
 | 
				
			||||||
@@ -145,6 +153,7 @@ class ServiceTestCase(test.BaseTestCase):
 | 
				
			|||||||
                      'report_count': 0,
 | 
					                      'report_count': 0,
 | 
				
			||||||
                      'id': 1}
 | 
					                      'id': 1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        service.db.__getattr__('report_state')
 | 
				
			||||||
        service.db.daemon_get_by_args(None,
 | 
					        service.db.daemon_get_by_args(None,
 | 
				
			||||||
                                      node_name,
 | 
					                                      node_name,
 | 
				
			||||||
                                      binary).AndReturn(daemon_ref)
 | 
					                                      binary).AndReturn(daemon_ref)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,8 +24,7 @@ from nova import exception
 | 
				
			|||||||
from nova import db
 | 
					from nova import db
 | 
				
			||||||
from nova import flags
 | 
					from nova import flags
 | 
				
			||||||
from nova import test
 | 
					from nova import test
 | 
				
			||||||
from nova.compute import service as compute_service
 | 
					from nova import utils
 | 
				
			||||||
from nova.volume import service as volume_service
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FLAGS = flags.FLAGS
 | 
					FLAGS = flags.FLAGS
 | 
				
			||||||
@@ -35,10 +34,11 @@ class VolumeTestCase(test.TrialTestCase):
 | 
				
			|||||||
    def setUp(self):
 | 
					    def setUp(self):
 | 
				
			||||||
        logging.getLogger().setLevel(logging.DEBUG)
 | 
					        logging.getLogger().setLevel(logging.DEBUG)
 | 
				
			||||||
        super(VolumeTestCase, self).setUp()
 | 
					        super(VolumeTestCase, self).setUp()
 | 
				
			||||||
        self.compute = compute_service.ComputeService()
 | 
					        self.compute = utils.import_object(FLAGS.compute_manager)
 | 
				
			||||||
        self.flags(connection_type='fake',
 | 
					        self.flags(connection_type='fake',
 | 
				
			||||||
                   fake_storage=True)
 | 
					                   fake_storage=True)
 | 
				
			||||||
        self.volume = volume_service.VolumeService()
 | 
					        self.volume = utils.import_object(FLAGS.volume_manager)
 | 
				
			||||||
 | 
					        self.context = None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def _create_volume(self, size='0'):
 | 
					    def _create_volume(self, size='0'):
 | 
				
			||||||
@@ -49,15 +49,15 @@ class VolumeTestCase(test.TrialTestCase):
 | 
				
			|||||||
        vol['availability_zone'] = FLAGS.storage_availability_zone
 | 
					        vol['availability_zone'] = FLAGS.storage_availability_zone
 | 
				
			||||||
        vol['status'] = "creating"
 | 
					        vol['status'] = "creating"
 | 
				
			||||||
        vol['attach_status'] = "detached"
 | 
					        vol['attach_status'] = "detached"
 | 
				
			||||||
        return db.volume_create(None, vol)
 | 
					        return db.volume_create(None, vol)['id']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @defer.inlineCallbacks
 | 
					    @defer.inlineCallbacks
 | 
				
			||||||
    def test_run_create_volume(self):
 | 
					    def test_run_create_volume(self):
 | 
				
			||||||
        volume_id = self._create_volume()
 | 
					        volume_id = self._create_volume()
 | 
				
			||||||
        yield self.volume.create_volume(volume_id)
 | 
					        yield self.volume.create_volume(self.context, volume_id)
 | 
				
			||||||
        self.assertEqual(volume_id, db.volume_get(None, volume_id).id)
 | 
					        self.assertEqual(volume_id, db.volume_get(None, volume_id).id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        yield self.volume.delete_volume(volume_id)
 | 
					        yield self.volume.delete_volume(self.context, volume_id)
 | 
				
			||||||
        self.assertRaises(exception.NotFound,
 | 
					        self.assertRaises(exception.NotFound,
 | 
				
			||||||
                          db.volume_get,
 | 
					                          db.volume_get,
 | 
				
			||||||
                          None,
 | 
					                          None,
 | 
				
			||||||
@@ -70,7 +70,7 @@ class VolumeTestCase(test.TrialTestCase):
 | 
				
			|||||||
        defer.returnValue(True)
 | 
					        defer.returnValue(True)
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            volume_id = self._create_volume('1001')
 | 
					            volume_id = self._create_volume('1001')
 | 
				
			||||||
            yield self.volume.create_volume(volume_id)
 | 
					            yield self.volume.create_volume(self.context, volume_id)
 | 
				
			||||||
            self.fail("Should have thrown TypeError")
 | 
					            self.fail("Should have thrown TypeError")
 | 
				
			||||||
        except TypeError:
 | 
					        except TypeError:
 | 
				
			||||||
            pass
 | 
					            pass
 | 
				
			||||||
@@ -81,14 +81,15 @@ class VolumeTestCase(test.TrialTestCase):
 | 
				
			|||||||
        total_slots = FLAGS.num_shelves * FLAGS.blades_per_shelf
 | 
					        total_slots = FLAGS.num_shelves * FLAGS.blades_per_shelf
 | 
				
			||||||
        for i in xrange(total_slots):
 | 
					        for i in xrange(total_slots):
 | 
				
			||||||
            volume_id = self._create_volume()
 | 
					            volume_id = self._create_volume()
 | 
				
			||||||
            yield self.volume.create_volume(volume_id)
 | 
					            yield self.volume.create_volume(self.context, volume_id)
 | 
				
			||||||
            vols.append(volume_id)
 | 
					            vols.append(volume_id)
 | 
				
			||||||
        volume_id = self._create_volume()
 | 
					        volume_id = self._create_volume()
 | 
				
			||||||
        self.assertFailure(self.volume.create_volume(volume_id),
 | 
					        self.assertFailure(self.volume.create_volume(self.context,
 | 
				
			||||||
 | 
					                                                     volume_id),
 | 
				
			||||||
                           db.NoMoreBlades)
 | 
					                           db.NoMoreBlades)
 | 
				
			||||||
        db.volume_destroy(None, volume_id)
 | 
					        db.volume_destroy(None, volume_id)
 | 
				
			||||||
        for id in vols:
 | 
					        for volume_id in vols:
 | 
				
			||||||
            yield self.volume.delete_volume(id)
 | 
					            yield self.volume.delete_volume(self.context, volume_id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @defer.inlineCallbacks
 | 
					    @defer.inlineCallbacks
 | 
				
			||||||
    def test_run_attach_detach_volume(self):
 | 
					    def test_run_attach_detach_volume(self):
 | 
				
			||||||
@@ -96,7 +97,7 @@ class VolumeTestCase(test.TrialTestCase):
 | 
				
			|||||||
        instance_id = "storage-test"
 | 
					        instance_id = "storage-test"
 | 
				
			||||||
        mountpoint = "/dev/sdf"
 | 
					        mountpoint = "/dev/sdf"
 | 
				
			||||||
        volume_id = self._create_volume()
 | 
					        volume_id = self._create_volume()
 | 
				
			||||||
        yield self.volume.create_volume(volume_id)
 | 
					        yield self.volume.create_volume(self.context, volume_id)
 | 
				
			||||||
        if FLAGS.fake_tests:
 | 
					        if FLAGS.fake_tests:
 | 
				
			||||||
            db.volume_attached(None, volume_id, instance_id, mountpoint)
 | 
					            db.volume_attached(None, volume_id, instance_id, mountpoint)
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
@@ -109,15 +110,16 @@ class VolumeTestCase(test.TrialTestCase):
 | 
				
			|||||||
        self.assertEqual(vol['instance_id'], instance_id)
 | 
					        self.assertEqual(vol['instance_id'], instance_id)
 | 
				
			||||||
        self.assertEqual(vol['mountpoint'], mountpoint)
 | 
					        self.assertEqual(vol['mountpoint'], mountpoint)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.assertFailure(self.volume.delete_volume(volume_id), exception.Error)
 | 
					        self.assertFailure(self.volume.delete_volume(self.context, volume_id),
 | 
				
			||||||
 | 
					                           exception.Error)
 | 
				
			||||||
        if FLAGS.fake_tests:
 | 
					        if FLAGS.fake_tests:
 | 
				
			||||||
            db.volume_detached(None, volume_id)
 | 
					            db.volume_detached(None, volume_id)
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            rv = yield self.volume.detach_volume(instance_id,
 | 
					            rv = yield self.compute.detach_volume(instance_id,
 | 
				
			||||||
                                                 volume_id)
 | 
					                                                 volume_id)
 | 
				
			||||||
        self.assertEqual(vol['status'], "available")
 | 
					        self.assertEqual(vol['status'], "available")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        rv = self.volume.delete_volume(volume_id)
 | 
					        rv = self.volume.delete_volume(self.context, volume_id)
 | 
				
			||||||
        self.assertRaises(exception.Error,
 | 
					        self.assertRaises(exception.Error,
 | 
				
			||||||
                          db.volume_get,
 | 
					                          db.volume_get,
 | 
				
			||||||
                          None,
 | 
					                          None,
 | 
				
			||||||
@@ -142,14 +144,13 @@ class VolumeTestCase(test.TrialTestCase):
 | 
				
			|||||||
        total_slots = FLAGS.num_shelves * FLAGS.blades_per_shelf
 | 
					        total_slots = FLAGS.num_shelves * FLAGS.blades_per_shelf
 | 
				
			||||||
        for i in range(total_slots):
 | 
					        for i in range(total_slots):
 | 
				
			||||||
            volume_id = self._create_volume()
 | 
					            volume_id = self._create_volume()
 | 
				
			||||||
            d = self.volume.create_volume(volume_id)
 | 
					            d = self.volume.create_volume(self.context, volume_id)
 | 
				
			||||||
            d.addCallback(_check)
 | 
					            d.addCallback(_check)
 | 
				
			||||||
            d.addErrback(self.fail)
 | 
					            d.addErrback(self.fail)
 | 
				
			||||||
            deferreds.append(d)
 | 
					            deferreds.append(d)
 | 
				
			||||||
        yield defer.DeferredList(deferreds)
 | 
					        yield defer.DeferredList(deferreds)
 | 
				
			||||||
        for volume_id in volume_ids:
 | 
					        for volume_id in volume_ids:
 | 
				
			||||||
            vol = db.volume_get(None, volume_id)
 | 
					            self.volume.delete_volume(self.context, volume_id)
 | 
				
			||||||
            vol.delete()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_multi_node(self):
 | 
					    def test_multi_node(self):
 | 
				
			||||||
        # TODO(termie): Figure out how to test with two nodes,
 | 
					        # TODO(termie): Figure out how to test with two nodes,
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user