mirror of
https://github.com/capnproto/pycapnp.git
synced 2025-03-04 08:24:43 +01:00
Fixing Windows tests
- Adding import path filter to exclude non-directories Otherwise kj will through exceptions - Skipped AF_UNIX socket test - Use default socket configuration when it doesn't matter the type of socket used - Open files with utf8 encoding (needed for text validation) - Explictly call python executable when running external scripts - Fix path creation to always use os.path.join - Added timeout to client wait in some tests - Some broken tests still remain (most likely asyncio related)
This commit is contained in:
parent
62eccff150
commit
362cce345b
8 changed files with 33 additions and 22 deletions
|
@ -3224,7 +3224,13 @@ cdef class SchemaParser:
|
|||
|
||||
module._parser = parser
|
||||
|
||||
fileSchema = parser._parse_disk_file(display_name, file_name, imports)
|
||||
# Some systems (Windows running pytest) add non-directories to the sys.path used for imports
|
||||
# Filter these out so kj doesn't implode when searching paths
|
||||
filtered_imports = []
|
||||
for imp in imports:
|
||||
if _os.path.isdir(imp):
|
||||
filtered_imports.append(imp)
|
||||
fileSchema = parser._parse_disk_file(display_name, file_name, filtered_imports)
|
||||
_load(fileSchema, module)
|
||||
|
||||
abs_path = _os.path.abspath(file_name)
|
||||
|
|
|
@ -39,7 +39,6 @@ async def mywriter(client, writer):
|
|||
while True:
|
||||
data = await client.read(4096)
|
||||
writer.write(data.tobytes())
|
||||
await writer.drain()
|
||||
|
||||
|
||||
async def background(cap):
|
||||
|
|
|
@ -36,7 +36,6 @@ async def mywriter(server, writer):
|
|||
while True:
|
||||
data = await server.read(4096)
|
||||
writer.write(data.tobytes())
|
||||
await writer.drain()
|
||||
|
||||
|
||||
async def myserver(reader, writer):
|
||||
|
|
|
@ -1,13 +1,15 @@
|
|||
import os
|
||||
import socket
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
|
||||
examples_dir = os.path.join(os.path.dirname(__file__), '..', 'examples')
|
||||
|
||||
|
||||
def run_subprocesses(address, server, client):
|
||||
server = subprocess.Popen([os.path.join(examples_dir, server), address])
|
||||
cmd = [sys.executable, os.path.join(examples_dir, server), address]
|
||||
server = subprocess.Popen(cmd)
|
||||
retries = 30
|
||||
addr, port = address.split(':')
|
||||
while True:
|
||||
|
@ -24,9 +26,10 @@ def run_subprocesses(address, server, client):
|
|||
retries -= 1
|
||||
if retries == 0:
|
||||
assert False, "Timed out waiting for server to start"
|
||||
client = subprocess.Popen([os.path.join(examples_dir, client), address])
|
||||
cmd = [sys.executable, os.path.join(examples_dir, client), address]
|
||||
client = subprocess.Popen(cmd)
|
||||
|
||||
ret = client.wait()
|
||||
ret = client.wait(timeout=30)
|
||||
server.kill()
|
||||
assert ret == 0
|
||||
|
||||
|
@ -46,7 +49,7 @@ def test_thread_example():
|
|||
|
||||
|
||||
def test_addressbook_example():
|
||||
proc = subprocess.Popen([os.path.join(examples_dir, 'addressbook.py')])
|
||||
proc = subprocess.Popen([sys.executable, os.path.join(examples_dir, 'addressbook.py')])
|
||||
ret = proc.wait()
|
||||
assert ret == 0
|
||||
|
||||
|
|
|
@ -309,7 +309,7 @@ def init_all_types(builder):
|
|||
subBuilder.uInt64Field = 345678901234567890
|
||||
subBuilder.float32Field = -1.25e-10
|
||||
subBuilder.float64Field = 345
|
||||
subBuilder.textField = b"\xe2\x98\x83".decode('utf-8') # This is u"☃", but py3.2 doesn't support u
|
||||
subBuilder.textField = "☃"
|
||||
subBuilder.dataField = b"qux"
|
||||
subSubBuilder = subBuilder.structField
|
||||
subSubBuilder.textField = "nested"
|
||||
|
@ -486,26 +486,26 @@ def check_all_types(reader):
|
|||
def test_build(all_types):
|
||||
root = all_types.TestAllTypes.new_message()
|
||||
init_all_types(root)
|
||||
expectedText = open(os.path.join(this_dir, 'all-types.txt'), 'r').read()
|
||||
expectedText = open(os.path.join(this_dir, 'all-types.txt'), 'r', encoding='utf8').read()
|
||||
assert str(root) + '\n' == expectedText
|
||||
|
||||
def test_build_first_segment_size(all_types):
|
||||
root = all_types.TestAllTypes.new_message(1)
|
||||
init_all_types(root)
|
||||
expectedText = open(os.path.join(this_dir, 'all-types.txt'), 'r').read()
|
||||
expectedText = open(os.path.join(this_dir, 'all-types.txt'), 'r', encoding='utf8').read()
|
||||
assert str(root) + '\n' == expectedText
|
||||
|
||||
root = all_types.TestAllTypes.new_message(1024 * 1024)
|
||||
init_all_types(root)
|
||||
expectedText = open(os.path.join(this_dir, 'all-types.txt'), 'r').read()
|
||||
expectedText = open(os.path.join(this_dir, 'all-types.txt'), 'r', encoding='utf8').read()
|
||||
assert str(root) + '\n' == expectedText
|
||||
|
||||
def test_binary_read(all_types):
|
||||
f = open(os.path.join(this_dir, 'all-types.binary'), 'r')
|
||||
f = open(os.path.join(this_dir, 'all-types.binary'), 'r', encoding='utf8')
|
||||
root = all_types.TestAllTypes.read(f)
|
||||
check_all_types(root)
|
||||
|
||||
expectedText = open(os.path.join(this_dir, 'all-types.txt'), 'r').read()
|
||||
expectedText = open(os.path.join(this_dir, 'all-types.txt'), 'r', encoding='utf8').read()
|
||||
assert str(root) + '\n' == expectedText
|
||||
|
||||
# Test set_root().
|
||||
|
@ -518,11 +518,11 @@ def test_binary_read(all_types):
|
|||
check_all_types(builder2.get_root(all_types.TestAllTypes))
|
||||
|
||||
def test_packed_read(all_types):
|
||||
f = open(os.path.join(this_dir, 'all-types.packed'), 'r')
|
||||
f = open(os.path.join(this_dir, 'all-types.packed'), 'r', encoding='utf8')
|
||||
root = all_types.TestAllTypes.read_packed(f)
|
||||
check_all_types(root)
|
||||
|
||||
expectedText = open(os.path.join(this_dir, 'all-types.txt'), 'r').read()
|
||||
expectedText = open(os.path.join(this_dir, 'all-types.txt'), 'r', encoding='utf8').read()
|
||||
assert str(root) + '\n' == expectedText
|
||||
|
||||
def test_binary_write(all_types):
|
||||
|
|
|
@ -19,7 +19,7 @@ class Server(test_capability_capnp.TestInterface.Server):
|
|||
|
||||
|
||||
def test_simple_rpc_with_options():
|
||||
read, write = socket.socketpair(socket.AF_UNIX)
|
||||
read, write = socket.socketpair()
|
||||
|
||||
_ = capnp.TwoPartyServer(write, bootstrap=Server())
|
||||
# This traversal limit is too low to receive the response in, so we expect
|
||||
|
@ -34,7 +34,7 @@ def test_simple_rpc_with_options():
|
|||
|
||||
|
||||
def test_simple_rpc_bootstrap():
|
||||
read, write = socket.socketpair(socket.AF_UNIX)
|
||||
read, write = socket.socketpair()
|
||||
|
||||
_ = capnp.TwoPartyServer(write, bootstrap=Server(100))
|
||||
client = capnp.TwoPartyClient(read)
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import gc
|
||||
import os
|
||||
import pytest
|
||||
import socket
|
||||
import subprocess
|
||||
import sys # add examples dir to sys.path
|
||||
|
@ -15,14 +16,15 @@ import calculator_server # noqa: E402
|
|||
|
||||
|
||||
def test_calculator():
|
||||
read, write = socket.socketpair(socket.AF_UNIX)
|
||||
read, write = socket.socketpair()
|
||||
|
||||
_ = capnp.TwoPartyServer(write, bootstrap=calculator_server.CalculatorImpl())
|
||||
calculator_client.main(read)
|
||||
|
||||
|
||||
def run_subprocesses(address):
|
||||
server = subprocess.Popen([examples_dir + '/calculator_server.py', address])
|
||||
cmd = [sys.executable, os.path.join(examples_dir, 'calculator_server.py'), address]
|
||||
server = subprocess.Popen(cmd)
|
||||
retries = 30
|
||||
if 'unix' in address:
|
||||
addr = address.split(':')[1]
|
||||
|
@ -52,7 +54,8 @@ def run_subprocesses(address):
|
|||
retries -= 1
|
||||
if retries == 0:
|
||||
assert False, "Timed out waiting for server to start"
|
||||
client = subprocess.Popen([examples_dir + '/calculator_client.py', address])
|
||||
cmd = [sys.executable, os.path.join(examples_dir, 'calculator_client.py'), address]
|
||||
client = subprocess.Popen(cmd)
|
||||
|
||||
ret = client.wait()
|
||||
server.kill()
|
||||
|
@ -64,6 +67,7 @@ def test_calculator_tcp():
|
|||
run_subprocesses(address)
|
||||
|
||||
|
||||
@pytest.mark.skipif(os.name == 'nt', reason="socket.AF_UNIX not supported on Windows")
|
||||
def test_calculator_unix():
|
||||
path = '/tmp/pycapnp-test'
|
||||
try:
|
||||
|
@ -81,7 +85,7 @@ def test_calculator_gc():
|
|||
return old_evaluate_impl(*args, **kwargs)
|
||||
return call
|
||||
|
||||
read, write = socket.socketpair(socket.AF_UNIX)
|
||||
read, write = socket.socketpair()
|
||||
|
||||
# inject a gc.collect to the beginning of every evaluate_impl call
|
||||
evaluate_impl_orig = calculator_server.evaluate_impl
|
||||
|
|
|
@ -65,7 +65,7 @@ def test_using_threads():
|
|||
capnp.remove_event_loop(True)
|
||||
capnp.create_event_loop(True)
|
||||
|
||||
read, write = socket.socketpair(socket.AF_UNIX)
|
||||
read, write = socket.socketpair()
|
||||
|
||||
def run_server():
|
||||
_ = capnp.TwoPartyServer(write, bootstrap=Server())
|
||||
|
|
Loading…
Add table
Reference in a new issue