summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Marshall <catchjosh@gmail.com>2021-03-30 15:20:57 +0900
committerJosh Marshall <catchjosh@gmail.com>2021-03-30 15:20:57 +0900
commit4b82291c402f876a57a115c5a6a04185bfaaf096 (patch)
tree937b33ba947872069f7d6436e49efa7f79699404
parent75a9318ab26d7feb7e8bb2c2d6ce6cf6b280cf0a (diff)
downloadjsonrpclib-4b82291c402f876a57a115c5a6a04185bfaaf096.tar.gz
Bypassing TCP sockopts for Unix sockets, fixing Unix teardowns.
-rw-r--r--jsonrpclib/SimpleJSONRPCServer.py8
-rw-r--r--tests.py10
2 files changed, 15 insertions, 3 deletions
diff --git a/jsonrpclib/SimpleJSONRPCServer.py b/jsonrpclib/SimpleJSONRPCServer.py
index 5addcf0..0bb1833 100644
--- a/jsonrpclib/SimpleJSONRPCServer.py
+++ b/jsonrpclib/SimpleJSONRPCServer.py
@@ -189,6 +189,11 @@ class SimpleJSONRPCRequestHandler(
self.connection.shutdown(1)
+class SimpleJSONRPCUnixRequestHandler(SimpleJSONRPCRequestHandler):
+
+ disable_nagle_algorithm = False
+
+
class SimpleJSONRPCServer(socketserver.TCPServer, SimpleJSONRPCDispatcher):
allow_reuse_address = True
@@ -210,6 +215,9 @@ class SimpleJSONRPCServer(socketserver.TCPServer, SimpleJSONRPCDispatcher):
except OSError:
logging.warning("Could not unlink socket %s", addr)
+ if requestHandler == SimpleJSONRPCRequestHandler:
+ requestHandler = SimpleJSONRPCUnixRequestHandler
+
socketserver.TCPServer.__init__(
self, addr, requestHandler, bind_and_activate)
if fcntl is not None and hasattr(fcntl, 'FD_CLOEXEC'):
diff --git a/tests.py b/tests.py
index e3e74de..9a104e0 100644
--- a/tests.py
+++ b/tests.py
@@ -330,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 = {
@@ -342,8 +345,8 @@ 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()
@@ -445,6 +448,7 @@ class UnixSocketInternalTests(InternalTests):
but over a Unix socket instead of a TCP socket.
"""
def setUp(self):
+ super().setUp()
suffix = "%d.sock" % get_port()
# Open to safer, alternative processes
@@ -461,7 +465,6 @@ class UnixSocketInternalTests(InternalTests):
)
def get_client(self):
- print("Serving on {}".format(self.port))
return Server('unix:/%s' % self.port)
def tearDown(self):
@@ -551,6 +554,7 @@ def server_set_up(addr, address_family=socket.AF_INET):
server.shutdown()
server_proc = Thread(target=server.serve_forever)
+ server_proc.daemon = True
server_proc.stop = stop
server_proc.start()
return server_proc