kong/spec/01-unit/01-db/07-db_spec.lua (172 lines of code) (raw):

local mocker = require("spec.fixtures.mocker") local function setup_it_block() mocker.setup(finally, { modules = { {"kong.db.strategies", { new = function() local connector = { defaults = { pagination = { page_size = 1000, max_page_size = 50000, }, }, infos = function() return {} end, connect_migrations = function() return true end, schema_migrations = function() return {} end, is_014 = function() return { is_014 = false } end, close = function() end, } local strategies = mocker.table_where_every_key_returns({}) return connector, strategies end, }}, {"kong.db", {}}, } }) end describe("DB", function() describe("schema_state", function() it("returns the state of migrations", function() setup_it_block() local DB = require("kong.db") local kong_config = { loaded_plugins = {}, } local db, err = DB.new(kong_config, "mock") assert.is_nil(err) assert.is_table(db) local state = db:schema_state() assert.is_table(state) end) end) describe("last_schema_state", function() it("returns the last fetched state of migrations", function() setup_it_block() local DB = require("kong.db") local kong_config = { loaded_plugins = {}, } local db, err = DB.new(kong_config, "mock") assert.is_nil(err) assert.is_table(db) local state = db:schema_state() assert.is_table(state) local last_state = db:last_schema_state() assert(state == last_state, "expected that calling last_schema_state returned " .. "the same object as schema_state") local last_state_2 = db:last_schema_state() assert(state == last_state_2, "expected that calling last_schema_state twice " .. "returns the same object") local state_2 = db:schema_state() assert.is_table(state_2) assert(state ~= state_2, "expected schema_state to always return a new object") local last_state_3 = db:last_schema_state() assert(state_2 == last_state_3, "expected the object returned by last_schema_state " .. "to be the latest created by schema_state") end) end) describe(":check_version_compat()", function() local db = { strategy = "foobar", connector = { }, } lazy_setup(function() local DB = require("kong.db") db.check_version_compat = DB.check_version_compat end) describe("db_ver < min", function() it("errors", function() local versions_to_test = { "1.0", "9.0", "9.3", } for _, v in ipairs(versions_to_test) do db.connector.major_minor_version = v local ok, err = db:check_version_compat("10.0") assert.is_false(ok) assert.equal("Kong requires " .. db.strategy .. " 10.0 or greater " .. "(currently using " .. v .. ")", err) end end) end) describe("db_ver < deprecated < min", function() it("errors", function() local versions_to_test = { "1.0", "9.0", "9.3", } for _, v in ipairs(versions_to_test) do db.connector.major_minor_version = v local ok, err = db:check_version_compat("10.0", "9.4") assert.is_false(ok) assert.equal("Kong requires " .. db.strategy .. " 10.0 or greater " .. "(currently using " .. v .. ")", err) end end) end) describe("deprecated <= db_ver < min", function() it("logs deprecation warning", function() local log = require "kong.cmd.utils.log" local s = spy.on(log, "warn") local versions_to_test = { "9.3", "9.4", } for _, v in ipairs(versions_to_test) do db.connector.major_minor_version = v local ok, err = db:check_version_compat("9.5", "9.3") assert.is_nil(err) assert.is_true(ok) -- no error on deprecation notices assert.spy(s).was_called_with( "Currently using %s %s which is considered deprecated, " .. "please use %s or greater", db.strategy, v, "9.5") end end) end) describe("min < deprecated <= db_ver", function() -- Note: constants should not be configured in this fashion, but this -- test is for robustness's sake it("fine", function() local versions_to_test = { "10.0", "11.1", } for _, v in ipairs(versions_to_test) do db.connector.major_minor_version = v local ok, err = db:check_version_compat("9.4", "10.0") assert.is_nil(err) assert.is_true(ok) end end) end) describe("deprecated < min <= db_ver", function() it("fine", function() local versions_to_test = { "9.5", "10.0", "11.1", } for _, v in ipairs(versions_to_test) do db.connector.major_minor_version = v local ok, err = db:check_version_compat("9.5", "9.4") assert.is_nil(err) assert.is_true(ok) end end) end) end) end)