Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix
message_size_limit
not applying to the Will payload.
Closes #2022. Thanks to Umberto Morelli.
- Loading branch information
Showing
11 changed files
with
271 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
#!/usr/bin/env python3 | ||
|
||
# Test whether message size limits apply. | ||
|
||
from mosq_test_helper import * | ||
|
||
def write_config(filename, port): | ||
with open(filename, 'w') as f: | ||
f.write("listener %d\n" % (port)) | ||
f.write("allow_anonymous true\n") | ||
f.write("message_size_limit 1\n") | ||
|
||
def do_test(proto_ver): | ||
rc = 1 | ||
mid = 53 | ||
keepalive = 60 | ||
connect_packet = mosq_test.gen_connect("subpub-qos0-test", keepalive=keepalive, proto_ver=proto_ver) | ||
connack_packet = mosq_test.gen_connack(rc=0, proto_ver=proto_ver) | ||
|
||
subscribe_packet = mosq_test.gen_subscribe(mid, "subpub/qos0", 0, proto_ver=proto_ver) | ||
suback_packet = mosq_test.gen_suback(mid, 0, proto_ver=proto_ver) | ||
|
||
connect2_packet = mosq_test.gen_connect("subpub-qos0-helper", keepalive=keepalive, proto_ver=proto_ver) | ||
connack2_packet = mosq_test.gen_connack(rc=0, proto_ver=proto_ver) | ||
|
||
publish_packet_ok = mosq_test.gen_publish("subpub/qos0", qos=0, payload="A", proto_ver=proto_ver) | ||
publish_packet_bad = mosq_test.gen_publish("subpub/qos0", qos=0, payload="AB", proto_ver=proto_ver) | ||
|
||
port = mosq_test.get_port() | ||
conf_file = os.path.basename(__file__).replace('.py', '.conf') | ||
write_config(conf_file, port) | ||
|
||
broker = mosq_test.start_broker(filename=os.path.basename(__file__), use_conf=True, port=port) | ||
|
||
try: | ||
sock = mosq_test.do_client_connect(connect_packet, connack_packet, timeout=20, port=port) | ||
mosq_test.do_send_receive(sock, subscribe_packet, suback_packet, "suback") | ||
|
||
sock2 = mosq_test.do_client_connect(connect2_packet, connack2_packet, timeout=20, port=port) | ||
sock2.send(publish_packet_ok) | ||
mosq_test.expect_packet(sock, "publish 1", publish_packet_ok) | ||
|
||
# Check all is still well on the publishing client | ||
mosq_test.do_ping(sock2) | ||
|
||
sock2.send(publish_packet_bad) | ||
|
||
# Check all is still well on the publishing client | ||
mosq_test.do_ping(sock2) | ||
|
||
# The subscribing client shouldn't have received a PUBLISH | ||
mosq_test.do_ping(sock) | ||
rc = 0 | ||
|
||
sock.close() | ||
except SyntaxError: | ||
raise | ||
except TypeError: | ||
raise | ||
except mosq_test.TestError: | ||
pass | ||
finally: | ||
os.remove(conf_file) | ||
broker.terminate() | ||
broker.wait() | ||
(stdo, stde) = broker.communicate() | ||
if rc: | ||
print(stde.decode('utf-8')) | ||
print("proto_ver=%d" % (proto_ver)) | ||
exit(rc) | ||
|
||
|
||
do_test(proto_ver=4) | ||
do_test(proto_ver=5) | ||
exit(0) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
#!/usr/bin/env python3 | ||
|
||
# Test whether message size limits apply. | ||
|
||
from mosq_test_helper import * | ||
|
||
def write_config(filename, port): | ||
with open(filename, 'w') as f: | ||
f.write("listener %d\n" % (port)) | ||
f.write("allow_anonymous true\n") | ||
f.write("message_size_limit 1\n") | ||
|
||
def do_test(proto_ver): | ||
rc = 1 | ||
mid = 53 | ||
keepalive = 60 | ||
connect_packet = mosq_test.gen_connect("subpub-qos1-test", keepalive=keepalive, proto_ver=proto_ver) | ||
connack_packet = mosq_test.gen_connack(rc=0, proto_ver=proto_ver) | ||
|
||
subscribe_packet = mosq_test.gen_subscribe(mid, "subpub/qos1", 1, proto_ver=proto_ver) | ||
suback_packet = mosq_test.gen_suback(mid, 1, proto_ver=proto_ver) | ||
|
||
connect2_packet = mosq_test.gen_connect("subpub-qos1-helper", keepalive=keepalive, proto_ver=proto_ver) | ||
connack2_packet = mosq_test.gen_connack(rc=0, proto_ver=proto_ver) | ||
|
||
mid = 1 | ||
publish_packet_ok = mosq_test.gen_publish("subpub/qos1", mid=mid, qos=1, payload="A", proto_ver=proto_ver) | ||
puback_packet_ok = mosq_test.gen_puback(mid=mid, proto_ver=proto_ver) | ||
|
||
mid = 2 | ||
publish_packet_bad = mosq_test.gen_publish("subpub/qos1", mid=mid, qos=1, payload="AB", proto_ver=proto_ver) | ||
if proto_ver == 5: | ||
puback_packet_bad = mosq_test.gen_puback(reason_code=mqtt5_rc.MQTT_RC_PACKET_TOO_LARGE, mid=mid, proto_ver=proto_ver) | ||
else: | ||
puback_packet_bad = mosq_test.gen_puback(mid=mid, proto_ver=proto_ver) | ||
|
||
port = mosq_test.get_port() | ||
conf_file = os.path.basename(__file__).replace('.py', '.conf') | ||
write_config(conf_file, port) | ||
|
||
broker = mosq_test.start_broker(filename=os.path.basename(__file__), use_conf=True, port=port) | ||
|
||
try: | ||
sock = mosq_test.do_client_connect(connect_packet, connack_packet, timeout=20, port=port) | ||
mosq_test.do_send_receive(sock, subscribe_packet, suback_packet, "suback") | ||
|
||
sock2 = mosq_test.do_client_connect(connect2_packet, connack2_packet, timeout=20, port=port) | ||
mosq_test.do_send_receive(sock2, publish_packet_ok, puback_packet_ok, "puback 1") | ||
mosq_test.expect_packet(sock, "publish 1", publish_packet_ok) | ||
sock.send(puback_packet_ok) | ||
|
||
# Check all is still well on the publishing client | ||
mosq_test.do_ping(sock2) | ||
|
||
mosq_test.do_send_receive(sock2, publish_packet_bad, puback_packet_bad, "puback 2") | ||
|
||
# The subscribing client shouldn't have received a PUBLISH | ||
mosq_test.do_ping(sock) | ||
rc = 0 | ||
|
||
sock.close() | ||
except SyntaxError: | ||
raise | ||
except TypeError: | ||
raise | ||
except mosq_test.TestError: | ||
pass | ||
finally: | ||
os.remove(conf_file) | ||
broker.terminate() | ||
broker.wait() | ||
(stdo, stde) = broker.communicate() | ||
if rc: | ||
print(stde.decode('utf-8')) | ||
print("proto_ver=%d" % (proto_ver)) | ||
exit(rc) | ||
|
||
|
||
do_test(proto_ver=4) | ||
do_test(proto_ver=5) | ||
exit(0) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
#!/usr/bin/env python3 | ||
|
||
# Test whether a client will that is too large is handled | ||
|
||
from mosq_test_helper import * | ||
|
||
def write_config(filename, port): | ||
with open(filename, 'w') as f: | ||
f.write("listener %d\n" % (port)) | ||
f.write("allow_anonymous true\n") | ||
f.write("message_size_limit 1\n") | ||
|
||
def do_test(proto_ver, clean_session): | ||
rc = 1 | ||
mid = 53 | ||
keepalive = 60 | ||
connect_packet = mosq_test.gen_connect("will-test", keepalive=keepalive, proto_ver=proto_ver) | ||
connack_packet = mosq_test.gen_connack(rc=0, proto_ver=proto_ver) | ||
|
||
connect_packet_ok = mosq_test.gen_connect("test-helper", keepalive=keepalive, will_topic="will/qos0/test", will_payload=b"A", clean_session=clean_session, proto_ver=proto_ver, session_expiry=60) | ||
connack_packet_ok = mosq_test.gen_connack(rc=0, proto_ver=proto_ver) | ||
|
||
connect_packet_bad = mosq_test.gen_connect("test-helper", keepalive=keepalive, will_topic="will/qos0/test", will_payload=b"AB", clean_session=clean_session, proto_ver=proto_ver, session_expiry=60) | ||
if proto_ver == 5: | ||
connack_packet_bad = mosq_test.gen_connack(rc=mqtt5_rc.MQTT_RC_PACKET_TOO_LARGE, proto_ver=proto_ver, property_helper=False) | ||
else: | ||
connack_packet_bad = mosq_test.gen_connack(rc=5, proto_ver=proto_ver) | ||
|
||
subscribe_packet = mosq_test.gen_subscribe(mid, "will/qos0/test", 0, proto_ver=proto_ver) | ||
suback_packet = mosq_test.gen_suback(mid, 0, proto_ver=proto_ver) | ||
|
||
publish_packet = mosq_test.gen_publish("will/qos0/test", qos=0, payload="A", proto_ver=proto_ver) | ||
|
||
port = mosq_test.get_port() | ||
conf_file = os.path.basename(__file__).replace('.py', '.conf') | ||
write_config(conf_file, port) | ||
|
||
broker = mosq_test.start_broker(filename=os.path.basename(__file__), use_conf=True, port=port) | ||
|
||
try: | ||
sock = mosq_test.do_client_connect(connect_packet, connack_packet, timeout=5, port=port) | ||
mosq_test.do_send_receive(sock, subscribe_packet, suback_packet, "suback") | ||
|
||
sock2 = mosq_test.do_client_connect(connect_packet_bad, connack_packet_bad, port=port, timeout=5) | ||
sock2.close() | ||
|
||
sock2 = mosq_test.do_client_connect(connect_packet_ok, connack_packet_ok, port=port, timeout=5) | ||
sock2.close() | ||
|
||
mosq_test.expect_packet(sock, "publish", publish_packet) | ||
# Check there are no more messages | ||
mosq_test.do_ping(sock) | ||
rc = 0 | ||
|
||
sock.close() | ||
except mosq_test.TestError: | ||
pass | ||
finally: | ||
os.remove(conf_file) | ||
broker.terminate() | ||
broker.wait() | ||
(stdo, stde) = broker.communicate() | ||
if rc: | ||
print(stde.decode('utf-8')) | ||
exit(rc) | ||
|
||
do_test(4, True) | ||
do_test(4, False) | ||
do_test(5, True) | ||
do_test(5, False) | ||
exit(0) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters