From 68504ca7190c499c4f28c43f87b2ddb187909778 Mon Sep 17 00:00:00 2001 From: owl Date: Wed, 20 Dec 2023 15:00:00 +0800 Subject: [PATCH] fix: fix code --- kong/pdk/private/checks.lua | 2 +- .../header_transformer.lua | 3 -- t/01-pdk/08-response/05-set_header.t | 43 +++++++++++++++++-- 3 files changed, 40 insertions(+), 8 deletions(-) diff --git a/kong/pdk/private/checks.lua b/kong/pdk/private/checks.lua index 82f7a276b63..4002ea19f4a 100644 --- a/kong/pdk/private/checks.lua +++ b/kong/pdk/private/checks.lua @@ -63,7 +63,7 @@ function checks.validate_header(name, value) value = tostring(value) else error(fmt("invalid header value for %q: got %s, expected " .. - "string, number or boolean, table", name, tvalue), 3) + "table, string, number or boolean", name, tvalue), 3) end end return value diff --git a/kong/plugins/response-transformer/header_transformer.lua b/kong/plugins/response-transformer/header_transformer.lua index d61322e71c1..b8c539b0614 100644 --- a/kong/plugins/response-transformer/header_transformer.lua +++ b/kong/plugins/response-transformer/header_transformer.lua @@ -97,9 +97,6 @@ function _M.transform_headers(conf, headers) if headers[old_name] ~= nil and new_name then local value = headers[old_name] -- header value can be a table, in which case we take the first value - if type(value) == "table" then - value = value[1] - end set_header(new_name, value) clear_header(old_name) end diff --git a/t/01-pdk/08-response/05-set_header.t b/t/01-pdk/08-response/05-set_header.t index 57a9257d113..49881ae8837 100644 --- a/t/01-pdk/08-response/05-set_header.t +++ b/t/01-pdk/08-response/05-set_header.t @@ -77,7 +77,7 @@ invalid header name "127001": got number, expected string -=== TEST 3: response.set_header() errors if value is not a string +=== TEST 3: response.set_header() errors if value is not a table contain array of string --- http_config eval: $t::Util::HttpConfig --- config location = /t { @@ -89,8 +89,9 @@ invalid header name "127001": got number, expected string local PDK = require "kong.pdk" local pdk = PDK.new() + local set_header = { {} } - local ok, err = pcall(pdk.response.set_header, "foo", {}) + local ok, err = pcall(pdk.response.set_header, "foo", set_header) if not ok then ngx.ctx.err = err end @@ -104,7 +105,7 @@ invalid header name "127001": got number, expected string --- request GET /t --- response_body chop -invalid header value for "foo": got table, expected string, number or boolean +invalid header value in array "foo": got table, expected string --- no_error_log [error] @@ -137,7 +138,7 @@ invalid header value for "foo": got table, expected string, number or boolean --- request GET /t --- response_body chop -invalid header value for "foo": got nil, expected string, number or boolean +invalid header value for "foo": got nil, expected table, string, number or boolean --- no_error_log [error] @@ -277,3 +278,37 @@ GET /t Transfer-Encoding: chunked --- error_log manually setting Transfer-Encoding. Ignored. + + +=== TEST 8: response.set_header() with header table +--- http_config eval: $t::Util::HttpConfig +--- config + location = /t { + content_by_lua_block { + } + + header_filter_by_lua_block { + ngx.header.content_length = nil + + local PDK = require "kong.pdk" + local pdk = PDK.new() + local set_header = {"a", "b"} + + pdk.response.set_header("X-Foo", set_header) + } + + body_filter_by_lua_block { + local new_headers = ngx.resp.get_headers() + + local cjson = require("cjson") + ngx.arg[1] = "X-Foo: {" .. new_headers["X-Foo"][1] .. "," .. new_headers["X-Foo"][2] .. "}" + + ngx.arg[2] = true + } + } +--- request +GET /t +--- response_body chop +X-Foo: {a,b} +--- no_error_log +[error] \ No newline at end of file