02-subpub-qos0-subscription-id.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #!/usr/bin/env python3
  2. # Does setting and updating subscription identifiers work as expected?
  3. # MQTT v5
  4. from mosq_test_helper import *
  5. def do_test(proto_ver):
  6. rc = 1
  7. keepalive = 60
  8. connect_packet = mosq_test.gen_connect("subpub-test", keepalive=keepalive, proto_ver=5)
  9. connack_packet = mosq_test.gen_connack(rc=0, proto_ver=5)
  10. mid = 1
  11. props = mqtt5_props.gen_varint_prop(mqtt5_props.PROP_SUBSCRIPTION_IDENTIFIER, 1)
  12. subscribe1_packet = mosq_test.gen_subscribe(mid, "subpub/id1", 0, proto_ver=5, properties=props)
  13. suback1_packet = mosq_test.gen_suback(mid, 0, proto_ver=5)
  14. mid = 2
  15. props = mqtt5_props.gen_varint_prop(mqtt5_props.PROP_SUBSCRIPTION_IDENTIFIER, 14)
  16. subscribe2_packet = mosq_test.gen_subscribe(mid, "subpub/+/id2", 0, proto_ver=5, properties=props)
  17. suback2_packet = mosq_test.gen_suback(mid, 0, proto_ver=5)
  18. mid = 3
  19. subscribe3_packet = mosq_test.gen_subscribe(mid, "subpub/noid", 0, proto_ver=5)
  20. suback3_packet = mosq_test.gen_suback(mid, 0, proto_ver=5)
  21. # Updated version of subscribe1, now without a subscription identifier
  22. mid = 4
  23. subscribe1u_packet = mosq_test.gen_subscribe(mid, "subpub/id1", 0, proto_ver=5)
  24. suback1u_packet = mosq_test.gen_suback(mid, 0, proto_ver=5)
  25. # Updated version of subscribe2, with a new subscription identifier
  26. mid = 5
  27. props = mqtt5_props.gen_varint_prop(mqtt5_props.PROP_SUBSCRIPTION_IDENTIFIER, 19)
  28. subscribe2u_packet = mosq_test.gen_subscribe(mid, "subpub/+/id2", 0, proto_ver=5, properties=props)
  29. suback2u_packet = mosq_test.gen_suback(mid, 0, proto_ver=5)
  30. # Updated version of subscribe3, now with a subscription identifier
  31. mid = 6
  32. props = mqtt5_props.gen_varint_prop(mqtt5_props.PROP_SUBSCRIPTION_IDENTIFIER, 21)
  33. subscribe3u_packet = mosq_test.gen_subscribe(mid, "subpub/noid", 0, proto_ver=5, properties=props)
  34. suback3u_packet = mosq_test.gen_suback(mid, 0, proto_ver=5)
  35. publish1_packet = mosq_test.gen_publish("subpub/id1", qos=0, payload="message1", proto_ver=5)
  36. props = mqtt5_props.gen_varint_prop(mqtt5_props.PROP_SUBSCRIPTION_IDENTIFIER, 1)
  37. publish1r_packet = mosq_test.gen_publish("subpub/id1", qos=0, payload="message1", proto_ver=5, properties=props)
  38. publish2_packet = mosq_test.gen_publish("subpub/test/id2", qos=0, payload="message2", proto_ver=5)
  39. props = mqtt5_props.gen_varint_prop(mqtt5_props.PROP_SUBSCRIPTION_IDENTIFIER, 14)
  40. publish2r_packet = mosq_test.gen_publish("subpub/test/id2", qos=0, payload="message2", proto_ver=5, properties=props)
  41. publish3_packet = mosq_test.gen_publish("subpub/noid", qos=0, payload="message3", proto_ver=5)
  42. # Updated version of publish1r, now with no id
  43. publish1ru_packet = mosq_test.gen_publish("subpub/id1", qos=0, payload="message1", proto_ver=5)
  44. # Updated verison of publish2r, with updated id
  45. props = mqtt5_props.gen_varint_prop(mqtt5_props.PROP_SUBSCRIPTION_IDENTIFIER, 19)
  46. publish2ru_packet = mosq_test.gen_publish("subpub/test/id2", qos=0, payload="message2", proto_ver=5, properties=props)
  47. # Updated version of publish3r, now with an id
  48. props = mqtt5_props.gen_varint_prop(mqtt5_props.PROP_SUBSCRIPTION_IDENTIFIER, 21)
  49. publish3ru_packet = mosq_test.gen_publish("subpub/noid", qos=0, payload="message3", proto_ver=5, properties=props)
  50. port = mosq_test.get_port()
  51. broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port)
  52. try:
  53. sock = mosq_test.do_client_connect(connect_packet, connack_packet, timeout=20, port=port)
  54. mosq_test.do_send_receive(sock, subscribe1_packet, suback1_packet, "suback1")
  55. mosq_test.do_send_receive(sock, subscribe2_packet, suback2_packet, "suback2")
  56. mosq_test.do_send_receive(sock, subscribe3_packet, suback3_packet, "suback3")
  57. mosq_test.do_send_receive(sock, publish3_packet, publish3_packet, "publish3")
  58. mosq_test.do_send_receive(sock, publish2_packet, publish2r_packet, "publish2")
  59. mosq_test.do_send_receive(sock, publish1_packet, publish1r_packet, "publish1")
  60. # Now update the subscription identifiers
  61. mosq_test.do_send_receive(sock, subscribe1u_packet, suback1u_packet, "suback1u")
  62. mosq_test.do_send_receive(sock, subscribe2u_packet, suback2u_packet, "suback2u")
  63. mosq_test.do_send_receive(sock, subscribe3u_packet, suback3u_packet, "suback3u")
  64. mosq_test.do_send_receive(sock, publish2_packet, publish2ru_packet, "publish2u")
  65. mosq_test.do_send_receive(sock, publish3_packet, publish3ru_packet, "publish3u")
  66. mosq_test.do_send_receive(sock, publish1_packet, publish1ru_packet, "publish1u")
  67. rc = 0
  68. sock.close()
  69. except mosq_test.TestError:
  70. pass
  71. finally:
  72. broker.terminate()
  73. broker.wait()
  74. (stdo, stde) = broker.communicate()
  75. if rc:
  76. print(stde.decode('utf-8'))
  77. exit(rc)
  78. do_test(proto_ver=5)
  79. exit(0)