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:
Jacob Alexander 2019-10-19 00:22:59 -07:00
parent 62eccff150
commit 362cce345b
8 changed files with 33 additions and 22 deletions

View file

@ -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)

View file

@ -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):

View file

@ -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):

View file

@ -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

View file

@ -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):

View file

@ -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)

View file

@ -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

View file

@ -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())