示例#1
0
 def test_create_export(self):
     h = base.Helper(self.conf)
     name = 'volume-%s' % uuid4()
     h.volumes.create(name)
     ip = netaddr.IPAddress('1.2.3.4')
     h.exports.create(name, ip=ip)
     e = h.exports.get(name)
     self.assertEquals(e['volume'], name)
     self.assertEquals(e['state'], '0')
     self.assertEquals(e['iomode'], 'wt')
     self.assertEquals(e['tid'], '1')
     self.assertEquals(e['iotype'], 'fileio')
     self.assertEquals(e['lun'], '0')
     self.assertEquals(e['path'], os.path.join(self.scratch,
                       self.storage.device_prefix, 'lunr-volume', name))
     self.assertEquals(e['sessions'], [{
                          'name': e['name'],
                          'tid': '1',
                          'volume': name,
                          'connected': False}])
     prefix, name = e['name'].split(':')
     # TODO: FIX ME
     # self.assertNotEquals(name, e['volume'])
     self.assertEquals(name, e['volume'])
     self.assertEquals(name.split('.')[0], e['volume'])
示例#2
0
    def test_check_reg_api_server_error_retry_success(self):
        h = base.Helper(self.conf)
        name = 'volume-%s' % uuid4()
        out = h.volumes.create(name)

        def error_validator(req):
            error_validator.called = True
            body = StringIO(dumps({'reason': 'Internal Error'}))
            raise HTTPError(req.get_full_url(), 500, 'Server Error', {}, body)
        error_validator.called = False

        def success_validator(req):
            success_validator.called = True
            return 200, {}
        success_validator.called = False
        validators = [
            # listing
            lambda *args: (200, []),
            error_validator,
            success_validator,
        ]
        self.validator_gen = iter(validators)
        with patch(base, 'sleep', lambda t: None):
            h.check_registration()
            self.assert_(error_validator.called)
            self.assert_(success_validator.called)
示例#3
0
    def test_check_registration(self):
        h = base.Helper(self.conf)
        name = 'volume-%s' % uuid4()
        out = h.volumes.create(name)

        def validate_update(req):
            self.assert_(req.get_full_url().endswith('nodes'))
            self.assertEquals(req.get_method(), 'POST')
            data = dict(urlparse.parse_qsl(req.data, keep_blank_values=True))
            expected = {
                'status': 'PENDING',
                'volume_type_name': 'vtype',
                'name': socket.gethostname(),
                'hostname': '127.0.0.1',
                'storage_hostname': '127.0.0.1',
                'storage_port': '3260',
                'port': '8081',
                'size': '9',
                'cinder_host': '127.0.0.1',
                'affinity_group': '',
            }
            self.assertEquals(data, expected)
            return 200, expected
        validators = [
            # listing
            lambda req: (200, []),
            # post update
            validate_update,
        ]
        self.validator_gen = iter(validators)
        h.check_registration()
示例#4
0
    def test_delete_volume(self):

        def mock_spawn(_lock_junk, method, vol, callback=None, skip_fork=None):

            def run():
                method(vol)
            mock_spawn.run = run

        h = base.Helper(self.conf)
        name = 'volume-%s' % uuid4()
        h.volumes.create(name)

        _orig_spawn = volume.spawn
        try:
            volume.spawn = mock_spawn
            h.volumes.delete(name)
        finally:
            volume.spawn = _orig_spawn

        v = h.volumes.get(name)
        self.assert_(v['zero'])

        mock_spawn.run()

        self.assertRaises(volume.NotFound, h.volumes.get, name)
示例#5
0
    def test_check_reg_update_node(self):
        h = base.Helper(self.conf)
        name = 'volume-%s' % uuid4()
        out = h.volumes.create(name)
        node_info = {
            'id': 'node1',
            'status': 'ACTIVE',
            'volume_type_name': 'vtype',
            'name': socket.gethostname(),
            'hostname': '127.0.0.1',
            'storage_hostname': '127.0.0.1',
            'storage_port': 3260,
            'port': 8081,
            'size': '1',
            'cinder_host': '127.0.0.1',
            'affinity_group': 'ONE',
        }

        def validate_update(req):
            data = dict(urlparse.parse_qsl(req.data))

            expected = {'status': 'PENDING', 'size': '9'}
            self.assertEquals(data, expected)
            return 200, expected

        validators = [
            # listing
            lambda req: (200, [node_info]),
            # get
            lambda req: (200, node_info),
            # post update
            validate_update,
        ]
        self.validator_gen = iter(validators)
        h.check_registration()
示例#6
0
    def test_check_reg_unable_to_contact_api(self):
        h = base.Helper(self.conf)

        def exploding_validator(req):
            raise URLError('connection refused')
        self.validator_gen = itertools.cycle([exploding_validator])
        with patch(base, 'sleep', lambda t: None):
            self.assertRaises(APIError, h.check_registration)
示例#7
0
 def test_list_export(self):
     h = base.Helper(self.conf)
     for i in range(3):
         name = 'volume-%s' % uuid4()
         h.volumes.create(name)
         h.exports.create(name)
     exports = h.exports.list()
     self.assertEquals(len(exports), 3)
示例#8
0
    def test_check_reg_api_server_error(self):
        h = base.Helper(self.conf)

        def error_validator(req):
            body = StringIO(dumps({'reason': 'Internal Error'}))
            raise HTTPError(req.get_full_url(), 500, 'Server Error', {}, body)
        self.validator_gen = itertools.cycle([error_validator])
        with patch(base, 'sleep', lambda t: None):
            self.assertRaises(APIError, h.check_registration)
示例#9
0
 def test_delete_export(self):
     h = base.Helper(self.conf)
     name = 'volume-%s' % uuid4()
     h.volumes.create(name)
     h.exports.create(name)
     e = h.exports.get(name)
     self.assertEquals(e['volume'], name)
     h.exports.delete(name)
     self.assertRaises(utils.NotFound, h.exports.get, name)
示例#10
0
 def setUp(self):
     self.tempdir = mkdtemp()
     conf = self.config(self.tempdir)
     self.volume = 'volume-%s' % uuid4()
     help = base.Helper(conf)
     self.exports = help.exports
     self.volumes = help.volumes
     self.volumes.create(self.volume)
     self.exports.create(self.volume)
     self.host = '127.0.0.1'
示例#11
0
 def test_check_reg_duplicate_entry(self):
     h = base.Helper(self.conf)
     validators = [
         # duplicate listing
         lambda req: (200, [{'id': 'node1'}, {'id': 'node2'}]),
     ]
     self.validator_gen = itertools.cycle(validators)
     self.assertRaises(utils.ServiceUnavailable, h.check_registration)
     try:
         h.check_registration()
     except utils.ServiceUnavailable, e:
         self.assert_('duplicate' in str(e).lower())
示例#12
0
    def test_check_reg_api_client_error(self):
        h = base.Helper(self.conf)

        def error_validator(req):
            body = StringIO(dumps({'reason': 'Bad Request'}))
            raise HTTPError(req.get_full_url(), 400, 'Bad Request', {}, body)
        self.validator_gen = itertools.cycle([error_validator])

        def should_not_be_called(t):
            should_not_be_called.called = True
        should_not_be_called.called = False
        with patch(base, 'sleep', should_not_be_called):
            self.assertRaises(APIError, h.check_registration)
        self.assertFalse(should_not_be_called.called)
示例#13
0
    def test_check_reg_unable_to_register(self):
        h = base.Helper(self.conf)
        name = 'volume-%s' % uuid4()
        out = h.volumes.create(name)

        def error_update(req):
            body = StringIO(dumps({'reason': 'invalid param'}))
            raise HTTPError(req.get_full_url(), 400, 'Bad Request', {}, body)
        validators = [
            # listing
            lambda req: (200, []),
            # post update
            error_update,
        ]
        self.validator_gen = iter(validators)
        self.assertRaises(APIError, h.check_registration)
示例#14
0
 def test_get_export(self):
     h = base.Helper(self.conf)
     first_id = 'volume-%s' % uuid4()
     h.volumes.create(first_id)
     h.exports.create(first_id)
     for i in range(3):
         name = 'volume-%s' % uuid4()
         h.volumes.create(name)
         h.exports.create(name)
     last_id = 'volume-%s' % uuid4()
     h.volumes.create(last_id)
     h.exports.create(last_id)
     first_export = h.exports.get(first_id)
     self.assertEquals(first_export['volume'], first_id)
     last_export = h.exports.get(last_id)
     self.assertEquals(last_export['volume'], last_id)
示例#15
0
 def test_get_volume(self):
     h = base.Helper(self.conf)
     name = 'volume-%s' % uuid4()
     h.volumes.create(name)
     v = h.volumes.get(name)
     expected = {
         'id': name,
         'path': os.path.join(self.storage.device_prefix,
                              h.volumes.volume_group, name),
         'realpath': os.path.join(self.storage.device_prefix,
                                  h.volumes.volume_group, name),
         'size': 12582912,
         'origin': '',
         'volume': True,
         'device_number': '253:1',
     }
     self.assertEquals(v, expected)
示例#16
0
 def test_create_export_for_non_existant_path(self):
     h = base.Helper(self.conf)
     name = 'volume-%s' % uuid4()
     self.assertRaises(utils.NotFound, h.exports.create, name)
示例#17
0
 def test_create_duplicate_id(self):
     h = base.Helper(self.conf)
     name = 'volume-%s' % uuid4()
     h.volumes.create(name)
     h.exports.create(name)
     self.assertRaises(utils.AlreadyExists, h.exports.create, name)
示例#18
0
 def test_create_helper(self):
     h = base.Helper(self.conf)
     self.assert_(hasattr(h, 'volumes'))
     self.assert_(hasattr(h, 'exports'))
     self.assert_(hasattr(h, 'backups'))
示例#19
0
 def test_override_cinder_host(self):
     cinder_host = 'therealcinderhostwewant'
     self.conf.set('storage', 'cinder_host', cinder_host)
     h = base.Helper(self.conf)
     self.assertEquals(cinder_host, h.cinder_host)
示例#20
0
 def test_check_reg_vg_not_configured(self):
     h = base.Helper(self.conf)
     self.assertRaises(utils.ServiceUnavailable, h.check_registration)
示例#21
0
 def test_list_empty_volumes(self):
     h = base.Helper(self.conf)
     volumes = h.volumes.list()
     self.assertEquals(volumes, [])
示例#22
0
 def test_create_volume(self):
     h = base.Helper(self.conf)
     name = 'volume-%s' % uuid4()
     out = h.volumes.create(name)
     v = h.volumes.get(name)
     self.assertTrue(os.path.exists(v['path']))