first commit
[bitcoin:spesmilo.git] / jsonrpc / _tests / test_modpywrapper.py
1
2 """
3   Copyright (c) 2007 Jan-Klaas Kollhof
4
5   This file is part of jsonrpc.
6
7   jsonrpc is free software; you can redistribute it and/or modify
8   it under the terms of the GNU Lesser General Public License as published by
9   the Free Software Foundation; either version 2.1 of the License, or
10   (at your option) any later version.
11
12   This software is distributed in the hope that it will be useful,
13   but WITHOUT ANY WARRANTY; without even the implied warranty of
14   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15   GNU Lesser General Public License for more details.
16
17   You should have received a copy of the GNU Lesser General Public License
18   along with this software; if not, write to the Free Software
19   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20 """
21 import unittest
22 import jsonrpc
23 from types import *
24
25 class Service(object):
26     @jsonrpc.ServiceMethod
27     def echo(self, arg):
28         return arg
29
30
31 class ApacheRequestMockup(object):
32
33     def __init__(self, filename, fin, fout):
34         self.fin=fin
35         self.fout = fout
36         self.filename = filename
37         
38     def write(self,data):
39         self.fout.write(data)
40
41     def flush(self):
42         pass
43     
44     def read(self):
45         return self.fin.read()
46
47 class ModPyMockup(object):
48     def __init__(self):
49         self.apache=ApacheModuleMockup()
50
51 class ApacheModuleMockup(object):
52     def __getattr__(self, name):
53         return name
54     
55     def import_module(self, moduleName, log=1):
56         return Service()
57
58
59     
60 class  TestModPyWrapper(unittest.TestCase):
61
62     def setUp(self):
63         import sys
64         sys.modules['mod_python']  =ModPyMockup()
65         
66     def tearDown(self):
67         pass
68
69     def test_runHandler(self):
70         from StringIO import StringIO
71        
72         json=u'{"method":"echo","params":["foobar"], "id":""}'
73         fin=StringIO(json)
74         fout=StringIO()
75         req = ApacheRequestMockup(__file__ , fin, fout)
76
77         jsonrpc.handler(req)
78
79         data = fout.getvalue()
80
81         self.assertEquals(jsonrpc.loads(data), {"result":"foobar", "error":None, "id":""})
82
83     def test_ServiceImplementationNotFound(self):
84         from StringIO import StringIO
85        
86         json=u'{"method":"echo","params":["foobar"], "id":""}'
87         fin=StringIO(json)
88         fout=StringIO()
89         req = ApacheRequestMockup("foobar" , fin, fout)
90
91         rslt = jsonrpc.handler(req)
92         self.assertEquals(rslt, "OK")
93         data = fout.getvalue()
94
95         self.assertEquals(jsonrpc.loads(data), {u'id': '', u'result': None, u'error': {u'message': '', u'name': u'ServiceImplementaionNotFound'}} )
96
97         
98