Skip to content

Commit

Permalink
tests(clustering/rpc): add integration test for deltas validation (#1…
Browse files Browse the repository at this point in the history
  • Loading branch information
chronolaw authored Feb 5, 2025
1 parent cb90115 commit 70b4689
Show file tree
Hide file tree
Showing 4 changed files with 123 additions and 4 deletions.
72 changes: 72 additions & 0 deletions spec/02-integration/18-hybrid_rpc/10-validate_deltas_spec.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
local helpers = require "spec.helpers"


-- mock kong.sync.v2.get_delta in custom plugin rpc-validation-test
-- DISABLE rpc sync on cp side
-- ENABLE 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,rpc-validation-test",
nginx_worker_processes = 4, -- multiple workers
cluster_rpc = "on", -- enable rpc
cluster_rpc_sync = "off", -- disable 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-validation-test",
nginx_worker_processes = 4, -- multiple workers
cluster_rpc = "on", -- enable rpc
cluster_rpc_sync = "on", -- enable rpc sync
}))
end)

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

describe("sync.v2 validation works", function()
it("on dp side", function()
local name = "servroot2/logs/error.log"

-- dp logs
assert.logfile(name).has.line(
"[error]", true, 10)
assert.logfile(name).has.line(
"unable to create worker mutex and sync", true, 10)
assert.logfile(name).has.line(
"'name': required field missing", true, 10)

local name = nil

-- cp logs
assert.logfile(name).has.line(
"kong.sync.v2.get_delta ok", true, 10)
assert.logfile(name).has.no.line(
"[error]", true, 0)

end)
end)
end)
end -- for _, strategy
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,6 @@ function RpcSyncV2NotifyNewVersioinTestHandler:init_worker()
entity = {
id = fake_uuid,
name = "default",
-- It must contain feild "config" and "meta", otherwise the deltas
-- validation will fail with the error "required field missing".
config = {},
meta = {},
},
type = "workspaces",
version = latest_version,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
local fmt = string.format


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


function RpcSyncV2ValidationHandler:init_worker()
-- mock function on cp side
kong.rpc.callbacks:register("kong.sync.v2.get_delta", function(node_id, current_versions)
local latest_version = fmt("v02_%028x", 10)

local fake_uuid = "00000000-0000-0000-0000-111111111111"

-- a basic config data,
-- it has no field "name",
-- and will cause validation error
local deltas = {
{
entity = {
id = fake_uuid,
},
type = "workspaces",
version = latest_version,
ws_id = fake_uuid,
},
}

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

return { default = { deltas = deltas, wipe = true, }, }
end)

end


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

1 comment on commit 70b4689

@github-actions
Copy link
Contributor

Choose a reason for hiding this comment

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

Bazel Build

Docker image available kong/kong-dev:70b4689c8694d7945e524094745dff80b135a147
Artifacts available https://github.com/Kong/kong/actions/runs/13159340371

Please sign in to comment.