Added hdr mock

squeeze-backports
Victor Seva 13 years ago
parent f8b0d04c3e
commit dd89f9aa88

@ -3,9 +3,88 @@ require ('logging.file')
require 'lemock' require 'lemock'
require 'ngcp.utils' require 'ngcp.utils'
hdrMock = {
__class__ = 'hdrMock',
headers = {},
headers_reply = {},
_logger = logging.file('reports/sr_hdr_%s.log', '%Y-%m-%d'),
_logger_levels = {
dbg = logging.DEBUG,
info = logging.INFO,
warn = logging.WARN,
err = logging.ERROR,
crit = logging.FATAL
}
}
function hdrMock:new()
local t = {}
t.__class__ = 'hdrMock'
t.headers = {}
t.headers_reply = {}
function t._is_header(text)
local result = string.match(text,'[^:]+: .+\r\n$')
if result then
return true
end
return false
end
function t._get_header(text)
local _,v, result
local pattern = "^" .. text .. ": (.+)\r\n$"
if text then
for _,v in ipairs(t.headers) do
result = string.match(v, pattern)
--print(string.format("v:%s pattern:%s result:%s", v, pattern, tostring(result)))
if result then
return result
end
end
end
end
function t.append(text)
if text then
if not t._is_header(text) then
error("text: " .. text .. " malformed header")
end
table.insert(t.headers, text)
end
end
function t.insert(text)
if text then
if not t._is_header(text) then
error("text: " .. text .. " malformed header")
end
table.insert(t.headers, 1, text)
end
end
function t.remove(text)
local i,v
if text then
for i,v in ipairs(t.headers) do
if string.starts(v, text .. ":") then
table.remove(t.headers, i)
return
end
end
end
end
hdrMock_MT = { __index = hdrMock }
setmetatable(t, hdrMock_MT)
return t
end
-- end class
pvMock = { pvMock = {
__class__ = 'pvMock', __class__ = 'pvMock',
vars = {}, vars = {},
hdr = nil,
_logger = logging.file('reports/sr_pv_%s.log', '%Y-%m-%d'), _logger = logging.file('reports/sr_pv_%s.log', '%Y-%m-%d'),
_logger_levels = { _logger_levels = {
dbg = logging.DEBUG, dbg = logging.DEBUG,
@ -15,11 +94,12 @@ pvMock = {
crit = logging.FATAL crit = logging.FATAL
} }
} }
function pvMock:new() function pvMock:new(hdr)
local t = {} local t = {}
t.__class__ = 'pvMock' t.__class__ = 'pvMock'
t.vars = {} t.vars = {}
t.hdr = hdr
function t._is_xavp(id) function t._is_xavp(id)
local _id, indx, key local _id, indx, key
@ -77,6 +157,18 @@ pvMock = {
end end
end end
function t._is_hdr(id)
local key, _, v
local patterns = {
'%$hdr%(([^:]+)%)$',
}
for _,v in pairs(patterns) do
for key in string.gmatch(id, v) do
return { id=key, clean=false, type='hdr' }
end
end
end
function t._is(id) function t._is(id)
if not id then if not id then
error("id empty") error("id empty")
@ -89,6 +181,9 @@ pvMock = {
if not result then if not result then
result = t._is_var(id) result = t._is_var(id)
end end
if not result then
result = t._is_hdr(id)
end
if not result then if not result then
error(string.format("not implemented or wrong id:%s", id)) error(string.format("not implemented or wrong id:%s", id))
end end
@ -101,7 +196,7 @@ pvMock = {
if not result then if not result then
return return
end end
if result.type == 'var' then if result.type == 'var' then
return t.vars[result.private_id] return t.vars[result.private_id]
elseif result.type == 'xavp' then elseif result.type == 'xavp' then
@ -114,7 +209,7 @@ pvMock = {
else else
result.real_indx = #t.vars[result.private_id]._et - result.indx result.real_indx = #t.vars[result.private_id]._et - result.indx
return t.vars[result.private_id]._et[result.real_indx] return t.vars[result.private_id]._et[result.real_indx]
end end
end end
if not result.indx then if not result.indx then
result.indx = 0 result.indx = 0
@ -132,6 +227,10 @@ pvMock = {
return l[1] return l[1]
end end
end end
elseif result.type == 'hdr' then
if t.hdr then
return t.hdr._get_header(result.id)
end
end end
end end
@ -267,7 +366,6 @@ pvMock = {
-- class srMock -- class srMock
srMock = { srMock = {
__class__ = 'srMock', __class__ = 'srMock',
pv = pvMock:new(),
_logger = logging.file("reports/sr_%s.log", "%Y-%m-%d"), _logger = logging.file("reports/sr_%s.log", "%Y-%m-%d"),
_logger_levels = { _logger_levels = {
dbg = logging.DEBUG, dbg = logging.DEBUG,
@ -280,6 +378,8 @@ srMock = {
srMock_MT = { __index = srMock, __newindex = lemock.controller():mock() } srMock_MT = { __index = srMock, __newindex = lemock.controller():mock() }
function srMock:new() function srMock:new()
local t = {} local t = {}
t.hdr = hdrMock:new()
t.pv = pvMock:new(t.hdr)
function t.log(level, message) function t.log(level, message)
if not t._logger_levels[level] then if not t._logger_levels[level] then
error(string.format("level %s unknown", level)) error(string.format("level %s unknown", level))

@ -11,6 +11,47 @@ TestMock = {}
m.toto( 33, "abc", { 21} ) m.toto( 33, "abc", { 21} )
end end
TestHDRMock = {}
function TestHDRMock:setUp()
self.hdr = hdrMock:new()
end
function TestHDRMock:tearDown()
self.hdr.headers = {}
self.hdr.headers_reply = {}
end
function TestHDRMock:test_is_header()
assertTrue(self.hdr._is_header("From: hi@there.com\r\n"))
assertFalse(self.hdr._is_header("From hi@there.com\r\n"))
assertFalse(self.hdr._is_header("From: hi@there.com\r"))
assertFalse(self.hdr._is_header("From : hi@there.com\n"))
assertFalse(self.hdr._is_header("From : hi@there.com\n\r"))
assertTrue(self.hdr._is_header("From: hi@there.com:8080\r\n"))
end
function TestHDRMock:test_append()
assertFalse(self.hdr._get_header("From"))
self.hdr.append("From: hi@there.com\r\n")
assertEquals(self.hdr.headers, {"From: hi@there.com\r\n"})
self.hdr.append("To: bye@there.com\r\n")
assertEquals(self.hdr.headers, {"From: hi@there.com\r\n", "To: bye@there.com\r\n"})
end
function TestHDRMock:test_insert()
assertFalse(self.hdr._get_header("From"))
self.hdr.insert("From: hi@there.com\r\n")
assertEquals(self.hdr.headers, {"From: hi@there.com\r\n"})
self.hdr.insert("To: bye@there.com\r\n")
assertEquals(self.hdr.headers, {"To: bye@there.com\r\n", "From: hi@there.com\r\n"})
end
function TestHDRMock:test_get_header()
self:test_append()
assertEquals(self.hdr._get_header("From"), "hi@there.com")
end
-- end class
TestSRMock = {} TestSRMock = {}
function TestSRMock:setUp() function TestSRMock:setUp()
self.sr = srMock:new() self.sr = srMock:new()
@ -30,6 +71,26 @@ TestSRMock = {}
assertEquals(self.sr.pv._clean_id('u25'), 'u25') assertEquals(self.sr.pv._clean_id('u25'), 'u25')
end end
function TestSRMock:test_is_hdr_simple()
local result
result = self.sr.pv._is_hdr("$hdr(id)")
assertTrue(result)
assertEquals(result.type, 'hdr')
assertEquals(result.id, 'id')
assertEquals(result.key, nil)
assertFalse(result.clean)
end
function TestSRMock:test_is_hdr_complex()
local result
result = self.sr.pv._is_hdr("$hdr($si)")
assertTrue(result)
assertEquals(result.type, 'hdr')
assertEquals(result.id, '$si')
assertEquals(result.key, nil)
assertFalse(result.clean)
end
function TestSRMock:test_is_xavp_simple() function TestSRMock:test_is_xavp_simple()
local result local result
result = self.sr.pv._is_xavp("$xavp(id=>key)") result = self.sr.pv._is_xavp("$xavp(id=>key)")
@ -235,7 +296,7 @@ TestSRMock = {}
v = 1 v = 1
for i=#vals,1,-1 do for i=#vals,1,-1 do
assertEquals(l[i],vals[v]) assertEquals(l[i],vals[v])
v = v + 1 v = v + 1
end end
end end
@ -250,6 +311,12 @@ TestSRMock = {}
assertEquals(self.sr.pv.get("$(avp(s:hithere)[*])"), {"new_value"}) assertEquals(self.sr.pv.get("$(avp(s:hithere)[*])"), {"new_value"})
end end
function TestSRMock:test_hdr_get()
self.sr.hdr.insert("From: hola\r\n")
assertEquals(self.sr.hdr.headers, {"From: hola\r\n"})
assertEquals(self.sr.pv.get("$hdr(From)"), "hola")
end
function TestSRMock:test_unset_var() function TestSRMock:test_unset_var()
self.sr.pv.sets("$var(hithere)", "value") self.sr.pv.sets("$var(hithere)", "value")
assertEquals(self.sr.pv.get("$var(hithere)"), "value") assertEquals(self.sr.pv.get("$var(hithere)"), "value")
@ -273,7 +340,7 @@ TestSRMock = {}
self.sr.pv.sets("$xavp(g=>t)", "value1") self.sr.pv.sets("$xavp(g=>t)", "value1")
assertEquals(self.sr.pv.get("$xavp(g[0]=>t)"), "value1") assertEquals(self.sr.pv.get("$xavp(g[0]=>t)"), "value1")
assertEquals(self.sr.pv.get("$xavp(g[1]=>t)"), "value") assertEquals(self.sr.pv.get("$xavp(g[1]=>t)"), "value")
-- --
self.sr.pv.unset("$xavp(g[0]=>t)") 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[0]=>t)"), nil)
assertEquals(self.sr.pv.get("$xavp(g[1]=>t)"), "value") assertEquals(self.sr.pv.get("$xavp(g[1]=>t)"), "value")
@ -293,7 +360,7 @@ TestSRMock = {}
assertEquals(self.sr.pv.get("$xavp(g[1]=>t)"), "value") assertEquals(self.sr.pv.get("$xavp(g[1]=>t)"), "value")
self.sr.pv.sets("$xavp(g[1]=>z)", "value_z") self.sr.pv.sets("$xavp(g[1]=>z)", "value_z")
assertEquals(self.sr.pv.get("$xavp(g[1]=>z)"), "value_z") assertEquals(self.sr.pv.get("$xavp(g[1]=>z)"), "value_z")
-- --
self.sr.pv.unset("$xavp(g[0])") self.sr.pv.unset("$xavp(g[0])")
assertEquals(self.sr.pv.get("$xavp(g[0]=>t)"), nil) assertEquals(self.sr.pv.get("$xavp(g[0]=>t)"), nil)
assertEquals(self.sr.pv.get("$xavp(g[1]=>t)"), "value") assertEquals(self.sr.pv.get("$xavp(g[1]=>t)"), "value")

Loading…
Cancel
Save