12-prop-assigned-client-identifier.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #!/usr/bin/env python3
  2. # Test whether sending a non zero session expiry interval in DISCONNECT after
  3. # having sent a zero session expiry interval is treated correctly in MQTT v5.
  4. from mosq_test_helper import *
  5. def do_test(clean_start):
  6. rc = 1
  7. keepalive = 10
  8. connect_packet = mosq_test.gen_connect(None, proto_ver=5, keepalive=keepalive, clean_session=clean_start)
  9. props = mqtt5_props.gen_string_prop(mqtt5_props.PROP_ASSIGNED_CLIENT_IDENTIFIER, "auto-00000000-0000-0000-0000-000000000000")
  10. connack_packet = mosq_test.gen_connack(rc=0, proto_ver=5, properties=props)
  11. props = mqtt5_props.gen_uint32_prop(mqtt5_props.PROP_SESSION_EXPIRY_INTERVAL, 1)
  12. disconnect_client_packet = mosq_test.gen_disconnect(proto_ver=5, properties=props)
  13. disconnect_server_packet = mosq_test.gen_disconnect(proto_ver=5, reason_code=130)
  14. port = mosq_test.get_port()
  15. broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port)
  16. try:
  17. sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  18. sock.settimeout(10)
  19. sock.connect(("localhost", port))
  20. sock.send(connect_packet)
  21. connack_recvd = sock.recv(len(connack_packet))
  22. if connack_recvd[0:12] == connack_packet[0:12]:
  23. # FIXME - this test could be tightened up a lot
  24. rc = 0
  25. sock.close()
  26. except mosq_test.TestError:
  27. pass
  28. finally:
  29. broker.terminate()
  30. broker.wait()
  31. (stdo, stde) = broker.communicate()
  32. if rc:
  33. print(stde.decode('utf-8'))
  34. exit(rc)
  35. do_test(True)
  36. do_test(False)
  37. exit(0)