Files
2026-07-13 12:32:21 +08:00

136 lines
3.8 KiB
Lua

local helpers = require "spec.helpers"
local sam = require "spec.fixtures.aws-sam"
local utils = require "spec.helpers.perf.utils"
local sam_describe
do
local arch_type = sam.get_os_architecture()
local is_sam_installed, _ = sam.is_sam_installed()
if arch_type ~= "aarch64" and is_sam_installed then
sam_describe = describe
else
sam_describe = pending
end
end
-- SAM tool can only run on x86_64/arm64 platform so bypass when aarch64
if sam.get_os_architecture() ~= "aarch64" then
for _, strategy in helpers.each_strategy() do
sam_describe("Plugin: AWS Lambda with SAM local lambda service [#" .. strategy .. "]", function()
local proxy_client
local admin_client
local sam_port
lazy_setup(function ()
local ret
ret, sam_port = sam.start_local_lambda()
if not ret then
assert(false, sam_port)
end
helpers.pwait_until(function()
local _, err = utils.wait_output("curl -s http://localhost:" .. sam_port .. "/2015-03-31/functions/HelloWorldFunction/invocations -d '{}'")
assert.is_nil(err)
end, 1200)
local bp = helpers.get_db_utils(strategy, {
"routes",
"services",
"plugins",
}, { "aws-lambda" })
local route1 = bp.routes:insert {
hosts = { "lambda.test" },
}
bp.plugins:insert {
name = "aws-lambda",
route = { id = route1.id },
config = {
host = "localhost",
port = sam_port,
disable_https = true,
aws_key = "mock-key",
aws_secret = "mock-secret",
aws_region = "us-east-1",
function_name = "HelloWorldFunction",
log_type = "None",
},
}
local route2 = bp.routes:insert {
hosts = { "lambda2.test" },
}
bp.plugins:insert {
name = "aws-lambda",
route = { id = route2.id },
config = {
host = "localhost",
port = sam_port,
disable_https = true,
aws_key = "mock-key",
aws_secret = "mock-secret",
aws_region = "us-east-1",
function_name = "HelloWorldFunction",
log_type = "None",
is_proxy_integration = true,
},
}
end)
lazy_teardown(function()
sam.stop_local_lambda()
end)
before_each(function()
proxy_client = helpers.proxy_client()
admin_client = helpers.admin_client()
end)
after_each(function ()
proxy_client:close()
admin_client:close()
end)
sam_describe("with local HTTP endpoint", function ()
lazy_setup(function()
assert(helpers.start_kong({
database = strategy,
plugins = "aws-lambda",
nginx_conf = "spec/fixtures/custom_nginx.template",
}, nil, nil, nil))
end)
lazy_teardown(function()
helpers.stop_kong()
end)
it("invoke a simple function", function ()
local res = assert(proxy_client:send {
method = "GET",
path = "/",
headers = {
host = "lambda.test"
}
})
assert.res_status(200, res)
end)
it("can extract proxy response correctly", function ()
local res = assert(proxy_client:send {
method = "GET",
path = "/",
headers = {
host = "lambda2.test"
}
})
assert.res_status(201, res)
local body = assert.response(res).has.jsonbody()
assert.equal("hello world", body.message)
end)
end)
end)
end
end