-
Notifications
You must be signed in to change notification settings - Fork 10
/
test_netstringserver.py
64 lines (47 loc) · 1.96 KB
/
test_netstringserver.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import os
import sys
sys.path.insert(0, os.path.abspath('..'))
import re
from dummynetstringserver import DummyProtocol
from twisted.trial import unittest
from twisted.test import proto_helpers
from twisted.internet.protocol import Factory
class NetstringDecoder(object):
def __init__(self, netstring):
self.netstring = netstring
self.supposedLength, self.string = self.parse(netstring)
def parse(self, netstring):
pattern = r'(\d+):(.*),'
match = re.match(pattern, netstring)
return match.group(1), match.group(2)
class TestServer(unittest.TestCase):
timeout = 1
def setUp(self):
factory = Factory()
factory.protocol = DummyProtocol
self.proto = factory.buildProtocol(('127.0.0.1', 0))
self.tr = proto_helpers.StringTransport()
self.proto.makeConnection(self.tr)
def _callMethod(self, string):
netstring = str(len(string)) + ':' + string + ','
self.proto.dataReceived(netstring)
decoder = NetstringDecoder(self.tr.value())
return decoder.string
def _testResult(self, request, expected):
result = self._callMethod(request)
self.assertEquals(expected, result)
def test_emptyRequest(self):
request = ''
expected = '{"jsonrpc": "2.0", "id": null, "error": ' + \
'{"message": "Parse error", "code": -32700}}'
self._testResult(request, expected)
def test_malformed(self):
request = '{"method": "sql", "id'
expected = '{"jsonrpc": "2.0", "id": null, "error": ' + \
'{"message": "Parse error", "code": -32700}}'
self._testResult(request, expected)
def test_caseSensitiveMethodV1(self):
request = '{"method": "ECHO", "id": "ABCD", "params": ["AB"]}'
expected = '{"result": null, "id": "ABCD", "error": {' + \
'"message": "Method ECHO not found", "code": -32601}}'
self._testResult(request, expected)