From: Vsevolod Stakhov Date: Fri, 31 May 2019 14:19:43 +0000 (+0100) Subject: [Test] Add functional tests for ssl in lua_tcp X-Git-Tag: 2.0~839 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=cc7f49b369afad5a061603f73ce1445cafec07fa;p=rspamd.git [Test] Add functional tests for ssl in lua_tcp --- diff --git a/src/lua/lua_task.c b/src/lua/lua_task.c index bfae06fc7..c1b50484d 100644 --- a/src/lua/lua_task.c +++ b/src/lua/lua_task.c @@ -4872,7 +4872,8 @@ lua_task_get_settings_id (lua_State *L) guint32 *hp; if (task != NULL) { - hp = rspamd_mempool_get_variable (task->task_pool, "settings_hash"); + hp = rspamd_mempool_get_variable (task->task_pool, + RSPAMD_MEMPOOL_SETTINGS_HASH); if (hp) { lua_pushnumber (L, *hp); diff --git a/test/functional/cases/230_tcp.robot b/test/functional/cases/230_tcp.robot index 4d8b2fbd6..cbdbc6640 100644 --- a/test/functional/cases/230_tcp.robot +++ b/test/functional/cases/230_tcp.robot @@ -1,6 +1,6 @@ *** Settings *** -Test Setup Http Setup -Test Teardown Http Teardown +Test Setup Servers Setup +Test Teardown Servers Teardown Library Process Library ${TESTDIR}/lib/rspamd.py Resource ${TESTDIR}/lib/rspamd.robot @@ -19,6 +19,10 @@ Simple TCP request Check Rspamc ${result} HTTP_ASYNC_RESPONSE Check Rspamc ${result} HTTP_ASYNC_RESPONSE_2 +SSL TCP request + ${result} = Scan Message With Rspamc ${MESSAGE} + Check Rspamc ${result} TCP_SSL_RESPONSE (0.00)[test] + Check Rspamc ${result} TCP_SSL_RESPONSE_2 (0.00)[test2] Sync API TCP request ${result} = Scan Message With Rspamc ${MESSAGE} @@ -41,20 +45,27 @@ Lua Setup Set Global Variable ${LUA_SCRIPT} Generic Setup -Http Setup +Servers Setup Run Dummy Http + Run Dummy Ssl Lua Setup ${TESTDIR}/lua/tcp.lua -Http Teardown +Servers Teardown ${http_pid} = Get File /tmp/dummy_http.pid Shutdown Process With Children ${http_pid} + ${ssl_pid} = Get File /tmp/dummy_ssl.pid + Shutdown Process With Children ${ssl_pid} Normal Teardown Run Dummy Http [Arguments] ${result} = Start Process ${TESTDIR}/util/dummy_http.py - Wait Until Created /tmp/dummy_http.pid + Wait Until Created /tmp/dummy_http.pid timeout=2 second +Run Dummy Ssl + [Arguments] + ${result} = Start Process ${TESTDIR}/util/dummy_ssl.py ${TESTDIR}/util/server.pem + Wait Until Created /tmp/dummy_ssl.pid timeout=2 second Check url [Arguments] ${url} ${method} @{expect_results} diff --git a/test/functional/lib/rspamd.py b/test/functional/lib/rspamd.py index bd3e0c382..c46b06fbe 100644 --- a/test/functional/lib/rspamd.py +++ b/test/functional/lib/rspamd.py @@ -1,4 +1,3 @@ -import demjson import grp import os import os.path @@ -25,7 +24,7 @@ except: import httplib def Check_JSON(j): - d = demjson.decode(j, strict=True) + d = json.loads(j, strict=True) assert len(d) > 0 assert 'error' not in d return d @@ -38,7 +37,7 @@ def save_run_results(directory, filenames): suite_name = BuiltIn().get_variable_value("${SUITE_NAME}") test_name = BuiltIn().get_variable_value("${TEST NAME}") if test_name is None: - # this is suite-level tear down + # this is suite-level tear down destination_directory = "%s/robot-save/%s" % (current_directory, suite_name) else: destination_directory = "%s/robot-save/%s/%s" % (current_directory, suite_name, test_name) @@ -185,19 +184,18 @@ def shutdown_process(process): process.wait(TERM_TIMEOUT) return except psutil.TimeoutExpired: - logger.info( "PID {} is not termianated in {} seconds, sending SIGKILL..." % - (process.pid, TERM_TIMEOUT)) + logger.info( "PID {} is not terminated in {} seconds, sending SIGKILL...".format(process.pid, TERM_TIMEOUT)) try: # send SIGKILL process.kill() except psutil.NoSuchProcess: - # process exited just befor we tried to kill + # process exited just before we tried to kill return try: process.wait(KILL_WAIT) except psutil.TimeoutExpired: - raise RuntimeError("Failed to shutdown process %d (%s)" % (process.pid, process.name())) + raise RuntimeError("Failed to shutdown process {} ({})".format(process.pid, process.name())) def shutdown_process_with_children(pid): @@ -229,7 +227,7 @@ def get_file_if_exists(file_path): return myfile.read() return None -# copy-paste from +# copy-paste from # https://hg.python.org/cpython/file/6860263c05b3/Lib/shutil.py#l1068 # As soon as we move to Python 3, this should be removed in favor of shutil.which() def python3_which(cmd, mode=os.F_OK | os.X_OK, path=None): diff --git a/test/functional/lua/tcp.lua b/test/functional/lua/tcp.lua index d032a049f..a95497086 100644 --- a/test/functional/lua/tcp.lua +++ b/test/functional/lua/tcp.lua @@ -32,6 +32,33 @@ local function http_simple_tcp_async_symbol(task) }) end +local function http_simple_tcp_ssl_symbol(task) + logger.errx(task, 'ssl_tcp_symbol: begin') + local function ssl_get_cb(err, data, conn) + logger.errx(task, 'ssl_get_cb: got reply: %s, error: %s, conn: %s', data, err, conn) + task:insert_result('TCP_SSL_RESPONSE_2', 1.0, tostring(data):gsub('%s', '')) + end + local function ssl_read_post_cb(err, conn) + logger.errx(task, 'ssl_read_post_cb: write done: error: %s, conn: %s', err, conn) + conn:add_read(ssl_get_cb) + end + local function ssl_read_cb(err, data, conn) + logger.errx(task, 'ssl_read_cb: got reply: %s, error: %s, conn: %s', data, err, conn) + conn:add_write(ssl_read_post_cb, "test2\n") + task:insert_result('TCP_SSL_RESPONSE', 1.0, tostring(data):gsub('%s', '')) + end + rspamd_tcp:request({ + task = task, + callback = ssl_read_cb, + host = '127.0.0.1', + data = {'test\n'}, + read = true, + ssl = true, + ssl_noverify = true, + port = 14433, + }) +end + local function http_simple_tcp_symbol(task) logger.errx(task, 'connect_sync, before') @@ -178,6 +205,12 @@ rspamd_config:register_symbol({ callback = http_simple_tcp_async_symbol, no_squeeze = true }) +rspamd_config:register_symbol({ + name = 'SIMPLE_TCP_ASYNC_SSL_TEST', + score = 1.0, + callback = http_simple_tcp_ssl_symbol, + no_squeeze = true +}) rspamd_config:register_symbol({ name = 'SIMPLE_TCP_TEST', score = 1.0,