def test_setup_network_for_instance1(self): fake_service_net = fake_network.FakeNetwork(subnets=[]) fake_service_subnet = fake_network. \ FakeSubnet(name=self.share['share_network_id']) fake_router = fake_network.FakeRouter() fake_ports = [ fake_network.FakePort(fixed_ips=[{ 'ip_address': '1.2.3.4' }]), fake_network.FakePort(fixed_ips=[{ 'ip_address': '5.6.7.8' }]), ] self.stubs.Set(self._manager, 'connect_share_server_to_tenant_network', True) self.stubs.Set(self._manager.neutron_api, 'get_network', mock.Mock(return_value=fake_service_net)) self.stubs.Set(self._manager.neutron_api, 'subnet_create', mock.Mock(return_value=fake_service_subnet)) self.stubs.Set(self._manager, '_get_private_router', mock.Mock(return_value=fake_router)) self.stubs.Set(self._manager.neutron_api, 'router_add_interface', mock.Mock()) self.stubs.Set(self._manager.neutron_api, 'create_port', mock.Mock(side_effect=fake_ports)) self.stubs.Set(self._manager, '_get_cidr_for_subnet', mock.Mock(return_value='fake_cidr')) network_data = self._manager._setup_network_for_instance( 'fake-net', 'fake-subnet') self._manager.neutron_api.get_network. \ assert_called_once_with(self._manager.service_network_id) self._manager._get_private_router. \ assert_called_once_with('fake-net', 'fake-subnet') self._manager.neutron_api.router_add_interface. \ assert_called_once_with('fake_router_id', 'fake_subnet_id') self._manager.neutron_api.subnet_create.assert_called_once_with( self._manager.service_tenant_id, self._manager.service_network_id, 'routed_to_fake-subnet', 'fake_cidr') self.assertEqual(self._manager.neutron_api.create_port.call_args_list, [((self._manager.service_tenant_id, self._manager.service_network_id), { 'subnet_id': 'fake_subnet_id', 'device_owner': 'manila' }), ((self._manager.service_tenant_id, 'fake-net'), { 'subnet_id': 'fake-subnet', 'device_owner': 'manila' })]) self._manager._get_cidr_for_subnet.assert_called_once_with() self.assertIs(network_data.get('service_subnet'), fake_service_subnet) self.assertIs(network_data.get('router'), fake_router) self.assertIs(network_data.get('service_port'), fake_ports[0]) self.assertIs(network_data.get('public_port'), fake_ports[1]) self.assertEqual(network_data.get('ports'), fake_ports)
def test_get_service_port_exists(self): fake_service_port = fake_network.FakePort(device_id='manila-share') fake_service_net = fake_network.FakeNetwork(subnets=[]) self.stubs.Set(self._manager.neutron_api, 'list_ports', mock.Mock(return_value=[fake_service_port])) self.stubs.Set(self._manager.db, 'service_get_all_by_topic', mock.Mock(return_value=[{ 'host': 'fake_host' }])) self.stubs.Set(self._manager.neutron_api, 'create_port', mock.Mock(return_value=fake_service_port)) self.stubs.Set(self._manager.neutron_api, 'get_network', mock.Mock(return_value=fake_service_net)) self.stubs.Set(self._manager.neutron_api, 'update_port_fixed_ips', mock.Mock(return_value=fake_service_port)) result = self._manager._get_service_port() self._manager.neutron_api.list_ports.assert_called_once_with( device_id='manila-share') self.assertFalse(self._manager.db.service_get_all_by_topic.called) self.assertFalse(self._manager.neutron_api.create_port.called) self._manager.neutron_api.get_network.assert_called_once() self.assertFalse( self._manager.neutron_api.update_port_fixed_ips.called) self.assertEqual(result, fake_service_port)
def test_get_service_port_ambigious_ports(self): fake_service_port = fake_network.FakePort(device_id='manila-share') self.stubs.Set( self._manager.neutron_api, 'list_ports', mock.Mock(return_value=[fake_service_port, fake_service_port])) self.assertRaises(exception.ManilaException, self._manager._get_service_port)
def test_get_service_port(self): fake_service_port = fake_network.FakePort(device_id='manila-share') fake_service_net = fake_network.FakeNetwork(subnets=[]) self.stubs.Set(self._manager.neutron_api, 'list_ports', mock.Mock(return_value=[])) self.stubs.Set(self._manager, '_execute', mock.Mock(return_value=('fake_host', ''))) self.stubs.Set(self._manager.neutron_api, 'create_port', mock.Mock(return_value=fake_service_port)) self.stubs.Set(self._manager.neutron_api, 'get_network', mock.Mock(return_value=fake_service_net)) self.stubs.Set(self._manager.neutron_api, 'update_port_fixed_ips', mock.Mock(return_value=fake_service_port)) result = self._manager._get_service_port() self._manager.neutron_api.list_ports.assert_called_once_with( device_id='manila-share') self._manager.db.service_get_all_by_topic.assert_called_once() self._manager.neutron_api.create_port.assert_called_once_with( self._manager.service_tenant_id, self._manager.service_network_id, device_id='manila-share', device_owner='manila:share', host_id='fake_host') self._manager.neutron_api.get_network.assert_called_once() self.assertFalse( self._manager.neutron_api.update_port_fixed_ips.called) self.assertEqual(result, fake_service_port)
def test_get_private_router(self): fake_net = fake_network.FakeNetwork() fake_subnet = fake_network.FakeSubnet(gateway_ip='fake_ip') fake_share_network = { 'neutron_net_id': fake_net['id'], 'neutron_subnet_id': fake_subnet['id'] } self.stubs.Set(self._manager.db, 'share_network_get', mock.Mock(return_value=fake_share_network)) fake_port = fake_network.FakePort(fixed_ips=[{ 'subnet_id': fake_subnet['id'], 'ip_address': fake_subnet['gateway_ip'] }], device_id='fake_router_id') fake_router = fake_network.FakeRouter(id='fake_router_id') self.stubs.Set(self._manager.neutron_api, 'get_subnet', mock.Mock(return_value=fake_subnet)) self.stubs.Set(self._manager.neutron_api, 'list_ports', mock.Mock(return_value=[fake_port])) self.stubs.Set(self._manager.neutron_api, 'show_router', mock.Mock(return_value=fake_router)) result = self._manager._get_private_router(fake_net['id'], fake_subnet['id']) self._manager.neutron_api.get_subnet.assert_called_once_with( fake_subnet['id']) self._manager.neutron_api.list_ports.assert_called_once_with( network_id=fake_net['id']) self._manager.neutron_api.show_router.assert_called_once_with( fake_router['id']) self.assertEqual(result, fake_router)
def test_create_service_instance_failed_setup_connectivity(self): fake_server = fake_compute.FakeServer(status='ERROR') fake_port = fake_network.FakePort() fake_security_group = fake_compute.FakeSecurityGroup() fake_network_data = {'ports': [fake_port]} self.stubs.Set(self._manager, '_get_service_image', mock.Mock(return_value='fake_image_id')) self.stubs.Set( self._manager, '_get_key', mock.Mock(return_value=('fake_key_name', 'fake_key_path'))) self.stubs.Set(self._manager, '_get_or_create_security_group', mock.Mock(return_value=fake_security_group)) self.stubs.Set(self._manager, '_setup_network_for_instance', mock.Mock(return_value=fake_network_data)) self.stubs.Set(self._manager, '_setup_connectivity_with_service_instances', mock.Mock(side_effect=exception.ManilaException)) self.stubs.Set(self._manager.neutron_api, 'delete_port', mock.Mock()) self.stubs.Set(self._manager.compute_api, 'server_create', mock.Mock(return_value=fake_server)) self.stubs.Set(self._manager.compute_api, 'server_get', mock.Mock(return_value=fake_server)) self.stubs.Set(service_instance.socket, 'socket', mock.Mock()) self.assertRaises(exception.ManilaException, self._manager._create_service_instance, self._context, 'fake-inst-name', 'fake-neutron-net', 'fake-neutron-subnet') self._manager.neutron_api.delete_port.assert_called_once_with( fake_port['id']) self.assertFalse(self._manager.compute_api.server_create.called) self.assertFalse(self._manager.compute_api.server_get.called) self.assertFalse(service_instance.socket.socket.called)
def test_create_service_instance(self): fake_server = fake_compute.FakeServer() fake_port = fake_network.FakePort(fixed_ips=[{ 'ip_address': '127.0.0.1' }]) fake_security_group = fake_compute.FakeSecurityGroup() fake_instance_name = 'fake_instance_name' fake_router = {'id': 'fake-router-id'} fake_service_subnet = {'id': 'fake-service-subnet-id'} fake_network_data = { 'router': fake_router, 'service_subnet': fake_service_subnet, 'service_port': fake_port, 'ports': [fake_port], } self.stubs.Set(self._manager, '_get_service_image', mock.Mock(return_value='fake_image_id')) self.stubs.Set( self._manager, '_get_key', mock.Mock(return_value=('fake_key_name', 'fake_key_path'))) self.stubs.Set(self._manager, '_setup_network_for_instance', mock.Mock(return_value=fake_network_data)) self.stubs.Set(self._manager, '_setup_connectivity_with_service_instances', mock.Mock()) self.stubs.Set(self._manager.compute_api, 'server_create', mock.Mock(return_value=fake_server)) self.stubs.Set(self._manager, '_get_server_ip', mock.Mock(return_value='fake_ip')) self.stubs.Set(self._manager, '_get_or_create_security_group', mock.Mock(return_value=fake_security_group)) self.stubs.Set(service_instance.socket, 'socket', mock.Mock()) self.stubs.Set(self._manager, '_get_service_instance_name', mock.Mock(return_value=fake_instance_name)) result = self._manager._create_service_instance( self._context, fake_instance_name, 'fake-net', 'fake-subnet') self._manager._get_service_image.assert_called_once_with(self._context) self._manager._get_key.assert_called_once_with(self._context) self._manager._setup_network_for_instance.assert_called_once_with( 'fake-net', 'fake-subnet') self._manager._setup_connectivity_with_service_instances.\ assert_called_once_with() self._manager.compute_api.server_create.assert_called_once_with( self._context, name=fake_instance_name, image='fake_image_id', flavor=CONF.service_instance_flavor_id, key_name='fake_key_name', nics=[{ 'port-id': fake_port['id'] }]) service_instance.socket.socket.assert_called_once_with() self.assertIs(result, fake_server) self.assertEqual(result['public_address'], '127.0.0.1')
def test_create_service_instance_error(self): fake_server = fake_compute.FakeServer(status='ERROR') fake_port = fake_network.FakePort() fake_security_group = fake_compute.FakeSecurityGroup() fake_network_data = { 'ports': [fake_port], } self.stubs.Set(self._manager, '_get_service_image', mock.Mock(return_value='fake_image_id')) self.stubs.Set( self._manager, '_get_key', mock.Mock(return_value=('fake_key_name', 'fake_key_path'))) self.stubs.Set(self._manager, '_get_or_create_security_group', mock.Mock(return_value=fake_security_group)) self.stubs.Set(self._manager, '_setup_network_for_instance', mock.Mock(return_value=fake_network_data)) self.stubs.Set(self._manager, '_setup_connectivity_with_service_instances', mock.Mock()) self.stubs.Set(self._manager.compute_api, 'server_create', mock.Mock(return_value=fake_server)) self.stubs.Set(self._manager.compute_api, 'server_get', mock.Mock(return_value=fake_server)) self.stubs.Set(service_instance.socket, 'socket', mock.Mock()) self.assertRaises(exception.ManilaException, self._manager._create_service_instance, self._context, 'fake-inst-name', 'fake-neutron-net', 'fake-neutron-subnet') self._manager._get_service_image.assert_called_once_with(self._context) self._manager._get_key.assert_called_once_with(self._context) self._manager._get_or_create_security_group.assert_called_once_with( self._context) self._manager._setup_network_for_instance.assert_called_once_with( 'fake-neutron-net', 'fake-neutron-subnet') self._manager._setup_connectivity_with_service_instances.\ assert_called_once_with() self._manager.compute_api.server_create.assert_called_once_with( self._context, name='fake-inst-name', image='fake_image_id', flavor=100, key_name='fake_key_name', nics=[{ 'port-id': fake_port['id'] }]) self.assertFalse(self._manager.compute_api.server_get.called) self.assertFalse(service_instance.socket.socket.called)
def test_create_service_instance(self): fake_server = fake_compute.FakeServer() fake_port = fake_network.FakePort() fake_security_group = fake_compute.FakeSecurityGroup() fake_instance_name = 'fake_instance_name' self.stubs.Set(self._manager, '_get_service_image', mock.Mock(return_value='fake_image_id')) self.stubs.Set( self._manager, '_get_key', mock.Mock(return_value=('fake_key_name', 'fake_key_path'))) self.stubs.Set( self._manager, '_setup_network_for_instance', mock.Mock(return_value=('fake-subnet', 'fake-router', fake_port['id']))) self.stubs.Set(self._manager, '_setup_connectivity_with_service_instances', mock.Mock()) self.stubs.Set(self._manager.compute_api, 'server_create', mock.Mock(return_value=fake_server)) self.stubs.Set(self._manager, '_get_server_ip', mock.Mock(return_value='fake_ip')) self.stubs.Set(self._manager, '_get_or_create_security_group', mock.Mock(return_value=fake_security_group)) self.stubs.Set(service_instance.socket, 'socket', mock.Mock()) self.stubs.Set(self._manager, '_get_service_instance_name', mock.Mock(return_value=fake_instance_name)) result = self._manager._create_service_instance( self._context, fake_instance_name, 'fake-net', 'fake-subnet') self._manager._get_service_image.assert_called_once() self._manager._get_key.assert_called_once() self._manager._setup_network_for_instance.assert_called_once() self._manager._setup_connectivity_with_service_instances.\ assert_called_once() self._manager.compute_api.server_create.assert_called_once_with( self._context, name=fake_instance_name, image='fake_image_id', flavor=CONF.service_instance_flavor_id, key_name='fake_key_name', nics=[{ 'port-id': fake_port['id'] }]) service_instance.socket.socket.assert_called_once() self.assertEqual(result, fake_server)
def test_setup_network_for_instance0(self): fake_service_net = fake_network.FakeNetwork(subnets=[]) fake_service_subnet = fake_network.\ FakeSubnet(name=self.share['share_network_id']) fake_router = fake_network.FakeRouter() fake_port = fake_network.FakePort() self.stubs.Set(self._manager, 'connect_share_server_to_tenant_network', False) self.stubs.Set(self._manager.neutron_api, 'get_network', mock.Mock(return_value=fake_service_net)) self.stubs.Set(self._manager.neutron_api, 'subnet_create', mock.Mock(return_value=fake_service_subnet)) self.stubs.Set(self._manager.db, 'share_network_get', mock.Mock(return_value='fake_share_network')) self.stubs.Set(self._manager, '_get_private_router', mock.Mock(return_value=fake_router)) self.stubs.Set(self._manager.neutron_api, 'router_add_interface', mock.Mock()) self.stubs.Set(self._manager.neutron_api, 'create_port', mock.Mock(return_value=fake_port)) self.stubs.Set(self._manager, '_get_cidr_for_subnet', mock.Mock(return_value='fake_cidr')) network_data = self._manager._setup_network_for_instance( 'fake-net', 'fake-subnet') self._manager.neutron_api.get_network.assert_called_once_with( self._manager.service_network_id) self._manager._get_private_router.assert_called_once_with( 'fake-net', 'fake-subnet') self._manager.neutron_api.router_add_interface.assert_called_once_with( 'fake_router_id', 'fake_subnet_id') self._manager.neutron_api.subnet_create.assert_called_once_with( self._manager.service_tenant_id, self._manager.service_network_id, 'routed_to_fake-subnet', 'fake_cidr') self._manager.neutron_api.create_port.assert_called_once_with( self._manager.service_tenant_id, self._manager.service_network_id, subnet_id='fake_subnet_id', device_owner='manila') self._manager._get_cidr_for_subnet.assert_called_once() self.assertIs(network_data.get('service_subnet'), fake_service_subnet) self.assertIs(network_data.get('router'), fake_router) self.assertIs(network_data.get('service_port'), fake_port) self.assertNotIn('public_port', network_data) self.assertEqual(network_data.get('ports'), [fake_port])
def test_setup_connectivity_with_service_instances(self): interface_name = 'fake_interface_name' fake_division_mask = CONF.service_network_division_mask fake_subnet = fake_network.FakeSubnet(cidr='10.254.0.0/%s' % fake_division_mask) fake_port = fake_network.FakePort(fixed_ips=[{ 'subnet_id': fake_subnet['id'], 'ip_address': '10.254.0.2' }], mac_address='fake_mac_address') self.stubs.Set(self._manager, '_get_service_port', mock.Mock(return_value=fake_port)) self.stubs.Set(self._manager.vif_driver, 'get_device_name', mock.Mock(return_value=interface_name)) self.stubs.Set(self._manager.neutron_api, 'get_subnet', mock.Mock(return_value=fake_subnet)) self.stubs.Set(self._manager, '_remove_outdated_interfaces', mock.Mock()) self.stubs.Set(self._manager.vif_driver, 'plug', mock.Mock()) device_mock = mock.Mock() self.stubs.Set(service_instance.ip_lib, 'IPDevice', mock.Mock(return_value=device_mock)) self._manager._setup_connectivity_with_service_instances() self._manager._get_service_port.assert_called_once_with() self._manager.vif_driver.get_device_name.assert_called_once_with( fake_port) self._manager.vif_driver.plug.assert_called_once_with( interface_name, fake_port['id'], fake_port['mac_address']) self._manager.neutron_api.get_subnet.assert_called_once_with( fake_subnet['id']) self._manager.vif_driver.init_l3.assert_called_once_with( interface_name, ['10.254.0.2/%s' % fake_division_mask]) service_instance.ip_lib.IPDevice.assert_called_once_with( interface_name) device_mock.route.pullup_route.assert_called_once_with(interface_name) self._manager._remove_outdated_interfaces.assert_called_once_with( device_mock)
def test_setup_network_for_instance(self): fake_service_net = fake_network.FakeNetwork(subnets=[]) fake_service_subnet = fake_network.\ FakeSubnet(name=self.share['share_network_id']) fake_router = fake_network.FakeRouter() fake_port = fake_network.FakePort() self.stubs.Set(self._manager.neutron_api, 'get_network', mock.Mock(return_value=fake_service_net)) self.stubs.Set(self._manager.neutron_api, 'subnet_create', mock.Mock(return_value=fake_service_subnet)) self.stubs.Set(self._manager.db, 'share_network_get', mock.Mock(return_value='fake_share_network')) self.stubs.Set(self._manager, '_get_private_router', mock.Mock(return_value=fake_router)) self.stubs.Set(self._manager.neutron_api, 'router_add_interface', mock.Mock()) self.stubs.Set(self._manager.neutron_api, 'create_port', mock.Mock(return_value=fake_port)) self.stubs.Set(self._manager, '_get_cidr_for_subnet', mock.Mock(return_value='fake_cidr')) result = self._manager._setup_network_for_instance( 'fake-net', 'fake-subnet') self._manager.neutron_api.get_network.\ assert_called_once_with(self._manager.service_network_id) self._manager._get_private_router.\ assert_called_once_with('fake-net', 'fake-subnet') self._manager.neutron_api.router_add_interface.\ assert_called_once_with('fake_router_id', 'fake_subnet_id') self._manager.neutron_api.subnet_create.assert_called_once_with( self._manager.service_tenant_id, self._manager.service_network_id, 'routed_to_fake-subnet', 'fake_cidr') self._manager.neutron_api.create_port.assert_called_once_with( self._manager.service_tenant_id, self._manager.service_network_id, subnet_id='fake_subnet_id', device_owner='manila') self._manager._get_cidr_for_subnet.assert_called_once() self.assertEqual(result, ('fake_subnet_id', 'fake_router_id', fake_port['id']))