# HG changeset patch # User Alexandre Yang <alexandre.yang@datadoghq.com> # Date 1593091396 -7200 # Thu Jun 25 15:23:16 2020 +0200 # Node ID c8eee3da654eb75c249730aca93ed6f5bd910c18 # Parent 449e17b8dd577683bf0f5604aab71219ce4ff180 GH #212 Make `PCFExecute.unpack()` return full header Co-authored-by: Vyacheslav Savchenko <25712100+SeyfSV@users.noreply.github.com> diff --git a/code/pymqi/__init__.py b/code/pymqi/__init__.py --- a/code/pymqi/__init__.py +++ b/code/pymqi/__init__.py @@ -2733,11 +2733,11 @@ ress = [] while True: message = self.__pcf.reply_queue.get(None, get_md, get_opts) - res, control = self.__pcf.unpack(message) + res, mqcfh_response = self.__pcf.unpack(message) ress.append(res) - if control == CMQCFC.MQCFC_LAST: + if mqcfh_response.Control == CMQCFC.MQCFC_LAST: break return ress @@ -2964,7 +2964,7 @@ else: res[parameter.Parameter] = value - return res, mqcfh.Control + return res, mqcfh class ByteString(object): diff --git a/code/tests/test_pcf.py b/code/tests/test_pcf.py --- a/code/tests/test_pcf.py +++ b/code/tests/test_pcf.py @@ -259,11 +259,45 @@ ] }, message) + def test_unpack_header(self): + """Test unpack header.""" + message = pymqi.CFH(Version=pymqi.CMQCFC.MQCFH_VERSION_1, + Type=pymqi.CMQCFC.MQCFT_STATISTICS, + Command=pymqi.CMQCFC.MQCMD_STATISTICS_Q, + ParameterCount=1).pack() + message += pymqi.CFST(Parameter=pymqi.CMQC.MQCA_Q_MGR_NAME, + String=b'QM1').pack() + + queue = pymqi.Queue(self.qmgr, self.queue_name, + pymqi.CMQC.MQOO_INPUT_AS_Q_DEF + pymqi.CMQC.MQOO_OUTPUT) + + put_md = pymqi.MD(Format=pymqi.CMQC.MQFMT_PCF) + queue.put(message, put_md) + + get_opts = pymqi.GMO( + Options=pymqi.CMQC.MQGMO_NO_SYNCPOINT + pymqi.CMQC.MQGMO_FAIL_IF_QUIESCING, + Version=pymqi.CMQC.MQGMO_VERSION_2, + MatchOptions=pymqi.CMQC.MQMO_MATCH_CORREL_ID) + get_md = pymqi.MD(MsgId=put_md.MsgId) # pylint: disable=no-member + message = queue.get(None, get_md, get_opts) + queue.close() + message, header = pymqi.PCFExecute.unpack(message) + + self.assertEqual(header.Command, pymqi.CMQCFC.MQCMD_STATISTICS_Q) + self.assertEqual(header.Type, pymqi.CMQCFC.MQCFT_STATISTICS) + + self.assertEqual({ + pymqi.CMQC.MQCA_Q_MGR_NAME: b'QM1\x00', + }, message) + def test_unpack_group(self): """Test parameters group unpack.""" binary_message = open(os.path.join(self.messages_dir, "statistics_q.dat"), "rb").read() - message, _ = pymqi.PCFExecute.unpack(binary_message) + message, header = pymqi.PCFExecute.unpack(binary_message) + + self.assertEqual(header.Command, pymqi.CMQCFC.MQCMD_STATISTICS_Q) + self.assertEqual(header.Type, pymqi.CMQCFC.MQCFT_STATISTICS) self.assertEqual(message[pymqi.CMQC.MQCA_Q_MGR_NAME].strip(), b'mq_mgr1') self.assertEqual(message[pymqi.CMQCFC.MQCAMO_START_DATE], b'2020-06-15\x00\x00')