def test_retrieve_data_from_cache(self):
        test_redis = get_auth_redis_client()
        self.assertIsNone(_retrieve_data_from_cache(test_redis,
            url='http://mockurl', tenant='tenant-id', cache_key=None))
        retval = _retrieve_data_from_cache(test_redis, url='http://mockurl',
            tenant='tenant-id', cache_key='cache-key')
        self.assertIsNone(retval)

        with mock.patch.object(test_redis, 'get',
                side_effect=side_effect_exception):
            self.assertIsNone(_retrieve_data_from_cache(test_redis,
                url='http://mockurl', tenant='tenant-id',
                cache_key='cache-key'))
        with mock.patch.object(test_redis, 'get',
                side_effect=side_effect_redis_getdata):
            retval = _retrieve_data_from_cache(test_redis,
                url='http://mockurl',
                tenant='tenant-id', cache_key='cache-key')
            self.assertIsNotNone(retval)
            self.assertEqual(retval['tenant'], 'tenant-id')
            self.assertEqual(retval['token'], 'the-token')
            self.assertEqual(retval['expires'], '2125-09-04T14:09:20.236Z')
        with mock.patch.object(test_redis, 'get',
                side_effect=side_effect_redis_getdata_wrong):
            self.assertIsNone(_retrieve_data_from_cache(test_redis,
                url='http://mockurl', tenant='tenant-id',
                cache_key='cache-key'))
示例#2
0
def validate_client_token(redis_client, url, tenant, cache_key):
    """Validate Input Client Token

    :param redis_client: redis.Redis object connected to the redis cache
    :param url: Keystone Identity URL to authenticate against
    :param tenant: tenant id of user data to retrieve
    :param cache_key: client side auth_token for the tenant_id

    :returns: True and token-data on success, False and None otherwise
    """

    try:
        # Try to get the client's access infomration from cache
        token_data = _retrieve_data_from_cache(redis_client,
                url, tenant, cache_key)
        if token_data is not None:
            norm = TokenBase.normal_time(token_data['expires'])
            if TokenBase.will_expire_soon(TokenBase.
                    normal_time(token_data['expires'])):
                LOG.info('Token has expired')
            else:
                return True, token_data['token']

        LOG.debug(('Unable to get Access information for '
            '%(s_tenant)s') % {
            's_tenant': tenant
        })
        return False, None

    except Exception as ex:
        msg = ('Endpoint: Error while trying to authenticate against'
            ' %(s_url)s - %(s_except)s') % {
            's_url': url,
            's_except': str(ex)
        }
        LOG.debug(msg)
        return False, None