03-publish-b2c-qos2-unexpected-pubrel.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #!/usr/bin/env python3
  2. from mosq_test_helper import *
  3. port = mosq_test.get_lib_port()
  4. rc = 1
  5. keepalive = 60
  6. connect_packet = mosq_test.gen_connect("publish-qos2-test", keepalive=keepalive)
  7. connack_packet = mosq_test.gen_connack(rc=0)
  8. disconnect_packet = mosq_test.gen_disconnect()
  9. pubrel_unexpected = mosq_test.gen_pubrel(1000)
  10. pubcomp_unexpected = mosq_test.gen_pubcomp(1000)
  11. mid = 13423
  12. publish_packet = mosq_test.gen_publish("pub/qos2/receive", qos=2, mid=mid, payload="message")
  13. pubrec_packet = mosq_test.gen_pubrec(mid)
  14. pubrel_packet = mosq_test.gen_pubrel(mid)
  15. pubcomp_packet = mosq_test.gen_pubcomp(mid)
  16. publish_quit_packet = mosq_test.gen_publish("quit", qos=0, payload="quit")
  17. sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  18. sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  19. sock.settimeout(10)
  20. sock.bind(('', port))
  21. sock.listen(5)
  22. client_args = sys.argv[1:]
  23. env = dict(os.environ)
  24. env['LD_LIBRARY_PATH'] = '../../lib:../../lib/cpp'
  25. try:
  26. pp = env['PYTHONPATH']
  27. except KeyError:
  28. pp = ''
  29. env['PYTHONPATH'] = '../../lib/python:'+pp
  30. client = mosq_test.start_client(filename=sys.argv[1].replace('/', '-'), cmd=client_args, env=env, port=port)
  31. try:
  32. (conn, address) = sock.accept()
  33. conn.settimeout(10)
  34. if mosq_test.expect_packet(conn, "connect", connect_packet):
  35. conn.send(connack_packet)
  36. conn.send(pubrel_unexpected)
  37. if mosq_test.expect_packet(conn, "pubcomp", pubcomp_unexpected):
  38. conn.send(publish_packet)
  39. if mosq_test.expect_packet(conn, "pubrec", pubrec_packet):
  40. conn.send(pubrel_packet)
  41. if mosq_test.expect_packet(conn, "pubcomp", pubcomp_packet):
  42. conn.send(publish_quit_packet)
  43. rc = 0
  44. conn.close()
  45. finally:
  46. for i in range(0, 5):
  47. if client.returncode != None:
  48. break
  49. time.sleep(0.1)
  50. try:
  51. client.terminate()
  52. except OSError:
  53. pass
  54. client.wait()
  55. sock.close()
  56. if client.returncode != 0:
  57. exit(1)
  58. exit(rc)