From 722c3928f0076fe738d073f69d31204b9fd0d70b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Luk=C3=A1=C5=A1=20Je=C5=BEek?= Date: Wed, 21 Apr 2021 11:33:40 +0200 Subject: [PATCH] daemon/http: add expose headers config test --- tests/config/doh2.test.lua | 76 +++++++++++++++++++++++++++++++++++++- 1 file changed, 75 insertions(+), 1 deletion(-) diff --git a/tests/config/doh2.test.lua b/tests/config/doh2.test.lua index 2c4779e90..3fa907301 100644 --- a/tests/config/doh2.test.lua +++ b/tests/config/doh2.test.lua @@ -353,6 +353,79 @@ else modules.unload('view') end + local function test_headers() + local get_desc = nil + + local function check_headers_zero_len(state, req) + same(tonumber(req.qsource.headers.len), 0, get_desc()) + return state + end + + local function check_headers_value(state, req) + local value = ffi.string(req.qsource.headers.at[0].value) + same(value, 'lua test config.doh2', get_desc()) + return state + end + + local function check_headers_more_values(state, req) + local checked = 0 + for i = 1, tonumber(req.qsource.headers.len) do + local name = ffi.string(req.qsource.headers.at[i - 1].name) + local value = ffi.string(req.qsource.headers.at[i - 1].value) + if (name == 'user-agent') then + same(value, 'lua test config.doh2', get_desc() .. ' - user-agent') + checked = checked + 1 + elseif (name == ':scheme') then + same(value, 'https', get_desc() .. ' - :scheme') + checked = checked + 1 + end + end + + same(checked, 2, get_desc() .. ' - two checked') + return state + end + + local req = req_templ:clone() + req.headers:upsert(':method', 'GET') + req.headers:upsert(':path', '/doh?dns=' -- headers.test. A + .. 'AAABAAABAAAAAAAAB2hlYWRlcnMEdGVzdAAAAQAB') + req.headers:upsert('user-agent', 'lua test config.doh2') + req.headers:upsert(':scheme', 'https') + + get_desc = function() return 'exposed HTTP headers: no headers' end + rule_desc = policy.add(policy.all(check_headers_zero_len)) + check_ok(req, get_desc()) + get_desc = function() return 'exposed HTTP headers: empty string' end + net.doh_headers('') + check_ok(req, get_desc()) + get_desc = function() return 'exposed HTTP headers: empty table' end + net.doh_headers({''}) + check_ok(req, get_desc()) + policy.del(rule_desc.id) + + get_desc = function() return 'exposed HTTP headers: take just one string parameter' end + boom(net.doh_headers, {'user-agent', ':method'}, get_desc()) + get_desc = function() return 'exposed HTTP headers: take just one table parameter' end + boom(net.doh_headers, {{'user-agent'}, {':method'}}, get_desc()) + + get_desc = function() return 'exposed HTTP headers: take one header - as string' end + net.doh_headers('user-agent') + rule_desc = policy.add(policy.all(check_headers_value)) + check_ok(req, get_desc()) + get_desc = function() return 'exposed HTTP headers: take one header - as table' end + net.doh_headers({ 'user-agent' }) + check_ok(req, get_desc()) + policy.del(rule_desc.id) + + get_desc = function() return 'exposed HTTP headers: take more headers' end + net.doh_headers({ ':method', 'user-agent', ':path', ':scheme' }) + rule_desc = policy.add(policy.all(check_headers_more_values)) + check_ok(req, get_desc()) + policy.del(rule_desc.id) + + + end + -- not implemented -- local function test_post_unsupp_accept() -- local req = assert(req_templ:clone()) @@ -387,7 +460,8 @@ else --test_get_invalid_chars, --test_unsupp_method, test_dstaddr, - test_srcaddr + test_srcaddr, + test_headers } return tests -- 2.47.3