From dd89f9aa880fee4ff25e74e9e18b4ff33fc45c4c Mon Sep 17 00:00:00 2001 From: Victor Seva Date: Thu, 18 Apr 2013 10:47:09 +0200 Subject: [PATCH] Added hdr mock --- mocks/sr.lua | 108 ++++++++++++++++++++++++++++++++++++++++++++++-- tests/mocks.lua | 73 ++++++++++++++++++++++++++++++-- 2 files changed, 174 insertions(+), 7 deletions(-) diff --git a/mocks/sr.lua b/mocks/sr.lua index ed25777..a64a0d9 100644 --- a/mocks/sr.lua +++ b/mocks/sr.lua @@ -3,9 +3,88 @@ require ('logging.file') require 'lemock' 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 = { __class__ = 'pvMock', vars = {}, + hdr = nil, _logger = logging.file('reports/sr_pv_%s.log', '%Y-%m-%d'), _logger_levels = { dbg = logging.DEBUG, @@ -15,11 +94,12 @@ pvMock = { crit = logging.FATAL } } - function pvMock:new() + function pvMock:new(hdr) local t = {} t.__class__ = 'pvMock' t.vars = {} + t.hdr = hdr function t._is_xavp(id) local _id, indx, key @@ -77,6 +157,18 @@ pvMock = { 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) if not id then error("id empty") @@ -89,6 +181,9 @@ pvMock = { if not result then result = t._is_var(id) end + if not result then + result = t._is_hdr(id) + end if not result then error(string.format("not implemented or wrong id:%s", id)) end @@ -101,7 +196,7 @@ pvMock = { if not result then return end - + if result.type == 'var' then return t.vars[result.private_id] elseif result.type == 'xavp' then @@ -114,7 +209,7 @@ pvMock = { else result.real_indx = #t.vars[result.private_id]._et - result.indx return t.vars[result.private_id]._et[result.real_indx] - end + end end if not result.indx then result.indx = 0 @@ -132,6 +227,10 @@ pvMock = { return l[1] end end + elseif result.type == 'hdr' then + if t.hdr then + return t.hdr._get_header(result.id) + end end end @@ -267,7 +366,6 @@ pvMock = { -- class srMock srMock = { __class__ = 'srMock', - pv = pvMock:new(), _logger = logging.file("reports/sr_%s.log", "%Y-%m-%d"), _logger_levels = { dbg = logging.DEBUG, @@ -280,6 +378,8 @@ srMock = { srMock_MT = { __index = srMock, __newindex = lemock.controller():mock() } function srMock:new() local t = {} + t.hdr = hdrMock:new() + t.pv = pvMock:new(t.hdr) function t.log(level, message) if not t._logger_levels[level] then error(string.format("level %s unknown", level)) diff --git a/tests/mocks.lua b/tests/mocks.lua index 47ca54a..f221df9 100644 --- a/tests/mocks.lua +++ b/tests/mocks.lua @@ -11,6 +11,47 @@ TestMock = {} m.toto( 33, "abc", { 21} ) 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 = {} function TestSRMock:setUp() self.sr = srMock:new() @@ -30,6 +71,26 @@ TestSRMock = {} assertEquals(self.sr.pv._clean_id('u25'), 'u25') 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() local result result = self.sr.pv._is_xavp("$xavp(id=>key)") @@ -235,7 +296,7 @@ TestSRMock = {} v = 1 for i=#vals,1,-1 do assertEquals(l[i],vals[v]) - v = v + 1 + v = v + 1 end end @@ -250,6 +311,12 @@ TestSRMock = {} assertEquals(self.sr.pv.get("$(avp(s:hithere)[*])"), {"new_value"}) 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() self.sr.pv.sets("$var(hithere)", "value") assertEquals(self.sr.pv.get("$var(hithere)"), "value") @@ -273,7 +340,7 @@ TestSRMock = {} 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[1]=>t)"), "value") - -- + -- 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") @@ -293,7 +360,7 @@ TestSRMock = {} assertEquals(self.sr.pv.get("$xavp(g[1]=>t)"), "value") self.sr.pv.sets("$xavp(g[1]=>z)", "value_z") assertEquals(self.sr.pv.get("$xavp(g[1]=>z)"), "value_z") - -- + -- self.sr.pv.unset("$xavp(g[0])") assertEquals(self.sr.pv.get("$xavp(g[0]=>t)"), nil) assertEquals(self.sr.pv.get("$xavp(g[1]=>t)"), "value")