From: Stas Shtin Date: Wed, 21 Apr 2010 12:57:49 +0000 (+0400) Subject: Added tests for ipypbx.http.FreeswitchConfigGenerator X-Git-Url: http://git.maemo.org/git/?p=ipypbx;a=commitdiff_plain;h=2adc77e231fa2a7a097215b01a04b60f26bef878 Added tests for ipypbx.http.FreeswitchConfigGenerator --- diff --git a/src/ipypbx/http.py b/src/ipypbx/http.py index 3e76ed9..a7cd848 100644 --- a/src/ipypbx/http.py +++ b/src/ipypbx/http.py @@ -37,7 +37,7 @@ Content-Length: %i %s''' - def __init__(self, database, parent): + def __init__(self, database, parent=None): super(FreeswitchConfigServer, self).__init__(parent) self.host = None @@ -45,7 +45,7 @@ Content-Length: %i self.connection_id = None self.is_running = False self.generators = [ - GenClass(database, self) for GenClass in ( + GenClass(database) for GenClass in ( SofiaConfGenerator,)] self.httpRequestParser = HttpRequestParser() @@ -65,6 +65,8 @@ Content-Length: %i self.port = port if connection_id: self.connection_id = connection_id + for generator in self.generators: + generator.connection_id = connection_id # Restart server if necessary. if needs_restart: @@ -219,15 +221,9 @@ class FreeswitchConfigGenerator(object): param_match = {} - def __init__(self, database, parent): + def __init__(self, database=None, connection_id=None): self.database = database - self.parent = parent - -# def database(self): -# """ -# Return database instance. -# """ -# return self.model.controllers['connection'].model.database() + self.connection_id = connection_id def canHandle(self, params): """ @@ -254,9 +250,15 @@ class FreeswitchConfigGenerator(object): """ Create params element based on data passed in a list. """ + # Create params element. + params_elt = etree.SubElement(parent_elt, 'params') + + # Add param elements to params element. for name, value in params: etree.SubElement( - parent_elt, 'param', name=name, value=str(value)) + params_elt, 'param', name=name, value=str(value)) + + return parent_elt class SofiaConfGenerator(FreeswitchConfigGenerator): diff --git a/src/ipypbx/tests/test_http.py b/src/ipypbx/tests/test_http.py index 180b124..7434635 100644 --- a/src/ipypbx/tests/test_http.py +++ b/src/ipypbx/tests/test_http.py @@ -18,6 +18,7 @@ import unittest from ipypbx import http from ipypbx.tests import support +from xml.etree import ElementTree as etree class TestHttpRequestParser(unittest.TestCase): @@ -103,6 +104,9 @@ class TestHttpRequestParser(unittest.TestCase): self.request.handle(line) def test_handle_body(self): + """ + HttpRequestParse.handleBody should parse variables from POST request. + """ self._run_lines( 'POST / HTTP/1.1', '', @@ -110,14 +114,20 @@ class TestHttpRequestParser(unittest.TestCase): self.assertEqual(self.request.data, {'foo': 'bar', 'qwe': 'asd'}) def test_handle_body_with_missing_values(self): + """ + Missing values should give empty results. + """ self._run_lines( 'POST / HTTP/1.1', '', 'foo=bar&qwe=') self.assertEqual(self.request.data, {'foo': 'bar', 'qwe': ''}) - def test_non_post_fails(self): + """ + We expect only POST requests from Freeswitch, for anything else we + get an error. + """ self.request.handle('GET / HTTP/1.1') self.request.handle('') self.assertRaises( @@ -125,6 +135,47 @@ class TestHttpRequestParser(unittest.TestCase): 'Only post requests work') -class TestFreeswitchConfigGenerator(support.InitDatabase, unittest.TestCase): - def test_foo(self): - print self.db +class TestFreeswitchConfigGenerator(unittest.TestCase): + def setUp(self): + self.generator = http.FreeswitchConfigGenerator() + + def test_can_handle(self): + self.generator.param_match = {'foo': 'bar'} + self.assertEqual(self.generator.canHandle({'foo': 'bar'}), True) + self.assertEqual(self.generator.canHandle({'foo': 'xxx'}), False) + self.assertEqual(self.generator.canHandle({'xxx': 'bar'}), False) + self.assertEqual( + self.generator.canHandle({'foo': 'bar', 'qwe': 'asd'}), True) + self.assertEqual(self.generator.canHandle({'qwe': 'asd'}), False) + + self.generator.param_match = {'foo': 'bar', 'baz': '123'} + self.assertEqual(self.generator.canHandle({'foo': 'bar'}), False) + self.assertEqual( + self.generator.canHandle({'foo': 'bar', 'baz': '123'}), True) + self.assertEqual( + self.generator.canHandle({'foo': 'bar', 'qwe': 'asd'}), False) + + def test_base_elements(self): + self.generator.param_match = {'section': 'foo'} + root_elt, section_elt = self.generator.baseElements + self.assertEqual( + etree.tostring(root_elt), + '
' + '') + self.assertEqual( + etree.tostring(section_elt), '
') + + def test_add_params(self): + foo_elt = etree.Element('foo') + self.assertEqual( + etree.tostring(self.generator.addParams(foo_elt, (('qwe', 'asd'),))), + '') + + + bar_elt = etree.Element('bar') + self.assertEqual( + etree.tostring( + self.generator.addParams(bar_elt, + (('qwe', 'asd'), ('zxc', '123')))), + '' + '')