예제 #1
0
 def setUp(self):
     super(NFSHelperTestCase, self).setUp()
     fake_utils.stub_out_utils_execute(self.stubs)
     self.fake_conf = manila.share.configuration.Configuration(None)
     self._ssh_exec = mock.Mock(return_value=('', ''))
     self._execute = mock.Mock(return_value=('', ''))
     self._helper = generic.NFSHelper(self._execute, self._ssh_exec,
                                      self.fake_conf)
     ip = '10.254.0.3'
     self.server = fake_compute.FakeServer(
         ip=ip, public_address=ip, instance_id='fake_instance_id')
예제 #2
0
 def test_attach_volume_error(self):
     fake_server = fake_compute.FakeServer()
     availiable_volume = fake_volume.FakeVolume()
     error_volume = fake_volume.FakeVolume(status='error')
     self.stubs.Set(self._driver.compute_api, 'instance_volume_attach',
                    mock.Mock())
     self.stubs.Set(self._driver.volume_api, 'get',
                    mock.Mock(return_value=error_volume))
     self.assertRaises(exception.ManilaException,
                       self._driver._attach_volume, self._context,
                       self.share, fake_server, availiable_volume)
예제 #3
0
 def test_ensure_server_non_active(self):
     server_details = {'instance_id': 'fake_inst_id', 'ip': '1.2.3.4'}
     fake_server = fake_compute.FakeServer(status='ERROR')
     self.stubs.Set(self._manager.compute_api, 'server_get',
                    mock.Mock(return_value=fake_server))
     self.stubs.Set(self._manager, '_check_server_availability',
                    mock.Mock(return_value=True))
     result = self._manager.ensure_service_instance(self._context,
                                                    server_details)
     self.assertFalse(self._manager._check_server_availability.called)
     self.assertFalse(result)
예제 #4
0
 def test_allow_access(self):
     fake_server = fake_compute.FakeServer(ip='10.254.0.3')
     self._helper.allow_access(fake_server, 'volume-00001', 'ip',
                               '10.0.0.2')
     local_path = os.path.join(CONF.share_mount_path, 'volume-00001')
     self._ssh_exec.assert_has_calls([
         mock.call(fake_server, ['sudo', 'exportfs']),
         mock.call(fake_server, [
             'sudo', 'exportfs', '-o', 'rw,no_subtree_check', ':'.join(
                 ['10.0.0.2', local_path])
         ])
     ])
예제 #5
0
 def test_ensure_server(self):
     server_details = {'instance_id': 'fake_inst_id', 'ip': '1.2.3.4'}
     fake_server = fake_compute.FakeServer()
     self.stubs.Set(self._manager, '_check_server_availability',
                    mock.Mock(return_value=True))
     self.stubs.Set(self._manager.compute_api, 'server_get',
                    mock.Mock(return_value=fake_server))
     result = self._manager.ensure_service_instance(self._context,
                                                    server_details)
     self._manager.compute_api.server_get.assert_called_once_with(
         self._context, server_details['instance_id'])
     self._manager._check_server_availability.assert_called_once_with(
         server_details)
     self.assertTrue(result)
예제 #6
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)
예제 #7
0
 def test_allow_access(self):
     fake_server = fake_compute.FakeServer()
     access = {'access_type': 'ip', 'access_to': 'fake_dest'}
     self.stubs.Set(self._driver, 'get_service_instance',
                    mock.Mock(return_value=fake_server))
     self._driver.allow_access(self._context, self.share, access,
                               share_server=self.server)
     self._driver.get_service_instance.assert_called_once()
     self._driver._helpers[self.share['share_proto']].\
         allow_access.assert_called_once_with(
             self.server['backend_details'],
             self.share['name'],
             access['access_type'],
             access['access_to'])
예제 #8
0
    def test_delete_share(self):
        fake_server = fake_compute.FakeServer()
        self.stubs.Set(self._driver, 'get_service_instance',
                       mock.Mock(return_value=fake_server))
        self.stubs.Set(self._driver, '_unmount_device', mock.Mock())
        self.stubs.Set(self._driver, '_detach_volume', mock.Mock())
        self.stubs.Set(self._driver, '_deallocate_container', mock.Mock())

        self._driver.delete_share(self._context, self.share,
                                  share_server=self.server)

        self._driver.get_service_instance.assert_called_once()
        self._driver._unmount_device.assert_called_once()
        self._driver._detach_volume.assert_called_once()
        self._driver._deallocate_container.assert_called_once()
예제 #9
0
 def test_ensure_server_not_exists(self):
     server_details = {'instance_id': 'fake_inst_id', 'ip': '1.2.3.4'}
     fake_server = fake_compute.FakeServer()
     self.stubs.Set(self._manager, '_check_server_availability',
                    mock.Mock(return_value=True))
     self.stubs.Set(
         self._manager.compute_api, 'server_get',
         mock.Mock(side_effect=exception.InstanceNotFound(
             instance_id=server_details['instance_id'])))
     result = self._manager.ensure_service_instance(self._context,
                                                    server_details)
     self._manager.compute_api.server_get.\
                 assert_called_once_with(self._context,
                                         server_details['instance_id'])
     self.assertFalse(self._manager._check_server_availability.called)
     self.assertFalse(result)
예제 #10
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)
예제 #11
0
    def test_attach_volume_not_attached(self):
        fake_server = fake_compute.FakeServer()
        availiable_volume = fake_volume.FakeVolume()
        attached_volume = fake_volume.FakeVolume(status='in-use')
        self.stubs.Set(self._driver.compute_api, 'instance_volume_attach',
                       mock.Mock())
        self.stubs.Set(self._driver.volume_api, 'get',
                       mock.Mock(return_value=attached_volume))

        result = self._driver._attach_volume(self._context, self.share,
                                             'fake_inst_id', availiable_volume)

        self._driver.compute_api.instance_volume_attach.\
                assert_called_once_with(self._context, 'fake_inst_id',
                        availiable_volume['id'])
        self._driver.volume_api.get.\
                assert_called_once_with(self._context, attached_volume['id'])
        self.assertEqual(result, attached_volume)
예제 #12
0
    def test_detach_volume_detached(self):
        fake_server = fake_compute.FakeServer()
        availiable_volume = fake_volume.FakeVolume()
        attached_volume = fake_volume.FakeVolume(status='in-use')
        self.stubs.Set(self._driver, '_get_volume',
                       mock.Mock(return_value=attached_volume))
        self.stubs.Set(self._driver.compute_api, 'instance_volumes_list',
                       mock.Mock(return_value=[]))
        self.stubs.Set(self._driver.volume_api, 'get',
                       mock.Mock(return_value=availiable_volume))
        self.stubs.Set(self._driver.compute_api, 'instance_volume_detach',
                       mock.Mock())

        self._driver._detach_volume(self._context, self.share,
                                    self.server['backend_details'])

        self.assertFalse(self._driver.volume_api.get.called)
        self.assertFalse(
            self._driver.compute_api.instance_volume_detach.called)