03-publish-qos1-no-subscribers-v5.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #!/usr/bin/env python3
  2. # Test whether a PUBLISH to a topic with QoS 1 results in the correct PUBACK
  3. # packet when there are no subscribers.
  4. from mosq_test_helper import *
  5. rc = 1
  6. keepalive = 60
  7. connect_packet = mosq_test.gen_connect("pub-qos1-test", keepalive=keepalive, proto_ver=5)
  8. connack_packet = mosq_test.gen_connack(rc=0, proto_ver=5)
  9. mid = 1
  10. publish1_packet = mosq_test.gen_publish("pub", qos=1, mid=mid, payload="message", proto_ver=5)
  11. puback1_packet = mosq_test.gen_puback(mid, proto_ver=5, reason_code=mqtt5_rc.MQTT_RC_NO_MATCHING_SUBSCRIBERS)
  12. mid = 2
  13. publish2_packet = mosq_test.gen_publish("pub/qos1", qos=1, mid=mid, payload="message", proto_ver=5)
  14. puback2_packet = mosq_test.gen_puback(mid, proto_ver=5, reason_code=mqtt5_rc.MQTT_RC_NO_MATCHING_SUBSCRIBERS)
  15. mid = 3
  16. publish3_packet = mosq_test.gen_publish("pub/qos1/test", qos=1, mid=mid, payload="message", proto_ver=5)
  17. puback3_packet = mosq_test.gen_puback(mid, proto_ver=5, reason_code=mqtt5_rc.MQTT_RC_NO_MATCHING_SUBSCRIBERS)
  18. mid = 4
  19. publish4_packet = mosq_test.gen_publish("pub/qos1/test", qos=1, mid=mid, payload="message", proto_ver=5, retain=True)
  20. puback4_packet = mosq_test.gen_puback(mid, proto_ver=5, reason_code=mqtt5_rc.MQTT_RC_NO_MATCHING_SUBSCRIBERS)
  21. mid = 5
  22. publish1b_packet = mosq_test.gen_publish("pub", qos=1, mid=mid, payload="message", proto_ver=5)
  23. puback1b_packet = mosq_test.gen_puback(mid, proto_ver=5, reason_code=mqtt5_rc.MQTT_RC_NO_MATCHING_SUBSCRIBERS)
  24. mid = 6
  25. publish2b_packet = mosq_test.gen_publish("pub/qos1", qos=1, mid=mid, payload="message", proto_ver=5)
  26. puback2b_packet = mosq_test.gen_puback(mid, proto_ver=5, reason_code=mqtt5_rc.MQTT_RC_NO_MATCHING_SUBSCRIBERS)
  27. mid = 7
  28. publish3b_packet = mosq_test.gen_publish("pub/qos1/test", qos=1, mid=mid, payload="message", proto_ver=5)
  29. puback3b_packet = mosq_test.gen_puback(mid, proto_ver=5, reason_code=mqtt5_rc.MQTT_RC_NO_MATCHING_SUBSCRIBERS)
  30. port = mosq_test.get_port()
  31. broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port)
  32. try:
  33. sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port)
  34. # None of the pub/qos1/test topic tree exists here
  35. mosq_test.do_send_receive(sock, publish1_packet, puback1_packet, "puback1a")
  36. mosq_test.do_send_receive(sock, publish2_packet, puback2_packet, "puback2a")
  37. mosq_test.do_send_receive(sock, publish3_packet, puback3_packet, "puback3a")
  38. # This publish sets a retained message, which means the topic tree exists
  39. mosq_test.do_send_receive(sock, publish4_packet, puback4_packet, "puback4")
  40. # So now test again
  41. mosq_test.do_send_receive(sock, publish1b_packet, puback1b_packet, "puback1b")
  42. mosq_test.do_send_receive(sock, publish2b_packet, puback2b_packet, "puback2b")
  43. mosq_test.do_send_receive(sock, publish3b_packet, puback3b_packet, "puback3b")
  44. rc = 0
  45. sock.close()
  46. except mosq_test.TestError:
  47. pass
  48. finally:
  49. broker.terminate()
  50. broker.wait()
  51. (stdo, stde) = broker.communicate()
  52. if rc:
  53. print(stde.decode('utf-8'))
  54. exit(rc)