diff --git a/mocks/sr.lua b/mocks/sr.lua index 6c1d7e6..22578ba 100644 --- a/mocks/sr.lua +++ b/mocks/sr.lua @@ -6,7 +6,7 @@ require 'ngcp.utils' pvMock = { __class__ = 'pvMock', vars = {}, - _logger = logging.file("reports/sr_pv_%s.log", "%Y-%m-%d"), + _logger = logging.file('reports/sr_pv_%s.log', '%Y-%m-%d'), _logger_levels = { dbg = logging.DEBUG, info = logging.INFO, @@ -21,41 +21,167 @@ pvMock = { t.__class__ = 'pvMock' t.vars = {} + function t._is_xavp(id) + local _id, indx, key + local patterns = { + '%$xavp%(([%w_]+)=>([%w_]+)%)$', + '%$xavp%(([%w_^%[]+)%[(%d+)%]=>([%w_]+)%)$' + } + for _,v in pairs(patterns) do + for _id, indx, key in string.gmatch(id, v) do + if not key then + key = indx + indx = nil + else + indx = tonumber(indx) + end + return { id=_id, key=key, indx=indx, type='xavp' } + end + end + end + + function t._clean_id(id) + local k + k = string.gsub(id, 's:', '') + k = string.gsub(k, 'i:', '') + return k + end + + function t._is_avp(id) + local i, _id + local patterns = { + '%$avp%(([%w_]+)%)$', + '%$%(avp%(([%w_]+)%)%)$', + '%$%(avp%(([%w_]+)%)%[%*%]%)$' + } + _id = t._clean_id(id) + for _,v in pairs(patterns) do + for i in string.gmatch(_id, v) do + return { id=i, clean=(v==patterns[3]), type='avp' } + end + end + end + + function t._is_var(id) + local key, _, v + local patterns = { + '%$var%(([%w_]+)%)$', + '%$%(var%(([%w_]+)%)%)$', + } + for _,v in pairs(patterns) do + for key in string.gmatch(id, v) do + return { id=key, clean=false, type='var' } + end + end + end + + function t._is(id) + if not id then + error("id empty") + end + local result = t._is_xavp(id) + + if not result then + result = t._is_avp(id) + end + if not result then + result = t._is_var(id) + end + if not result then + error(string.format("not implemented or wrong id:%s", id)) + end + result.private_id = result.type .. ':' .. result.id + return result + end + function t.get(id) - if type(t.vars[id]) == 'table' then - return t.vars[id]:list() - else - return t.vars[id] + local result = t._is(id) + if not result then + return + end + + if result.type == 'var' then + return t.vars[result.private_id] + elseif result.type == 'xavp' then + if not result.indx then + result.indx = 0 + end + if not t.vars[result.private_id] then + return + end + result.real_indx = #t.vars[result.private_id]._et - result.indx + if t.vars[result.private_id]._et[result.real_indx] then + --print(string.format("t.vars[%s]._et[%d]:%s", result.private_id, result.real_indx, table.tostring(t.vars[result.private_id]._et[result.indx+1]))) + return t.vars[result.private_id]._et[result.real_indx][result.key] + end + elseif result.type == 'avp' then + if result.clean then + return t.vars[result.private_id]:list() + end + if t.vars[result.private_id] then + local l = t.vars[result.private_id]:list() + if #l == 1 then + return l[1] + end + end end end - function t._addvalue(id, value) - if string.starts(id, "$xavp(") then - local l = explode("=>", id) - -- $xavp(key=>key2) -> $xavp(key[0]=>key2) - if not string.ends(l[1],"]") then - id = l[1] .. "[0]=>" .. l[2] + function t._addvalue_new(result, value) + local temp + if result.type == 'var' then + t.vars[result.private_id] = value + elseif result.type == 'xavp' then + if not result.indx then + result.indx = 0 + end + if result.indx ~= 0 then + error(string.format("xavp(%s) has not been initilizated", result.id)) + end + t.vars[result.private_id] = Stack:new() + temp = {} + temp[result.key] = value + t.vars[result.private_id]:push(temp) + elseif result.type == 'avp' then + t.vars[result.private_id] = Stack:new() + t.vars[result.private_id]:push(value) + end + end + + function t._addvalue_with_value(result, value) + local temp + if result.type == 'var' then + t.vars[result.private_id] = value + elseif result.type == 'xavp' then + if not result.indx then + temp = {} + temp[result.key] = value + t.vars[result.private_id]:push(temp) + else + result.real_indx = #t.vars[result.private_id]._et - result.indx + if not t.vars[result.private_id]._et[result.real_indx] then + error(string.format("xavp(%s[%d] does not exist", result.id, result.indx)) + end + t.vars[result.private_id]._et[result.real_indx][result.key] = value end + elseif result.type == 'avp' then + t.vars[result.private_id]:push(value) end - if string.ends(id,"[*]") then + end + + function t._addvalue(id, value) + local result = t._is(id) + if result.clean then -- clean var - id = string.sub(id,1,-4) - t.log("dbg",string.format("sr.pv erase [%s]", id)) - t.vars[id] = nil - end - if not t.vars[id] then - t.vars[id] = value - t.log("dbg", string.format("sr.pv added [%s]:%s", id, value)) - elseif type(t.vars[id]) == 'table' then - t.vars[id]:push(value) - t.log("dbg", string.format("sr.pv push [%s]:%s", id, value)) + t.log("dbg",string.format("sr.pv erase avp[%s]", result.id)) + t.vars[result.private_id] = nil + end + if not t.vars[result.private_id] then + t._addvalue_new(result, value) else - local old = t.vars[id] - t.vars[id] = Stack:new() - t.vars[id]:push(old, value) - t.log("dbg", string.format("sr.pv push [%s]:%s", id, value)) + t._addvalue_with_value(result, value) end - t.log("dbg", string.format("sr.pv [%s]:%s", id, tostring(t.vars[id]))) + t.log("dbg", string.format("sr.pv vars:%s", table.tostring(t.vars))) end function t.seti(id, value) @@ -73,27 +199,28 @@ pvMock = { end function t.unset(id) - if string.starts(id, "$xavp(") then - local l = explode("=>", id) - local s = l[1] - if #l == 1 then - -- remove the last ')' char - s = string.sub(l[1],1,string.len(l[1])-1) + local result = t._is(id) + if result.type == 'xavp' then + if not result.indx then + result.indx = 0 end - for k,_ in pairs(t.vars) do - if string.starts(k,s) then - --print("clean: " .. k) - t.vars[k] = nil - end + if t.vars[result.private_id] then + result.real_indx = #t.vars[result.private_id]._et - result.indx + t.vars[result.private_id]._et[result.real_indx] = nil end - else - --print("clean: " .. id) - t.vars[id] = nil + elseif result.type == 'avp' then + t.vars[result.private_id] = nil + elseif result.type == 'var' then + t.vars[result.private_id] = nil end end function t.is_null(id) - if not t.vars[id] then + local result = t._is(id) + if not result then + return true + end + if not t.vars[result.private_id] then return true end return false diff --git a/ngcp/xavp.lua b/ngcp/xavp.lua index b87a544..2ddf605 100644 --- a/ngcp/xavp.lua +++ b/ngcp/xavp.lua @@ -5,19 +5,31 @@ NGCPXAvp = { __class__ = 'NGCPXAvp' } NGCPXAvp_MT = { - __index = NGCPXAvp, + __index = NGCPXAvp } function NGCPXAvp:new(level,group,l) - local t = { - level = level, - group = group, + if level ~= 'caller' and level ~= 'callee' then + error("unknown level. It has to be [caller|callee]") + end + if not l or #l == 0 then + error("list empty") + end + + local t = { + group = group } - NGCPXAvp._create(level,group,l) + if level == 'callee' then + t.level = 1 + else + t.level = 0 + end + NGCPXAvp._create(t.level,group,l) NGCPXAvp_MT.__call = function(t, key, value) if not key then error("key is empty") end local id = string.format("$xavp(%s[%d]=>%s)", t.group, t.level, key) + --print(string.format("id:%s", id)) if not value then return sr.pv.get(id) elseif type(value) == "number" then @@ -33,21 +45,42 @@ NGCPXAvp_MT = { end function NGCPXAvp._setvalue(id, vtype, value) + local check = nil + -- sr.log("info", string.format("vtype:[%s]:%d", type(vtype), vtype)) + if type(vtype) == "string" then + vtype = tonumber(vtype) + end if vtype == 0 then + sr.log("info",string.format("sr.pv.sets->%s:%s", id, value)) sr.pv.sets(id, value) elseif vtype == 1 then if type(value) == "string" then value = tonumber(value) end - sr.pv.seti(id, value) + sr.pv.seti(id, value) + else + sr.log("err",string.format("can't set value:%s of type:%d", value, vtype)) + end + if value and id then + check = sr.pv.get(id) + if check then + if type(check) == 'table' then + check = table.tostring(check) + end + sr.log("info", string.format("%s:%s", id, check)) + else + sr.log("err", string.format("%s:nil", id)) + end end end function NGCPXAvp._create(level, group, l) local i, name -- create dummy vars - name = string.format("$xavp(%s=>%s)[*]", group, 'dummy') - sr.pv.sets(name, "") + name = string.format("$xavp(%s=>dummy)", group) + NGCPXAvp._setvalue(name, 0, "callee") -- callee -> [1] + name = string.format("$xavp(%s=>dummy)", group) + NGCPXAvp._setvalue(name, 0, "caller") -- caller -> [0] for i=1,#l do name = string.format("$xavp(%s[%d]=>%s)", group, level, l[i].attribute) NGCPXAvp._setvalue(name, l[i].type, l[i].value) @@ -58,7 +91,7 @@ NGCPXAvp_MT = { --print("NGCPXAvp:clean") --print(table.tostring(getmetatable(self))) --print(table.tostring(self)) - sr.pv.unset(string.format("$xavp(%s[%d])", self.group, self.level)) + sr.pv.unset(string.format("$xavp(%s)", self.group)) end -- class --EOF \ No newline at end of file diff --git a/tests/mocks.lua b/tests/mocks.lua index 1181cf8..5dd08eb 100644 --- a/tests/mocks.lua +++ b/tests/mocks.lua @@ -24,30 +24,166 @@ TestSRMock = {} assertTrue(self.sr.pv) end - function TestSRMock:test_sets() + function TestSRMock:test_clean_id() + assertEquals(self.sr.pv._clean_id('s:u25'), 'u25') + assertEquals(self.sr.pv._clean_id('i:u25'), 'u25') + assertEquals(self.sr.pv._clean_id('u25'), 'u25') + end + + function TestSRMock:test_is_xavp_simple() + local result + result = self.sr.pv._is_xavp("$xavp(id=>key)") + assertTrue(result) + assertEquals(result.type, 'xavp') + assertEquals(result.id, 'id') + assertEquals(result.key, 'key') + assertFalse(result.clean) + end + + function TestSRMock:test_is_xavp_complex() + local result + result = self.sr.pv._is_xavp("$xavp(id1[8]=>key3g2)") + assertTrue(result) + assertEquals(result.type, 'xavp') + assertEquals(result.id, 'id1') + assertEquals(result.key, 'key3g2') + assertEquals(result.indx, 8) + assertFalse(result.clean) + result = self.sr.pv._is_xavp("$xavp(id2g1f[9]=>keygg33_f)") + assertTrue(result) + assertEquals(result.type, 'xavp') + assertEquals(result.id, 'id2g1f') + assertEquals(result.key, 'keygg33_f') + assertEquals(result.indx, 9) + assertFalse(result.clean) + end + + function TestSRMock:test_is_avp_simple() + local result + result = self.sr.pv._is_avp("$avp(id2_f)") + assertTrue(result) + assertEquals(result.type, 'avp') + --print(table.tostring(result)) + assertEquals(result.id, 'id2_f') + assertFalse(result.clean) + end + + function TestSRMock:test_is_avp_simple1() + local result + result = self.sr.pv._is_avp("$(avp(s:id))") + assertTrue(result) + assertEquals(result.type, 'avp') + --print(table.tostring(result)) + assertEquals(result.id, 'id') + assertFalse(result.clean) + end + + function TestSRMock:test_is_avp_simple2() + local result + result = self.sr.pv._is_avp("$(avp(s:id)[*])") + assertTrue(result) + assertEquals(result.type, 'avp') + assertEquals(result.id, 'id') + --print(table.tostring(result)) + assertTrue(result.clean) + end + + function TestSRMock:test_is_var_simple() + local result + result = self.sr.pv._is_var("$var(id)") + assertTrue(result) + assertEquals(result.type, 'var') + assertEquals(result.id, 'id') + --print(table.tostring(result)) + assertFalse(result.clean) + end + + function TestSRMock:test_var_sets() + self.sr.pv.sets("$var(hithere)", "value") + assertEquals(self.sr.pv.get("$var(hithere)"), "value") + assertError(self.sr.pv.sets, "$var(hithere)", 1) + assertError(self.sr.pv.sets, "$var(s:hithere)", "1") + assertError(self.sr.pv.sets, "$(var(hithere)[*])", "1") + assertError(self.sr.pv.sets, "$(var(s:hithere))", "1") + self.sr.pv.sets("$(var(hithere))", "new_value") + assertEquals(self.sr.pv.get("$var(hithere)"), "new_value") + assertEquals(self.sr.pv.vars["var:hithere"], "new_value") + end + + function TestSRMock:test_var_seti() + self.sr.pv.seti("$var(hithere)", 0) + assertEquals(self.sr.pv.get("$var(hithere)"), 0) + assertError(self.sr.pv.seti, "$var(hithere)", "1") + assertError(self.sr.pv.sets, "$var(s:hithere)", 1) + assertError(self.sr.pv.sets, "$(var(hithere)[*])", 1) + assertError(self.sr.pv.sets, "$(var(s:hithere))", 1) + assertEquals(self.sr.pv.get("$var(hithere)"), 0) + self.sr.pv.seti("$var(hithere)", 1) + assertEquals(self.sr.pv.get("$var(hithere)"), 1) + assertEquals(self.sr.pv.vars["var:hithere"], 1) + end + + function TestSRMock:test_avp_sets() self.sr.pv.sets("$avp(s:hithere)", "value") - assertEquals(self.sr.pv.vars["$avp(s:hithere)"], "value") + assertEquals(self.sr.pv.get("$avp(s:hithere)"), "value") assertError(self.sr.pv.sets, "$avp(s:hithere)", 1) end - function TestSRMock:test_seti() + function TestSRMock:test_avp_sets_all() + self.sr.pv.sets("$avp(s:hithere)", "value") + assertEquals(self.sr.pv.get("$avp(hithere)"), "value") + assertEquals(self.sr.pv.get("$(avp(hithere)[*])"), {"value"}) + self.sr.pv.sets("$avp(s:hithere)", "value1") + assertEquals(self.sr.pv.get("$(avp(hithere)[*])"), {"value1","value"}) + end + + function TestSRMock:test_avp_seti() self.sr.pv.seti("$avp(s:hithere)", 0) - assertEquals(self.sr.pv.vars["$avp(s:hithere)"], 0) + assertEquals(self.sr.pv.get("$avp(s:hithere)"), 0) assertError(self.sr.pv.seti, "$avp(s:hithere)", "1") end - function TestSRMock:test_get() - local vals = {1,2,3} + function TestSRMock:test_xavp_sets() + self.sr.pv.sets("$xavp(g=>hithere)", "value") + assertEquals(self.sr.pv.get("$xavp(g=>hithere)"), "value") + self.sr.pv.sets("$xavp(g=>bythere)", "value_bye") + assertEquals(self.sr.pv.get("$xavp(g=>bythere)"), "value_bye") + end + + function TestSRMock:test_xavp_sets1() + self.sr.pv.sets("$xavp(g=>hithere)", "value") + assertEquals(self.sr.pv.get("$xavp(g=>hithere)"), "value") + self.sr.pv.sets("$xavp(g=>hithere)", "value_bye") + assertEquals(self.sr.pv.get("$xavp(g=>hithere)"), "value_bye") + assertEquals(self.sr.pv.get("$xavp(g[1]=>hithere)"), "value") + end + + function TestSRMock:test_xavp_seti() + self.sr.pv.seti("$xavp(t=>hithere)", 0) + assertEquals(self.sr.pv.get("$xavp(t[0]=>hithere)"), 0) + assertEquals(self.sr.pv.get("$xavp(t=>hithere)"), 0) + assertError(self.sr.pv.seti, "$xavp(t=>hithere)", "1") + assertError(self.sr.pv.seti, "$xavp(t[6]=>hithere)", "1") + end + + function TestSRMock:test_avp_get_simple() self.sr.pv.sets("$avp(s:hithere)", "value") assertEquals(self.sr.pv.get("$avp(s:hithere)"), "value") - self.sr.pv.unset("$avp(s:hithere)") + end + + function TestSRMock:test_avp_get_simple2() self.sr.pv.seti("$avp(s:hithere)", 1) assertEquals(self.sr.pv.get("$avp(s:hithere)"), 1) + end + + function TestSRMock:test_avp_get() + local vals = {1,2,3} for i=1,#vals do self.sr.pv.seti("$avp(s:hithere)", vals[i]) end - local l = self.sr.pv.get("$avp(s:hithere)") + local l = self.sr.pv.get("$(avp(s:hithere)[*])") assertTrue(type(l), 'table') + assertEquals(#l,#vals) --print(table.tostring(l)) v = 1 for i=#vals,1,-1 do @@ -56,26 +192,41 @@ TestSRMock = {} end end - function TestSRMock:test_unset() + function TestSRMock:test_avp_get_all() self.sr.pv.sets("$avp(s:hithere)", "value") - self.sr.pv.unset("$avp(s:hithere)") - assertEquals(self.sr.pv.vars["$avp(s:hithere)"], nil) - self.sr.pv.unset("$avp(s:hithere)") - assertEquals(self.sr.pv.vars["$avp(s:hithere)"], nil) + assertEquals(self.sr.pv.get("$avp(hithere)"), "value") + assertEquals(self.sr.pv.get("$(avp(hithere)[*])"), {"value"}) + self.sr.pv.sets("$avp(s:hithere)", "value1") + assertEquals(self.sr.pv.get("$(avp(hithere)[*])"), {"value1","value"}) + self.sr.pv.sets("$(avp(s:hithere)[*])", "new_value") + assertEquals(self.sr.pv.get("$avp(s:hithere)"), "new_value") + assertEquals(self.sr.pv.get("$(avp(s:hithere)[*])"), {"new_value"}) + end - self.sr.pv.sets("$xavp(g=>t)", "value") - assertEquals(self.sr.pv.vars["$xavp(g[0]=>t)"], "value") - assertEquals(self.sr.pv.vars["$xavp(g=>t)"], nil) + function TestSRMock:test_unset_var() + self.sr.pv.sets("$var(hithere)", "value") + assertEquals(self.sr.pv.get("$var(hithere)"), "value") + self.sr.pv.unset("$var(hithere)") + assertEquals(self.sr.pv.get("$var(hithere)"), nil) + self.sr.pv.unset("$var(hithere)") + end - self.sr.pv.sets("$xavp(g[0]=>v)", "value") - self.sr.pv.unset("$xavp(g[1])") - assertEquals(self.sr.pv.vars["$xavp(g[1])"], nil) - assertEquals(self.sr.pv.vars["$xavp(g[0]=>t)"], "value") - assertEquals(self.sr.pv.vars["$xavp(g[0]=>v)"], "value") + function TestSRMock:test_unset_avp() + self.sr.pv.sets("$avp(s:hithere)", "value") + assertEquals(self.sr.pv.get("$avp(hithere)"), "value") + self.sr.pv.unset("$avp(s:hithere)") + assertEquals(self.sr.pv.get("$avp(hithere)"), nil) + self.sr.pv.unset("$avp(s:hithere)") + assertEquals(self.sr.pv.get("$avp(s:hithere)"), nil) + end - self.sr.pv.sets("$xavp(g[1]=>v)", "value") - self.sr.pv.unset("$xavp(g[1])") - assertEquals(self.sr.pv.vars["$xavp(g[1]=>v)"], nil) + function TestSRMock:test_unset_xavp() + self.sr.pv.sets("$xavp(g=>t)", "value_t") + assertEquals(self.sr.pv.get("$xavp(g=>t)"), "value_t") + self.sr.pv.unset("$xavp(g=>t)") + assertEquals(self.sr.pv.get("$xavp(g=>t)"), nil) + self.sr.pv.unset("$xavp(g)") + assertEquals(self.sr.pv.get("$xavp(g)"), nil) end function TestSRMock:test_is_null() @@ -94,15 +245,13 @@ TestSRMock = {} assertError(self.sr.log, "debug", "Hi dude!") end - function TestSRMock:test_set_clean() - self.sr.pv.seti("$avp(s:hithere)[*]", 0) - assertEquals(self.sr.pv.vars["$avp(s:hithere)"], 0) - assertFalse(self.sr.pv.vars["$avp(s:hithere)[*]"]) - self.sr.pv.seti("$avp(s:hithere)[*]", 1) - assertEquals(self.sr.pv.vars["$avp(s:hithere)"], 1) - assertFalse(self.sr.pv.vars["$avp(s:hithere)[*]"]) - self.sr.pv.seti("$avp(s:hithere)", 0) - assertEquals(table.tostring(self.sr.pv.get("$avp(s:hithere)")), "{0,1}") + function TestSRMock:test_avp_set_clean() + self.sr.pv.seti("$(avp(s:hithere)[*])", 0) + assertEquals(self.sr.pv.get("$avp(s:hithere)"), 0) + assertEquals(self.sr.pv.get("$(avp(s:hithere)[*])"), {0}) + self.sr.pv.seti("$(avp(s:hithere)[*])", 1) + assertEquals(self.sr.pv.get("$avp(s:hithere)"), 1) + assertEquals(self.sr.pv.get("$(avp(s:hithere)[*])"), {1}) end ---- Control test output: lu = LuaUnit diff --git a/tests/ngcp_xavp.lua b/tests/ngcp_xavp.lua index df9ea42..811436c 100644 --- a/tests/ngcp_xavp.lua +++ b/tests/ngcp_xavp.lua @@ -4,41 +4,41 @@ require 'mocks.sr' require 'ngcp.xavp' sr = srMock:new() - +vals = { + { + id = 1, + uuid = "ae736f72-21d1-4ea6-a3ea-4d7f56b3887c", + username = "testuser1", + domain = "192.168.51.56", + attribute = "account_id", + type = 1, + value = 2, + last_modified = "1900-01-01 00:00:01" + }, + { + id = 2, + uuid = "94023caf-dfba-4f33-8bdb-b613ce627613", + username = "testuser2", + domain = "192.168.51.56", + attribute = "account_id", + type = 1, + value = 2, + last_modified = "1900-01-01 00:00:01" + }, + { + id = 3, + uuid = "94023caf-dfba-4f33-8bdb-b613ce627613", + username = "testuser2", + domain = "192.168.51.56", + attribute = "account_id", + type = 0, + value = "2", + last_modified = "1900-01-01 00:00:01" + } +} TestNGCPXAvp = {} --class function TestNGCPXAvp:setUp() - self.vals = {} - self.vals[1] = { - id = 1, - uuid = "ae736f72-21d1-4ea6-a3ea-4d7f56b3887c", - username = "testuser1", - domain = "192.168.51.56", - attribute = "account_id", - type = 1, - value = 2, - last_modified = "1900-01-01 00:00:01" - } - self.vals[2] = { - id = 2, - uuid = "94023caf-dfba-4f33-8bdb-b613ce627613", - username = "testuser2", - domain = "192.168.51.56", - attribute = "account_id", - type = 1, - value = 2, - last_modified = "1900-01-01 00:00:01" - } - self.vals[3] = { - id = 3, - uuid = "94023caf-dfba-4f33-8bdb-b613ce627613", - username = "testuser2", - domain = "192.168.51.56", - attribute = "account_id", - type = 0, - value = "2", - last_modified = "1900-01-01 00:00:01" - } - self.xavp = NGCPXAvp:new(1, "peer", self.vals) + self.xavp = NGCPXAvp:new("caller", "peer", vals) end function TestNGCPXAvp:tearDown() @@ -46,51 +46,32 @@ TestNGCPXAvp = {} --class end function TestNGCPXAvp:test_xavp_id() - assertEquals(self.xavp.level, 1) + assertEquals(self.xavp.level, 0) assertEquals(self.xavp.group, "peer") end function TestNGCPXAvp:test_xavp_get() - sr.pv.sets("$xavp(peer[1]=>testid)", "value") + sr.pv.sets("$xavp(peer[0]=>testid)", "value") assertEquals(self.xavp("testid"), "value") - sr.pv.sets("$xavp(peer[1]=>testid)", "1") - assertItemsEquals(self.xavp("testid"),{"1","value"}) + sr.pv.sets("$xavp(peer[0]=>testid)", "1") + assertItemsEquals(self.xavp("testid"), "1") end function TestNGCPXAvp:test_xavp_set() - local vals = {1,2,3} + local vals = {1,"2",3,nil} for i=1,#vals do self.xavp("testid",vals[i]) + assertEquals(self.xavp("testid"), vals[i]) + assertEquals(sr.pv.get("$xavp(peer[0]=>testid)"),vals[i]) end - local l = self.xavp("testid") - assertTrue(type(l), 'table') - --print(table.tostring(l)) - v = 1 - for i=#vals,1,-1 do - assertEquals(l[i],vals[v]) - v = v + 1 - end - end - - function TestNGCPXAvp:test_xavp_set2() - local vals = {1,2,"3"} - for i=1,#vals do - self.xavp("testid", vals[i]) - end - local l = self.xavp("testid") - assertTrue(type(l), 'table') - --print(table.tostring(l)) - v = 1 - for i=#vals,1,-1 do - assertEquals(l[i],vals[v]) - v = v + 1 - end end function TestNGCPXAvp:test_clean() self.xavp("testid", 1) + assertEquals(sr.pv.get("$xavp(peer[0]=>testid)"),1) self.xavp:clean() assertFalse(self.xavp("testid")) + assertFalse(sr.pv.get("$xavp(peer[0]=>testid)")) end -- class TestNGCPXAvp diff --git a/tests/utils.lua b/tests/utils.lua index 3912176..e269abb 100644 --- a/tests/utils.lua +++ b/tests/utils.lua @@ -59,6 +59,8 @@ TestUtils = {} --class assertTrue(string.starts("goga", "goga")) assertFalse(string.starts("goga", "a")) assertError(string.starts, "goga", nil) + assertTrue(string.starts("$goga", "$")) + assertTrue(string.starts("(goga)", "(")) end function TestUtils:test_ends()