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

Merged
merged 7 commits into from
Jan 16, 2025
Merged
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(
chronolaw marked this conversation as resolved.
Show resolved Hide resolved
"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