Fixing default prefs.

default dict has only peer, dom and usr keys.
You should check for a default on real level always. It is always
created even if you load only dom prefs.
ngcp3.0
Victor Seva 12 years ago
parent 0abf856f7d
commit e6439d5a18

@ -41,33 +41,38 @@ NGCPDomainPrefs_MT.__tostring = function ()
return NGCPDomainPrefs._load(self,"callee",uuid) return NGCPDomainPrefs._load(self,"callee",uuid)
end end
function NGCPDomainPrefs:_get_defaults(level) function NGCPDomainPrefs:_defaults(level)
local defaults = self.config:get_defaults('dom') local defaults = self.config:get_defaults('dom')
local keys = {} local keys = {}
local k,_ local k,_
if defaults then if defaults then
self:xavp(level, defaults)
for k,_ in pairs(defaults) do for k,_ in pairs(defaults) do
table.insert(keys, k) table.insert(keys, k)
end end
end end
return keys return keys, defaults
end end
function NGCPDomainPrefs:_load(level, uuid) function NGCPDomainPrefs:_load(level, uuid)
local con = self.config:getDBConnection() local con = self.config:getDBConnection()
local query = "SELECT * FROM " .. self.db_table .. " WHERE domain ='" .. uuid .."'" local query = "SELECT * FROM " .. self.db_table .. " WHERE domain ='" .. uuid .."'"
local cur = con:execute(query) local cur = con:execute(query)
local keys = self:_get_defaults(level) local defaults
local keys
local result = {} local result = {}
local row = cur:fetch({}, "a") local row = cur:fetch({}, "a")
local k,v
local xavp
keys, defaults = self:_defaults(level)
if row then if row then
while row do while row do
--sr.log("info", string.format("result:%s row:%s", table.tostring(result), table.tostring(row))) --sr.log("info", string.format("result:%s row:%s", table.tostring(result), table.tostring(row)))
table.insert(result, row) table.insert(result, row)
table.add(keys, row.attribute) table.add(keys, row.attribute)
defaults[row.attribute] = nil
row = cur:fetch({}, "a") row = cur:fetch({}, "a")
end end
else else
@ -75,7 +80,11 @@ NGCPDomainPrefs_MT.__tostring = function ()
end end
cur:close() cur:close()
con:close() con:close()
self:xavp(level, result)
xavp = self:xavp(level, result)
for k,v in pairs(defaults) do
xavp(k, v)
end
return keys return keys
end end

@ -22,7 +22,7 @@ NGCPConfig_MT = { __index = NGCPConfig }
db_pass = "somepasswd", db_pass = "somepasswd",
db_database = "kamailio", db_database = "kamailio",
default = { default = {
all = { peer = {
sst_enable = "yes", sst_enable = "yes",
sst_expires = 300, sst_expires = 300,
sst_min_timer = 90, sst_min_timer = 90,
@ -34,7 +34,19 @@ NGCPConfig_MT = { __index = NGCPConfig }
inbound_uprn = "from_user", inbound_uprn = "from_user",
ip_header = "P-NGCP-Src-Ip", ip_header = "P-NGCP-Src-Ip",
}, },
real = { dom = {
sst_enable = "yes",
sst_expires = 300,
sst_min_timer = 90,
sst_max_timer = 7200,
sst_refresh_method = "UPDATE_FALLBACK_INVITE",
outbound_from_user = "npn",
inbound_upn = "from_user",
inbound_uprn = "from_user",
ip_header = "P-NGCP-Src-Ip",
},
-- just for prefs that are only on usr level
usr = {
account_id = 0, account_id = 0,
ext_subscriber_id = "", ext_subscriber_id = "",
ext_contract_id = "", ext_contract_id = "",
@ -55,11 +67,7 @@ NGCPConfig_MT = { __index = NGCPConfig }
function NGCPConfig:get_defaults(vtype) function NGCPConfig:get_defaults(vtype)
local k,v local k,v
local defs = table.deepcopy(self.default.all) local defs = {}
if (vtype == 'dom' or vtype == 'usr') then
vtype = 'real'
end
if self.default.vtype then if self.default.vtype then
for k,v in pairs(default.vtype) do for k,v in pairs(default.vtype) do
@ -99,7 +107,7 @@ end
dom = NGCPDomainPrefs:new(t.config), dom = NGCPDomainPrefs:new(t.config),
usr = NGCPUserPrefs:new(t.config), usr = NGCPUserPrefs:new(t.config),
peer = NGCPPeerPrefs:new(t.config), peer = NGCPPeerPrefs:new(t.config),
real = NGCPRealPrefs:new(), real = NGCPRealPrefs:new(t.config),
} }
return t return t
end end

@ -43,41 +43,50 @@ NGCPPeerPrefs_MT.__tostring = function ()
end end
end end
function NGCPPeerPrefs:_get_defaults(level) function NGCPPeerPrefs:_defaults(level)
local defaults = self.config:get_defaults('peer') local defaults = self.config:get_defaults('peer')
local keys = {} local keys = {}
local k,_ local k,_
if defaults then if defaults then
self:xavp(level, defaults) for k,v in pairs(defaults) do
for k,_ in pairs(defaults) do
table.insert(keys, k) table.insert(keys, k)
end end
end end
return keys return keys, defaults
end end
function NGCPPeerPrefs:_load(level, uuid) function NGCPPeerPrefs:_load(level, uuid)
local con = assert (self.config:getDBConnection()) local con = assert (self.config:getDBConnection())
local query = "SELECT * FROM " .. self.db_table .. " WHERE uuid = '" .. uuid .. "'" local query = "SELECT * FROM " .. self.db_table .. " WHERE uuid = '" .. uuid .. "'"
local cur = assert (con:execute(query)) local cur = assert (con:execute(query))
local keys = self:_get_defaults(level) local defaults
local keys
local result = {} local result = {}
local row = cur:fetch({}, "a") local row = cur:fetch({}, "a")
local k,v
local xavp
keys, defaults = self:_defaults(level)
if row then if row then
while row do while row do
--sr.log("info", string.format("result:%s row:%s", table.tostring(result), table.tostring(row))) --sr.log("info", string.format("result:%s row:%s", table.tostring(result), table.tostring(row)))
table.insert(result, row) table.insert(result, row)
table.add(keys, row.attribute) table.add(keys, row.attribute)
defaults[row.attribute] = nil
row = cur:fetch({}, "a") row = cur:fetch({}, "a")
end end
else else
sr.log("dbg", string.format("no results for query:%s", query)) sr.log("dbg", string.format("no results for query:%s", query))
end end
self:xavp(level, result)
cur:close() cur:close()
con:close() con:close()
xavp = self:xavp(level, result)
for k,v in pairs(defaults) do
xavp(k, v)
end
return keys return keys
end end

@ -41,41 +41,50 @@ NGCPUserPrefs_MT.__tostring = function ()
return NGCPUserPrefs._load(self,"callee",uuid) return NGCPUserPrefs._load(self,"callee",uuid)
end end
function NGCPUserPrefs:_get_defaults(level) function NGCPUserPrefs:_defaults(level)
local defaults = self.config:get_defaults('usr') local defaults = self.config:get_defaults('usr')
local keys = {} local keys = {}
local k,_ local k,_
if defaults then if defaults then
self:xavp(level, defaults) for k,v in pairs(defaults) do
for k,_ in pairs(defaults) do
table.insert(keys, k) table.insert(keys, k)
end end
end end
return keys return keys, defaults
end end
function NGCPUserPrefs:_load(level, uuid) function NGCPUserPrefs:_load(level, uuid)
local con = assert (self.config:getDBConnection()) local con = assert (self.config:getDBConnection())
local query = "SELECT * FROM " .. self.db_table .. " WHERE uuid ='" .. uuid .. "'" local query = "SELECT * FROM " .. self.db_table .. " WHERE uuid ='" .. uuid .. "'"
local cur = assert (con:execute(query)) local cur = assert (con:execute(query))
local keys = self:_get_defaults(level) local defaults
local keys
local result = {} local result = {}
local row = cur:fetch({}, "a") local row = cur:fetch({}, "a")
local k,v
local xavp
keys, defaults = self:_defaults(level)
if row then if row then
while row do while row do
--sr.log("info", string.format("result:%s row:%s", table.tostring(result), table.tostring(row))) --sr.log("info", string.format("result:%s row:%s", table.tostring(result), table.tostring(row)))
table.insert(result, row) table.insert(result, row)
table.add(keys, row.attribute) table.add(keys, row.attribute)
defaults[row.attribute] = nil
row = cur:fetch({}, "a") row = cur:fetch({}, "a")
end end
else else
sr.log("dbg", string.format("no results for query:%s", query)) sr.log("dbg", string.format("no results for query:%s", query))
end end
self:xavp(level,result)
cur:close() cur:close()
con:close() con:close()
xavp = self:xavp(level, result)
for k,v in pairs(defaults) do
xavp(k, v)
end
return keys return keys
end end

@ -53,22 +53,17 @@ TestNGCP = {} --class
function TestNGCP:test_config() function TestNGCP:test_config()
assertTrue(self.ngcp.config) assertTrue(self.ngcp.config)
assertEquals(self.ngcp.config.default.all.sst_enable, "yes")
end end
function TestNGCP:test_config_get_defaults_all() function TestNGCP:test_config_get_defaults_all()
local defaults = NGCPConfig.get_defaults(self.ngcp.config, 'peer') local defaults = NGCPConfig.get_defaults(self.ngcp.config, 'peer')
assertItemsEquals(defaults, self.ngcp.config.default.all) assertItemsEquals(defaults, self.ngcp.config.default.peer)
end end
function TestNGCP:test_config_get_defaults_real() function TestNGCP:test_config_get_defaults_real()
local defaults = NGCPConfig.get_defaults(self.ngcp.config, 'usr') local defaults = NGCPConfig.get_defaults(self.ngcp.config, 'usr')
local real_defaults = table.deepcopy(self.ngcp.config.default.all) local usr_defaults = table.deepcopy(self.ngcp.config.default.usr)
local k,v assertItemsEquals(defaults, usr_defaults)
for k,v in pairs(self.ngcp.config.default.real) do
real_defaults[k] = v
end
assertItemsEquals(defaults, real_defaults)
end end
function TestNGCP:test_prefs_init() function TestNGCP:test_prefs_init()
@ -131,6 +126,31 @@ TestNGCP = {} --class
assertEquals(sr.pv.get("$xavp(caller_real_prefs=>no_nat_sipping)"), "no") assertEquals(sr.pv.get("$xavp(caller_real_prefs=>no_nat_sipping)"), "no")
end end
function TestNGCP:test_caller_usr_load_empty_usr()
local c = self.ngcp.config
env:connect(c.db_database, c.db_username, c.db_pass, c.db_host, c.db_port) ;mc :returns(self.con)
self.con:execute("SELECT * FROM dom_preferences WHERE domain ='192.168.51.56'") ;mc :returns(self.cur)
self.cur:fetch(mc.ANYARGS) ;mc :returns(self.dp_vars:val("d_192_168_51_56"))
self.cur:fetch(mc.ANYARGS) ;mc :returns(self.dp_vars:val("d_192_168_51_56"))
self.cur:fetch(mc.ANYARGS) ;mc :returns(nil)
self.cur:close()
self.con:close()
mc:replay()
local keys = self.ngcp:caller_usr_load(nil, "192.168.51.56")
mc:verify()
assertEquals(sr.pv.get("$xavp(caller_dom_prefs=>dummy)"), "caller")
assertEquals(sr.pv.get("$xavp(caller_usr_prefs=>dummy)"), "caller")
--- the default is on real and dom NOT in usr
assertIsNil(sr.pv.get("$xavp(caller_usr_prefs=>sst_enable)"))
assertEquals(sr.pv.get("$xavp(caller_dom_prefs=>sst_enable)"), "no")
assertEquals(sr.pv.get("$xavp(caller_real_prefs=>sst_enable)"), "no")
assertEquals(sr.pv.get("$xavp(caller_real_prefs=>sst_refresh_method)"), "UPDATE_FALLBACK_INVITE")
assertIsNil(sr.pv.get("$xavp(caller_real_prefs=>force_outbound_calls_to_peer)"))
assertIsNil(sr.pv.get("$xavp(caller_dom_prefs=>force_outbound_calls_to_peer)"))
end
function TestNGCP:test_caller_usr_load() function TestNGCP:test_caller_usr_load()
local c = self.ngcp.config local c = self.ngcp.config
env:connect(c.db_database, c.db_username, c.db_pass, c.db_host, c.db_port) ;mc :returns(self.con) env:connect(c.db_database, c.db_username, c.db_pass, c.db_host, c.db_port) ;mc :returns(self.con)
@ -157,6 +177,8 @@ TestNGCP = {} --class
mc:verify() mc:verify()
assertEquals(sr.pv.get("$xavp(caller_usr_prefs=>dummy)"), "caller") assertEquals(sr.pv.get("$xavp(caller_usr_prefs=>dummy)"), "caller")
--- the default is on real NOT in usr
assertIsNil(sr.pv.get("$xavp(caller_usr_prefs=>sst_enable)"))
assertEquals(sr.pv.get("$xavp(caller_real_prefs=>sst_enable)"), "no") assertEquals(sr.pv.get("$xavp(caller_real_prefs=>sst_enable)"), "no")
assertEquals(sr.pv.get("$xavp(caller_real_prefs=>sst_refresh_method)"), "UPDATE_FALLBACK_INVITE") assertEquals(sr.pv.get("$xavp(caller_real_prefs=>sst_refresh_method)"), "UPDATE_FALLBACK_INVITE")
assertEquals(sr.pv.get("$xavp(caller_usr_prefs=>force_outbound_calls_to_peer)"), 1) assertEquals(sr.pv.get("$xavp(caller_usr_prefs=>force_outbound_calls_to_peer)"), 1)
@ -192,6 +214,9 @@ TestNGCP = {} --class
mc:verify() mc:verify()
assertEquals(sr.pv.get("$xavp(callee_usr_prefs=>dummy)"), "callee") assertEquals(sr.pv.get("$xavp(callee_usr_prefs=>dummy)"), "callee")
assertEquals(sr.pv.get("$xavp(callee_dom_prefs=>sst_enable)"), "no")
--- the default is on real NOT in usr
assertIsNil(sr.pv.get("$xavp(callee_usr_prefs=>sst_enable)"))
assertEquals(sr.pv.get("$xavp(callee_real_prefs=>sst_enable)"), "no") assertEquals(sr.pv.get("$xavp(callee_real_prefs=>sst_enable)"), "no")
assertEquals(sr.pv.get("$xavp(callee_real_prefs=>sst_refresh_method)"), "UPDATE_FALLBACK_INVITE") assertEquals(sr.pv.get("$xavp(callee_real_prefs=>sst_refresh_method)"), "UPDATE_FALLBACK_INVITE")
end end

@ -56,13 +56,14 @@ TestNGCPPeerPrefs = {} --class
assertEquals(self.d.db_table, "peer_preferences") assertEquals(self.d.db_table, "peer_preferences")
end end
function TestNGCPPeerPrefs:get_defaults() function TestNGCPPeerPrefs:get_defaults(level)
local keys_expected = {"sst_enable", "sst_refresh_method"} local keys_expected = {"sst_enable", "sst_refresh_method"}
local defaults = NGCPConfig.get_defaults(self.d.config, 'peer') local defaults = self.d.config:get_defaults('peer')
local k,_ local k,v
for k,_ in pairs(defaults) do for k,v in pairs(defaults) do
table.add(keys_expected, k) table.add(keys_expected, k)
assertEquals(sr.pv.get("$xavp("..level.."_peer_prefs=>"..k..")"), v)
end end
return keys_expected return keys_expected
end end
@ -93,7 +94,7 @@ TestNGCPPeerPrefs = {} --class
assertEquals(sr.pv.get("$xavp(caller_peer_prefs=>dummy)"), "caller") assertEquals(sr.pv.get("$xavp(caller_peer_prefs=>dummy)"), "caller")
assertEquals(sr.pv.get("$xavp(caller_peer_prefs=>sst_enable)"),"no") assertEquals(sr.pv.get("$xavp(caller_peer_prefs=>sst_enable)"),"no")
assertEquals(sr.pv.get("$xavp(caller_peer_prefs=>sst_refresh_method)"), "UPDATE_FALLBACK_INVITE") assertEquals(sr.pv.get("$xavp(caller_peer_prefs=>sst_refresh_method)"), "UPDATE_FALLBACK_INVITE")
assertItemsEquals(keys, TestNGCPPeerPrefs:get_defaults()) assertItemsEquals(keys, TestNGCPPeerPrefs:get_defaults("caller"))
end end
function TestNGCPPeerPrefs:test_callee_load() function TestNGCPPeerPrefs:test_callee_load()
@ -112,7 +113,7 @@ TestNGCPPeerPrefs = {} --class
assertEquals(sr.pv.get("$xavp(callee_peer_prefs=>dummy)"), "callee") assertEquals(sr.pv.get("$xavp(callee_peer_prefs=>dummy)"), "callee")
assertEquals(sr.pv.get("$xavp(callee_peer_prefs=>sst_enable)"),"no") assertEquals(sr.pv.get("$xavp(callee_peer_prefs=>sst_enable)"),"no")
assertEquals(sr.pv.get("$xavp(callee_peer_prefs=>sst_refresh_method)"), "UPDATE_FALLBACK_INVITE") assertEquals(sr.pv.get("$xavp(callee_peer_prefs=>sst_refresh_method)"), "UPDATE_FALLBACK_INVITE")
assertItemsEquals(keys, TestNGCPPeerPrefs:get_defaults()) assertItemsEquals(keys, TestNGCPPeerPrefs:get_defaults("callee"))
end end
function TestNGCPPeerPrefs:test_clean() function TestNGCPPeerPrefs:test_clean()

Loading…
Cancel
Save