Ejemplo n.º 1
0
    def test_call(self, post, get, close):
        nef_get = jsonrpc.NexentaJSONProxy(
            'http', '1.1.1.1', '8080', 'user', 'pass', method='get')
        nef_post = jsonrpc.NexentaJSONProxy(
            'http', '1.1.1.1', '8080', 'user', 'pass', method='post')
        data = {'key': 'value'}
        get.return_value = requests.Response()
        post.return_value = requests.Response()

        get.return_value.__setstate__({
            'status_code': 200, '_content': jsonutils.dumps(data)})
        self.assertEqual({'key': 'value'}, nef_get('url'))

        get.return_value.__setstate__({
            'status_code': 201, '_content': ''})
        self.assertEqual('Success', nef_get('url'))

        data2 = {'links': [{'href': 'redirect_url'}]}
        post.return_value.__setstate__({
            'status_code': 202, '_content': jsonutils.dumps(data2)})
        get.return_value.__setstate__({
            'status_code': 200, '_content': jsonutils.dumps(data)})
        self.assertEqual({'key': 'value'}, nef_post('url'))

        get.return_value.__setstate__({
            'status_code': 200, '_content': ''})
        self.assertEqual('Success', nef_post('url', data))

        get.return_value.__setstate__({
            'status_code': 400,
            '_content': jsonutils.dumps({'code': 'ENOENT'})})
        self.assertRaises(exception.NexentaException, lambda: nef_get('url'))
Ejemplo n.º 2
0
 def do_setup(self, context):
     if self.nef_protocol == 'auto':
         protocol, auto = 'http', True
     else:
         protocol, auto = self.nef_protocol, False
     self.nef = jsonrpc.NexentaJSONProxy(protocol,
                                         self.nef_host,
                                         self.nef_port,
                                         self.nef_user,
                                         self.nef_password,
                                         auto=auto)
     url = 'storage/pools/%s/volumeGroups' % self.storage_pool
     data = {
         'name':
         self.volume_group,
         'volumeBlockSize':
         (self.configuration.nexenta_ns5_blocksize * units.Ki)
     }
     try:
         self.nef.post(url, data)
     except exception.NexentaException as e:
         if 'EEXIST' in e.args[0]:
             LOG.debug('volumeGroup already exists, skipping')
         else:
             raise
Ejemplo n.º 3
0
 def do_setup(self, context):
     if self.nef_protocol == 'auto':
         protocol, auto = 'http', True
     else:
         protocol, auto = self.nef_protocol, False
     self.nef = jsonrpc.NexentaJSONProxy(
         protocol, self.nef_host, self.nef_port, self.nef_user,
         self.nef_password, auto=auto)
Ejemplo n.º 4
0
    def test_https_auth(self, post):
        use_https = True
        port = 8443
        auth_uri = 'auth/login'
        rnd_url = 'some/random/url'

        class PostSideEffect(object):
            def __call__(self, *args, **kwargs):
                r = gen_response()
                if args[0] == '{}://{}:{}/{}'.format('https', HOST, port,
                                                     auth_uri):
                    token = uuid.uuid4().hex
                    content = {'token': token}
                    r._content = jsonutils.dumps(content)
                return r

        post_side_effect = PostSideEffect()
        post.side_effect = post_side_effect

        class TestAdapter(adapters.HTTPAdapter):
            def __init__(self):
                super(TestAdapter, self).__init__()
                self.counter = 0

            def send(self, request, *args, **kwargs):
                # an url is being requested for the second time
                if self.counter == 1:
                    # make the fake backend respond 401
                    r = gen_response(401)
                    r._content = ''
                    r.connection = mock.Mock()
                    r_ = gen_response(json={'data': []})
                    r.connection.send = lambda prep, **kwargs_: r_
                else:
                    r = gen_response(json={'data': []})
                r.request = request
                self.counter += 1
                return r

        nef = jsonrpc.NexentaJSONProxy(HOST, port, USERNAME, PASSWORD,
                                       use_https, 'pool', False)
        adapter = TestAdapter()
        nef.session.mount('{}://{}:{}/{}'.format('https', HOST, port, rnd_url),
                          adapter)

        # successful authorization
        self.assertEqual(nef.get(rnd_url), {'data': []})

        # session timeout simulation. Client must authenticate newly
        self.assertEqual(nef.get(rnd_url), {'data': []})
        # auth URL mast be requested two times at this moment
        self.assertEqual(2, post.call_count)

        # continue with the last (second) token
        self.assertEqual(nef.get(rnd_url), {'data': []})
        # auth URL must be requested two times
        self.assertEqual(2, post.call_count)
Ejemplo n.º 5
0
 def do_setup(self, context):
     host = self.nef_host or self.iscsi_host
     self.nef = jsonrpc.NexentaJSONProxy(
         host, self.nef_port, self.nef_user, self.nef_password,
         self.use_https, self.storage_pool, self.verify_ssl)
     url = 'storage/volumeGroups'
     data = {
         'path': '/'.join([self.storage_pool, self.volume_group]),
         'volumeBlockSize': (
             self.configuration.nexenta_ns5_blocksize * units.Ki)
     }
     try:
         self.nef.post(url, data)
     except exception.NexentaException as e:
         if 'EEXIST' in e.args[0]:
             LOG.debug('volumeGroup already exists, skipping')
         else:
             raise
Ejemplo n.º 6
0
 def do_setup(self, context):
     host = self.nef_host or self.iscsi_host
     self.nef = jsonrpc.NexentaJSONProxy(host, self.nef_port, self.nef_user,
                                         self.nef_password, self.use_https,
                                         self.storage_pool, self.verify_ssl)
     url = 'storage/volumeGroups'
     data = {
         'path':
         '/'.join([self.storage_pool, self.volume_group]),
         'volumeBlockSize':
         (self.configuration.nexenta_ns5_blocksize * units.Ki)
     }
     try:
         self.nef.post(url, data)
     except exception.NexentaException as ex:
         err = utils.ex2err(ex)
         if err['code'] == 'EEXIST':
             LOG.debug('Volume group %(group)s already exists',
                       {'group': self.volume_group})
         else:
             raise ex
Ejemplo n.º 7
0
 def setUp(self):
     super(TestNexentaJSONProxy, self).setUp()
     self.nef = jsonrpc.NexentaJSONProxy(HOST, 0, USERNAME, PASSWORD, False)
Ejemplo n.º 8
0
 def do_setup(self, context):
     host = self.nef_host or self.nas_host
     pool_name, fs = self._get_share_datasets(self.share)
     self.nef = jsonrpc.NexentaJSONProxy(
         host, self.nef_port, self.nef_user,
         self.nef_password, self.use_https, pool_name, self.verify_ssl)
Ejemplo n.º 9
0
 def __init__(self):
     super(GC, self).__init__()
     self.nef = jsonrpc.NexentaJSONProxy('1.1.1.1', 0, 'u', 'p', False)
Ejemplo n.º 10
0
 def do_setup(self, context):
     self.nef = jsonrpc.NexentaJSONProxy(self.nef_host, self.nef_port,
                                         self.nef_user, self.nef_password,
                                         self.use_https)