[Test] Wait for ports to be confirmed-free inbetween runstags/1.4.0
- sudo apt-get update -qq || true | - sudo apt-get update -qq || true | ||||
- sudo apt-get install -qq cmake gcc lcov libevent-dev libglib2.0-dev libgmime-2.6-dev libluajit-5.1-dev liblua5.1-0-dev libmagic-dev libpcre3-dev libsqlite3-dev libssl-dev make python-dev ragel redis-server | - sudo apt-get install -qq cmake gcc lcov libevent-dev libglib2.0-dev libgmime-2.6-dev libluajit-5.1-dev liblua5.1-0-dev libmagic-dev libpcre3-dev libsqlite3-dev libssl-dev make python-dev ragel redis-server | ||||
- gem install coveralls-lcov | - gem install coveralls-lcov | ||||
- sudo pip install demjson psutil robotframework | |||||
- sudo pip install demjson ipaddress psutil robotframework | |||||
- wget http://download.redis.io/redis-stable.tar.gz | - wget http://download.redis.io/redis-stable.tar.gz | ||||
- tar xvzf redis-stable.tar.gz | - tar xvzf redis-stable.tar.gz | ||||
- cd redis-stable && make && sudo cp src/redis-cli /usr/bin/ | - cd redis-stable && make && sudo cp src/redis-cli /usr/bin/ |
*** Settings *** | *** Settings *** | ||||
Suite Setup Generic Setup | Suite Setup Generic Setup | ||||
Suite Teardown Generic Teardown | |||||
Suite Teardown Simple Teardown | |||||
Library ${TESTDIR}/lib/rspamd.py | Library ${TESTDIR}/lib/rspamd.py | ||||
Resource ${TESTDIR}/lib/rspamd.robot | Resource ${TESTDIR}/lib/rspamd.robot | ||||
Variables ${TESTDIR}/lib/vars.py | Variables ${TESTDIR}/lib/vars.py |
*** Settings *** | *** Settings *** | ||||
Test Teardown Generic Teardown | |||||
Test Teardown Normal Teardown | |||||
Library ${TESTDIR}/lib/rspamd.py | Library ${TESTDIR}/lib/rspamd.py | ||||
Resource ${TESTDIR}/lib/rspamd.robot | Resource ${TESTDIR}/lib/rspamd.robot | ||||
Variables ${TESTDIR}/lib/vars.py | Variables ${TESTDIR}/lib/vars.py |
Run Redis | Run Redis | ||||
Multimap Teardown | Multimap Teardown | ||||
Normal Teardown | |||||
Shutdown Process With Children ${REDIS_PID} | Shutdown Process With Children ${REDIS_PID} | ||||
Generic Teardown | |||||
Wait For Port ${SOCK_STREAM} ${LOCAL_ADDR} ${REDIS_PORT} |
*** Settings *** | *** Settings *** | ||||
Test Teardown Generic Teardown | |||||
Test Teardown Normal Teardown | |||||
Library ${TESTDIR}/lib/rspamd.py | Library ${TESTDIR}/lib/rspamd.py | ||||
Resource ${TESTDIR}/lib/rspamd.robot | Resource ${TESTDIR}/lib/rspamd.robot | ||||
Variables ${TESTDIR}/lib/vars.py | Variables ${TESTDIR}/lib/vars.py |
*** Settings *** | *** Settings *** | ||||
Suite Setup MIMETypes Setup | Suite Setup MIMETypes Setup | ||||
Suite Teardown Generic Teardown | |||||
Suite Teardown Simple Teardown | |||||
Library ${TESTDIR}/lib/rspamd.py | Library ${TESTDIR}/lib/rspamd.py | ||||
Resource ${TESTDIR}/lib/rspamd.robot | Resource ${TESTDIR}/lib/rspamd.robot | ||||
Variables ${TESTDIR}/lib/vars.py | Variables ${TESTDIR}/lib/vars.py |
Run Redis | Run Redis | ||||
Redis Statistics Teardown | Redis Statistics Teardown | ||||
Generic Teardown | |||||
Normal Teardown | |||||
Shutdown Process With Children ${REDIS_PID} | Shutdown Process With Children ${REDIS_PID} | ||||
Wait For Port ${SOCK_STREAM} ${LOCAL_ADDR} ${REDIS_PORT} | |||||
Statistics Setup | Statistics Setup | ||||
Generic Setup STATS_PATH_CACHE STATS_PATH_HAM STATS_PATH_SPAM | Generic Setup STATS_PATH_CACHE STATS_PATH_HAM STATS_PATH_SPAM | ||||
Statistics Teardown | Statistics Teardown | ||||
Generic Teardown | |||||
Normal Teardown |
*** Settings *** | *** Settings *** | ||||
Suite Setup Generic Setup | Suite Setup Generic Setup | ||||
Suite Teardown Generic Teardown | |||||
Suite Teardown Normal Teardown | |||||
Resource ${TESTDIR}/lib/rspamd.robot | Resource ${TESTDIR}/lib/rspamd.robot | ||||
Resource lib.robot | Resource lib.robot | ||||
*** Settings *** | *** Settings *** | ||||
Suite Setup DMARC Setup | Suite Setup DMARC Setup | ||||
Suite Teardown Generic Teardown | |||||
Suite Teardown Simple Teardown | |||||
Library ${TESTDIR}/lib/rspamd.py | Library ${TESTDIR}/lib/rspamd.py | ||||
Resource ${TESTDIR}/lib/rspamd.robot | Resource ${TESTDIR}/lib/rspamd.robot | ||||
Variables ${TESTDIR}/lib/vars.py | Variables ${TESTDIR}/lib/vars.py |
*** Settings *** | *** Settings *** | ||||
Suite Setup Fuzzy Setup Encrypted Siphash | Suite Setup Fuzzy Setup Encrypted Siphash | ||||
Suite Teardown Generic Teardown | |||||
Suite Teardown Fuzzy Teardown | |||||
Resource lib.robot | Resource lib.robot | ||||
*** Test Cases *** | *** Test Cases *** |
*** Settings *** | *** Settings *** | ||||
Suite Setup Fuzzy Setup Keyed Fasthash | Suite Setup Fuzzy Setup Keyed Fasthash | ||||
Suite Teardown Generic Teardown | |||||
Suite Teardown Fuzzy Teardown | |||||
Resource lib.robot | Resource lib.robot | ||||
*** Test Cases *** | *** Test Cases *** |
*** Settings *** | *** Settings *** | ||||
Suite Setup Fuzzy Setup Plain Fasthash | Suite Setup Fuzzy Setup Plain Fasthash | ||||
Suite Teardown Generic Teardown | |||||
Suite Teardown Fuzzy Teardown | |||||
Resource lib.robot | Resource lib.robot | ||||
*** Test Cases *** | *** Test Cases *** |
*** Settings *** | *** Settings *** | ||||
Suite Setup Fuzzy Setup Plain Siphash | Suite Setup Fuzzy Setup Plain Siphash | ||||
Suite Teardown Generic Teardown | |||||
Suite Teardown Fuzzy Teardown | |||||
Resource lib.robot | Resource lib.robot | ||||
*** Test Cases *** | *** Test Cases *** |
Fuzzy Multimessage Overwrite Test | Fuzzy Multimessage Overwrite Test | ||||
: FOR ${i} IN @{MESSAGES} | : FOR ${i} IN @{MESSAGES} | ||||
\ Fuzzy Overwrite Test ${i} | \ Fuzzy Overwrite Test ${i} | ||||
Fuzzy Teardown | |||||
${port_normal} = Create List ${SOCK_STREAM} ${LOCAL_ADDR} ${PORT_NORMAL} | |||||
${port_fuzzy} = Create List ${SOCK_DGRAM} ${LOCAL_ADDR} ${PORT_FUZZY} | |||||
${port_controller} = Create List ${SOCK_STREAM} ${LOCAL_ADDR} ${PORT_CONTROLLER} | |||||
${ports} = Create List ${port_normal} ${port_fuzzy} ${port_controller} | |||||
Generic Teardown @{ports} |
*** Settings *** | *** Settings *** | ||||
Suite Setup Fuzzy Setup Keyed Mumhash | Suite Setup Fuzzy Setup Keyed Mumhash | ||||
Suite Teardown Generic Teardown | |||||
Suite Teardown Fuzzy Teardown | |||||
Resource lib.robot | Resource lib.robot | ||||
*** Test Cases *** | *** Test Cases *** |
*** Settings *** | *** Settings *** | ||||
Suite Setup Fuzzy Setup Plain Mumhash | Suite Setup Fuzzy Setup Plain Mumhash | ||||
Suite Teardown Generic Teardown | |||||
Suite Teardown Fuzzy Teardown | |||||
Resource lib.robot | Resource lib.robot | ||||
*** Test Cases *** | *** Test Cases *** |
Cleanup Temporary Directory ${SLAVE_TMPDIR} | Cleanup Temporary Directory ${SLAVE_TMPDIR} | ||||
Remove File ${TMP_INCLUDE1} | Remove File ${TMP_INCLUDE1} | ||||
Remove File ${TMP_INCLUDE2} | Remove File ${TMP_INCLUDE2} | ||||
${port_normal} = Create List ${SOCK_STREAM} ${LOCAL_ADDR} ${PORT_NORMAL} | |||||
${port_fuzzy} = Create List ${SOCK_DGRAM} ${LOCAL_ADDR} ${PORT_FUZZY} | |||||
${port_controller} = Create List ${SOCK_STREAM} ${LOCAL_ADDR} ${PORT_CONTROLLER} | |||||
${port_normal_slave} = Create List ${SOCK_STREAM} ${LOCAL_ADDR} ${PORT_NORMAL_SLAVE} | |||||
${port_fuzzy_slave} = Create List ${SOCK_DGRAM} ${LOCAL_ADDR} ${PORT_FUZZY_SLAVE} | |||||
${port_controller_slave} = Create List ${SOCK_STREAM} ${LOCAL_ADDR} ${PORT_CONTROLLER_SLAVE} | |||||
${ports} = Create List ${port_normal} ${port_fuzzy} ${port_controller} ${port_normal_slave} ${port_fuzzy_slave} ${port_controller_slave} | |||||
: FOR ${i} IN @{ports} | |||||
\ Wait For Port @{i}[0] @{i}[1] @{i}[2] |
*** Settings *** | *** Settings *** | ||||
Suite Setup Fuzzy Setup Keyed Siphash | Suite Setup Fuzzy Setup Keyed Siphash | ||||
Suite Teardown Generic Teardown | |||||
Suite Teardown Fuzzy Teardown | |||||
Resource lib.robot | Resource lib.robot | ||||
*** Test Cases *** | *** Test Cases *** |
*** Settings *** | *** Settings *** | ||||
Suite Setup Fuzzy Setup Plain Siphash | Suite Setup Fuzzy Setup Plain Siphash | ||||
Suite Teardown Generic Teardown | |||||
Suite Teardown Fuzzy Teardown | |||||
Resource lib.robot | Resource lib.robot | ||||
*** Test Cases *** | *** Test Cases *** |
*** Settings *** | *** Settings *** | ||||
Suite Setup Fuzzy Setup Keyed Xxhash | Suite Setup Fuzzy Setup Keyed Xxhash | ||||
Suite Teardown Generic Teardown | |||||
Suite Teardown Fuzzy Teardown | |||||
Resource lib.robot | Resource lib.robot | ||||
*** Test Cases *** | *** Test Cases *** |
*** Settings *** | *** Settings *** | ||||
Suite Setup Fuzzy Setup Plain Xxhash | Suite Setup Fuzzy Setup Plain Xxhash | ||||
Suite Teardown Generic Teardown | |||||
Suite Teardown Fuzzy Teardown | |||||
Resource lib.robot | Resource lib.robot | ||||
*** Test Cases *** | *** Test Cases *** |
*** Settings *** | *** Settings *** | ||||
Suite Setup Generic Setup | Suite Setup Generic Setup | ||||
Suite Teardown Generic Teardown | |||||
Suite Teardown Simple Teardown | |||||
Library ${TESTDIR}/lib/rspamd.py | Library ${TESTDIR}/lib/rspamd.py | ||||
Resource lib.robot | Resource lib.robot | ||||
Resource ${TESTDIR}/lib/rspamd.robot | Resource ${TESTDIR}/lib/rspamd.robot |
*** Settings *** | *** Settings *** | ||||
Suite Setup Generic Setup | Suite Setup Generic Setup | ||||
Suite Teardown Generic Teardown | |||||
Suite Teardown Simple Teardown | |||||
Library ${TESTDIR}/lib/rspamd.py | Library ${TESTDIR}/lib/rspamd.py | ||||
Resource lib.robot | Resource lib.robot | ||||
Resource ${TESTDIR}/lib/rspamd.robot | Resource ${TESTDIR}/lib/rspamd.robot |
*** Settings *** | *** Settings *** | ||||
Suite Setup Generic Setup | Suite Setup Generic Setup | ||||
Suite Teardown Generic Teardown | |||||
Suite Teardown Simple Teardown | |||||
Library ${TESTDIR}/lib/rspamd.py | Library ${TESTDIR}/lib/rspamd.py | ||||
Resource ${TESTDIR}/lib/rspamd.robot | Resource ${TESTDIR}/lib/rspamd.robot | ||||
Variables ${TESTDIR}/lib/vars.py | Variables ${TESTDIR}/lib/vars.py |
*** Settings *** | *** Settings *** | ||||
Suite Setup SpamAssassin Setup | Suite Setup SpamAssassin Setup | ||||
Suite Teardown Generic Teardown | |||||
Suite Teardown Simple Teardown | |||||
Library ${TESTDIR}/lib/rspamd.py | Library ${TESTDIR}/lib/rspamd.py | ||||
Resource ${TESTDIR}/lib/rspamd.robot | Resource ${TESTDIR}/lib/rspamd.robot | ||||
Variables ${TESTDIR}/lib/vars.py | Variables ${TESTDIR}/lib/vars.py |
Shutdown Process With Children ${SLAVE_PID} | Shutdown Process With Children ${SLAVE_PID} | ||||
Cleanup Temporary Directory ${PROXY_TMPDIR} | Cleanup Temporary Directory ${PROXY_TMPDIR} | ||||
Cleanup Temporary Directory ${SLAVE_TMPDIR} | Cleanup Temporary Directory ${SLAVE_TMPDIR} | ||||
${port_normal} = Create List ${SOCK_STREAM} ${LOCAL_ADDR} ${PORT_NORMAL} | |||||
${port_proxy} = Create List ${SOCK_STREAM} ${LOCAL_ADDR} ${PORT_PROXY} | |||||
${ports} = Create List ${port_normal} ${port_proxy} | |||||
: FOR ${i} IN @{ports} | |||||
\ Wait For Port @{i}[0] @{i}[1] @{i}[2] |
import demjson | import demjson | ||||
import grp | import grp | ||||
import ipaddress | |||||
import os | import os | ||||
import os.path | import os.path | ||||
import psutil | import psutil | ||||
children = psutil.Process(pid=pid).children(recursive=False) | children = psutil.Process(pid=pid).children(recursive=False) | ||||
shutdown_process(pid) | shutdown_process(pid) | ||||
for child in children: | for child in children: | ||||
shutdown_process(child.pid) | |||||
try: | |||||
shutdown_process(child.pid) | |||||
except: | |||||
pass | |||||
def wait_for_port(proto, addr, num): | |||||
i = ipaddress.ip_address(addr) | |||||
if (i.version == 6): | |||||
af = socket.AF_INET6 | |||||
else: | |||||
af = socket.AF_INET | |||||
while True: | |||||
try: | |||||
s = socket.socket(af, proto) | |||||
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) | |||||
s.bind((addr, num)) | |||||
if (proto == socket.SOCK_STREAM): | |||||
s.listen(0) | |||||
break | |||||
except: | |||||
pass | |||||
time.sleep(0.1) | |||||
s.close() |
\ ... ELSE Fail 'RSPAMD_SCOPE must be Test or Suite' | \ ... ELSE Fail 'RSPAMD_SCOPE must be Test or Suite' | ||||
Generic Teardown | Generic Teardown | ||||
[Arguments] @{ports} | |||||
Shutdown Process With Children ${RSPAMD_PID} | Shutdown Process With Children ${RSPAMD_PID} | ||||
Cleanup Temporary Directory ${TMPDIR} | Cleanup Temporary Directory ${TMPDIR} | ||||
: FOR ${i} IN @{ports} | |||||
\ Wait For Port @{i}[0] @{i}[1] @{i}[2] | |||||
Log Logs | Log Logs | ||||
[Arguments] ${logfile} ${position} | [Arguments] ${logfile} ${position} | ||||
Log ${the_log} | Log ${the_log} | ||||
[Return] ${position} | [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} | |||||
Redis HSET | Redis HSET | ||||
[Arguments] ${hash} ${key} ${value} | [Arguments] ${hash} ${key} ${value} | ||||
${result} = Run Process redis-cli -h ${REDIS_ADDR} -p ${REDIS_PORT} | ${result} = Run Process redis-cli -h ${REDIS_ADDR} -p ${REDIS_PORT} | ||||
${result} = Run Rspamc -p -h ${LOCAL_ADDR}:${PORT_NORMAL} @{vargs} ${msg_file} | ${result} = Run Rspamc -p -h ${LOCAL_ADDR}:${PORT_NORMAL} @{vargs} ${msg_file} | ||||
[Return] ${result} | [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 | Sync Fuzzy Storage | ||||
[Arguments] @{vargs} | [Arguments] @{vargs} | ||||
${len} = Get Length ${vargs} | ${len} = Get Length ${vargs} |
import socket | |||||
KEY_PVT1 = 'ekd3x36tfa5gd76t6pa8hqif3ott7n1siuux68exbkk7ukscte9y' | KEY_PVT1 = 'ekd3x36tfa5gd76t6pa8hqif3ott7n1siuux68exbkk7ukscte9y' | ||||
KEY_PUB1 = 'm8kneubpcjsb8sbsoj7jy7azj9fdd3xmj63txni86a8ye9ncomny' | KEY_PUB1 = 'm8kneubpcjsb8sbsoj7jy7azj9fdd3xmj63txni86a8ye9ncomny' | ||||
LOCAL_ADDR = '127.0.0.1' | |||||
LOCAL_ADDR = u'127.0.0.1' | |||||
PORT_CONTROLLER = 56790 | PORT_CONTROLLER = 56790 | ||||
PORT_CONTROLLER_SLAVE = 56793 | PORT_CONTROLLER_SLAVE = 56793 | ||||
PORT_FUZZY = 56791 | PORT_FUZZY = 56791 | ||||
PORT_NORMAL = 56789 | PORT_NORMAL = 56789 | ||||
PORT_NORMAL_SLAVE = 56794 | PORT_NORMAL_SLAVE = 56794 | ||||
PORT_PROXY = 56795 | PORT_PROXY = 56795 | ||||
REDIS_ADDR = '127.0.0.1' | |||||
REDIS_ADDR = u'127.0.0.1' | |||||
REDIS_PORT = 56379 | REDIS_PORT = 56379 | ||||
RSPAMD_GROUP = 'nogroup' | RSPAMD_GROUP = 'nogroup' | ||||
RSPAMD_USER = 'nobody' | RSPAMD_USER = 'nobody' | ||||
SOCK_DGRAM = socket.SOCK_DGRAM | |||||
SOCK_STREAM = socket.SOCK_STREAM |