Преглед на файлове

[Test] Added test for Redis API

tags/1.8.0
Mikhail Galanin преди 5 години
родител
ревизия
a77f6d5515

+ 4
- 0
.luacheckrc Целия файл

@@ -52,6 +52,10 @@ files['/**/lualib/lua_util.lua'].globals = {
'unpack',
}

files['/**/lualib/lua_redis.lua'].globals = {
'rspamadm_ev_base',
}

files['/**/src/rspamadm/*'].globals = {
'ansicolors',
'getopt',

+ 12
- 4
test/functional/cases/151_rspamadm_async.robot Целия файл

@@ -1,6 +1,6 @@
*** Settings ***
Test Setup Http Setup
Test Teardown Http Teardown
Test Setup Rspamadm test Setup
Test Teardown Rspamadm test Teardown
Library Process
Library ${TESTDIR}/lib/rspamd.py
Resource ${TESTDIR}/lib/rspamd.robot
@@ -18,15 +18,23 @@ Tcp client
Should Be Equal As Integers ${result.rc} 0
Should Be Equal ${result.stdout} hello post

Redis client
${result} = Run Process ${RSPAMADM} lua -b ${TESTDIR}/lua/rspamadm/test_redis_client.lua
Should Match Regexp ${result.stderr} ^$
Should Be Equal As Integers ${result.rc} 0
Should Be Equal ${result.stdout} true\thello from lua on redis

*** Keywords ***

Http Setup
Rspamadm test Setup
Run Dummy Http
Run Redis

Http Teardown
Rspamadm test Teardown
${http_pid} = Get File /tmp/dummy_http.pid
Shutdown Process With Children ${http_pid}
Remove file /tmp/dummy_http.pid
Shutdown Process With Children ${REDIS_PID}

Run Dummy Http
[Arguments]

+ 40
- 0
test/functional/cases/240_redis.robot Целия файл

@@ -0,0 +1,40 @@
*** Settings ***
Test Setup Redis Setup
Test Teardown Redis Teardown
Library Process
Library ${TESTDIR}/lib/rspamd.py
Resource ${TESTDIR}/lib/rspamd.robot
Variables ${TESTDIR}/lib/vars.py
Suite Teardown Terminate All Processes kill=True


*** Variables ***
${REDIS_SCOPE} Test
${RSPAMD_SCOPE} Test
${CONFIG} ${TESTDIR}/configs/plugins.conf
${URL_TLD} ${TESTDIR}/../lua/unit/test_tld.dat
${MESSAGE} ${TESTDIR}/messages/spam_message.eml


*** Test Cases ***
Redis client
Redis SET test_key test value
${result} = Scan Message With Rspamc ${MESSAGE}
Check Rspamc ${result} REDIS (0.00)[hello from lua on redis]
Check Rspamc ${result} REDIS_ASYNC (0.00)[test value]

*** Keywords ***
Lua Setup
[Arguments] ${LUA_SCRIPT}
Set Global Variable ${LUA_SCRIPT}
${PLUGIN_CONFIG} = Get File ${TESTDIR}/configs/redis.conf
Set Suite Variable ${PLUGIN_CONFIG}
Generic Setup PLUGIN_CONFIG

Redis Setup
Lua Setup ${TESTDIR}/lua/redis.lua
Run Redis

Redis Teardown
Normal Teardown
Shutdown Process With Children ${REDIS_PID}

+ 39
- 0
test/functional/cases/241_redis_is_dead.robot Целия файл

@@ -0,0 +1,39 @@
*** Settings ***
Documentation Test the case when trying to connect to nowhere
... (i.e. redis is not running)
Test Setup Redis Setup
Test Teardown Redis Teardown
Library Process
Library ${TESTDIR}/lib/rspamd.py
Resource ${TESTDIR}/lib/rspamd.robot
Variables ${TESTDIR}/lib/vars.py
Suite Teardown Terminate All Processes kill=True


*** Variables ***
${REDIS_SCOPE} Test
${RSPAMD_SCOPE} Test
${CONFIG} ${TESTDIR}/configs/plugins.conf
${URL_TLD} ${TESTDIR}/../lua/unit/test_tld.dat
${MESSAGE} ${TESTDIR}/messages/spam_message.eml


*** Test Cases ***
Dead Redis client
${result} = Scan Message With Rspamc ${MESSAGE}
Check Rspamc ${result} REDIS_ERROR_3 (0.00)[Connection refused]

*** Keywords ***
Lua Setup
[Arguments] ${LUA_SCRIPT}
Set Global Variable ${LUA_SCRIPT}
${PLUGIN_CONFIG} = Get File ${TESTDIR}/configs/redis.conf
Set Suite Variable ${PLUGIN_CONFIG}
Generic Setup PLUGIN_CONFIG

Redis Setup
Lua Setup ${TESTDIR}/lua/redis.lua

Redis Teardown
Normal Teardown
# Shutdown Process With Children ${REDIS_PID}

+ 5
- 0
test/functional/configs/redis.conf Целия файл

@@ -0,0 +1,5 @@
lua = ${LUA_SCRIPT};
redis {
servers = "${REDIS_ADDR}:${REDIS_PORT}";
expand_keys = true;
}

+ 13
- 2
test/functional/lib/rspamd.robot Целия файл

@@ -70,11 +70,11 @@ Generic Teardown
[Arguments] @{ports}
Run Keyword If '${CONTROLLER_ERRORS}' == 'True' Check Controller Errors
Shutdown Process With Children ${RSPAMD_PID}
Log do not contain segfault record
Log does not contain segfault record
Save Run Results ${TMPDIR} rspamd.log redis.log rspamd.conf clickhouse-server.log clickhouse-server.err.log clickhouse-config.xml
Cleanup Temporary Directory ${TMPDIR}

Log do not contain segfault record
Log does not contain segfault record
${log} = Get File ${TMPDIR}/rspamd.log
Should not contain ${log} Segmentation fault: msg=Segmentation fault detected

@@ -98,7 +98,18 @@ Redis HSET
Log ${result.stdout}
Should Be Equal As Integers ${result.rc} 0

Redis SET
[Arguments] ${key} ${value}
${result} = Run Process redis-cli -h ${REDIS_ADDR} -p ${REDIS_PORT}
... SET ${key} ${value}
Run Keyword If ${result.rc} != 0 Log ${result.stderr}
Log ${result.stdout}
Should Be Equal As Integers ${result.rc} 0

Run Redis
${has_TMPDIR} = Evaluate 'TMPDIR'
${tmpdir} = Run Keyword If '${has_TMPDIR}' == 'True' Set Variable &{kwargs}[TMPDIR]
... ELSE Make Temporary Directory
${template} = Get File ${TESTDIR}/configs/redis-server.conf
${config} = Replace Variables ${template}
Create File ${TMPDIR}/redis-server.conf ${config}

+ 88
- 0
test/functional/lua/redis.lua Целия файл

@@ -0,0 +1,88 @@
--[[[
-- Just a test for Redis API
--]]

local logger = require "rspamd_logger"
local redis_lua = require "lua_redis"
local lua_util = require "lua_util"

local redis_params
local N = 'redis_test'

local lua_script = [[
local f = function() end
return "hello from lua on redis"
]]

local function redis_simple_async_symbol(task)
local function redis_cb(err, data)
if err then
task:insert_result('REDIS_ASYNC_ERROR', 1.0, err)
else
task:insert_result('REDIS_ASYNC', 1.0, data)
end
end

redis_lua.rspamd_redis_make_request(
task,
redis_params,
"test_key",
false,
redis_cb,
'GET',
{'test_key'}
)
end

local function redis_symbol(task)

local params = lua_util.deepcopy(redis_params)
params.task = task
local is_ok, connection = redis_lua.redis_connect_sync(params)

logger.infox(task, "connect: %1, %2", is_ok, connection)

if not is_ok then
task:insert_result('REDIS_ERROR', 1.0, connection)
return
end

local err, data

is_ok, err = connection:add_cmd('EVAL', {lua_script, 0})
logger.infox(task, "add_cmd: %1, %2", is_ok, err)

if not is_ok then
task:insert_result('REDIS_ERROR_2', 1.0, err)
return
end

is_ok,data = connection:exec()

logger.infox(task, "exec: %1, %2", is_ok, data)

if not is_ok then
task:insert_result('REDIS_ERROR_3', 1.0, data)
return
end

task:insert_result('REDIS', 1.0, data)

end

redis_params = rspamd_parse_redis_server(N)

rspamd_config:register_symbol({
name = 'SIMPLE_REDIS_ASYNC_TEST',
score = 1.0,
callback = redis_simple_async_symbol,
no_squeeze = true
})

rspamd_config:register_symbol({
name = 'REDIS_TEST',
score = 1.0,
callback = redis_symbol,
no_squeeze = true
})
-- ]]

+ 40
- 0
test/functional/lua/rspamadm/test_redis_client.lua Целия файл

@@ -0,0 +1,40 @@
local logger = require "rspamd_logger"
local redis = require "lua_redis"
local upstream_list = require "rspamd_upstream_list"

local upstreams_write = upstream_list.create('127.0.0.1', 56379)
local upstreams_read = upstream_list.create('127.0.0.1', 56379)

local is_ok, connection = redis.redis_connect_sync({
write_servers = upstreams_write,
read_servers = upstreams_read,
config = rspamd_config,
ev_base = rspamadm_ev_base,
session = rspamadm_session,
timeout = 2
})


local lua_script = [[
local f = function() end
--for k = 1,100000000 do
-- for i=1,100000000 do
-- f()
-- end
--end
return "hello from lua on redis"
]]

local a,b = connection:add_cmd('EVAL', {lua_script, 0})
local is_ok,ver = connection:exec()

print(is_ok, ver)

--[[
a,b = connection:add_cmd('EVAL', {lua_script, 0})
print(a,b)

is_ok,ver = connection:exec()

print(is_ok, ver)
]]

+ 6
- 1
test/functional/lua/tcp.lua Целия файл

@@ -20,7 +20,7 @@ local function http_simple_tcp_async_symbol(task)
local function http_read_cb(err, data, conn)
logger.errx(task, 'http_read_cb: got reply: %s, error: %s, conn: %s', data, err, conn)
conn:add_write(http_read_post_cb, "POST /request2 HTTP/1.1\r\n\r\n")
task:insert_result('HTTP_ASYNC_RESPONSE', 1.0, data)
task:insert_result('HTTP_ASYNC_RESPONSE', 1.0, data or err)
end
rspamd_tcp:request({
task = task,
@@ -43,6 +43,11 @@ local function http_simple_tcp_symbol(task)
port = 18080,
}

if not is_ok then
task:insert_result('HTTP_SYNC_WRITE_ERROR', 1.0, connection)
logger.errx(task, 'write error: %1', connection)
end

logger.errx(task, 'connect_sync %1, %2', is_ok, tostring(connection))

is_ok, err = connection:write('GET /request_sync HTTP/1.1\r\nConnection: keep-alive\r\n\r\n')

Loading…
Отказ
Запис