Ejemplo n.º 1
0
def test_redisCommand_b_args(context):
    """Tests that using varargs is properly unsupported.

    The alternative is a seg fault.
    """
    key = 'testkey'
    value = 'testvalue'
    with pytest.raises(TypeError):
        hiredisb.redisCommand_b(context, 'SET %s %s'.encode(), key, value)
Ejemplo n.º 2
0
def test_redisCommand_b_reply_nil(context):
    key = 'testkey'
    r = hiredisb.redisCommand_b(context, f'DEL {key}'.encode())
    assert r is not None
    assert r.type == hiredis.REDIS_REPLY_INTEGER
    assert r.integer in (0, 1)
    hiredisb.freeReplyObject_b(r)
    r = hiredisb.redisCommand_b(context, f'GET {key}'.encode())
    assert r is not None
    assert r.type == hiredis.REDIS_REPLY_NIL
    hiredisb.freeReplyObject_b(r)
    cleanup_keys(context, (key,))
Ejemplo n.º 3
0
def test_redisCommand_b_noargs(context):
    key = 'testkey'
    value = 'testvalue'
    r = hiredisb.redisCommand_b(context, f'SET {key} {value}'.encode())
    assert r is not None
    assert r.type == hiredis.REDIS_REPLY_STATUS
    assert r.str == b'OK'
    hiredisb.freeReplyObject_b(r)
    r = hiredisb.redisCommand_b(context, f'GET {key}'.encode())
    assert r is not None
    assert r.type == hiredis.REDIS_REPLY_STRING
    assert r.str == value.encode()
    hiredisb.freeReplyObject_b(r)
    cleanup_keys(context, (key,))
Ejemplo n.º 4
0
def test_redisCommand_b_reply_integer(context):
    key = 'testkey'
    value = 'foobar'
    value_bits = 26
    r = hiredisb.redisCommand_b(context, f'SET {key} {value}'.encode())
    assert r is not None
    assert r.type == hiredis.REDIS_REPLY_STATUS
    assert r.str == b'OK'
    hiredisb.freeReplyObject_b(r)
    r = hiredisb.redisCommand_b(context, f'BITCOUNT {key}'.encode())
    assert r is not None
    assert r.type == hiredis.REDIS_REPLY_INTEGER
    assert r.integer == value_bits
    hiredisb.freeReplyObject_b(r)
    cleanup_keys(context, (key,))
Ejemplo n.º 5
0
def cleanup_keys(context, keys):
    """Test helper to cleanup keys from redis."""

    for key in keys:
        r = hiredisb.redisCommand_b(context, f'DEL {key}'.encode())
        if r is not None:
            hiredisb.freeReplyObject_b(r)
Ejemplo n.º 6
0
def test_redisCommand_b_reply_array(context):
    keys = [f'testkey{i}' for i in range(5)]
    for key in keys:
        r = hiredisb.redisCommand_b(context, f'SET {key} {key}'.encode())
        assert r is not None
        assert r.type == hiredis.REDIS_REPLY_STATUS
        assert r.str == b'OK'
    r = hiredisb.redisCommand_b(context, f'KEYS testkey*'.encode())
    assert r is not None
    assert r.type == hiredis.REDIS_REPLY_ARRAY
    assert r.elements >= len(keys)
    returned_keys = set()
    rep = reduce_reply_b(r)
    assert isinstance(rep, tuple)
    assert len(rep) >= len(keys)
    for key in rep:
        assert isinstance(key, bytes)
        returned_keys.add(key)
    assert set(key.encode() for key in keys) <= returned_keys
    cleanup_keys(context, keys)
Ejemplo n.º 7
0
def redis_command(context: hiredisb.redisContext_b,
                  command: bytes) -> ReplyValue:
    """Bytes version of redis_command().

    Wrapper around hiredisb.redisCommand_b().
    """

    rep = hiredisb.redisCommand_b(context, command)
    raise_empty_reply_error(context, rep)
    ret = reduce_reply_b(rep)
    hiredisb.freeReplyObject_b(rep)
    return ret