commit cc7f49b: [Test] Add functional tests for ssl in lua_tcp

Vsevolod Stakhov vsevolod at highsecure.ru
Fri May 31 14:21:06 UTC 2019


Author: Vsevolod Stakhov
Date: 2019-05-31 15:19:43 +0100
URL: https://github.com/rspamd/rspamd/commit/cc7f49b369afad5a061603f73ce1445cafec07fa (HEAD -> master)

[Test] Add functional tests for ssl in lua_tcp

---
 src/lua/lua_task.c                  |  3 ++-
 test/functional/cases/230_tcp.robot | 21 ++++++++++++++++-----
 test/functional/lib/rspamd.py       | 14 ++++++--------
 test/functional/lua/tcp.lua         | 33 +++++++++++++++++++++++++++++++++
 4 files changed, 57 insertions(+), 14 deletions(-)

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,


More information about the Commits mailing list