check.py: Added helper class XAvp to deal with kamailio xavps

test_check.py: Unit Test for XAvp class
vseva/3.0
git user on spce 13 years ago
parent 9bc7d39cf1
commit f73c1f4202

@ -7,6 +7,54 @@ try:
except:
from yaml import Loader
class XAvp:
""" Class to simulate the xavp """
_data = []
_name = ""
def __init__(self, name, data):
result = re.match('\$xavp\((\w+)\)', name)
try:
self._name = result.group(1)
except:
raise Exception('not a xavp')
self._data = data
def get(self, str):
pattern_nindx = '(\[(?P<%s>\d+)\])?' % 'nindx'
pattern_kindx = '(\[(?P<%s>\d+|\*+)\])?' % 'kindx'
pattern = '\$xavp\((?P<name>\w+)%s=>(?P<key>\w+)%s\)' % (pattern_nindx, pattern_kindx)
result = re.match(pattern, str)
if result is not None:
if self._name != result.group('name'):
raise KeyError(
'diferent name. name:%s != %s' % (self._name, result.group(1))
)
try:
nindx = int(result.group('nindx'))
except:
nindx = 0
if self._data[nindx].has_key(result.group('key')):
values = self._data[nindx][result.group('key')]
else:
raise KeyError('no %s key found' % result.group('key') )
nsize = len(self._data)
if nsize <= nindx:
raise IndexError('%s has %d elements' % (self._name, nsize))
try:
kindx = int(result.group('kindx'))
except:
if ( result.group('kindx') == '*' ):
return values
kindx = 0
ksize = len(values)
if ksize <= kindx:
raise IndexError('%s has %d elements' % (result.group('key'), ksize))
#print "name: %s nindx:%d key: %s kindx: %d" % (result.group('name'), nindx, result.group('key'), kindx)
return values[kindx]
else:
raise KeyError('no key found')
class Test:
""" Class to create TAP output """
_step = []

@ -0,0 +1,46 @@
#!/usr/bin/env python
from check import XAvp
import unittest
class TestXAvp(unittest.TestCase):
def setUp(self):
self.name = 'test'
self.data = [
{'koko': [1]},
{'koko': [1, 2]},
{'lolo': [3], 'lola': [7]},
]
self.xavp = XAvp('$xavp(%s)' % self.name, self.data)
def test_init(self):
self.assertEqual(self.name, self.xavp._name)
self.assertItemsEqual(self.data, self.xavp._data)
def test_init_wrong_type(self):
self.assertRaises(Exception, self.xavp, '$var(whatever)', None)
def test_get_wrong_name(self):
self.assertRaises(KeyError, self.xavp.get, '$xavp(otro)')
self.assertRaises(KeyError, self.xavp.get, '$xavp(otro[0])')
self.assertRaises(KeyError, self.xavp.get, '$xavp(otro=>whatever)')
self.assertRaises(KeyError, self.xavp.get, '$xavp(otro[0]=>whatever)')
def test_get_wrong_nindx(self):
self.assertRaises(IndexError, self.xavp.get, '$xavp(test[10]=>koko)')
self.assertRaises(IndexError, self.xavp.get, '$xavp(test[10]=>koko[1])')
def test_get_wrong_kindx(self):
self.assertRaises(IndexError, self.xavp.get, '$xavp(test[0]=>koko[1])')
self.assertRaises(IndexError, self.xavp.get, '$xavp(test[1]=>koko[10])')
def test_get_value(self):
self.assertEqual(self.xavp.get('$xavp(test=>koko)'), 1)
self.assertEqual(self.xavp.get('$xavp(test[1]=>koko[1])'), 2)
self.assertEqual(self.xavp.get('$xavp(test[2]=>lola[0])'), 7)
def test_get_value_all(self):
self.assertItemsEqual(self.xavp.get('$xavp(test[1]=>koko[*])'), [1,2])
if __name__ == '__main__':
unittest.main()
Loading…
Cancel
Save