From 0162899f04b5918f8bcf314e33d712ef38720593 Mon Sep 17 00:00:00 2001 From: Victor Seva Date: Thu, 10 Nov 2016 16:33:28 +0100 Subject: [PATCH] TT#6226 fix avp:all() * on real environment sr.pv.get(t.id_all) returns a string not a list * add tests/use_cases.lua Change-Id: I22e50faa3423f2069a8deb6be44e33af166cb72b --- ngcp/avp.lua | 14 ++++++++++++- tests/use_cases.lua | 48 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 tests/use_cases.lua diff --git a/ngcp/avp.lua b/ngcp/avp.lua index 4782653..15ee388 100644 --- a/ngcp/avp.lua +++ b/ngcp/avp.lua @@ -29,6 +29,7 @@ local NGCPAvp_MT = { function NGCPAvp:new(id) local t = { id = "$avp(s:" .. id .. ")", + id_indx = "$(avp(s:" .. id .. ")[%d])", id_all = "$(avp(s:" .. id .. ")[*])", } NGCPAvp_MT.__call = function(s, value) @@ -47,7 +48,18 @@ local NGCPAvp_MT = { end end function t.all() - return sr.pv.get(t.id_all) + local val + local indx = 0 + local res = {} + + val = sr.pv.get(string.format(t.id_indx, indx)) + if not val then return nil end + while val do + table.insert(res, val) + indx = indx + 1 + val = sr.pv.get(string.format(t.id_indx, indx)) + end + return res end NGCPAvp_MT.__tostring = function(s) local value = sr.pv.get(s.id) diff --git a/tests/use_cases.lua b/tests/use_cases.lua new file mode 100644 index 0000000..0372fb2 --- /dev/null +++ b/tests/use_cases.lua @@ -0,0 +1,48 @@ +-- +-- Copyright 2013-2016 SipWise Team +-- +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. +-- +-- This package is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- . +-- On Debian systems, the complete text of the GNU General +-- Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". +-- +require('luaunit') +local NGCPXAvp = require 'ngcp.xavp' +local NGCPAvp = require 'ngcp.avp' + +local srMock = require 'mocks.sr' +sr = srMock:new() + +-- luacheck: ignore TestUseCases +TestUseCases = {} + +function TestUseCases:tearDown() + sr.pv.vars = {} +end + +function TestUseCases:test_copy_avp() + local avp = NGCPAvp:new("tmp") + local xavp = NGCPXAvp:new('callee', 'real_prefs') + local vals = {1, 2, "3", 4} + local okvals = {4, "3", 2, 1} + + for i=1,#vals do + avp(vals[i]) + end + assertItemsEquals(avp:all(), okvals) + xavp:clean('cfu') + assertItemsEquals(xavp:all('cfu'), nil) + xavp('cfu', avp:all()) + assertItemsEquals(xavp:all('cfu'), okvals) +end