summaryrefslogtreecommitdiff
path: root/tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests.py')
-rw-r--r--tests.py141
1 files changed, 111 insertions, 30 deletions
diff --git a/tests.py b/tests.py
index e241104..9a104e0 100644
--- a/tests.py
+++ b/tests.py
@@ -36,6 +36,9 @@ from jsonrpclib.SimpleJSONRPCServer import SimpleJSONRPCServer
from jsonrpclib.SimpleJSONRPCServer import SimpleJSONRPCRequestHandler
+ORIGINAL_HISTORY_SIZE = history.size
+
+
def get_port(family=socket.AF_INET):
sock = socket.socket(family, socket.SOCK_STREAM)
sock.bind(("localhost", 0))
@@ -53,6 +56,10 @@ class TestCompatibility(unittest.TestCase):
self.server = server_set_up(addr=('', self.port))
self.client = Server('http://localhost:%d' % self.port)
+ def tearDown(self):
+ self.server.stop()
+ self.server.join()
+
# v1 tests forthcoming
# Version 2.0 Tests
@@ -281,6 +288,13 @@ class InternalTests(unittest.TestCase):
def setUp(self):
self.port = get_port()
self.server = server_set_up(addr=('', self.port))
+ self.addCleanup(self.cleanup)
+
+ def cleanup(self):
+ self.server.stop()
+ self.server.join()
+ history.size = ORIGINAL_HISTORY_SIZE
+ history.clear()
def get_client(self):
return Server('http://localhost:%d' % self.port)
@@ -316,7 +330,10 @@ class InternalTests(unittest.TestCase):
def test_single_namespace(self):
client = self.get_client()
+
response = client.namespace.sum(1, 2, 4)
+ self.assertEqual(7, response)
+
request = json.loads(history.request)
response = json.loads(history.response)
verify_request = {
@@ -328,8 +345,64 @@ class InternalTests(unittest.TestCase):
}
verify_request['id'] = request['id']
verify_response['id'] = request['id']
- self.assertTrue(verify_request == request)
- self.assertTrue(verify_response == response)
+ self.assertEqual(verify_request, request)
+ self.assertEqual(verify_response, response)
+
+ def test_history_defaults_to_20(self):
+ client = self.get_client()
+ self.assertEqual(20, history.size)
+
+ for i in range(30):
+ client.namespace.sum(i, i)
+
+ self.assertEqual(20, len(history.requests))
+ self.assertEqual(20, len(history.responses))
+
+ verify_request = {
+ "jsonrpc": "2.0", "params": [29, 29],
+ "method": "namespace.sum"
+ }
+ verify_response = {"jsonrpc": "2.0", "result": 58}
+
+ # it should truncate to the *last* 20
+ request = json.loads(history.request)
+ response = json.loads(history.response)
+
+ verify_request["id"] = request["id"]
+ self.assertEqual(request, verify_request)
+
+ verify_response["id"] = request["id"]
+ self.assertEqual(response, verify_response)
+
+ def test_history_allows_configurable_size(self):
+ client = self.get_client()
+ history.size = 10
+
+ for i in range(30):
+ client.namespace.sum(i, i)
+
+ self.assertEqual(10, len(history.requests))
+ self.assertEqual(10, len(history.responses))
+
+ def test_history_allows_unlimited_size(self):
+ client = self.get_client()
+ history.size = -1
+
+ for i in range(40):
+ client.namespace.sum(i, i)
+
+ self.assertEqual(40, len(history.requests))
+ self.assertEqual(40, len(history.responses))
+
+ def test_history_can_be_disabled(self):
+ client = self.get_client()
+ history.size = 0
+
+ for i in range(40):
+ client.namespace.sum(i, i)
+
+ self.assertEqual(0, len(history.requests))
+ self.assertEqual(0, len(history.responses))
def test_multicall_success(self):
multicall = self.get_multicall_client()
@@ -365,37 +438,40 @@ class InternalTests(unittest.TestCase):
result = sub_service_proxy.add(21, 21)
self.assertTrue(result == 42)
-if jsonrpc.USE_UNIX_SOCKETS:
- # We won't do these tests unless Unix Sockets are supported
-
- @unittest.skip("Skipping Unix socket tests right now.")
- class UnixSocketInternalTests(InternalTests):
- """
- These tests run the same internal communication tests,
- but over a Unix socket instead of a TCP socket.
- """
- def setUp(self):
- suffix = "%d.sock" % get_port()
-
- # Open to safer, alternative processes
- # for getting a temp file name...
- temp = tempfile.NamedTemporaryFile(
- suffix=suffix
- )
- self.port = temp.name
- temp.close()
- self.server = server_set_up(
- addr=self.port,
- address_family=socket.AF_UNIX
- )
+@unittest.skipIf(
+ not jsonrpc.USE_UNIX_SOCKETS or "SKIP_UNIX_SOCKET_TESTS" in os.environ,
+ "Skipping Unix socket tests -- unsupported in this environment.")
+class UnixSocketInternalTests(InternalTests):
+ """
+ These tests run the same internal communication tests,
+ but over a Unix socket instead of a TCP socket.
+ """
+ def setUp(self):
+ super().setUp()
+ suffix = "%d.sock" % get_port()
- def get_client(self):
- return Server('unix:/%s' % self.port)
+ # Open to safer, alternative processes
+ # for getting a temp file name...
+ temp = tempfile.NamedTemporaryFile(
+ suffix=suffix
+ )
+ self.port = temp.name
+ temp.close()
- def tearDown(self):
- """ Removes the tempory socket file """
- os.unlink(self.port)
+ self.server = server_set_up(
+ addr=self.port,
+ address_family=socket.AF_UNIX
+ )
+
+ def get_client(self):
+ return Server('unix:/%s' % self.port)
+
+ def tearDown(self):
+ """ Removes the tempory socket file """
+ self.server.stop()
+ self.server.join()
+ os.unlink(self.port)
class UnixSocketErrorTests(unittest.TestCase):
@@ -473,7 +549,12 @@ def server_set_up(addr, address_family=socket.AF_INET):
server.register_function(service.summation, 'sum')
server.register_function(service.summation, 'notify_sum')
server.register_function(service.summation, 'namespace.sum')
+
+ def stop():
+ server.shutdown()
+
server_proc = Thread(target=server.serve_forever)
server_proc.daemon = True
+ server_proc.stop = stop
server_proc.start()
return server_proc