From 81388f82f699a5119a6065613cd81fa70eb8601e Mon Sep 17 00:00:00 2001 From: Jason Paryani Date: Wed, 11 Dec 2013 22:48:59 -0800 Subject: [PATCH] Change rpc server example to use simple restore function --- examples/calculator_server.py | 17 ++++------------- test/test_rpc_calculator.py | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 13 deletions(-) create mode 100644 test/test_rpc_calculator.py diff --git a/examples/calculator_server.py b/examples/calculator_server.py index 1532d95..248e701 100755 --- a/examples/calculator_server.py +++ b/examples/calculator_server.py @@ -130,17 +130,9 @@ given address/port ADDRESS may be '*' to bind to all local addresses.\ return parser.parse_args() -class CalcRestorer: - - '''A RPC Restorer. This requires a `restore` function to be defined, and - will be passed in a SturdyRef by your client''' - - def __init__(self): - self.calc = CalculatorImpl() - - def restore(self, ref): - assert ref.as_text() == 'calculator' - return CalculatorImpl() +def restore(ref): + assert ref.as_text() == 'calculator' + return CalculatorImpl() def main(): @@ -169,8 +161,7 @@ def main(): while True: try: (clientsocket, address) = s.accept() - restorer = CalcRestorer() - server = capnp.TwoPartyServer(clientsocket, restorer) + server = capnp.TwoPartyServer(clientsocket, restore) server.run_forever() print("client disconnected") diff --git a/test/test_rpc_calculator.py b/test/test_rpc_calculator.py new file mode 100644 index 0000000..abc4b15 --- /dev/null +++ b/test/test_rpc_calculator.py @@ -0,0 +1,35 @@ +import capnp +import os +import socket +import gc + +import sys # add examples dir to sys.path +sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'examples')) +import calculator_client +import calculator_server + + +def test_calculator(): + read, write = socket.socketpair(socket.AF_UNIX) + + server = capnp.TwoPartyServer(write, calculator_server.restore) + calculator_client.main(read) + + +def test_calculator_gc(): + def new_evaluate_impl(old_evaluate_impl): + def call(*args, **kwargs): + gc.collect() + return old_evaluate_impl(*args, **kwargs) + return call + + read, write = socket.socketpair(socket.AF_UNIX) + + # inject a gc.collect to the beginning of every evaluate_impl call + evaluate_impl_orig = calculator_server.evaluate_impl + calculator_server.evaluate_impl = new_evaluate_impl(evaluate_impl_orig) + + server = capnp.TwoPartyServer(write, calculator_server.restore) + calculator_client.main(read) + + calculator_server.evaluate_impl = evaluate_impl_orig