kong/spec/02-integration/01-helpers/02-blueprints_spec.lua (216 lines of code) (raw):
local DB = require "kong.db"
local helpers = require "spec.helpers"
local Blueprints = require "spec.fixtures.blueprints"
local UUID_PATTERN = "%x%x%x%x%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%x%x%x%x%x%x%x%x"
for _, strategy in helpers.each_strategy() do
describe(string.format("blueprints db [#%s]", strategy), function()
local bp
lazy_setup(function()
local db = assert(DB.new(helpers.test_conf, strategy))
kong.db = db
assert(db:init_connector())
assert(db.plugins:load_plugin_schemas(helpers.test_conf.loaded_plugins))
assert(db:truncate())
bp = assert(Blueprints.new(db))
end)
local service
it("inserts services", function()
local s = bp.services:insert()
assert.matches(UUID_PATTERN, s.id)
assert.equal("http", s.protocol)
assert.equal("number", type(s.created_at))
assert.equal("number", type(s.updated_at))
local s2 = bp.services:insert({ protocol = "https" })
assert.matches(UUID_PATTERN, s2.id)
assert.equal("https", s2.protocol)
assert.equal("number", type(s2.created_at))
assert.equal("number", type(s2.updated_at))
service = s
end)
it("inserts routes", function()
if not service then
assert.fail("could not run: missing Service from previous test")
end
local r = bp.routes:insert({
methods = { "GET" },
hosts = { "example.com" },
})
assert.matches(UUID_PATTERN, r.id)
assert.same({ "http", "https" }, r.protocols)
assert.same({ "GET" }, r.methods)
assert.equal("number", type(r.created_at))
assert.equal("number", type(r.updated_at))
assert.equal(0, r.regex_priority)
assert.not_nil(r.service) -- automatically inserted by blueprint as well
local r2 = bp.routes:insert({
protocols = { "http" },
methods = { "GET" },
regex_priority = 200,
service = service,
})
assert.matches(UUID_PATTERN, r2.id)
assert.same({ "http" }, r2.protocols)
assert.same({ "GET" }, r2.methods)
assert.equal("number", type(r.created_at))
assert.equal("number", type(r.updated_at))
assert.equal(200, r2.regex_priority)
end)
end)
end
for _, strategy in helpers.each_strategy() do
local bp, db
lazy_setup(function()
db = assert(DB.new(helpers.test_conf, strategy))
assert(db:init_connector())
assert(db.plugins:load_plugin_schemas(helpers.test_conf.loaded_plugins))
bp = assert(Blueprints.new(db))
end)
lazy_teardown(function()
ngx.shared.kong_cassandra:flush_expired()
end)
describe(string.format("blueprints for #%s", strategy), function()
it("inserts oauth2 plugins", function()
local s = bp.services:insert()
local p = bp.oauth2_plugins:insert({ service = { id = s.id } })
assert.equal("oauth2", p.name)
assert.equal(s.id, p.service.id)
assert.same({ "email", "profile" }, p.config.scopes)
end)
it("inserts certificates", function()
local c = bp.certificates:insert()
assert.equal("string", type(c.cert))
assert.equal("string", type(c.key))
end)
it("inserts snis", function()
local c = bp.certificates:insert()
local s = bp.snis:insert({ certificate = c })
assert.equal("string", type(s.name))
local s2 = bp.snis:insert()
assert.equal("string", type(s2.name))
assert.equal("string", type(s2.certificate.id))
end)
it("inserts consumers", function()
local c = bp.consumers:insert()
assert.equal("string", type(c.custom_id))
assert.equal("string", type(c.username))
end)
it("inserts plugins", function()
local p = bp.plugins:insert({ name = "dummy" })
assert.matches(UUID_PATTERN, p.id)
end)
it("inserts targets", function()
local t = bp.targets:insert({target = "localhost:3000"})
assert.matches(UUID_PATTERN, t.id)
assert.equals("localhost:3000", t.target)
assert.equals(10, t.weight)
end)
it("inserts acl plugins", function()
local p = bp.acl_plugins:insert({ config = { allow = {"admin"} } })
assert.equals("acl", p.name)
assert.same({"admin"}, p.config.allow)
assert.matches(UUID_PATTERN, p.id)
end)
it("inserts cors plugins", function()
local p = bp.cors_plugins:insert()
assert.equals("cors", p.name)
assert.matches(UUID_PATTERN, p.id)
end)
it("inserts loggly plugins", function()
local p = bp.loggly_plugins:insert({ config = { key = "foobar" } })
assert.equals("loggly", p.name)
assert.equals("foobar", p.config.key)
assert.matches(UUID_PATTERN, p.id)
end)
it("inserts tcp_log_plugins", function()
local p = bp.tcp_log_plugins:insert()
assert.equals("tcp-log", p.name)
assert.equals("127.0.0.1", p.config.host)
assert.equals(35001, p.config.port)
assert.matches(UUID_PATTERN, p.id)
end)
it("inserts udp_log_plugins", function()
local p = bp.udp_log_plugins:insert()
assert.equals("udp-log", p.name)
assert.equals("127.0.0.1", p.config.host)
assert.equals(35001, p.config.port)
assert.matches(UUID_PATTERN, p.id)
end)
it("inserts jwt plugins", function()
local p = bp.jwt_plugins:insert()
assert.equals("jwt", p.name)
assert.matches(UUID_PATTERN, p.id)
end)
it("inserts jwt secrets", function()
local c = bp.consumers:insert()
local s = bp.jwt_secrets:insert({ consumer = { id = c.id } })
assert.equals("secret", s.secret)
assert.equals("HS256", s.algorithm)
assert.is_string(s.key)
assert.matches(UUID_PATTERN, s.id)
end)
it("inserts oauth2 credendials", function()
local co = bp.consumers:insert()
local c = bp.oauth2_credentials:insert({
consumer = { id = co.id },
redirect_uris = { "http://foo.com" },
})
assert.equals("oauth2 credential", c.name)
assert.equals("secret", c.client_secret)
assert.matches(UUID_PATTERN, c.id)
end)
it("inserts oauth2 authorization codes", function()
local co = bp.consumers:insert()
local cr = bp.oauth2_credentials:insert({
consumer = { id = co.id },
redirect_uris = { "http://foo.com" },
})
local c = bp.oauth2_authorization_codes:insert({ credential = { id = cr.id } })
assert.is_string(c.code)
assert.equals("default", c.scope)
assert.matches(UUID_PATTERN, c.id)
end)
it("inserts oauth2 tokens", function()
local co = bp.consumers:insert()
local cr = bp.oauth2_credentials:insert({
consumer = { id = co.id },
redirect_uris = { "http://foo.com" },
})
local t = bp.oauth2_tokens:insert({ credential = { id = cr.id } })
assert.equals("bearer", t.token_type)
assert.equals("default", t.scope)
assert.matches(UUID_PATTERN, t.id)
end)
it("inserts key auth plugins", function()
local p = bp.key_auth_plugins:insert()
assert.equals("key-auth", p.name)
assert.matches(UUID_PATTERN, p.id)
end)
it("inserts hmac auth plugins", function()
local p = bp.hmac_auth_plugins:insert()
assert.equals("hmac-auth", p.name)
assert.matches(UUID_PATTERN, p.id)
end)
it("inserts hmac usernames", function()
local c = bp.consumers:insert()
local u = bp.hmacauth_credentials:insert({ consumer = { id = c.id } })
assert.is_string(u.username)
assert.equals("secret", u.secret)
assert.matches(UUID_PATTERN, u.id)
end)
it("inserts rate limiting plugins", function()
local p = bp.rate_limiting_plugins:insert({ config = { hour = 42 } })
assert.equals("rate-limiting", p.name)
assert.matches(UUID_PATTERN, p.id)
end)
it("inserts response rate limiting plugins", function()
local p = bp.response_ratelimiting_plugins:insert({ config = { limits = { video = { minute = 3 } } } })
assert.equals("response-ratelimiting", p.name)
assert.matches(UUID_PATTERN, p.id)
end)
it("inserts datadog plugins", function()
local p = bp.datadog_plugins:insert()
assert.equals("datadog", p.name)
assert.matches(UUID_PATTERN, p.id)
end)
end)
end