项目文件夹

文件
2026-07-13 12:32:21 +08:00

141 行
3.7 KiB
Lua

local bu = require "spec.fixtures.balancer_utils"
local helpers = require "spec.helpers"
for _, strategy in helpers.each_strategy() do
describe("Balancing with round-robin #" .. strategy, function()
local bp, proxy_client
lazy_setup(function()
bp = bu.get_db_utils_for_dc_and_admin_api(strategy, {
"routes",
"services",
"plugins",
"upstreams",
"targets",
})
local fixtures = {
http_mock = {
least_connections = [[
server {
listen 10001;
location ~ "/recreate_test" {
content_by_lua_block {
ngx.sleep(700)
ngx.exit(ngx.OK)
}
}
}
server {
listen 10002;
location ~ "/recreate_test" {
content_by_lua_block {
ngx.say("host is: ", ngx.var.http_host)
ngx.exit(ngx.OK)
}
}
}
]]
},
dns_mock = helpers.dns_mock.new()
}
fixtures.dns_mock:A {
name = "upstream.example.com",
address = "127.0.0.1",
}
assert(helpers.start_kong({
database = strategy,
nginx_conf = "spec/fixtures/custom_nginx.template",
worker_state_update_frequency = bu.CONSISTENCY_FREQ,
}, nil, nil, fixtures))
end)
lazy_teardown(function()
helpers.stop_kong()
end)
before_each(function()
proxy_client = helpers.proxy_client()
end)
after_each(function()
if proxy_client then
proxy_client:close()
end
end)
it("balancer retry updates Host header in request buffer", function()
bu.begin_testcase_setup(strategy, bp)
local upstream_name, upstream_id = bu.add_upstream(bp)
bu.add_target(bp, upstream_id, "upstream.example.com", 10001) -- this will timeout
bu.add_target(bp, upstream_id, "upstream.example.com", 10002)
local service = assert(bp.services:insert({
url = "http://" .. upstream_name,
read_timeout = 500,
}))
bp.routes:insert({
service = { id = service.id },
paths = { "/", },
})
bu.end_testcase_setup(strategy, bp, "strict")
helpers.wait_until(function()
local res = assert(proxy_client:send {
method = "GET",
path = "/recreate_test",
})
return pcall(function()
local body = assert.response(res).has_status(200)
assert.equal("host is: upstream.example.com:10002", body)
end)
end, 10)
end)
it("balancer retry doesn't update Host if preserve_host is true", function()
bu.begin_testcase_setup(strategy, bp)
local upstream_name, upstream_id = bu.add_upstream(bp)
bu.add_target(bp, upstream_id, "upstream.example.com", 10001) -- this will timeout
bu.add_target(bp, upstream_id, "upstream.example.com", 10002)
local service = assert(bp.services:insert({
url = "http://" .. upstream_name,
read_timeout = 500,
}))
bp.routes:insert({
service = { id = service.id },
preserve_host = true,
paths = { "/", },
hosts = { "test.test" }
})
bu.end_testcase_setup(strategy, bp, "strict")
helpers.wait_until(function()
local res = assert(proxy_client:send {
method = "GET",
path = "/recreate_test",
headers = { ["Host"] = "test.test" },
})
return pcall(function()
local body = assert.response(res).has_status(200)
assert.equal("host is: test.test", body)
end)
end, 10)
end)
end)
end