- Added Stack class in utils

- Added real functionality to sr.pv Kamailio Mock module.
  sr.pv vars are processed like avps
squeeze-backports
Victor Seva 13 years ago
parent 9b07ff8e33
commit 4c0ca5a943

@ -1,11 +1,73 @@
#!/usr/bin/env lua5.1
require 'lemock'
require 'utils'
mc = lemock.controller()
pvMock = {
__class__ = 'pvMock',
vars = {}
}
function pvMock:new()
local t = {}
t.__class__ = 'pvMock'
t.vars = {}
function t.get(id)
if type(t.vars[id]) == 'table' then
return t.vars[id]:list()
else
return t.vars[id]
end
end
function t._addvalue(id, value)
if not t.vars[id] then
t.vars[id] = value
elseif type(t.vars[id]) == 'table' then
t.vars[id]:push(value)
else
local old = t.vars[id]
t.vars[id] = Stack:new()
t.vars[id]:push(old, value)
end
end
function t.seti(id, value)
if type(value) ~= 'number' then
error("value is not a number")
end
t._addvalue(id, value)
end
function t.sets(id, value)
if type(value) ~= 'string' then
error("value is not a string")
end
t._addvalue(id, value)
end
function t.unset(id)
t.vars[id] = nil
end
function t.is_null(id)
if not t.vars[id] then
return true
end
return false
end
pvMock_MT = { __index = pvMock }
setmetatable(t, pvMock_MT)
return t
end
-- end class
-- class srMock
srMock = {
__class__ = 'srMock',
pv = mc:mock(),
pv = pvMock:new(),
log = mc:mock()
}
srMock_MT = { __index = srMock, __newindex = mc:mock() }
@ -15,4 +77,5 @@ srMock_MT = { __index = srMock, __newindex = mc:mock() }
setmetatable(t, srMock_MT)
return t
end
-- end class
--EOF

@ -1,6 +1,7 @@
#!/usr/bin/env lua5.1
require('luaunit')
require 'mocks.sr'
--require 'utils'
TestMock = {}
function TestMock:testMock()
@ -15,11 +16,65 @@ TestSRMock = {}
self.sr = srMock:new()
end
function TestSRMock:tearDown()
self.sr = nil
end
function TestSRMock:test_ini()
assertTrue(self.sr.pv)
end
function TestSRMock:test_sets()
self.sr.pv.unset("$avp('hithere')")
self.sr.pv.sets("$avp('hithere')", "value")
assertEquals(self.sr.pv.vars["$avp('hithere')"], "value")
assertError(self.sr.pv.sets, "$avp('hithere')", 1)
end
function TestSRMock:test_seti()
self.sr.pv.unset("$avp('hithere')")
self.sr.pv.seti("$avp('hithere')", 0)
assertEquals(self.sr.pv.vars["$avp('hithere')"], 0)
assertError(self.sr.pv.seti, "$avp('hithere')", "1")
end
function TestSRMock:test_get()
local vals = {1,2,3}
self.sr.pv.unset("$avp('hithere')")
self.sr.pv.sets("$avp('hithere')", "value")
assertEquals(self.sr.pv.get("$avp('hithere')"), "value")
self.sr.pv.unset("$avp('hithere')")
self.sr.pv.seti("$avp('hithere')", 1)
assertEquals(self.sr.pv.get("$avp('hithere')"), 1)
for i=1,#vals do
self.sr.pv.seti("$avp('hithere')", vals[i])
end
local l = self.sr.pv.get("$avp('hithere')")
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 TestSRMock:test_unset()
self.sr.pv.sets("$avp('hithere')", "value")
self.sr.pv.unset("$avp('hithere')")
assertEquals(self.sr.pv.vars["$avp('hithere')"], nil)
self.sr.pv.unset("$avp('hithere')")
assertEquals(self.sr.pv.vars["$avp('hithere')"], nil)
end
function TestSRMock:test_is_null()
self.sr.pv.unset("$avp('hithere')")
assertTrue(self.sr.pv.is_null("$avp('hithere')"))
self.sr.pv.sets("$avp('hithere')", "value")
assertFalse(self.sr.pv.is_null("$avp('hithere')"))
self.sr.pv.sets("$avp('hithere')", "value")
assertFalse(self.sr.pv.is_null("$avp('hithere')"))
end
---- Control test output:
lu = LuaUnit
lu:setOutputType( "TAP" )

@ -51,6 +51,23 @@ TestUtils = {} --class
end
-- class TestUtils
TestStack = {}
function TestStack:test()
s = Stack:new()
assertEquals(#s._et,0)
assertEquals(s:pop(), nil)
s:push(1)
assertEquals(#s._et,1)
assertEquals(s:pop(),1)
assertEquals(s:size(),0)
s:push(1)
s:push({1,2,3})
assertEquals(s:size(),2)
local l = s:list()
assertItemsEquals(l[1],{1,2,3})
assertEquals(l[2],1)
end
-- class TestStack
---- Control test output:
lu = LuaUnit
lu:setOutputType( "TAP" )

@ -119,4 +119,69 @@ function explode(delimiter, text)
end
return list
end
-- Stack Table
-- Uses a table as stack, use <table>:push(value) and <table>:pop()
-- Lua 5.1 compatible
-- GLOBAL
Stack = {
__class__ = 'Stack'
}
Stack_MT = { __index = Stack }
-- Create a Table with stack functions
function Stack:new()
local t = { _et = {} }
setmetatable(t, Stack_MT)
return t
end
-- push a value on to the stack
function Stack:push(...)
if ... then
local targs = {...}
-- add values
for _,v in pairs(targs) do
table.insert(self._et, v)
end
end
end
-- pop a value from the stack
function Stack:pop(num)
-- get num values from stack
local num = num or 1
-- return table
local entries = {}
-- get values into entries
for i = 1, num do
-- get last entry
if #self._et ~= 0 then
table.insert(entries, self._et[#self._et])
-- remove last value
table.remove(self._et)
else
break
end
end
-- return unpacked entries
return unpack(entries)
end
-- get entries
function Stack:size()
return #self._et
end
-- list values
function Stack:list()
local entries = {}
for i = #self._et, 1, -1 do
table.insert(entries, self._et[i])
end
return entries
end
-- end class
--EOF
Loading…
Cancel
Save