"""
import time
-from rmr import rmr
import json
import os
+from rmr import rmr
PORT = os.environ.get("TEST_RCV_PORT", "4560")
-RETURN_MINT = int(os.environ.get("TEST_RCV_RETURN_MINT", 20001))
DELAY = int(os.environ.get("TEST_RCV_SEC_DELAY", 0))
-PAYLOAD_RETURNED = json.loads(
- os.environ.get("TEST_RCV_RETURN_PAYLOAD", '{"ACK_FROM": "ADMISSION_CONTROL", "status": "SUCCESS"}')
-)
+HANDLER_ID = os.environ.get("HANDLER_ID", "test_receiver")
-# TODO: should these be made constants?
-mrc = rmr.rmr_init(PORT.encode("utf-8"), rmr.RMR_MAX_RCV_BYTES, 0x00)
+mrc = rmr.rmr_init(PORT.encode("utf-8"), rmr.RMR_MAX_RCV_BYTES, rmr.RMRFL_MTCALL)
while rmr.rmr_ready(mrc) == 0:
time.sleep(1)
print("not yet ready")
-print("listening")
-sbuf = None
+print("listening ON {}".format(PORT))
while True:
+ sbuf = rmr.rmr_alloc_msg(mrc, 10)
sbuf = rmr.rmr_torcv_msg(mrc, sbuf, 1000)
summary = rmr.message_summary(sbuf)
if summary["message state"] == 12 and summary["message status"] == "RMR_ERR_TIMEOUT":
else:
print("Message received!: {}".format(summary))
- val = json.dumps(PAYLOAD_RETURNED).encode("utf-8")
+ received_payload = json.loads(summary["payload"])
+
+ op = received_payload["operation"]
+ send_payload_status = "ERROR"
+ if op == "CREATE":
+ send_payload_status = "OK"
+ elif op == "DELETE":
+ send_payload_status = "DELETED"
+
+ payload = {
+ "policy_type_id": received_payload["policy_type_id"],
+ "policy_instance_id": received_payload["policy_instance_id"],
+ "handler_id": HANDLER_ID,
+ "status": send_payload_status,
+ }
+
+ val = json.dumps(payload).encode("utf-8")
rmr.set_payload_and_length(val, sbuf)
- sbuf.contents.mtype = RETURN_MINT
+ sbuf.contents.mtype = 21024
print("Pre reply summary: {}".format(rmr.message_summary(sbuf)))
time.sleep(DELAY)
- sbuf = rmr.rmr_rts_msg(mrc, sbuf)
- print("Post reply summary: {}".format(rmr.message_summary(sbuf)))
+
+ # try up to 5 times to send back the ack
+ for _ in range(5):
+ sbuf = rmr.rmr_rts_msg(mrc, sbuf)
+ post_reply_summary = rmr.message_summary(sbuf)
+ print("Post reply summary: {}".format(post_reply_summary))
+ if post_reply_summary["message state"] == 10 and post_reply_summary["message status"] == "RMR_ERR_RETRY":
+ time.sleep(1)
+ else:
+ break