kong--kong
141 行
3.7 KiB
Lua
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
|
|
|