Files
pycapnp/test/test_rpc_calculator.py
Jacob Alexander 255119b838 Updating to capnproto v0.8.0
- Includes some test stabilization
- Fixes manylinux2010 build issues (linker flag order due to old gcc)
- More rigorous python setup.py clean
- Requires capnproto v0.8.0 or greater
- Including system libcapnp include path for import (e.g. import
  stream_capnp)
- Bundle libcapnp .capnp files when not using system libcapnp
- Removing more distutils usage. Now using pkg-config to determine the
  system version of libcapnp (mainly for Linux, but should work on macOS
  with brew)
- Removed dead code

Resolves issues #215 #216 #217
Lots of fixes for Issue #218 (all sorts of retry methods needed for
GitHub Actions)
2020-06-08 11:49:17 -07:00

70 lines
1.7 KiB
Python

import gc
import os
import pytest
import socket
import subprocess
import sys # add examples dir to sys.path
import time
import capnp
examples_dir = os.path.join(os.path.dirname(__file__), '..', 'examples')
sys.path.append(examples_dir)
import calculator_client # noqa: E402
import calculator_server # noqa: E402
# Uses run_subprocesses function
import test_examples
processes = []
@pytest.fixture
def cleanup():
yield
for p in processes:
p.kill()
def test_calculator():
read, write = socket.socketpair()
_ = capnp.TwoPartyServer(write, bootstrap=calculator_server.CalculatorImpl())
calculator_client.main(read)
def test_calculator_tcp(cleanup):
address = 'localhost:36431'
test_examples.run_subprocesses(address, 'calculator_server.py', 'calculator_client.py')
@pytest.mark.skipif(os.name == 'nt', reason="socket.AF_UNIX not supported on Windows")
def test_calculator_unix(cleanup):
path = '/tmp/pycapnp-test'
try:
os.unlink(path)
except OSError:
pass
address = 'unix:' + path
test_examples.run_subprocesses(address, 'calculator_server.py', 'calculator_client.py')
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()
# 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)
_ = capnp.TwoPartyServer(write, bootstrap=calculator_server.CalculatorImpl())
calculator_client.main(read)
calculator_server.evaluate_impl = evaluate_impl_orig