commit aa3d119: [Test] Use Python3 for functional tests

Andrew Lewis nerf at judo.za.org
Thu Jun 25 19:42:06 UTC 2020


Author: Andrew Lewis
Date: 2020-06-25 21:34:48 +0200
URL: https://github.com/rspamd/rspamd/commit/aa3d11920940f91b9677a802e4cca8775939376f (refs/pull/3414/head)

[Test] Use Python3 for functional tests
 - Fix more deprecated Robot Framework syntax
 - Remove log following
 - Remove some artefacts in teardown
 - Restore use of demjson

---
 .drone.yml                                         |   2 +-
 test/functional/cases/100_general.robot            |   7 +-
 test/functional/cases/101_lua.robot                |   1 -
 test/functional/cases/120_fuzzy/lib.robot          |   6 +-
 .../cases/131_dkim_signing/006_milter.robot        |   1 -
 test/functional/cases/140_proxy.robot              |   8 --
 test/functional/cases/180_milter.robot             |   1 -
 test/functional/cases/220_http.robot               |   5 +-
 test/functional/cases/230_tcp.robot                |   5 +-
 test/functional/cases/231_tcp_down.robot           |   5 +-
 test/functional/cases/330_neural.robot             |  22 ++--
 test/functional/cases/350_magic.robot              |   1 -
 test/functional/lib/rspamd.py                      | 113 ++++-----------------
 test/functional/lib/rspamd.robot                   |  41 ++------
 test/functional/lib/vars.py                        |   6 +-
 test/functional/util/dummy_avast.py                |  12 +--
 test/functional/util/dummy_clam.py                 |  12 +--
 test/functional/util/dummy_fprot.py                |  15 ++-
 test/functional/util/dummy_http.py                 |  33 +++---
 test/functional/util/dummy_https.py                |  38 +++----
 test/functional/util/dummy_p0f.py                  |  24 ++---
 test/functional/util/dummy_ssl.py                  |  56 +++++-----
 test/functional/util/dummy_udp.py                  |   7 +-
 23 files changed, 142 insertions(+), 279 deletions(-)

diff --git a/.drone.yml b/.drone.yml
index 9e818c0e5..bbd71648e 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -12,7 +12,7 @@ steps:
 
     # any image with a root shell can be used here, but Ubuntu used as base
     # image for build and test images and we need to download it anyway
-    image: ubuntu:18.04
+    image: ubuntu:20.04
     pull: if-not-exists
     volumes:
       - name: rspamd
diff --git a/test/functional/cases/100_general.robot b/test/functional/cases/100_general.robot
index 0e5a89c15..868c31d66 100644
--- a/test/functional/cases/100_general.robot
+++ b/test/functional/cases/100_general.robot
@@ -23,23 +23,19 @@ GTUBE - Encrypted
 
 GTUBE - Scan File feature
   ${result} =  Scan File  ${LOCAL_ADDR}  ${PORT_NORMAL}  ${GTUBE}
-  Follow Rspamd Log
   Should Contain  ${result}  GTUBE
 
 GTUBE - Scan File feature (encoded)
   ${encoded} =  Encode Filename  ${GTUBE}
   ${result} =  Scan File  ${LOCAL_ADDR}  ${PORT_NORMAL}  ${encoded}
-  Follow Rspamd Log
   Should Contain  ${result}  GTUBE
 
 GTUBE - SPAMC
   ${result} =  Spamc  ${LOCAL_ADDR}  ${PORT_NORMAL}  ${GTUBE}
-  Follow Rspamd Log
   Should Contain  ${result}  GTUBE
 
 GTUBE - RSPAMC
   ${result} =  Rspamc  ${LOCAL_ADDR}  ${PORT_NORMAL}  ${GTUBE}
-  Follow Rspamd Log
   Should Contain  ${result}  GTUBE
 
 # Broken
@@ -51,6 +47,5 @@ GTUBE - RSPAMC
 
 EMAILS DETECTION ZEROFONT
   ${result} =  Scan File  ${LOCAL_ADDR}  ${PORT_NORMAL}  ${TESTDIR}/messages/zerofont.eml
-  Follow Rspamd Log
   Should Contain  ${result}  MANY_INVISIBLE_PARTS
-  Should Contain  ${result}  ZERO_FONT
\ No newline at end of file
+  Should Contain  ${result}  ZERO_FONT
diff --git a/test/functional/cases/101_lua.robot b/test/functional/cases/101_lua.robot
index da5f8420b..8abb99b29 100644
--- a/test/functional/cases/101_lua.robot
+++ b/test/functional/cases/101_lua.robot
@@ -17,7 +17,6 @@ ${URL_TLD}      ${TESTDIR}/../lua/unit/test_tld.dat
 Flags
   [Setup]  Lua Setup  ${TESTDIR}/lua/flags.lua
   ${result} =  Scan Message With Rspamc  ${MESSAGE}
-  Follow Rspamd Log
   ${result} =  Run Rspamc  -h  ${LOCAL_ADDR}:${PORT_CONTROLLER}  stat
   Should Contain  ${result.stdout}  Messages scanned: 0
 
diff --git a/test/functional/cases/120_fuzzy/lib.robot b/test/functional/cases/120_fuzzy/lib.robot
index 319e5a900..54eaff0a8 100644
--- a/test/functional/cases/120_fuzzy/lib.robot
+++ b/test/functional/cases/120_fuzzy/lib.robot
@@ -21,7 +21,6 @@ ${SETTINGS_FUZZY_CHECK}  ${EMPTY}
 
 *** Keywords ***
 Fuzzy Skip Add Test Base
-  Create File  ${TMPDIR}/skip_hash.map
   [Arguments]  ${message}
   Set Suite Variable  ${RSPAMD_FUZZY_ADD_${message}}  0
   ${result} =  Run Rspamc  -h  ${LOCAL_ADDR}:${PORT_CONTROLLER}  -w  10  -f
@@ -31,7 +30,8 @@ Fuzzy Skip Add Test Base
   ${result} =  Scan Message With Rspamc  ${message}
   Create File  ${TMPDIR}/test.map
   Should Contain  ${result.stdout}  R_TEST_FUZZY_DENIED
-  Append To File  ${TMPDIR}/skip_hash.map  670cfcba72a87bab689958a8af5c22593dc17c907836c7c26a74d1bb49add25adfa45a5f172e3af82c9c638e8eb5fc860c22c7e966e61a459165ef0b9e1acc89
+  Append To File  ${TMPDIR}/skip_hash.map.tmp  670cfcba72a87bab689958a8af5c22593dc17c907836c7c26a74d1bb49add25adfa45a5f172e3af82c9c638e8eb5fc860c22c7e966e61a459165ef0b9e1acc89
+  Hard Link  ${TMPDIR}/skip_hash.map.tmp  ${TMPDIR}/skip_hash.map
   ${result} =  Scan Message With Rspamc  ${message}
   Check Rspamc  ${result}  R_TEST_FUZZY_DENIED  inverse=1
 
@@ -54,7 +54,6 @@ Fuzzy Delete Test
   Check Rspamc  ${result}
   Sync Fuzzy Storage
   ${result} =  Scan Message With Rspamc  ${message}
-  Follow Rspamd Log
   Should Not Contain  ${result.stdout}  ${FLAG1_SYMBOL}
   Should Be Equal As Integers  ${result.rc}  0
 
@@ -83,7 +82,6 @@ Fuzzy Overwrite Test
   END
   Sync Fuzzy Storage
   ${result} =  Scan Message With Rspamc  ${message}
-  Follow Rspamd Log
   Should Not Contain  ${result.stdout}  ${FLAG1_SYMBOL}
   Should Contain  ${result.stdout}  ${FLAG2_SYMBOL}
   Should Be Equal As Integers  ${result.rc}  0
diff --git a/test/functional/cases/131_dkim_signing/006_milter.robot b/test/functional/cases/131_dkim_signing/006_milter.robot
index fa6f532b4..cd48a62b7 100644
--- a/test/functional/cases/131_dkim_signing/006_milter.robot
+++ b/test/functional/cases/131_dkim_signing/006_milter.robot
@@ -25,7 +25,6 @@ Milter Test
   [Arguments]  ${mtlua}
   ${result} =  Run Process  miltertest  -Dport\=${PORT_PROXY}  -Dhost\=${LOCAL_ADDR}  -s  ${TESTDIR}/lua/miltertest/${mtlua}
   ...  cwd=${TESTDIR}/lua/miltertest
-  Follow Rspamd Log
   Should Match Regexp  ${result.stderr}  ^$
   Log  ${result.rc}
   Log  ${result.stdout}
diff --git a/test/functional/cases/140_proxy.robot b/test/functional/cases/140_proxy.robot
index 58b80461a..fabc5a4fd 100644
--- a/test/functional/cases/140_proxy.robot
+++ b/test/functional/cases/140_proxy.robot
@@ -13,32 +13,24 @@ ${URL_TLD}      ${TESTDIR}/../lua/unit/test_tld.dat
 *** Test Cases ***
 Rspamc Client
   ${result} =  Run Rspamc  -h  ${LOCAL_ADDR}:${PORT_PROXY}  -p  ${MESSAGE}
-  Custom Follow Rspamd Log  ${PROXY_TMPDIR}/rspamd.log  ${PROXY_LOGPOS}  PROXY_LOGPOS  Suite
-  Custom Follow Rspamd Log  ${SLAVE_TMPDIR}/rspamd.log  ${SLAVE_LOGPOS}  SLAVE_LOGPOS  Suite
   Run Keyword If  ${result.rc} != 0  Log  ${result.stderr}
   Should Contain  ${result.stdout}  SIMPLE_TEST
   Should Be Equal As Integers  ${result.rc}  0
 
 SPAMC
   ${result} =  Spamc  ${LOCAL_ADDR}  ${PORT_PROXY}  ${MESSAGE}
-  Custom Follow Rspamd Log  ${PROXY_TMPDIR}/rspamd.log  ${PROXY_LOGPOS}  PROXY_LOGPOS  Suite
-  Custom Follow Rspamd Log  ${SLAVE_TMPDIR}/rspamd.log  ${SLAVE_LOGPOS}  SLAVE_LOGPOS  Suite
   Should Contain  ${result}  SPAMD/1.1 0 EX_OK
 
 RSPAMC Legacy Protocol
   ${result} =  Rspamc  ${LOCAL_ADDR}  ${PORT_PROXY}  ${MESSAGE}
-  Custom Follow Rspamd Log  ${PROXY_TMPDIR}/rspamd.log  ${PROXY_LOGPOS}  PROXY_LOGPOS  Suite
-  Custom Follow Rspamd Log  ${SLAVE_TMPDIR}/rspamd.log  ${SLAVE_LOGPOS}  SLAVE_LOGPOS  Suite
   Should Contain  ${result}  RSPAMD/1.3 0 EX_OK
 
 *** Keywords ***
 Proxy Setup
   &{d} =  Run Rspamd  CONFIG=${TESTDIR}/configs/lua_test.conf
-  Set Suite Variable  ${SLAVE_LOGPOS}  ${d}[RSPAMD_LOGPOS]
   Set Suite Variable  ${SLAVE_PID}  ${d}[RSPAMD_PID]
   Set Suite Variable  ${SLAVE_TMPDIR}  ${d}[TMPDIR]
   &{d} =  Run Rspamd  CONFIG=${TESTDIR}/configs/proxy.conf
-  Set Suite Variable  ${PROXY_LOGPOS}  ${d}[RSPAMD_LOGPOS]
   Set Suite Variable  ${PROXY_PID}  ${d}[RSPAMD_PID]
   Set Suite Variable  ${PROXY_TMPDIR}  ${d}[TMPDIR]
 
diff --git a/test/functional/cases/180_milter.robot b/test/functional/cases/180_milter.robot
index 23a366814..ddbbf9799 100644
--- a/test/functional/cases/180_milter.robot
+++ b/test/functional/cases/180_milter.robot
@@ -34,7 +34,6 @@ Milter Test
   [Arguments]  ${mtlua}
   ${result} =  Run Process  miltertest  -Dport\=${PORT_PROXY}  -Dhost\=${LOCAL_ADDR}  -s  ${TESTDIR}/lua/miltertest/${mtlua}
   ...  cwd=${TESTDIR}/lua/miltertest
-  Follow Rspamd Log
   Should Match Regexp  ${result.stderr}  ^$
   Log  ${result.rc}
   Log  ${result.stdout}
diff --git a/test/functional/cases/220_http.robot b/test/functional/cases/220_http.robot
index c30fbba9c..86e882d5d 100644
--- a/test/functional/cases/220_http.robot
+++ b/test/functional/cases/220_http.robot
@@ -68,5 +68,6 @@ Run Dummy Https
 Check url
   [Arguments]  ${url}  ${method}  @{expect_results}
   ${result} =  Scan Message With Rspamc  --header=url:${url}  --header=method:${method}  ${MESSAGE}
-  : FOR  ${expect}  IN  @{expect_results}
-  \  Check Rspamc  ${result}  ${expect}
\ No newline at end of file
+  FOR  ${expect}  IN  @{expect_results}
+    Check Rspamc  ${result}  ${expect}
+  END
diff --git a/test/functional/cases/230_tcp.robot b/test/functional/cases/230_tcp.robot
index 51f590ea4..16d490826 100644
--- a/test/functional/cases/230_tcp.robot
+++ b/test/functional/cases/230_tcp.robot
@@ -75,5 +75,6 @@ Run Dummy Ssl
 Check url
   [Arguments]  ${url}  ${method}  @{expect_results}
   ${result} =  Scan Message With Rspamc  --header=url:${url}  --header=method:${method}  ${MESSAGE}
-  : FOR  ${expect}  IN  @{expect_results}
-  \  Check Rspamc  ${result}  ${expect}
+  FOR  ${expect}  IN  @{expect_results}
+    Check Rspamc  ${result}  ${expect}
+  END
diff --git a/test/functional/cases/231_tcp_down.robot b/test/functional/cases/231_tcp_down.robot
index 10043024f..e68e2053a 100644
--- a/test/functional/cases/231_tcp_down.robot
+++ b/test/functional/cases/231_tcp_down.robot
@@ -37,5 +37,6 @@ Http Teardown
 Check url
   [Arguments]  ${url}  ${method}  @{expect_results}
   ${result} =  Scan Message With Rspamc  --header=url:${url}  --header=method:${method}  ${MESSAGE}
-  : FOR  ${expect}  IN  @{expect_results}
-  \  Check Rspamc  ${result}  ${expect}
+  FOR  ${expect}  IN  @{expect_results}
+    Check Rspamc  ${result}  ${expect}
+  END
diff --git a/test/functional/cases/330_neural.robot b/test/functional/cases/330_neural.robot
index c64e9cc0a..89ba19f11 100644
--- a/test/functional/cases/330_neural.robot
+++ b/test/functional/cases/330_neural.robot
@@ -16,11 +16,12 @@ ${RSPAMD_SCOPE}  Suite
 *** Test Cases ***
 Train
   Sleep  2s  Wait for redis mess
-  : FOR    ${INDEX}    IN RANGE    0    10
-  \  ${result} =  Scan Message With Rspamc  ${MESSAGE}  --header  Settings={symbols_enabled = ["SPAM_SYMBOL"]}
-  \  Check Rspamc  ${result}  SPAM_SYMBOL (1.00)
-  \  ${result} =  Scan Message With Rspamc  ${MESSAGE}  --header  Settings={symbols_enabled = ["HAM_SYMBOL"]}
-  \  Check Rspamc  ${result}  HAM_SYMBOL (-1.00)
+  FOR    ${INDEX}    IN RANGE    0    10
+    ${result} =  Scan Message With Rspamc  ${MESSAGE}  --header  Settings={symbols_enabled = ["SPAM_SYMBOL"]}
+    Check Rspamc  ${result}  SPAM_SYMBOL (1.00)
+    ${result} =  Scan Message With Rspamc  ${MESSAGE}  --header  Settings={symbols_enabled = ["HAM_SYMBOL"]}
+    Check Rspamc  ${result}  HAM_SYMBOL (-1.00)
+  END
 
 Check Neural HAM
   Sleep  2s  Wait for neural to be loaded
@@ -35,11 +36,12 @@ Check Neural SPAM
 
 
 Train INVERSE
-  : FOR    ${INDEX}    IN RANGE    0    10
-  \  ${result} =  Scan Message With Rspamc  ${MESSAGE}  --header  Settings={symbols_enabled = ["SPAM_SYMBOL"]; SPAM_SYMBOL = -1}
-  \  Check Rspamc  ${result}  SPAM_SYMBOL (-1.00)
-  \  ${result} =  Scan Message With Rspamc  ${MESSAGE}  --header  Settings={symbols_enabled = ["HAM_SYMBOL"]; HAM_SYMBOL = 1;}
-  \  Check Rspamc  ${result}  HAM_SYMBOL (1.00)
+  FOR    ${INDEX}    IN RANGE    0    10
+    ${result} =  Scan Message With Rspamc  ${MESSAGE}  --header  Settings={symbols_enabled = ["SPAM_SYMBOL"]; SPAM_SYMBOL = -1}
+    Check Rspamc  ${result}  SPAM_SYMBOL (-1.00)
+    ${result} =  Scan Message With Rspamc  ${MESSAGE}  --header  Settings={symbols_enabled = ["HAM_SYMBOL"]; HAM_SYMBOL = 1;}
+    Check Rspamc  ${result}  HAM_SYMBOL (1.00)
+  END
 
 Check Neural HAM INVERSE
   Sleep  2s  Wait for neural to be loaded
diff --git a/test/functional/cases/350_magic.robot b/test/functional/cases/350_magic.robot
index b3a760086..787e4fe3c 100644
--- a/test/functional/cases/350_magic.robot
+++ b/test/functional/cases/350_magic.robot
@@ -14,7 +14,6 @@ ${URL_TLD}      ${TESTDIR}/../lua/unit/test_tld.dat
 *** Test Cases ***
 Magic detections bundle 1
   ${result} =  Scan Message With Rspamc  ${TESTDIR}/messages/gargantua.eml
-  Follow Rspamd Log
   Should Contain  ${result.stdout}  MAGIC_SYM_ZIP_2
   Should Contain  ${result.stdout}  MAGIC_SYM_RAR_3
   Should Contain  ${result.stdout}  MAGIC_SYM_EXE_4
diff --git a/test/functional/lib/rspamd.py b/test/functional/lib/rspamd.py
index 295484f9e..b8bc6ac03 100644
--- a/test/functional/lib/rspamd.py
+++ b/test/functional/lib/rspamd.py
@@ -1,32 +1,24 @@
+from urllib.request import urlopen
+import glob
 import grp
+import http.client
 import os
 import os.path
 import psutil
-import glob
 import pwd
 import shutil
 import signal
 import socket
+import stat
 import sys
 import tempfile
-import json
-import stat
-from robot.libraries.BuiltIn import BuiltIn
-from robot.api import logger
 
-if sys.version_info > (3,):
-    long = int
-try:
-    from urllib.request import urlopen
-except:
-    from urllib2 import urlopen
-try:
-    import http.client as httplib
-except:
-    import httplib
+from robot.api import logger
+from robot.libraries.BuiltIn import BuiltIn
+import demjson
 
 def Check_JSON(j):
-    d = json.loads(j, strict=True)
+    d = demjson.decode(j, strict=True)
     logger.debug('got json %s' % d)
     assert len(d) > 0
     assert 'error' not in d
@@ -99,7 +91,7 @@ def get_rspamadm():
     return dname + "/src/rspamadm/rspamadm"
 
 def HTTP(method, host, port, path, data=None, headers={}):
-    c = httplib.HTTPConnection("%s:%s" % (host, port))
+    c = http.client.HTTPConnection("%s:%s" % (host, port))
     c.request(method, path, data, headers)
     r = c.getresponse()
     t = r.read()
@@ -107,6 +99,9 @@ def HTTP(method, host, port, path, data=None, headers={}):
     c.close()
     return [s, t]
 
+def hard_link(src, dst):
+    os.link(src, dst)
+
 def make_temporary_directory():
     """Creates and returns a unique temporary directory
 
@@ -131,14 +126,6 @@ def path_splitter(path):
     basename = os.path.basename(path)
     return [dirname, basename]
 
-def read_log_from_position(filename, offset):
-    offset = long(offset)
-    with open(filename, 'rb') as f:
-        f.seek(offset)
-        goo = f.read()
-        size = len(goo)
-    return [goo, size+offset]
-
 def rspamc(addr, port, filename):
     mboxgoo = b"From MAILER-DAEMON Fri May 13 19:17:40 2016\r\n"
     goo = open(filename, 'rb').read()
@@ -251,13 +238,15 @@ def shutdown_process_with_children(pid):
             pass
 
 def write_to_stdin(process_handle, text):
+    if not isinstance(text, bytes):
+        text = bytes(text, 'utf-8')
     lib = BuiltIn().get_library_instance('Process')
     obj = lib.get_process_object()
-    obj.stdin.write(text + "\n")
+    obj.stdin.write(text + b"\n")
     obj.stdin.flush()
     obj.stdin.close()
     out = obj.stdout.read(4096)
-    return out
+    return out.decode('utf-8')
 
 def get_file_if_exists(file_path):
     if os.path.exists(file_path):
@@ -265,72 +254,6 @@ def get_file_if_exists(file_path):
             return myfile.read()
     return None
 
-# 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):
-    """Given a command, mode, and a PATH string, return the path which
-    conforms to the given mode on the PATH, or None if there is no such
-    file.
-
-    `mode` defaults to os.F_OK | os.X_OK. `path` defaults to the result
-    of os.environ.get("PATH"), or can be overridden with a custom search
-    path.
-    """
-
-    # Check that a given file can be accessed with the correct mode.
-    # Additionally check that `file` is not a directory, as on Windows
-    # directories pass the os.access check.
-    def _access_check(fn, mode):
-        return (os.path.exists(fn) and os.access(fn, mode)
-                and not os.path.isdir(fn))
-
-    # If we're given a path with a directory part, look it up directly rather
-    # than referring to PATH directories. This includes checking relative to the
-    # current directory, e.g. ./script
-    if os.path.dirname(cmd):
-        if _access_check(cmd, mode):
-            return cmd
-        return None
-
-    if path is None:
-        path = os.environ.get("PATH", os.defpath)
-    if not path:
-        return None
-    path = path.split(os.pathsep)
-
-    if sys.platform == "win32":
-        # The current directory takes precedence on Windows.
-        if not os.curdir in path:
-            path.insert(0, os.curdir)
-
-        # PATHEXT is necessary to check on Windows.
-        pathext = os.environ.get("PATHEXT", "").split(os.pathsep)
-        # See if the given file matches any of the expected path extensions.
-        # This will allow us to short circuit when given "python.exe".
-        # If it does match, only test that one, otherwise we have to try
-        # others.
-        if any(cmd.lower().endswith(ext.lower()) for ext in pathext):
-            files = [cmd]
-        else:
-            files = [cmd + ext for ext in pathext]
-    else:
-        # On other platforms you don't have things like PATHEXT to tell you
-        # what file suffixes are executable, so just pass on cmd as-is.
-        files = [cmd]
-
-    seen = set()
-    for dir in path:
-        normdir = os.path.normcase(dir)
-        if not normdir in seen:
-            seen.add(normdir)
-            for thefile in files:
-                name = os.path.join(dir, thefile)
-                if _access_check(name, mode):
-                    return name
-    return None
-
-
 def _merge_luacov_stats(statsfile, coverage):
     """
     Reads a coverage stats file written by luacov and merges coverage data to
@@ -339,7 +262,7 @@ def _merge_luacov_stats(statsfile, coverage):
     Format of the file defined in:
     https://github.com/keplerproject/luacov/blob/master/src/luacov/stats.lua
     """
-    with open(statsfile, 'rb') as fh:
+    with open(statsfile, 'r') as fh:
         while True:
             # max_line:filename
             line = fh.readline().rstrip()
@@ -369,7 +292,7 @@ def _dump_luacov_stats(statsfile, coverage):
     """
     src_files = sorted(coverage)
 
-    with open(statsfile, 'wb') as fh:
+    with open(statsfile, 'w') as fh:
         for src in src_files:
             stats = " ".join(str(n) for n in coverage[src])
             fh.write("%s:%s\n%s\n" % (len(coverage[src]), src, stats))
diff --git a/test/functional/lib/rspamd.robot b/test/functional/lib/rspamd.robot
index 03abc86c1..cd68b1d86 100644
--- a/test/functional/lib/rspamd.robot
+++ b/test/functional/lib/rspamd.robot
@@ -17,7 +17,6 @@ Check Pidfile
 
 Check Rspamc
   [Arguments]  ${result}  @{args}  &{kwargs}
-  Follow Rspamd Log
   Run Keyword If  ${result.rc} != 0  Log  ${result.stderr}
   ${has_rc} =  Evaluate  'rc' in $kwargs
   ${inverse} =  Evaluate  'inverse' in $kwargs
@@ -45,19 +44,6 @@ Check Rspamc Match String
   Run Keyword If  ${inverse} == False  Should Contain  ${subject}  ${str}
   ...  ELSE  Should Not Contain  ${subject}  ${str}
 
-Custom Follow Rspamd Log
-  [Arguments]  ${logfile}  ${logpos}  ${logpos_var}  ${scope}
-  ${logpos} =  Log Logs  ${logfile}  ${logpos}
-  Run Keyword If  '${scope}' == 'Test'  Set Test Variable  ${${logpos_var}}  ${logpos}
-  ...  ELSE IF  '${scope}' == 'Suite'  Set Suite Variable  ${${logpos_var}}  ${logpos}
-  ...  ELSE  Fail  'scope must be Test or Suite'
-
-Follow Rspamd Log
-  ${RSPAMD_LOGPOS} =  Log Logs  ${TMPDIR}/rspamd.log  ${RSPAMD_LOGPOS}
-  Run Keyword If  '${RSPAMD_SCOPE}' == 'Test'  Set Test Variable  ${RSPAMD_LOGPOS}
-  ...  ELSE IF  '${RSPAMD_SCOPE}' == 'Suite'  Set Suite Variable  ${RSPAMD_LOGPOS}
-  ...  ELSE  Fail  'RSPAMD_SCOPE must be Test or Suite'
-
 Generic Setup
   [Arguments]  @{vargs}  &{kwargs}
   &{d} =  Run Rspamd  @{vargs}  &{kwargs}
@@ -69,7 +55,6 @@ Generic Setup
   END
 
 Generic Teardown
-  [Arguments]  @{ports}
   Run Keyword If  '${CONTROLLER_ERRORS}' == 'True'  Check Controller Errors
   Shutdown Process With Children  ${RSPAMD_PID}
   Log does not contain segfault record
@@ -78,20 +63,11 @@ Generic Teardown
   Cleanup Temporary Directory  ${TMPDIR}
 
 Log does not contain segfault record
-  ${log} =  Get File  ${TMPDIR}/rspamd.log
+  ${log} =  Get File  ${TMPDIR}/rspamd.log  encoding_errors=ignore
   Should not contain  ${log}  Segmentation fault:  msg=Segmentation fault detected
 
-Log Logs
-  [Arguments]  ${logfile}  ${position}
-  ${the_log}  ${position} =  Read Log From Position  ${logfile}  ${position}
-  Log  ${the_log}
-  [Return]  ${position}
-
 Normal Teardown
-  ${port_normal} =  Create List  ${SOCK_STREAM}  ${LOCAL_ADDR}  ${PORT_NORMAL}
-  ${port_controller} =  Create List  ${SOCK_STREAM}  ${LOCAL_ADDR}  ${PORT_CONTROLLER}
-  ${ports} =  Create List  ${port_normal}  ${port_controller}
-  Generic Teardown  @{ports}
+  Generic Teardown
 
 Redis HSET
   [Arguments]  ${hash}  ${key}  ${value}
@@ -169,24 +145,21 @@ Run Rspamd
   ${result} =  Run Process  ${RSPAMD}  -u  ${RSPAMD_USER}  -g  ${RSPAMD_GROUP}
   ...  -c  ${tmpdir}/rspamd.conf  env:TMPDIR=${tmpdir}  env:DBDIR=${tmpdir}  env:LD_LIBRARY_PATH=${TESTDIR}/../../contrib/aho-corasick
   Run Keyword If  ${result.rc} != 0  Log  ${result.stderr}
-  ${rspamd_logpos} =  Log Logs  ${tmpdir}/rspamd.log  0
   Should Be Equal As Integers  ${result.rc}  0
   Wait Until Keyword Succeeds  10x  1 sec  Check Pidfile  ${tmpdir}/rspamd.pid  timeout=0.5s
   Wait Until Keyword Succeeds  5x  1 sec  Ping Rspamd  ${LOCAL_ADDR}  ${PORT_NORMAL}
   ${rspamd_pid} =  Get File  ${tmpdir}/rspamd.pid
-  Set To Dictionary  ${d}  RSPAMD_LOGPOS=${rspamd_logpos}  RSPAMD_PID=${rspamd_pid}  TMPDIR=${tmpdir}
+  Set To Dictionary  ${d}  RSPAMD_PID=${rspamd_pid}  TMPDIR=${tmpdir}
   [Return]  &{d}
 
+Simple Teardown
+  Generic Teardown
+
 Scan Message With Rspamc
   [Arguments]  ${msg_file}  @{vargs}
   ${result} =  Run Rspamc  -p  -h  ${LOCAL_ADDR}:${PORT_NORMAL}  @{vargs}  ${msg_file}
   [Return]  ${result}
 
-Simple Teardown
-  ${port_normal} =  Create List  ${SOCK_STREAM}  ${LOCAL_ADDR}  ${PORT_NORMAL}
-  ${ports} =  Create List  ${port_normal}
-  Generic Teardown  @{ports}
-
 Sync Fuzzy Storage
   [Arguments]  @{vargs}
   ${len} =  Get Length  ${vargs}
@@ -195,6 +168,4 @@ Sync Fuzzy Storage
   ...  ELSE  Run Process  ${RSPAMADM}  control  -s  ${vargs}[0]/rspamd.sock
   ...  fuzzy_sync
   Log  ${result.stdout}
-  Run Keyword If  $len == 0  Follow Rspamd Log
-  ...  ELSE  Custom Follow Rspamd Log  ${vargs}[0]/rspamd.log  ${vargs}[1]  ${vargs}[2]  ${vargs}[3]
   Sleep  0.1s  Try give fuzzy storage time to sync
diff --git a/test/functional/lib/vars.py b/test/functional/lib/vars.py
index d29c31c7b..3cec9767a 100644
--- a/test/functional/lib/vars.py
+++ b/test/functional/lib/vars.py
@@ -3,7 +3,7 @@ import socket
 CONTROLLER_ERRORS = True
 KEY_PVT1 = 'ekd3x36tfa5gd76t6pa8hqif3ott7n1siuux68exbkk7ukscte9y'
 KEY_PUB1 = 'm8kneubpcjsb8sbsoj7jy7azj9fdd3xmj63txni86a8ye9ncomny'
-LOCAL_ADDR = u'127.0.0.1'
+LOCAL_ADDR = '127.0.0.1'
 MAP_WATCH_INTERVAL = '1min'
 PORT_CONTROLLER = 56790
 PORT_CONTROLLER_SLAVE = 56793
@@ -17,9 +17,9 @@ PORT_FPROT = 56797
 PORT_FPROT2_DUPLICATE = 56798
 PORT_AVAST = 56799
 P0F_SOCKET = '/tmp/p0f.sock'
-REDIS_ADDR = u'127.0.0.1'
+REDIS_ADDR = '127.0.0.1'
 REDIS_PORT = 56379
-NGINX_ADDR = u'127.0.0.1'
+NGINX_ADDR = '127.0.0.1'
 NGINX_PORT = 56380
 RSPAMD_GROUP = 'nogroup'
 RSPAMD_USER = 'nobody'
diff --git a/test/functional/util/dummy_avast.py b/test/functional/util/dummy_avast.py
index 55945d8dc..a4a6c62a2 100755
--- a/test/functional/util/dummy_avast.py
+++ b/test/functional/util/dummy_avast.py
@@ -1,15 +1,13 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 
 PID = "/tmp/dummy_avast.pid"
 
 import os
-import sys
 import socket
+import socketserver
+import sys
+
 import dummy_killer
-try:
-    import SocketServer as socketserver
-except:
-    import socketserver
 
 class MyTCPHandler(socketserver.BaseRequestHandler):
 
@@ -50,6 +48,6 @@ if __name__ == "__main__":
     try:
         server.handle_request()
     except socket.error:
-        print "Socket closed"
+        print("Socket closed")
 
     server.server_close()
diff --git a/test/functional/util/dummy_clam.py b/test/functional/util/dummy_clam.py
index d25a63525..1b614f58b 100755
--- a/test/functional/util/dummy_clam.py
+++ b/test/functional/util/dummy_clam.py
@@ -1,15 +1,13 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 
 PID = "/tmp/dummy_clamav.pid"
 
 import os
-import sys
 import socket
+import socketserver
+import sys
+
 import dummy_killer
-try:
-    import SocketServer as socketserver
-except:
-    import socketserver
 
 class MyTCPHandler(socketserver.BaseRequestHandler):
 
@@ -47,6 +45,6 @@ if __name__ == "__main__":
     try:
         server.handle_request()
     except socket.error:
-        print "Socket closed"
+        print("Socket closed")
 
     server.server_close()
diff --git a/test/functional/util/dummy_fprot.py b/test/functional/util/dummy_fprot.py
index e6dc58bdd..31ae2c487 100755
--- a/test/functional/util/dummy_fprot.py
+++ b/test/functional/util/dummy_fprot.py
@@ -1,15 +1,12 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
+
 import os
-import sys
 import signal
 import socket
-import dummy_killer
-
+import socketserver
+import sys
 
-try:
-    import SocketServer as socketserver
-except:
-    import socketserver
+import dummy_killer
 
 PID = "/tmp/dummy_fprot.pid"
 
@@ -53,5 +50,5 @@ if __name__ == "__main__":
     try:
         server.handle_request()
     except socket.error:
-        print "Socket closed"
+        print("Socket closed")
     server.server_close()
diff --git a/test/functional/util/dummy_http.py b/test/functional/util/dummy_http.py
index 614fced29..c05ee2d02 100755
--- a/test/functional/util/dummy_http.py
*** OUTPUT TRUNCATED, 370 LINES SKIPPED ***


More information about the Commits mailing list