Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
    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')
Ejemplo n.º 8
0
    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)
Ejemplo n.º 9
0
    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)
Ejemplo n.º 10
0
    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])
Ejemplo n.º 11
0
    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)
Ejemplo n.º 12
0
    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']))