Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/tests/units/toolkit/http.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/units/toolkit/http.py')
-rwxr-xr-xtests/units/toolkit/http.py107
1 files changed, 106 insertions, 1 deletions
diff --git a/tests/units/toolkit/http.py b/tests/units/toolkit/http.py
index 7a63176..d21af37 100755
--- a/tests/units/toolkit/http.py
+++ b/tests/units/toolkit/http.py
@@ -7,7 +7,7 @@ import select
from __init__ import tests
from sugar_network import client as local
-from sugar_network.toolkit.router import route, Router, Request
+from sugar_network.toolkit.router import route, Router, Request, Response
from sugar_network.toolkit import coroutine, http
@@ -54,6 +54,28 @@ class HTTPTest(tests.Test):
[None, None, None, None, -1, {'foo': 'bar'}],
events)
+ def test_call(self):
+
+ class Commands(object):
+
+ @route('FOO', [None, None], cmd='f1', mime_type='application/json')
+ def f1(self, request):
+ return request.path
+
+ self.server = coroutine.WSGIServer(('127.0.0.1', local.ipc_port.value), Router(Commands()))
+ coroutine.spawn(self.server.serve_forever)
+ coroutine.dispatch()
+ conn = http.Connection('http://127.0.0.1:%s' % local.ipc_port.value)
+
+ request = Request({
+ 'REQUEST_METHOD': 'FOO',
+ 'PATH_INFO': '/foo/bar',
+ 'QUERY_STRING': 'cmd=f1',
+ })
+ self.assertEqual(['foo', 'bar'], conn.call(request))
+
+ self.assertEqual(['foo', 'bar'], conn.call(Request(method='FOO', path=['foo', 'bar'], cmd='f1')))
+
def test_call_ReturnStream(self):
class Commands(object):
@@ -85,6 +107,89 @@ class HTTPTest(tests.Test):
})
self.assertEqual('result', json.load(client.call(request)))
+ def test_call_ReturnMeta(self):
+
+ class Commands(object):
+
+ @route('HEAD')
+ def f1(self, response):
+ response.meta['str'] = 'str'
+ response.meta['bool'] = True
+ response.meta['int'] = -1
+
+ @route('POST')
+ def f2(self):
+ response.meta['str'] = 'STR'
+ response.meta['bool'] = False
+ response.meta['int'] = 1
+
+ @route('GET')
+ def f3(self):
+ response.meta['str'] = 'FOO'
+ response.meta['bool'] = True
+ response.meta['int'] = 10
+
+ server = coroutine.WSGIServer(('127.0.0.1', local.ipc_port.value), Router(Commands()))
+ coroutine.spawn(server.serve_forever)
+ coroutine.dispatch()
+ conn = http.Connection('http://127.0.0.1:%s' % local.ipc_port.value)
+
+ request = Request({
+ 'REQUEST_METHOD': 'HEAD',
+ 'PATH_INFO': '/',
+ })
+ response = Response()
+ conn.call(request, response)
+ self.assertEqual({
+ 'int': -1,
+ 'bool': True,
+ 'str': 'str',
+ }, response.meta)
+
+ response = Response()
+ conn.call(Request(method='POST'), response)
+ self.assertEqual({
+ 'int': 1,
+ 'bool': False,
+ 'str': 'STR',
+ }, response.meta)
+
+ response = Response()
+ conn.call(Request(method='GET'), response)
+ self.assertEqual({
+ 'int': 10,
+ 'bool': True,
+ 'str': 'FOO',
+ }, response.meta)
+
+ def test_call_ReturnMetaOnRedirects(self):
+
+ class Front(object):
+
+ @route('GET')
+ def get(self, response):
+ response.meta['front'] = 'value1'
+ raise http.Redirect('http://127.0.0.1:%s' % (local.ipc_port.value + 1))
+
+ server = coroutine.WSGIServer(('127.0.0.1', local.ipc_port.value), Router(Front()))
+ coroutine.spawn(server.serve_forever)
+
+ class Back(object):
+
+ @route('GET')
+ def get(self, response):
+ response.meta['back'] = 'value2'
+
+ server = coroutine.WSGIServer(('127.0.0.1', local.ipc_port.value + 1), Router(Back()))
+ coroutine.spawn(server.serve_forever)
+
+ conn = http.Connection('http://127.0.0.1:%s' % local.ipc_port.value)
+ coroutine.dispatch()
+
+ response = Response()
+ stream = conn.call(Request(method='GET'), response)
+ self.assertEqual({'front': 'value1', 'back': 'value2'}, response.meta)
+
if __name__ == '__main__':
tests.main()