From 8df5623184b496f1a04237f04e07bdc679b8d03f Mon Sep 17 00:00:00 2001 From: Victor Seva Date: Thu, 1 Oct 2015 14:03:19 +0200 Subject: [PATCH] MT#15389 $dlg_var support Change-Id: I7408a639ee63e055c8030acdff9cf926c01fa2cb (cherry picked from commit cf064365b6a70a3cf170bd97438fb0828befd78e) --- mocks/sr.lua | 23 +++++++++++--- ngcp/dlg_var.lua | 62 +++++++++++++++++++++++++++++++++++++ tests/ngcp_dlg_var.lua | 70 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 151 insertions(+), 4 deletions(-) create mode 100644 ngcp/dlg_var.lua create mode 100644 tests/ngcp_dlg_var.lua diff --git a/mocks/sr.lua b/mocks/sr.lua index 55fa7ec..389654f 100644 --- a/mocks/sr.lua +++ b/mocks/sr.lua @@ -196,6 +196,18 @@ pvMock = { end end + function t._is_dlg_var(id) + local patterns = { + '%$dlg_var%(([%w_]+)%)$', + '%$%(dlg_var%(([%w_]+)%)%)$', + } + for _,v in pairs(patterns) do + for key in string.gmatch(id, v) do + return { id=key, clean=false, type='dlg_var' } + end + end + end + function t._is_hdr(id) local key, _, v local patterns = { @@ -236,6 +248,9 @@ pvMock = { if not result then result = t._is_var(id) end + if not result then + result = t._is_dlg_var(id) + end if not result then result = t._is_hdr(id) end @@ -255,7 +270,7 @@ pvMock = { return end - if result.type == 'var' then + if result.type == 'var' or result.type == 'dlg_var' then return t.vars[result.private_id] elseif result.type == 'xavp' then if not t.vars[result.private_id] then @@ -302,7 +317,7 @@ pvMock = { function t._addvalue_new(result, value) local temp - if result.type == 'var' then + if result.type == 'var' or result.type == 'dlg_var' then t.vars[result.private_id] = value elseif result.type == 'xavp' then if not result.indx then @@ -329,7 +344,7 @@ pvMock = { function t._addvalue_with_value(result, value) local temp - if result.type == 'var' then + if result.type == 'var' or result.type == 'dlg_var' then t.vars[result.private_id] = value elseif result.type == 'xavp' then if not result.indx then @@ -415,7 +430,7 @@ pvMock = { end elseif result.type == 'avp' then t.vars[result.private_id] = nil - elseif result.type == 'var' then + elseif result.type == 'var' or result.type == 'dlg_var' then t.vars[result.private_id] = nil end t.log("dbg", string.format("sr.pv vars:%s", table.tostring(t.vars))) diff --git a/ngcp/dlg_var.lua b/ngcp/dlg_var.lua new file mode 100644 index 0000000..631b2f2 --- /dev/null +++ b/ngcp/dlg_var.lua @@ -0,0 +1,62 @@ +-- +-- Copyright 2015 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". +-- + +local NGCPDlgVar = { + __class__ = 'NGCPDlgVar' +} +local NGCPDlgVar_MT = { + __index = NGCPDlgVar, +} + +function NGCPDlgVar:new(id) + local t = { id = "$dlg_var(" .. id .. ")" } + + NGCPDlgVar_MT.__call = function(s, value) + if not value then + return sr.pv.get(s.id) + elseif type(value) == "number" then + sr.pv.seti(s.id, value) + elseif type(value) == "string" then + sr.pv.sets(s.id, value) + else + error("value is not a number or string") + end + end + + NGCPDlgVar_MT.__tostring = function(s) + local value = sr.pv.get(s.id) + return string.format("%s:%s", s.id, tostring(value)) + end + return setmetatable( t, NGCPDlgVar_MT ) +end + +function NGCPDlgVar:log(level) + if not level then + level = "dbg" + end + sr.log(level, tostring(self)) +end + +function NGCPDlgVar:clean() + sr.pv.unset(self.id) +end + +return NGCPDlgVar +--EOF \ No newline at end of file diff --git a/tests/ngcp_dlg_var.lua b/tests/ngcp_dlg_var.lua new file mode 100644 index 0000000..e6c8783 --- /dev/null +++ b/tests/ngcp_dlg_var.lua @@ -0,0 +1,70 @@ +-- +-- Copyright 2015 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') +require 'mocks.sr' +local NGCPDlgVar = require 'ngcp.dlg_var' + +sr = srMock:new() + +TestNGCPDlgVar = {} --class + function TestNGCPDlgVar:setUp() + self.var = NGCPDlgVar:new("testid") + end + + function TestNGCPDlgVar:tearDown() + sr.pv.vars = {} + end + + function TestNGCPDlgVar:test_dlg_var_id() + assertEquals(self.var.id, "$dlg_var(testid)") + end + + function TestNGCPDlgVar:test_dlg_var_get() + sr.pv.sets("$dlg_var(testid)", "value") + assertEquals(self.var(), "value") + sr.pv.sets("$dlg_var(testid)", "1") + assertItemsEquals(self.var(), "1") + end + + function TestNGCPDlgVar:test_dlg_var_set() + self.var(1) + assertEquals(self.var(),1) + self.var("a") + assertEquals(self.var(), "a") + end + + function TestNGCPDlgVar:test_clean() + self.var(1) + self.var:clean() + assertFalse(self.var()) + end + + function TestNGCPDlgVar:test_log() + self.var:log() + end + + function TestNGCPDlgVar:test_tostring() + self.var(1) + assertEquals(tostring(self.var), "$dlg_var(testid):1") + self.var("hola") + assertEquals(tostring(self.var), "$dlg_var(testid):hola") + end +-- class TestNGCPDlgVar +--EOF \ No newline at end of file