2023-02-17 10:48:16 -06:00
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
|
import logging
|
2023-02-18 00:09:28 -06:00
|
|
|
|
2023-02-28 09:01:02 -06:00
|
|
|
from RNS.Channel import TPacket, MessageState, ChannelOutletBase, Channel
|
2023-02-18 00:09:28 -06:00
|
|
|
from typing import Callable
|
|
|
|
|
2023-02-17 10:48:16 -06:00
|
|
|
logging.getLogger().setLevel(logging.DEBUG)
|
|
|
|
|
|
|
|
import rnsh.protocol
|
|
|
|
import contextlib
|
|
|
|
import typing
|
|
|
|
import types
|
|
|
|
import time
|
|
|
|
import uuid
|
2023-02-28 09:01:02 -06:00
|
|
|
from RNS.Channel import MessageBase
|
2023-02-17 10:48:16 -06:00
|
|
|
|
|
|
|
|
|
|
|
module_logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
|
|
|
def test_send_receive_streamdata():
|
|
|
|
message = rnsh.protocol.StreamDataMessage(stream_id=rnsh.protocol.StreamDataMessage.STREAM_ID_STDIN,
|
|
|
|
data=b'Test', eof=True)
|
2023-02-28 09:01:02 -06:00
|
|
|
rx_message = message.__class__()
|
|
|
|
rx_message.unpack(message.pack())
|
2023-02-17 10:48:16 -06:00
|
|
|
|
2023-02-28 09:01:02 -06:00
|
|
|
assert isinstance(rx_message, message.__class__)
|
|
|
|
assert rx_message.stream_id == message.stream_id
|
|
|
|
assert rx_message.data == message.data
|
|
|
|
assert rx_message.eof == message.eof
|
2023-02-17 10:48:16 -06:00
|
|
|
|
|
|
|
|
|
|
|
def test_send_receive_noop():
|
|
|
|
message = rnsh.protocol.NoopMessage()
|
|
|
|
|
2023-02-28 09:01:02 -06:00
|
|
|
rx_message = message.__class__()
|
|
|
|
rx_message.unpack(message.pack())
|
2023-02-17 10:48:16 -06:00
|
|
|
|
2023-02-28 09:01:02 -06:00
|
|
|
assert isinstance(rx_message, message.__class__)
|
2023-02-17 10:48:16 -06:00
|
|
|
|
|
|
|
|
|
|
|
def test_send_receive_execute():
|
|
|
|
message = rnsh.protocol.ExecuteCommandMesssage(cmdline=["test", "one", "two"],
|
|
|
|
pipe_stdin=False,
|
|
|
|
pipe_stdout=True,
|
|
|
|
pipe_stderr=False,
|
|
|
|
tcflags=[12, 34, 56, [78, 90]],
|
|
|
|
term="xtermmmm")
|
2023-02-28 09:01:02 -06:00
|
|
|
rx_message = message.__class__()
|
|
|
|
rx_message.unpack(message.pack())
|
2023-02-17 10:48:16 -06:00
|
|
|
|
2023-02-28 09:01:02 -06:00
|
|
|
assert isinstance(rx_message, message.__class__)
|
|
|
|
assert rx_message.cmdline == message.cmdline
|
|
|
|
assert rx_message.pipe_stdin == message.pipe_stdin
|
|
|
|
assert rx_message.pipe_stdout == message.pipe_stdout
|
|
|
|
assert rx_message.pipe_stderr == message.pipe_stderr
|
|
|
|
assert rx_message.tcflags == message.tcflags
|
|
|
|
assert rx_message.term == message.term
|
2023-02-17 10:48:16 -06:00
|
|
|
|
|
|
|
|
|
|
|
def test_send_receive_windowsize():
|
|
|
|
message = rnsh.protocol.WindowSizeMessage(1, 2, 3, 4)
|
2023-02-28 09:01:02 -06:00
|
|
|
rx_message = message.__class__()
|
|
|
|
rx_message.unpack(message.pack())
|
2023-02-17 10:48:16 -06:00
|
|
|
|
2023-02-28 09:01:02 -06:00
|
|
|
assert isinstance(rx_message, message.__class__)
|
|
|
|
assert rx_message.rows == message.rows
|
|
|
|
assert rx_message.cols == message.cols
|
|
|
|
assert rx_message.hpix == message.hpix
|
|
|
|
assert rx_message.vpix == message.vpix
|
2023-02-17 10:48:16 -06:00
|
|
|
|
|
|
|
|
|
|
|
def test_send_receive_versioninfo():
|
|
|
|
message = rnsh.protocol.VersionInfoMessage(sw_version="1.2.3")
|
|
|
|
message.protocol_version = 30
|
2023-02-28 09:01:02 -06:00
|
|
|
rx_message = message.__class__()
|
|
|
|
rx_message.unpack(message.pack())
|
2023-02-17 10:48:16 -06:00
|
|
|
|
2023-02-28 09:01:02 -06:00
|
|
|
assert isinstance(rx_message, message.__class__)
|
|
|
|
assert rx_message.sw_version == message.sw_version
|
|
|
|
assert rx_message.protocol_version == message.protocol_version
|
2023-02-17 10:48:16 -06:00
|
|
|
|
|
|
|
|
|
|
|
def test_send_receive_error():
|
|
|
|
message = rnsh.protocol.ErrorMessage(msg="TESTerr",
|
|
|
|
fatal=True,
|
|
|
|
data={"one": 2})
|
2023-02-28 09:01:02 -06:00
|
|
|
rx_message = message.__class__()
|
|
|
|
rx_message.unpack(message.pack())
|
2023-02-17 10:48:16 -06:00
|
|
|
|
2023-02-28 09:01:02 -06:00
|
|
|
assert isinstance(rx_message, message.__class__)
|
|
|
|
assert rx_message.msg == message.msg
|
|
|
|
assert rx_message.fatal == message.fatal
|
|
|
|
assert rx_message.data == message.data
|
2023-02-17 10:48:16 -06:00
|
|
|
|
|
|
|
|
2023-02-18 00:09:28 -06:00
|
|
|
def test_send_receive_cmdexit():
|
|
|
|
message = rnsh.protocol.CommandExitedMessage(5)
|
2023-02-28 09:01:02 -06:00
|
|
|
rx_message = message.__class__()
|
|
|
|
rx_message.unpack(message.pack())
|
2023-02-18 00:09:28 -06:00
|
|
|
|
2023-02-28 09:01:02 -06:00
|
|
|
assert isinstance(rx_message, message.__class__)
|
|
|
|
assert rx_message.return_code == message.return_code
|
2023-02-18 00:09:28 -06:00
|
|
|
|
|
|
|
|
2023-02-17 10:48:16 -06:00
|
|
|
|
|
|
|
|
|
|
|
|