diff --git a/mocks/sr.lua b/mocks/sr.lua index c93c207..a7a667f 100644 --- a/mocks/sr.lua +++ b/mocks/sr.lua @@ -132,20 +132,29 @@ pvMock = { function t._is_xavp(id) local _id, indx, key local patterns = { - '%$xavp%(([%w_]+)%)$', + '%$xavp%(([%w_^%[]+)%)$', '%$xavp%(([%w_^%[]+)%[(%d+)%]%)$', - '%$xavp%(([%w_]+)=>([%w_]+)%)$', - '%$xavp%(([%w_^%[]+)%[(%d+)%]=>([%w_]+)%)$' + '%$xavp%(([%w_^%[]+)=>([%w_^%[]+)%)$', + '%$xavp%(([%w_^%[]+)%[(%d+)%]=>([%w_^%[]+)%)$', + '%$xavp%(([%w_^%[]+)=>([%w_^%[]+)%[(%d+)%]%)$', + '%$xavp%(([%w_^%[]+)%[(%d+)%]=>([%w_^%[]+)%[(%d+)%]%)$' } + local logger = logging.file('reports/sr_pv_%s.log', '%Y-%m-%d') for _,v in pairs(patterns) do - for _id, indx, key in string.gmatch(id, v) do - if not key and tonumber(indx) == nil then + for _id, indx, key, kindx in string.gmatch(id, v) do + logger:log(logging.DEBUG, string.format("_:%d id:%s v:%s _id:%s indx:%s key:%s kindx:%s", _, id, v, tostring(_id), tostring(indx), tostring(key), tostring(kindx))) + if _ == 5 or _ == 3 then + kindx = key key = indx indx = nil else indx = tonumber(indx) end - return { id=_id, key=key, indx=indx, type='xavp' } + if kindx then + kindx = tonumber(kindx) + end + return { id=_id, key=key, + indx=indx, kindx=kindx, type='xavp' } end end end @@ -250,20 +259,23 @@ pvMock = { if not t.vars[result.private_id] then return end + if not result.kindx then + result.kindx = 0 + end if not result.key then if not result.indx then return t.vars[result.private_id] - else - result.real_indx = #t.vars[result.private_id]._et - result.indx - return t.vars[result.private_id]._et[result.real_indx] end end if not result.indx then result.indx = 0 end - result.real_indx = #t.vars[result.private_id]._et - result.indx - if t.vars[result.private_id]._et[result.real_indx] then - return t.vars[result.private_id]._et[result.real_indx][result.key] + if t.vars[result.private_id][result.indx] then + if t.vars[result.private_id][result.indx][result.key] then + if t.vars[result.private_id][result.indx][result.key][result.kindx] then + return t.vars[result.private_id][result.indx][result.key][result.kindx] + end + end end elseif result.type == 'avp' then if t.vars[result.private_id] then @@ -291,12 +303,16 @@ pvMock = { if not result.indx then result.indx = 0 end - if result.indx ~= 0 then + if not result.kindx then + result.kindx = 0 + end + if result.indx ~= 0 or result.kindx ~= 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 + temp[result.key] = Stack:new() + temp[result.key]:push(value) t.vars[result.private_id]:push(temp) elseif result.type == 'avp' then t.vars[result.private_id] = Stack:new() @@ -312,17 +328,27 @@ pvMock = { t.vars[result.private_id] = value elseif result.type == 'xavp' then if not result.indx then + if result.kindx and result.kindx ~= 0 then + error(string.format("kindx:%d must be 0", result.kindx)) + end temp = {} - temp[result.key] = value + temp[result.key] = Stack:new() + temp[result.key]:push(value) t.vars[result.private_id]:push(temp) else - result.real_indx = #t.vars[result.private_id]._et - result.indx - if t.vars[result.private_id]._et[result.real_indx] == nil then + if t.vars[result.private_id][result.indx] == nil then error(string.format("xavp(%s[%d]) does not exist", result.id, result.indx)) - elseif t.vars[result.private_id]._et[result.real_indx] == false then - t.vars[result.private_id]._et[result.real_indx] = {} + elseif t.vars[result.private_id][result.indx] == false then + t.vars[result.private_id][result.indx] = {} end - t.vars[result.private_id]._et[result.real_indx][result.key] = value + if not result.kindx then + result.kindx = 0 + end + if not t.vars[result.private_id][result.indx][result.key] then + t.vars[result.private_id][result.indx][result.key] = Stack:new() + --error(string.format("t:%s result:%s", table.tostring(t.vars[result.private_id]), table.tostring(result))) + end + t.vars[result.private_id][result.indx][result.key]:push(value) end elseif result.type == 'avp' then t.vars[result.private_id]:push(value) @@ -371,8 +397,7 @@ pvMock = { return else -- xavp(g[0]) - result.real_indx = #t.vars[result.private_id]._et - result.indx - t.vars[result.private_id]._et[result.real_indx] = false + t.vars[result.private_id][result.indx] = false return end else @@ -381,8 +406,7 @@ pvMock = { end end -- xavp(g[1]=>k) - result.real_indx = #t.vars[result.private_id]._et - result.indx - t.vars[result.private_id]._et[result.real_indx][result.key] = nil + t.vars[result.private_id][result.indx][result.key] = nil end elseif result.type == 'avp' then t.vars[result.private_id] = nil @@ -434,31 +458,40 @@ xavpMock = { t.__class__ = 'hdrMock' t.pv = pv - function t._get_xavp(xavp_name, index) + function t._get_xavp(xavp_name, index, mode) local private_id = "xavp:" .. xavp_name - local real_indx = #t.pv.vars[private_id]._et - index - + local k,v + local temp = {} 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)) + elseif not t.pv.vars[private_id][index] then + error(string.format("%s[%d] not found", xavp_name, index)) + end + if mode == 0 then + for k,v in pairs(t.pv.vars[private_id][index]) do + temp[k] = v:list() + end + else + for k,v in pairs(t.pv.vars[private_id][index]) do + temp[k] = v[0] + end end - return t.pv.vars[private_id]._et[real_indx] + return temp end function t.get_keys(xavp_name, index) local k,_ local output = {} - xavp = t._get_xavp(xavp_name, index) + xavp = t._get_xavp(xavp_name, index, 1) 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) + function t.get(xavp_name, index, mode) + xavp = t._get_xavp(xavp_name, index, mode) return xavp end diff --git a/tests/mocks.lua b/tests/mocks.lua index 1710fac..a81b29e 100644 --- a/tests/mocks.lua +++ b/tests/mocks.lua @@ -138,6 +138,8 @@ TestSRMock = {} assertEquals(result.type, 'xavp') assertEquals(result.id, 'id') assertEquals(result.key, 'key') + assertIsNil(result.indx) + assertIsNil(result.kindx) assertFalse(result.clean) end @@ -149,6 +151,7 @@ TestSRMock = {} assertEquals(result.id, 'id1') assertEquals(result.key, 'key3g2') assertEquals(result.indx, 8) + assertIsNil(result.kindx) assertFalse(result.clean) result = self.sr.pv._is_xavp("$xavp(id2g1f[9]=>keygg33_f)") assertTrue(result) @@ -156,6 +159,27 @@ TestSRMock = {} assertEquals(result.id, 'id2g1f') assertEquals(result.key, 'keygg33_f') assertEquals(result.indx, 9) + assertIsNil(result.kindx) + assertFalse(result.clean) + end + + function TestSRMock:test_is_xavp_complex_indx() + 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) + assertIsNil(result.kindx) + assertFalse(result.clean) + result = self.sr.pv._is_xavp("$xavp(id2g1f[9]=>keygg33_f[2])") + assertTrue(result) + assertEquals(result.type, 'xavp') + assertEquals(result.id, 'id2g1f') + assertEquals(result.key, 'keygg33_f') + assertEquals(result.indx, 9) + assertEquals(result.kindx, 2) assertFalse(result.clean) end @@ -177,7 +201,8 @@ TestSRMock = {} assertEquals(result.type, 'xavp') assertEquals(result.id, 'id1') assertFalse(result.key) - assertFalse(result.indx) + assertIsNil(result.indx) + assertIsNil(result.kindx) assertFalse(result.clean) end @@ -293,6 +318,14 @@ TestSRMock = {} assertEquals(self.sr.pv.get("$xavp(g=>bythere)"), "value_bye") end + function TestSRMock:test_xavp_sets_multi() + self.sr.pv.sets("$xavp(g=>hithere)", "value1") + assertEquals(self.sr.pv.get("$xavp(g=>hithere)"), "value1") + self.sr.pv.sets("$xavp(g[0]=>hithere)", "value0") + assertEquals(self.sr.pv.get("$xavp(g[0]=>hithere)"), "value0") + assertEquals(self.sr.pv.get("$xavp(g=>hithere[1])"), "value1") + end + function TestSRMock:test_xavp_sets1() self.sr.pv.sets("$xavp(g=>hithere)", "value") assertEquals(self.sr.pv.get("$xavp(g[0]=>hithere)"), "value") @@ -301,6 +334,17 @@ TestSRMock = {} assertEquals(self.sr.pv.get("$xavp(g[1]=>hithere)"), "value") end + function TestSRMock:test_xavp_sets1_multi() + self.sr.pv.sets("$xavp(g=>hithere)", "value1") + assertEquals(self.sr.pv.get("$xavp(g[0]=>hithere)"), "value1") + self.sr.pv.sets("$xavp(g[0]=>hithere)", "value0") + assertEquals(self.sr.pv.get("$xavp(g[0]=>hithere)"), "value0") + assertEquals(self.sr.pv.get("$xavp(g[0]=>hithere[1])"), "value1") + self.sr.pv.sets("$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)"), "value0") + end + function TestSRMock:test_xavp_seti() self.sr.pv.seti("$xavp(t=>hithere)", 0) assertEquals(self.sr.pv.get("$xavp(t[0]=>hithere)"), 0) @@ -314,6 +358,13 @@ TestSRMock = {} assertTrue(self.sr.pv.get, "$xavp(g)") end + function TestSRMock:test_xavp_get_multi() + self.sr.pv.sets("$xavp(g=>hithere)", "value1") + self.sr.pv.sets("$xavp(g[0]=>hithere)", "value2") + assertEquals(self.sr.pv.get("$xavp(g[0]=>hithere[0])"), "value2") + assertEquals(self.sr.pv.get("$xavp(g[0]=>hithere[1])"), "value1") + end + function TestSRMock:test_avp_get_simple() self.sr.pv.sets("$avp(s:hithere)", "value") assertEquals(self.sr.pv.get("$avp(s:hithere)"), "value") @@ -394,7 +445,6 @@ TestSRMock = {} self.sr.pv.unset("$xavp(g[0]=>t)") assertEquals(self.sr.pv.get("$xavp(g[0]=>t)"), nil) assertEquals(self.sr.pv.get("$xavp(g[1]=>t)"), "value") - assertTrue(self.sr.pv.get("$xavp(g[0])")) -- self.sr.pv.unset("$xavp(g[1])") assertFalse(self.sr.pv.get("$xavp(g[1])")) @@ -456,9 +506,11 @@ TestXAVPMock = {} self.pv.sets("$xavp(test=>uno)", "uno") assertEquals(self.pv.get("$xavp(test[0]=>uno)"), "uno") + self.pv.seti("$xavp(test[0]=>dos)", 4) self.pv.seti("$xavp(test[0]=>dos)", 2) assertEquals(self.pv.get("$xavp(test[0]=>dos)"), 2) - self.pv.seti("$xavp(test=>uno)", 1) + self.pv.seti("$xavp(test=>uno)", 3) + self.pv.seti("$xavp(test[0]=>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") @@ -485,15 +537,27 @@ TestXAVPMock = {} assertItemsEquals(l, {"uno", "dos"}) end - function TestXAVPMock:test_get() - local l = self.xavp.get("test", 0) + function TestXAVPMock:test_get_simple() + local l = self.xavp.get("test", 0, 1) assertTrue(l) assertItemsEquals(l, {uno=1, dos="dos", tres=3}) end - function TestXAVPMock:test_get() - local l = self.xavp.get("test", 1) + function TestXAVPMock:test_get_simple_1() + local l = self.xavp.get("test", 1, 1) assertTrue(l) assertItemsEquals(l, {uno="uno", dos=2}) end + + function TestXAVPMock:test_get() + local l = self.xavp.get("test", 0, 0) + assertTrue(l) + assertItemsEquals(l, {uno={1,3}, dos={"dos"}, tres={3}}) + end + + function TestXAVPMock:test_get_1() + local l = self.xavp.get("test", 1, 0) + assertTrue(l) + assertItemsEquals(l, {uno={"uno"}, dos={2,4}}) + end --EOF \ No newline at end of file