zeek/auxil/broker/tests/btest/handshake/version-mismatch.py
Patrick Kelley 8fd444092b initial
2025-05-07 15:35:15 -04:00

66 lines
1.4 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 (failed) handshake sequence for a version mismatch is:
# <- probe
# -> hello
# <- drop_conn
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, 200, 201))
# <- drop_conn
(tag, msg) = read_hs_msg(fd)
check_eq(tag, MessageType.DROP_CONN)
check_eq(msg.code, 2) # 2 = ec::peer_incompatible
test_main("localhost", port, run)
@TEST-END-FILE