Patrick Kelley 8fd444092b initial
2025-05-07 15:35:15 -04:00

94 lines
2.3 KiB
Python

# @TEST-GROUP: native
#
# @TEST-PORT: BROKER_PORT
#
# @TEST-COPY-FILE: ${SCRIPTS}/wire_format.py
#
# @TEST-EXEC: btest-bg-run node "broker-node --config-file=../node.cfg"
# @TEST-EXEC: btest-bg-run peer "python3 ../peer.py >peer.out"
#
# @TEST-EXEC: $SCRIPTS/wait-for-file peer/done 30 || (btest-bg-wait -k 1 && false)
# @TEST-EXEC: btest-diff peer/peer.out
# @TEST-EXEC: btest-bg-wait -k 1
@TEST-START-FILE node.cfg
broker {
disable-ssl = true
}
caf {
logger {
file {
path = 'broker.log'
verbosity = 'debug'
}
}
}
topics = ["/test"]
verbose = true
@TEST-END-FILE
@TEST-START-FILE peer.py
import os, sys, uuid
sys.path.insert(0, '..')
from wire_format import *
port = int(os.environ['BROKER_PORT'].split('/')[0])
# The biggest possible version-4 UUID to make sure we are the responder.
this_peer = uuid.UUID('ffffffff-ffff-4fff-bfff-ffffffffffff')
# The handshake sequence is:
# <- probe
# -> hello
# <- version_select
# <- originator_syn_msg
# -> responder_syn_ack
# <- originator_ack
#
# After that, the peering is established and we do one round of ping-pong:
# -> ping
# <- pong (same payload)
def run(fd):
# <- probe
(tag, msg) = read_hs_msg(fd)
check_eq(tag, MessageType.PROBE)
check_eq(msg.magic, magic_number())
# -> hello
write_hs_msg(fd, MessageType.HELLO, pack_hello(this_peer, 1, 99))
# <- version_select
(tag, msg) = read_hs_msg(fd)
check_eq(tag, MessageType.VERSION_SELECT)
check_eq(msg.version, 1)
peer_id = msg.sender_id
# <- originator_syn_msg
(tag, msg) = read_hs_msg(fd)
check_eq(tag, MessageType.ORIGINATOR_SYN)
check_eq(msg.subscriptions, ['/test'])
# -> responder_syn_ack
write_hs_msg(fd, MessageType.RESPONDER_SYN_ACK,
pack_responder_syn_ack(['/foo/bar']))
# <- originator_ack
(tag, msg) = read_hs_msg(fd)
check_eq(tag, MessageType.ORIGINATOR_ACK)
# -> ping("foo")
write_op_msg(fd, this_peer, peer_id, MessageType.PING, '<$>',
pack_ping("foo".encode()))
# <- pong("foo")
(tag, msg) = read_op_msg(fd)
check_eq(tag, MessageType.PONG)
check_eq(msg.sender_id, peer_id)
check_eq(msg.receiver_id, this_peer)
check_eq(msg.topic, '<$>')
check_eq(msg.payload.decode(), 'foo')
test_main("localhost", port, run)
@TEST-END-FILE