|
4 | 4 | from flaky import flaky |
5 | 5 | import pytest |
6 | 6 | from streamz import Source |
7 | | -from streamz.utils_test import wait_for, await_for, gen_test |
| 7 | +from streamz.utils_test import free_port, wait_for, await_for, gen_test |
8 | 8 | import socket |
9 | 9 |
|
10 | 10 |
|
@@ -47,6 +47,37 @@ def test_tcp(): |
47 | 47 | sock2.close() |
48 | 48 |
|
49 | 49 |
|
| 50 | +@flaky(max_runs=3, min_passes=1) |
| 51 | +def test_tcp_word_count_example(): |
| 52 | + port = free_port() |
| 53 | + s = Source.from_tcp(port) |
| 54 | + out = s.map(bytes.split).flatten().frequencies().sink_to_list() |
| 55 | + s.start() |
| 56 | + wait_for(lambda: s.server is not None, 2, period=0.02) |
| 57 | + |
| 58 | + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: |
| 59 | + sock.connect(("localhost", port)) |
| 60 | + sock.send(b'data\n') |
| 61 | + |
| 62 | + with (socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock, |
| 63 | + socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock2): |
| 64 | + sock.connect(("localhost", port)) |
| 65 | + sock2.connect(("localhost", port)) |
| 66 | + sock.send(b'data\n') |
| 67 | + # regression test a bug in from_tcp where a second packet from |
| 68 | + # the same socket is dropped due to the socket handler dying |
| 69 | + sock.send(b'data\n') |
| 70 | + sock2.send(b'data2\n') |
| 71 | + |
| 72 | + expected = [{b"data": 1}, {b"data": 2}, {b"data": 3}, {b"data": 3, b"data2": 1}] |
| 73 | + |
| 74 | + def fail_func(): |
| 75 | + assert out == expected |
| 76 | + |
| 77 | + wait_for(lambda: out == expected, 2, fail_func=fail_func, period=0.01) |
| 78 | + |
| 79 | + |
| 80 | + |
50 | 81 | @flaky(max_runs=3, min_passes=1) |
51 | 82 | @gen_test(timeout=60) |
52 | 83 | def test_tcp_async(): |
|
0 commit comments