*** Settings *** Library Collections Library OperatingSystem Library Process *** Keywords *** Check Controller Errors @{result} = HTTP GET ${LOCAL_ADDR} ${PORT_CONTROLLER} /errors Should Be Equal As Integers ${result}[0] 200 Log ${result}[1] Check Pidfile [Arguments] ${pidfile} ${timeout}=1 min Wait Until Created ${pidfile} timeout=${timeout} ${size} = Get File Size ${pidfile} Should Not Be Equal As Integers ${size} 0 Check Rspamc [Arguments] ${result} @{args} &{kwargs} Run Keyword If ${result.rc} != 0 Log ${result.stderr} ${has_rc} = Evaluate 'rc' in $kwargs ${inverse} = Evaluate 'inverse' in $kwargs ${re} = Evaluate 're' in $kwargs ${rc} = Set Variable If ${has_rc} == True ${kwargs}[rc] 0 FOR ${i} IN @{args} Run Keyword If ${re} == True Check Rspamc Match Regexp ${result.stdout} ${i} ${inverse} ... ELSE Check Rspamc Match String ${result.stdout} ${i} ${inverse} END Run Keyword If @{args} == @{EMPTY} Check Rspamc Match Default ${result.stdout} ${inverse} Should Be Equal As Integers ${result.rc} ${rc} Check Rspamc Match Default [Arguments] ${subject} ${inverse} Run Keyword If ${inverse} == False Should Contain ${subject} success = true ... ELSE Should Not Contain ${subject} success = true Check Rspamc Match Regexp [Arguments] ${subject} ${re} ${inverse} Run Keyword If ${inverse} == False Should Match Regexp ${subject} ${re} ... ELSE Should Not Match Regexp ${subject} ${re} Check Rspamc Match String [Arguments] ${subject} ${str} ${inverse} Run Keyword If ${inverse} == False Should Contain ${subject} ${str} ... ELSE Should Not Contain ${subject} ${str} Generic Setup [Arguments] @{vargs} &{kwargs} &{d} = Run Rspamd @{vargs} &{kwargs} ${keys} = Get Dictionary Keys ${d} FOR ${i} IN @{keys} Run Keyword If '${RSPAMD_SCOPE}' == 'Suite' Set Suite Variable ${${i}} ${d}[${i}] ... ELSE IF '${RSPAMD_SCOPE}' == 'Test' Set Test Variable ${${i}} ${d}[${i}] ... ELSE Fail 'RSPAMD_SCOPE must be Test or Suite' END Generic Teardown Run Keyword If '${CONTROLLER_ERRORS}' == 'True' Check Controller Errors Shutdown Process With Children ${RSPAMD_PID} Log does not contain segfault record Save Run Results ${TMPDIR} rspamd.log redis.log rspamd.conf clickhouse-config.xml Collect Lua Coverage Cleanup Temporary Directory ${TMPDIR} Log does not contain segfault record ${log} = Get File ${TMPDIR}/rspamd.log encoding_errors=ignore Should not contain ${log} Segmentation fault: msg=Segmentation fault detected Normal Teardown Generic Teardown Redis HSET [Arguments] ${hash} ${key} ${value} ${result} = Run Process redis-cli -h ${REDIS_ADDR} -p ${REDIS_PORT} ... HSET ${hash} ${key} ${value} Run Keyword If ${result.rc} != 0 Log ${result.stderr} 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 ${template} = Get File ${TESTDIR}/configs/redis-server.conf ${config} = Replace Variables ${template} Create File ${TMPDIR}/redis-server.conf ${config} Log ${config} ${result} = Run Process redis-server ${TMPDIR}/redis-server.conf Run Keyword If ${result.rc} != 0 Log ${result.stderr} Should Be Equal As Integers ${result.rc} 0 Wait Until Keyword Succeeds 5x 1 sec Check Pidfile ${TMPDIR}/redis.pid timeout=0.5s Wait Until Keyword Succeeds 5x 1 sec Redis Check ${REDIS_ADDR} ${REDIS_PORT} ${REDIS_PID} = Get File ${TMPDIR}/redis.pid Run Keyword If '${REDIS_SCOPE}' == 'Test' Set Test Variable ${REDIS_PID} ... ELSE IF '${REDIS_SCOPE}' == 'Suite' Set Suite Variable ${REDIS_PID} ${redis_log} = Get File ${TMPDIR}/redis.log Log ${redis_log} Run Nginx ${template} = Get File ${TESTDIR}/configs/nginx.conf ${config} = Replace Variables ${template} Create File ${TMPDIR}/nginx.conf ${config} Log ${config} ${result} = Run Process nginx -c ${TMPDIR}/nginx.conf Run Keyword If ${result.rc} != 0 Log ${result.stderr} Should Be Equal As Integers ${result.rc} 0 Wait Until Keyword Succeeds 10x 1 sec Check Pidfile ${TMPDIR}/nginx.pid timeout=0.5s Wait Until Keyword Succeeds 5x 1 sec TCP Connect ${NGINX_ADDR} ${NGINX_PORT} ${NGINX_PID} = Get File ${TMPDIR}/nginx.pid Run Keyword If '${NGINX_SCOPE}' == 'Test' Set Test Variable ${NGINX_PID} ... ELSE IF '${NGINX_SCOPE}' == 'Suite' Set Suite Variable ${NGINX_PID} ${nginx_log} = Get File ${TMPDIR}/nginx.log Log ${nginx_log} Run Rspamc [Arguments] @{args} ${result} = Run Process ${RSPAMC} -t 60 --header Queue-ID\=${TEST NAME} ... @{args} env:LD_LIBRARY_PATH=${TESTDIR}/../../contrib/aho-corasick Log ${result.stdout} [Return] ${result} Run Rspamd [Arguments] @{vargs} &{kwargs} ${has_CONFIG} = Evaluate 'CONFIG' in $kwargs ${has_TMPDIR} = Evaluate 'TMPDIR' in $kwargs ${CONFIG} = Set Variable If '${has_CONFIG}' == 'True' ${kwargs}[CONFIG] ${CONFIG} &{d} = Create Dictionary ${tmpdir} = Run Keyword If '${has_TMPDIR}' == 'True' Set Variable ${kwargs}[TMPDIR] ... ELSE Make Temporary Directory Set Directory Ownership ${tmpdir} ${RSPAMD_USER} ${RSPAMD_GROUP} ${template} = Get File ${CONFIG} FOR ${i} IN @{vargs} ${newvalue} = Replace Variables ${${i}} Set To Dictionary ${d} ${i}=${newvalue} END ${config} = Replace Variables ${template} ${config} = Replace Variables ${config} Log ${config} Create File ${tmpdir}/rspamd.conf ${config} ${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} 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_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} Sync Fuzzy Storage [Arguments] @{vargs} ${len} = Get Length ${vargs} ${result} = Run Keyword If $len == 0 Run Process ${RSPAMADM} control -s ... ${TMPDIR}/rspamd.sock fuzzy_sync ... ELSE Run Process ${RSPAMADM} control -s ${vargs}[0]/rspamd.sock ... fuzzy_sync Log ${result.stdout} Sleep 0.1s Try give fuzzy storage time to sync