From 0cccc98ab7a32e83a1915633bbeed87744ff72eb Mon Sep 17 00:00:00 2001 From: Nijat K Date: Tue, 26 Nov 2024 03:28:56 -0500 Subject: [PATCH 1/5] Run websocket tests Signed-off-by: Nijat K --- csp/tests/adapters/test_websocket.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/csp/tests/adapters/test_websocket.py b/csp/tests/adapters/test_websocket.py index 41aeb3311..8c57a8c97 100644 --- a/csp/tests/adapters/test_websocket.py +++ b/csp/tests/adapters/test_websocket.py @@ -1,26 +1,23 @@ import os import pytz import threading +import tornado.ioloop +import tornado.web +import tornado.websocket import unittest from datetime import datetime, timedelta from typing import List import csp from csp import ts +from csp.adapters.websocket import JSONTextMessageMapper, RawTextMessageMapper, Status, WebsocketAdapterManager -if os.environ.get("CSP_TEST_WEBSOCKET"): - import tornado.ioloop - import tornado.web - import tornado.websocket - from csp.adapters.websocket import JSONTextMessageMapper, RawTextMessageMapper, Status, WebsocketAdapterManager +class EchoWebsocketHandler(tornado.websocket.WebSocketHandler): + def on_message(self, msg): + return self.write_message(msg) - class EchoWebsocketHandler(tornado.websocket.WebSocketHandler): - def on_message(self, msg): - return self.write_message(msg) - -@unittest.skipIf(not os.environ.get("CSP_TEST_WEBSOCKET"), "Skipping websocket adapter tests") class TestWebsocket(unittest.TestCase): @classmethod def setUpClass(cls): From b767d8074b28a46e9c2af04018d321d2441f9347 Mon Sep 17 00:00:00 2001 From: Nijat K Date: Tue, 26 Nov 2024 19:04:52 -0500 Subject: [PATCH 2/5] Add python-rapidjson Signed-off-by: Nijat K --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index e790a1b21..07acc860d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -86,6 +86,7 @@ develop = [ "sqlalchemy", # db "threadpoolctl", # test_random "tornado", # profiler, perspective, websocket + "python-rapidjson", # websocket # type checking "pydantic>=2", ] From 16a7b1bf8e8bfa15ee3ae7eaba46b2249b65801e Mon Sep 17 00:00:00 2001 From: Nijat K Date: Tue, 26 Nov 2024 19:19:35 -0500 Subject: [PATCH 3/5] Add build related package constraints Signed-off-by: Nijat K --- conda/dev-environment-unix.yml | 5 +++++ csp/tests/adapters/test_websocket.py | 14 +++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/conda/dev-environment-unix.yml b/conda/dev-environment-unix.yml index afc95dbce..85e0d5569 100644 --- a/conda/dev-environment-unix.yml +++ b/conda/dev-environment-unix.yml @@ -57,3 +57,8 @@ dependencies: - unzip - wheel - zip + - clang=16.0.6 + - libcxx=18.1.8 + - llvm-openmp=18.1.8 + - libprotobuf=4.25.3 + - libabseil=20240116.2 diff --git a/csp/tests/adapters/test_websocket.py b/csp/tests/adapters/test_websocket.py index 8c57a8c97..4a33a3e12 100644 --- a/csp/tests/adapters/test_websocket.py +++ b/csp/tests/adapters/test_websocket.py @@ -6,6 +6,7 @@ import tornado.websocket import unittest from datetime import datetime, timedelta +from tornado.testing import bind_unused_port from typing import List import csp @@ -22,7 +23,10 @@ class TestWebsocket(unittest.TestCase): @classmethod def setUpClass(cls): cls.app = tornado.web.Application([(r"/", EchoWebsocketHandler)]) - cls.app.listen(8000) + sock, port = bind_unused_port() + sock.close() + cls.port = port + cls.app.listen(port) cls.io_loop = tornado.ioloop.IOLoop.current() cls.io_thread = threading.Thread(target=cls.io_loop.start) cls.io_thread.start() @@ -41,7 +45,7 @@ def send_msg_on_open(status: ts[Status]) -> ts[str]: @csp.graph def g(): - ws = WebsocketAdapterManager("ws://localhost:8000/") + ws = WebsocketAdapterManager(f"ws://localhost:{self.port}/") status = ws.status() ws.send(send_msg_on_open(status)) recv = ws.subscribe(str, RawTextMessageMapper()) @@ -64,7 +68,7 @@ def send_msg_on_open(status: ts[Status]) -> ts[str]: @csp.graph def g(): - ws = WebsocketAdapterManager("ws://localhost:8000/") + ws = WebsocketAdapterManager(f"ws://localhost:{self.port}/") status = ws.status() ws.send(send_msg_on_open(status)) recv = ws.subscribe(MsgStruct, JSONTextMessageMapper()) @@ -103,7 +107,7 @@ def stop_on_all_or_timeout(msgs: ts[str], l: int = 50) -> ts[bool]: @csp.graph def g(n: int): - ws = WebsocketAdapterManager("ws://localhost:8000/") + ws = WebsocketAdapterManager(f"ws://localhost:{self.port}/") status = ws.status() ws.send(csp.flatten([send_msg_on_open(status, i) for i in range(n)])) recv = ws.subscribe(str, RawTextMessageMapper()) @@ -142,7 +146,7 @@ def my_edge_that_handles_burst(objs: ts[List[MsgStruct]]) -> ts[bool]: @csp.graph def g(): - ws = WebsocketAdapterManager("ws://localhost:8000/") + ws = WebsocketAdapterManager(f"ws://localhost:{self.port}/") status = ws.status() ws.send(send_msg_on_open(status)) recv = ws.subscribe(MsgStruct, JSONTextMessageMapper(), push_mode=csp.PushMode.BURST) From 0c0b7feafffb9a73a3b4d3d4e2e36d1cb0c48a7d Mon Sep 17 00:00:00 2001 From: Nijat K Date: Thu, 28 Nov 2024 17:10:28 -0500 Subject: [PATCH 4/5] Narrow down macos conda build failures Signed-off-by: Nijat K --- conda/dev-environment-unix.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/conda/dev-environment-unix.yml b/conda/dev-environment-unix.yml index 85e0d5569..b8a750c7a 100644 --- a/conda/dev-environment-unix.yml +++ b/conda/dev-environment-unix.yml @@ -57,8 +57,4 @@ dependencies: - unzip - wheel - zip - - clang=16.0.6 - - libcxx=18.1.8 - - llvm-openmp=18.1.8 - - libprotobuf=4.25.3 - - libabseil=20240116.2 + - clang=16.0.6 # likely the culprit, try next From 942067b2d78a2068c6830509753d92df17fc309c Mon Sep 17 00:00:00 2001 From: Nijat K Date: Thu, 28 Nov 2024 18:25:36 -0500 Subject: [PATCH 5/5] Remove clang pin Signed-off-by: Nijat K --- conda/dev-environment-unix.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/conda/dev-environment-unix.yml b/conda/dev-environment-unix.yml index b8a750c7a..afc95dbce 100644 --- a/conda/dev-environment-unix.yml +++ b/conda/dev-environment-unix.yml @@ -57,4 +57,3 @@ dependencies: - unzip - wheel - zip - - clang=16.0.6 # likely the culprit, try next