03-publish-c2b-qos1-receive-maximum.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #!/usr/bin/env python3
  2. # Test whether a client responds correctly to multiple PUBLISH with QoS 1, with
  3. # receive maximum set to 3.
  4. from mosq_test_helper import *
  5. port = mosq_test.get_lib_port()
  6. rc = 1
  7. keepalive = 60
  8. connect_packet = mosq_test.gen_connect("publish-qos1-test", keepalive=keepalive, proto_ver=5)
  9. props = mqtt5_props.gen_uint16_prop(mqtt5_props.PROP_RECEIVE_MAXIMUM, 3)
  10. connack_packet = mosq_test.gen_connack(rc=0, proto_ver=5, properties=props, property_helper=False)
  11. disconnect_packet = mosq_test.gen_disconnect(proto_ver=5)
  12. mid = 1
  13. publish_1_packet = mosq_test.gen_publish("topic", qos=1, mid=mid, payload="12345", proto_ver=5)
  14. puback_1_packet = mosq_test.gen_puback(mid, proto_ver=5)
  15. mid = 2
  16. publish_2_packet = mosq_test.gen_publish("topic", qos=1, mid=mid, payload="12345", proto_ver=5)
  17. puback_2_packet = mosq_test.gen_puback(mid, proto_ver=5)
  18. mid = 3
  19. publish_3_packet = mosq_test.gen_publish("topic", qos=1, mid=mid, payload="12345", proto_ver=5)
  20. puback_3_packet = mosq_test.gen_puback(mid, proto_ver=5)
  21. mid = 4
  22. publish_4_packet = mosq_test.gen_publish("topic", qos=1, mid=mid, payload="12345", proto_ver=5)
  23. puback_4_packet = mosq_test.gen_puback(mid, proto_ver=5)
  24. mid = 5
  25. publish_5_packet = mosq_test.gen_publish("topic", qos=1, mid=mid, payload="12345", proto_ver=5)
  26. puback_5_packet = mosq_test.gen_puback(mid, proto_ver=5)
  27. mid = 6
  28. publish_6_packet = mosq_test.gen_publish("topic", qos=1, mid=mid, payload="12345", proto_ver=5)
  29. puback_6_packet = mosq_test.gen_puback(mid, proto_ver=5)
  30. sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  31. sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  32. sock.settimeout(10)
  33. sock.bind(('', port))
  34. sock.listen(5)
  35. client_args = sys.argv[1:]
  36. env = dict(os.environ)
  37. env['LD_LIBRARY_PATH'] = '../../lib:../../lib/cpp'
  38. try:
  39. pp = env['PYTHONPATH']
  40. except KeyError:
  41. pp = ''
  42. env['PYTHONPATH'] = '../../lib/python:'+pp
  43. client = mosq_test.start_client(filename=sys.argv[1].replace('/', '-'), cmd=client_args, env=env, port=port)
  44. try:
  45. (conn, address) = sock.accept()
  46. conn.settimeout(10)
  47. mosq_test.do_receive_send(conn, connect_packet, connack_packet, "connect")
  48. mosq_test.expect_packet(conn, "publish 1", publish_1_packet)
  49. mosq_test.expect_packet(conn, "publish 2", publish_2_packet)
  50. mosq_test.expect_packet(conn, "publish 3", publish_3_packet)
  51. conn.send(puback_1_packet)
  52. conn.send(puback_2_packet)
  53. mosq_test.expect_packet(conn, "publish 4", publish_4_packet)
  54. mosq_test.expect_packet(conn, "publish 5", publish_5_packet)
  55. conn.send(puback_3_packet)
  56. mosq_test.expect_packet(conn, "publish 6", publish_6_packet)
  57. conn.send(puback_4_packet)
  58. conn.send(puback_5_packet)
  59. conn.send(puback_6_packet)
  60. rc = 0
  61. conn.close()
  62. except mosq_test.TestError:
  63. pass
  64. finally:
  65. for i in range(0, 5):
  66. if client.returncode != None:
  67. break
  68. time.sleep(0.1)
  69. try:
  70. client.terminate()
  71. except OSError:
  72. pass
  73. client.wait()
  74. sock.close()
  75. if client.returncode != 0:
  76. exit(1)
  77. exit(rc)