예제 #1
0
파일: __init__.py 프로젝트: ereOn/redis-lua
def test_parse_script_cyclic_dependency(parse_mock):
    name = 'foo'
    content = ""
    ancestors = ['bar', 'foo', 'joo']

    with assert_raises(CyclicDependencyError) as error:
        parse_script(
            name=name,
            content=content,
            ancestors=ancestors,
        )

    assert_equal(error.exception.cycle, ['foo', 'joo', 'foo'])
예제 #2
0
def test_parse_script_cyclic_dependency(parse_mock):
    name = 'foo'
    content = ""
    ancestors = ['bar', 'foo', 'joo']

    with assert_raises(CyclicDependencyError) as error:
        parse_script(
            name=name,
            content=content,
            ancestors=ancestors,
        )

    assert_equal(error.exception.cycle, ['foo', 'joo', 'foo'])
예제 #3
0
파일: __init__.py 프로젝트: ereOn/redis-lua
def test_multiple_inclusion(redis):
    cache = {}
    parse_script(
        name='a',
        content="""
redis.call('INCR', key_a)
""".strip(),
        cache=cache,
    )
    parse_script(
        name='b',
        content="""
%pragma once
redis.call('INCR', key_b)
""".strip(),
        cache=cache,
    )
    result = run_code(
        client=redis,
        content="""
%key key_a
%key key_b
%include "a"
%include "b"
%include "a"
%include "b"
%return dict

local a = tonumber(redis.call('GET', key_a))
local b = tonumber(redis.call('GET', key_b))

return cjson.encode({
    a=a,
    b=b,
})
""".strip(),
        kwargs={
            'key_a': 'key_a',
            'key_b': 'key_b',
        },
        cache=cache,
    )

    assert_equal(
        {
            'a': 2,
            'b': 1,
        },
        result,
    )
예제 #4
0
    def test_script_error_as_string(self):
        cache = {}
        parse_script(
            name='foo',
            content='local a = b;',
            cache=cache,
        )
        script = parse_script(
            name='bar',
            content='%include "foo"',
            cache=cache,
        )
        line = 1
        lua_error = "unknown variable b"
        message = (
            "ERR ResponseError (in f_1234): user_script:1: unknown "
            "variable b"
        )
        exception = ScriptError(
            script=script,
            line=line,
            lua_error=lua_error,
            message=message,
        )

        self.assertEqual(
            """
unknown variable b
LUA Traceback (most recent script last):
  Script "bar", line 1
    %include "foo"
  Script "foo", line 1
    local a = b;
            """.strip().format(
                lua_error=lua_error,
            ),
            str(exception),
        )
예제 #5
0
    def test_error_handler_unknown_message(self):
        name = 'foo'
        content = ""

        script = parse_script(
            name=name,
            content=content,
        )
        exception = ResponseError("ERR Unknown error")

        with self.assertRaises(ResponseError) as error:
            with error_handler(script=script):
                raise exception

        self.assertIs(exception, error.exception)
예제 #6
0
def test_parse_script_no_cache(parse_mock):
    name = 'foo'
    content = ""

    script = parse_script(
        name=name,
        content=content,
    )

    assert_is(parse_mock.return_value, script)
    parse_mock.assert_called_once_with(
        name=name,
        content=content,
        script_class=ANY,
        get_script_by_name=ANY,
    )
예제 #7
0
파일: __init__.py 프로젝트: ereOn/redis-lua
def test_parse_script_no_cache(parse_mock):
    name = 'foo'
    content = ""

    script = parse_script(
        name=name,
        content=content,
    )

    assert_is(parse_mock.return_value, script)
    parse_mock.assert_called_once_with(
        name=name,
        content=content,
        script_class=ANY,
        get_script_by_name=ANY,
    )
예제 #8
0
    def test_error_handler(self):
        name = 'foo'
        content = """
local a = 1;
local b = 2;
local c = 3;
local d = 4;
local e = 5;
local f = 6;
local g = 7;
local h = 8;
local i = 9;
local j = 10;
local k = 11;
local l = 12;
"""

        script = parse_script(
            name=name,
            content=content,
        )
        exception = ResponseError(
            "ERR something is wrong: f_1234abc:11: my lua error",
        )

        with self.assertRaises(ScriptError) as error:
            with error_handler(script=script):
                raise exception

        self.assertEqual(
            script,
            error.exception.script,
        )
        self.assertEqual(
            11,
            error.exception.line,
        )
        self.assertEqual(
            'my lua error',
            error.exception.lua_error,
        )
        self.assertEqual(
            'something is wrong',
            error.exception.message,
        )
예제 #9
0
def test_parse_script_with_existing_cache(parse_mock):
    name = 'foo'
    content = ""
    cache = {name: object()}
    script = parse_script(
        name=name,
        content=content,
        cache=cache,
    )

    assert_is(parse_mock.return_value, script)
    parse_mock.assert_called_once_with(
        name=name,
        content=content,
        script_class=ANY,
        get_script_by_name=ANY,
    )
    assert_equal({name: parse_mock.return_value}, cache)
예제 #10
0
파일: __init__.py 프로젝트: ereOn/redis-lua
def test_parse_script_with_existing_cache(parse_mock):
    name = 'foo'
    content = ""
    cache = {name: object()}
    script = parse_script(
        name=name,
        content=content,
        cache=cache,
    )

    assert_is(parse_mock.return_value, script)
    parse_mock.assert_called_once_with(
        name=name,
        content=content,
        script_class=ANY,
        get_script_by_name=ANY,
    )
    assert_equal({name: parse_mock.return_value}, cache)