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'])
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, )
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), )
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)
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, )
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, )
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)