diff options
Diffstat (limited to 'test/functional/lua/http.lua')
-rw-r--r-- | test/functional/lua/http.lua | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/test/functional/lua/http.lua b/test/functional/lua/http.lua new file mode 100644 index 0000000..c5b91ff --- /dev/null +++ b/test/functional/lua/http.lua @@ -0,0 +1,169 @@ +local rspamd_http = require "rspamd_http" +local rspamd_logger = require "rspamd_logger" + +local function http_symbol(task) + + local url = tostring(task:get_request_header('url')) + local method = tostring(task:get_request_header('method')) + task:insert_result('method_' .. method, 1.0) + + local function http_callback(err, code, body) + if err then + rspamd_logger.errx('http_callback error: ' .. err) + task:insert_result('HTTP_ERROR', 1.0, err) + else + task:insert_result('HTTP_' .. code, 1.0, body) + end + end + + local function http_dns_callback(err, code, body) + if err then + rspamd_logger.errx('http_dns_callback error: ' .. err) + task:insert_result('HTTP_DNS_ERROR', 1.0, err) + else + task:insert_result('HTTP_DNS_' .. code, 1.0, body) + end + end + + rspamd_logger.errx(task, 'do http request with callback') + rspamd_http.request({ + url = 'http://127.0.0.1:18080' .. url, + task = task, + method = method, + callback = http_callback, + timeout = 1, + }) + + --[[ request to this address involved DNS resolver subsystem ]] + rspamd_logger.errx(task, 'do http request with callback + dns resolving') + rspamd_http.request({ + url = 'http://site.resolveme:18080' .. url, + task = task, + method = method, + callback = http_dns_callback, + timeout = 1, + }) + + rspamd_logger.errx(task, 'rspamd_http.request[before]') + + local err, response = rspamd_http.request({ + url = 'http://127.0.0.1:18080' .. url, + task = task, + method = method, + timeout = 1, + }) + rspamd_logger.errx(task, 'rspamd_http.request[done] err: %1 response:%2', err, response) + + if not err then + task:insert_result('HTTP_CORO_' .. response.code, 1.0, response.content) + else + task:insert_result('HTTP_CORO_ERROR', 1.0, err) + end + + rspamd_logger.errx(task, 'do http request after coroutine finished') + err, response = rspamd_http.request({ + url = 'http://site.resolveme:18080' .. url, + task = task, + method = method, + timeout = 1, + }) + + if not err then + task:insert_result('HTTP_CORO_DNS_' .. response.code, 1.0, response.content) + else + task:insert_result('HTTP_CORO_DNS_ERROR', 1.0, err) + end +end + + +local function finish(task) + rspamd_logger.errx('function finish') + local err, response = rspamd_http.request({ + url = 'http://site.resolveme:18080/timeout', + task = task, + method = 'get', + timeout = 1, + }) + if err then + task:insert_result('HTTP_CORO_DNS_FINISH_ERROR', 1.0, err) + else + task:insert_result('HTTP_CORO_DNS_FINISH_' .. response.code, 1.0, response.content) + end +end + +local function periodic(cfg, ev_base) + local err, response = rspamd_http.request({ + url = 'http://site.resolveme:18080/request/periodic', + config = cfg, + }) + if err then + rspamd_logger.errx('periodic err ' .. err) + else + rspamd_logger.errx('periodic success ' .. response.content) + end + + return false +end + +rspamd_config:register_symbol({ + name = 'SIMPLE_HTTP_TEST', + score = 1.0, + callback = http_symbol, + no_squeeze = true, + flags = 'coro' +}) + +local function http_large_symbol(task) + if task:get_queue_id() == 'SSL Large HTTP request' then + local data = {} + for i = 1,2 do + local st = {} + for j=1,300000 do + st[j] = 't' + end + data[i] = table.concat(st) + end + data[#data + 1] = '\n' + + local function http_callback(err, code, body) + if err then + rspamd_logger.errx('http_callback error: ' .. err) + task:insert_result('HTTP_ERROR', 1.0, err) + else + task:insert_result('HTTP_SSL_LARGE', 1.0) + end + end + rspamd_http.request({ + url = 'https://127.0.0.1:18081/', + task = task, + method = 'post', + callback = http_callback, + timeout = 10, + body = data, + no_ssl_verify = true, + }) + end +end +rspamd_config:register_symbol({ + name = 'LARGE_HTTP_TEST', + score = 1.0, + callback = http_large_symbol, + no_squeeze = true, + flags = 'coro' +}) + +rspamd_config:register_finish_script(finish) + +rspamd_config:add_on_load(function(cfg, ev_base, worker) + local err, response = rspamd_http.request({ + url = 'http://site.resolveme:18080/request/add_on_load', + config = cfg, + }) + if err then + rspamd_logger.errx('add_on_load err ' .. err) + else + rspamd_logger.errx('add_on_load success ' .. response.content) + end + + rspamd_config:add_periodic(ev_base, 0, periodic, false) +end) |