diff --git a/mocks/sr.lua b/mocks/sr.lua index 1e1571d..009036d 100644 --- a/mocks/sr.lua +++ b/mocks/sr.lua @@ -398,6 +398,58 @@ pvMock = { end -- end class +-- class xavpMock +xavpMock = { + __class__ = 'xavpMock', + _logger = logging.file("reports/xavp_%s.log", "%Y-%m-%d"), + _logger_levels = { + dbg = logging.DEBUG, + info = logging.INFO, + warn = logging.WARN, + err = logging.ERROR, + crit = logging.FATAL + } +} + function xavpMock:new(pv) + local t = {} + + t.__class__ = 'hdrMock' + t.pv = pv + + function t._get_xavp(xavp_name, index) + local private_id = "xavp:" .. xavp_name + local real_indx = #t.pv.vars[private_id]._et - index + + if not t.pv.vars[private_id] then + error(string.format("%s not found", xavp_name)) + elseif not t.pv.vars[private_id]._et[real_indx] then + error(string.format("%s[%d] not found", xavp_name, indx)) + end + return t.pv.vars[private_id]._et[real_indx] + end + + function t.get_keys(xavp_name, index) + local k,_ + local output = {} + + xavp = t._get_xavp(xavp_name, index) + for k,_ in pairs(xavp) do + table.insert(output, k) + end + return output + end + + function t.get(xavp_name, index) + xavp = t._get_xavp(xavp_name, index) + return xavp + end + + xavpMock_MT = { __index = xavpMock } + setmetatable(t, xavpMock_MT) + return t + end +--end class + -- class srMock srMock = { __class__ = 'srMock', @@ -421,6 +473,7 @@ srMock_MT = { __index = srMock, __newindex = lemock.controller():mock() } end t._logger:log(t._logger_levels[level], message) end + t.xavp = xavpMock:new(t.pv) setmetatable(t, srMock_MT) return t end diff --git a/ngcp/xavp.lua b/ngcp/xavp.lua index 908b87a..a14a05d 100644 --- a/ngcp/xavp.lua +++ b/ngcp/xavp.lua @@ -103,5 +103,17 @@ NGCPXAvp_MT = { sr.pv.unset(string.format("$xavp(%s)", self.name)) sr.pv.sets(string.format("$xavp(%s=>dummy)", self.name), self.level) end + + function NGCPXAvp.__tostring(xavp) + local l,k,v + local output + + l = sr.xavp.get(xavp.name, 0) + if l then + output = table.tostring(l) + end + sr.log("dbg", string.format("output:%s", output)) + return output + end -- class --EOF \ No newline at end of file diff --git a/tests/mocks.lua b/tests/mocks.lua index 50e69fe..8d6b2fc 100644 --- a/tests/mocks.lua +++ b/tests/mocks.lua @@ -277,9 +277,9 @@ TestSRMock = {} function TestSRMock:test_xavp_sets1() self.sr.pv.sets("$xavp(g=>hithere)", "value") - assertEquals(self.sr.pv.get("$xavp(g=>hithere)"), "value") + assertEquals(self.sr.pv.get("$xavp(g[0]=>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[0]=>hithere)"), "value_bye") assertEquals(self.sr.pv.get("$xavp(g[1]=>hithere)"), "value") end @@ -429,4 +429,53 @@ TestSRMock = {} assertEquals(self.sr.pv.get("$avp(s:hithere)"), 1) assertEquals(self.sr.pv.get("$(avp(s:hithere)[*])"), {1}) end +-- end class + +TestXAVPMock = {} + function TestXAVPMock:setUp() + self.pv = pvMock:new() + self.xavp = xavpMock:new(self.pv) + + self.pv.sets("$xavp(test=>uno)", "uno") + assertEquals(self.pv.get("$xavp(test[0]=>uno)"), "uno") + self.pv.seti("$xavp(test[0]=>dos)", 2) + assertEquals(self.pv.get("$xavp(test[0]=>dos)"), 2) + self.pv.seti("$xavp(test=>uno)", 1) + assertEquals(self.pv.get("$xavp(test[0]=>uno)"), 1) + self.pv.sets("$xavp(test[0]=>dos)", "dos") + assertEquals(self.pv.get("$xavp(test[0]=>dos)"), "dos") + self.pv.seti("$xavp(test[0]=>tres)", 3) + assertEquals(self.pv.get("$xavp(test[0]=>tres)"), 3) + -- + assertEquals(self.pv.get("$xavp(test[1]=>uno)"), "uno") + assertEquals(self.pv.get("$xavp(test[1]=>dos)"), 2) + end + + function TestXAVPMock:tearDown() + self.pv.vars = {} + end + + function TestXAVPMock:test_get_keys() + local l = self.xavp.get_keys("test", 0) + assertTrue(l) + assertItemsEquals(l, {"uno", "dos", "tres"}) + end + + function TestXAVPMock:test_get_keys_1() + local l = self.xavp.get_keys("test", 1) + assertTrue(l) + assertItemsEquals(l, {"uno", "dos"}) + end + + function TestXAVPMock:test_get() + local l = self.xavp.get("test", 0) + assertTrue(l) + assertItemsEquals(l, {uno=1, dos="dos", tres=3}) + end + + function TestXAVPMock:test_get() + local l = self.xavp.get("test", 1) + assertTrue(l) + assertItemsEquals(l, {uno="uno", dos=2}) + end --EOF \ No newline at end of file diff --git a/tests/ngcp_xavp.lua b/tests/ngcp_xavp.lua index 20fa263..25d830f 100644 --- a/tests/ngcp_xavp.lua +++ b/tests/ngcp_xavp.lua @@ -95,12 +95,16 @@ TestNGCPXAvp = {} --class xavp_caller:clean() assertEquals(sr.pv.get("$xavp(caller_peer=>dummy)"),"caller") assertEquals(sr.pv.get("$xavp(callee_peer=>dummy)"),"callee") - + xavp_callee:clean() assertEquals(sr.pv.get("$xavp(callee_peer=>dummy)"), "callee") assertEquals(sr.pv.get("$xavp(caller_peer=>dummy)"), "caller") end + function TestNGCPXAvp:test_tostring() + local xavp = NGCPXAvp:new("caller", "peer", {}) + assertEquals(xavp:__tostring(), '{dummy="caller"}') + end function TestNGCPXAvp:test_keys() local xavp = NGCPXAvp:new("caller", "peer", vals)