def test_ping(self, ManagedServerLoop): application = Application() with ManagedServerLoop(application, keep_alive_milliseconds=0) as server: session = ClientSession(session_id='test_ping', websocket_url=ws_url(server), io_loop=server.io_loop) session.connect() assert session.connected assert session.document is None connection = next(iter(server._tornado._clients)) expected_pong = connection._ping_count server._tornado._keep_alive() # send ping session.force_roundtrip() assert expected_pong == connection._socket.latest_pong # check that each ping increments by 1 server._tornado._keep_alive() session.force_roundtrip() assert (expected_pong + 1) == connection._socket.latest_pong session.close() session._loop_until_closed() assert not session.connected
def test_disconnect_on_error(self, ManagedServerLoop) -> None: application = Application() with ManagedServerLoop(application) as server: session = ClientSession(session_id='test_disconnect_on_error', websocket_url=ws_url(server), io_loop = server.io_loop) session.connect() assert session.connected # send a bogus message using private fields server.io_loop.spawn_callback(session._connection._socket.write_message, b"xx", binary=True) # connection should now close on the server side # and the client loop should end session._loop_until_closed() assert not session.connected session.close() session._loop_until_closed() assert not session.connected
def test_connect_with_prefix(self, ManagedServerLoop): application = Application() with ManagedServerLoop(application, prefix="foo") as server: # we don't have to start the server because it # uses the same main loop as the client, so # if we start either one it starts both session = ClientSession(io_loop=server.io_loop, websocket_url=ws_url(server, "/foo")) session.connect() assert session.connected session.close() session._loop_until_closed() session = ClientSession(io_loop=server.io_loop, websocket_url=ws_url(server)) session.connect() assert not session.connected session.close() session._loop_until_closed()
def test_request_server_info(self, ManagedServerLoop): application = Application() with ManagedServerLoop(application) as server: session = ClientSession(session_id='test_request_server_info', websocket_url=ws_url(server), io_loop=server.io_loop) session.connect() assert session.connected assert session.document is None info = session.request_server_info() from bokeh import __version__ assert info['version_info']['bokeh'] == __version__ assert info['version_info']['server'] == __version__ session.close() session._loop_until_closed() assert not session.connected