94 lines
2.3 KiB
Python
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
|