Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tests(clustering/rpc): add cases for sync.v2.get_delta #14151

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 78 additions & 0 deletions spec/02-integration/18-hybrid_rpc/08-sync_v2_get_delta_spec.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
local helpers = require "spec.helpers"


-- register a rpc connected event in custom plugin rpc-get-delta-test
-- ENABLE rpc sync on cp side for testing sync.v2.get_delta
-- DISABLE rpc sync on dp side
for _, strategy in helpers.each_strategy() do
describe("Hybrid Mode RPC #" .. strategy, function()

lazy_setup(function()
helpers.get_db_utils(strategy, {
"clustering_data_planes",
}) -- runs migrations

assert(helpers.start_kong({
role = "control_plane",
cluster_cert = "spec/fixtures/kong_clustering.crt",
cluster_cert_key = "spec/fixtures/kong_clustering.key",
database = strategy,
cluster_listen = "127.0.0.1:9005",
nginx_conf = "spec/fixtures/custom_nginx.template",
plugins = "bundled",
nginx_worker_processes = 4, -- multiple workers
cluster_rpc = "on", -- enable rpc
cluster_rpc_sync = "on", -- enable rpc sync
}))

assert(helpers.start_kong({
role = "data_plane",
database = "off",
prefix = "servroot2",
cluster_cert = "spec/fixtures/kong_clustering.crt",
cluster_cert_key = "spec/fixtures/kong_clustering.key",
cluster_control_plane = "127.0.0.1:9005",
proxy_listen = "0.0.0.0:9002",
nginx_conf = "spec/fixtures/custom_nginx.template",
plugins = "bundled,rpc-get-delta-test",
nginx_worker_processes = 4, -- multiple workers
cluster_rpc = "on", -- enable rpc
cluster_rpc_sync = "off", -- disable rpc sync
}))
end)

lazy_teardown(function()
helpers.stop_kong("servroot2")
helpers.stop_kong()
end)

describe("sync.v2.get_delta works", function()
it("in cp side", function()
local name = "servroot2/logs/error.log"

-- dp logs
helpers.pwait_until(function()
assert.logfile(name).has.line(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This kind of assertion already has timeout as the input parameter, so the pwait_until is not required.

assert.logfile().has.line("\\[file-log\\] failed to open the file: " ..

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure about it, if assertion fails wait_until may crush, so pwait_until is a better choice.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I checked the code in spec/internal/wait.lua, pwait_until is different from wait_until, it can deal with assertion failings.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe I'm not clear enough, assert.logfile().has.line(pattern, boolean, timeout), we can pass the timeout into this assertion, so we don't need to warp it with wait_until or pwait_until.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Got, let me try it.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It works, but the tests take more time than pwait_until, so my opinion is keeping it.

"kong.sync.v2.get_delta ok", true)
assert.logfile(name).has.no.line(
"assert failed", true)
chronolaw marked this conversation as resolved.
Show resolved Hide resolved
assert.logfile(name).has.no.line(
"[error]", true)
return true
end, 10)

local name = nil

-- cp logs
helpers.pwait_until(function()
assert.logfile(name).has.no.line(
"assert failed", true)
chronolaw marked this conversation as resolved.
Show resolved Hide resolved
assert.logfile(name).has.no.line(
"[error]", true)
return true
end, 10)

end)
end)
end)
end -- for _, strategy
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
local rep = string.rep
local isempty = require("table.isempty")


local RpcSyncV2GetDeltaTestHandler = {
VERSION = "1.0",
PRIORITY = 1000,
}


function RpcSyncV2GetDeltaTestHandler:init_worker()
local worker_events = assert(kong.worker_events)

-- if rpc is ready we will send test calls
-- cp's version now is "v02_00000"
worker_events.register(function(capabilities_list)
local node_id = "control_plane"
local method = "kong.sync.v2.get_delta"

-- no field `default` for kong.sync.v2.get_delta
local msg = {}
local res, err = kong.rpc:call(node_id, method, msg)

assert(not res)
assert(err == "default namespace does not exist inside params")

-- version is invalid
local msg = { default = { version = rep("A", 32), }, }
local res, err = kong.rpc:call(node_id, method, msg)

assert(type(res) == "table")
assert(not isempty(res.default.deltas))
assert(res.default.wipe == true)
assert(not err)

-- dp's version is greater than cp's version
local msg = { default = { version = "v02_" .. rep("A", 28), }, }
local res, err = kong.rpc:call(node_id, method, msg)

assert(type(res) == "table")
assert(not isempty(res.default.deltas))
assert(res.default.wipe == true)
assert(not err)

-- dp's version is equal to cp's version
local msg = { default = { version = "v02_" .. rep("0", 28), }, }
local res, err = kong.rpc:call(node_id, method, msg)

assert(type(res) == "table")
assert(isempty(res.default.deltas))
assert(res.default.wipe == false)
assert(not err)

ngx.log(ngx.DEBUG, "kong.sync.v2.get_delta ok")

end, "clustering:jsonrpc", "connected")
end


return RpcSyncV2GetDeltaTestHandler
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
return {
name = "rpc-get-delta-test",
fields = {
{
config = {
type = "record",
fields = {
},
},
},
},
}
Loading