def test_mqcfgr_mqcfin64_mqcfil64(self): """Test arbitrary message with MQCFIL.""" message = pymqi.CFH(Version=pymqi.CMQCFC.MQCFH_VERSION_1, Type=pymqi.CMQCFC.MQCFT_USER, ParameterCount=4).pack() message += pymqi.CFST(Parameter=pymqi.CMQC.MQCA_Q_MGR_NAME, String=b'QM1').pack() # group1 message += pymqi.CFGR(Parameter=pymqi.CMQCFC.MQGACF_Q_STATISTICS_DATA, ParameterCount=3).pack() message += pymqi.CFST(Parameter=pymqi.CMQC.MQCA_Q_NAME, String=b'SYSTEM.ADMIN.COMMAND.QUEUE').pack() message += pymqi.CFIN64(Parameter=pymqi.CMQCFC.MQIAMO_Q_MIN_DEPTH, Value=10).pack() message += pymqi.CFIL64(Parameter=pymqi.CMQCFC.MQIAMO64_AVG_Q_TIME, Values=[1, 2, 3]).pack() # group2 message += pymqi.CFGR(Parameter=pymqi.CMQCFC.MQGACF_Q_STATISTICS_DATA, ParameterCount=3).pack() message += pymqi.CFST(Parameter=pymqi.CMQC.MQCA_Q_NAME, String=b'SYSTEM.ADMIN.COMMAND.QUEUE2').pack() message += pymqi.CFIN64(Parameter=pymqi.CMQCFC.MQIAMO_Q_MIN_DEPTH, Value=20).pack() message += pymqi.CFIL64(Parameter=pymqi.CMQCFC.MQIAMO64_AVG_Q_TIME, Values=[111, 222]).pack() message += pymqi.CFST(Parameter=pymqi.CMQCFC.MQCAMO_START_TIME, String=b'10.41.58').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, _ = pymqi.PCFExecute.unpack(message) self.assertEqual({ pymqi.CMQC.MQCA_Q_MGR_NAME: b'QM1\x00', pymqi.CMQCFC.MQCAMO_START_TIME: b'10.41.58', pymqi.CMQCFC.MQGACF_Q_STATISTICS_DATA: [ { pymqi.CMQC.MQCA_Q_NAME: b'SYSTEM.ADMIN.COMMAND.QUEUE\x00\x00', pymqi.CMQCFC.MQIAMO_Q_MIN_DEPTH: 10, pymqi.CMQCFC.MQIAMO64_AVG_Q_TIME: [1, 2, 3], }, { pymqi.CMQC.MQCA_Q_NAME: b'SYSTEM.ADMIN.COMMAND.QUEUE2\x00', pymqi.CMQCFC.MQIAMO_Q_MIN_DEPTH: 20, pymqi.CMQCFC.MQIAMO64_AVG_Q_TIME: [111, 222], }, ] }, message)
def tearDown(self): """Delete created objects.""" attrs = [] attrs.append( pymqi.CFST(Parameter=pymqi.CMQCFC.MQCACH_CHANNEL_NAME, String=utils.py3str2bytes(self.tls_channel_name))) attrs.append( pymqi.CFIN(Parameter=pymqi.CMQCFC.MQIACF_CHLAUTH_TYPE, Value=pymqi.CMQCFC.MQCAUT_USERMAP)) attrs.append( pymqi.CFIN(Parameter=pymqi.CMQCFC.MQIACF_ACTION, Value=pymqi.CMQCFC.MQACT_REMOVEALL)) self.delete_auth_rec(attrs) attrs = [] attrs.append( pymqi.CFST(Parameter=pymqi.CMQCFC.MQCACH_CHANNEL_NAME, String=utils.py3str2bytes(self.tls_channel_name))) attrs.append( pymqi.CFIN(Parameter=pymqi.CMQCFC.MQIACF_CHLAUTH_TYPE, Value=pymqi.CMQCFC.MQCAUT_BLOCKUSER)) attrs.append( pymqi.CFIN(Parameter=pymqi.CMQCFC.MQIACF_ACTION, Value=pymqi.CMQCFC.MQACT_REMOVEALL)) self.delete_auth_rec(attrs) self.delete_channel(self.tls_channel_name) super(TestTLS, self).tearDown()
def tearDownClass(cls): """Clear test environment.""" attrs = [] attrs.append(pymqi.CFST(Parameter=pymqi.CMQC.MQCA_SSL_KEY_REPOSITORY, String=cls._key_repo_location_qmgr)) attrs.append(pymqi.CFST(Parameter=pymqi.CMQC.MQCA_CERT_LABEL, String=cls._certificate_label_qmgr)) cls.edit_qmgr(attrs) super(TestTLS, cls).tearDownClass()
def setUpClass(cls): """Initialize test environment.""" cls.skip = int(os.environ.get( 'PYMQI_TEST_TLS_SKIP', 1)) if cls.skip: raise unittest.SkipTest('PYMQI_TEST_TLS_SKIP initialized') super(TestTLS, cls).setUpClass() cls.tls_channel_name = os.environ.get( 'PYMQI_TEST_TLS_CHL_NAME', cls.prefix + cls.tls_channel_name).encode() cls.cypher_spec = os.environ.get( 'PYMQI_TEST_TLS_CYPHER_SPEC', cls.cypher_spec).encode() cls.client_dn = os.environ.get( 'PYMQI_TEST_TLS_CLIENT_DN', cls.client_dn).encode() cls.certificate_label_qmgr = os.environ.get( 'PYMQI_TEST_TLS_CERT_LABEL_QMGR', cls.certificate_label_qmgr).encode() cls.certificate_label_client = os.environ.get( 'PYMQI_TEST_TLS_CERT_LABEL_CLIENT', cls.certificate_label_client).encode() cls.key_repo_location_qmgr = os.environ.get( 'PYMQI_TEST_TLS_KEY_REPO_LOCATION_QMGR', cls.key_repo_location_qmgr.format(cls.queue_manager)).encode() cls.key_repo_location_client = os.environ.get( 'PYMQI_TEST_TLS_KEY_REPO_LOCATION_CLIENT', cls.key_repo_location_client).encode() cls.key_repo_location_client_path = os.path.join( cls.key_repo_location_client, cls.certificate_label_client) cls.key_repo_location_qmgr_path = os.path.join( cls.key_repo_location_qmgr, cls.certificate_label_qmgr) cls._key_repo_location_qmgr = cls.qmgr.inquire(pymqi.CMQC.MQCA_SSL_KEY_REPOSITORY) cls._certificate_label_qmgr = cls.qmgr.inquire(pymqi.CMQC.MQCA_CERT_LABEL) attrs = [] attrs.append(pymqi.CFST(Parameter=pymqi.CMQC.MQCA_SSL_KEY_REPOSITORY, String=cls.key_repo_location_qmgr_path)) attrs.append(pymqi.CFST(Parameter=pymqi.CMQC.MQCA_CERT_LABEL, String=cls.certificate_label_qmgr)) cls.edit_qmgr(attrs)
def test_mqcfif(self): """Test string filter MQCFIF. Also uses MQCFST, MQCFIN and MQCFIL as parameters """ attrs = [] # type: List[pymqi.MQOpts] attrs.append(pymqi.CFST(Parameter=pymqi.CMQC.MQCA_Q_NAME, String=b'*')) attrs.append( pymqi.CFIN(Parameter=pymqi.CMQC.MQIA_Q_TYPE, Value=pymqi.CMQC.MQQT_LOCAL)) attrs.append( pymqi.CFIL(Parameter=pymqi.CMQCFC.MQIACF_Q_ATTRS, Values=[ pymqi.CMQC.MQIA_CURRENT_Q_DEPTH, pymqi.CMQC.MQCA_Q_DESC ])) object_filters = [] object_filters.append( pymqi.CFIF(Parameter=pymqi.CMQC.MQIA_CURRENT_Q_DEPTH, Operator=pymqi.CMQCFC.MQCFOP_GREATER, FilterValue=0)) results = self.pcf.MQCMD_INQUIRE_Q(attrs, object_filters) self.assertTrue(results, 'Queue not found') for result in results: self.assertTrue( result[pymqi.CMQC.MQIA_CURRENT_Q_DEPTH] > 0, 'Found Queue with depth {}'.format( result[pymqi.CMQC.MQIA_CURRENT_Q_DEPTH]))
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) # pylint: disable=no-member self.assertEqual(header.Type, pymqi.CMQCFC.MQCFT_STATISTICS) # pylint: disable=no-member self.assertEqual({ pymqi.CMQC.MQCA_Q_MGR_NAME: b'QM1\x00', }, message)
def test_mqcfsf(self): """Test string filter MQCFSF. Also uses MQCFST, MQCFIN and MQCFIL as parameters """ attrs = [] # type: List[pymqi.MQOpts] attrs.append(pymqi.CFST(Parameter=pymqi.CMQC.MQCA_Q_NAME, String=b'*')) attrs.append( pymqi.CFIN(Parameter=pymqi.CMQC.MQIA_Q_TYPE, Value=pymqi.CMQC.MQQT_LOCAL)) attrs.append( pymqi.CFIL(Parameter=pymqi.CMQCFC.MQIACF_Q_ATTRS, Values=[ pymqi.CMQC.MQIA_CURRENT_Q_DEPTH, pymqi.CMQC.MQCA_Q_DESC ])) object_filters = [] object_filters.append( pymqi.CFSF(Parameter=pymqi.CMQC.MQCA_Q_DESC, Operator=pymqi.CMQCFC.MQCFOP_LIKE, FilterValue=b'IBM MQ*')) results = self.pcf.MQCMD_INQUIRE_Q(attrs, object_filters) self.assertTrue(results, 'Queue not found') for result in results: self.assertTrue( not result[pymqi.CMQC.MQCA_Q_DESC].startswith(b'MQ'), 'Found Queue with description {}'.format( result[pymqi.CMQC.MQCA_Q_DESC])) self.assertTrue( pymqi.CMQC.MQCA_Q_DESC in result, 'Attribute {} is not returned'.format( result[pymqi.CMQC.MQCA_Q_DESC]))
def test_mqcfsl(self, value): """Test MQCFSL PCF string list parameter. Also uses MQCFST and MQCFIN as parameters """ attrs = [] # type: List[pymqi.MQOpts] attrs.append( pymqi.CFST(Parameter=pymqi.CMQC.MQCA_NAMELIST_NAME, String='{}NAMELIST'.format(self.prefix).encode())) attrs.append(pymqi.CFSL(Parameter=pymqi.CMQC.MQCA_NAMES, Strings=value)) attrs.append( pymqi.CFIN(Parameter=pymqi.CMQCFC.MQIACF_REPLACE, Value=pymqi.CMQCFC.MQRP_YES)) try: self.pcf.MQCMD_CREATE_NAMELIST(attrs) except Exception: # pylint: disable=broad-except self.fail('Exception occurs!') else: attrs = [] attrs.append( pymqi.CFST(Parameter=pymqi.CMQC.MQCA_NAMELIST_NAME, String='{}NAMELIST'.format(self.prefix).encode())) attrs.append( pymqi.CFIL( Parameter=pymqi.CMQCFC.MQIACF_NAMELIST_ATTRS, Values=[pymqi.CMQC.MQCA_NAMES, pymqi.CMQC.MQIA_NAME_COUNT])) results = self.pcf.MQCMD_INQUIRE_NAMELIST(attrs) self.assertEqual(results[0][pymqi.CMQC.MQIA_NAME_COUNT], len(value)) if results[0][pymqi.CMQC.MQIA_NAME_COUNT] > 0: for item in results[0][pymqi.CMQC.MQCA_NAMES]: item = item.strip() self.assertTrue(item in value, '{} value not in values list'.format(item)) value.remove(item) attrs = [] attrs.append( pymqi.CFST(Parameter=pymqi.CMQC.MQCA_NAMELIST_NAME, String='{}NAMELIST'.format(self.prefix).encode())) self.pcf.MQCMD_DELETE_NAMELIST(attrs)
def delete_queue(self, queue_name): """Delete queue.""" attrs = [] attrs.append(pymqi.CFST(Parameter=pymqi.CMQC.MQCA_Q_NAME, String=utils.py3str2bytes(queue_name))) attrs.append(pymqi.CFIN(Parameter=pymqi.CMQCFC.MQIACF_PURGE, Value=pymqi.CMQCFC.MQPO_YES)) self.pcf.MQCMD_DELETE_Q(attrs)
def setUp(self): """Initialize test environment.""" super(TestTLS, self).setUp() attrs = [] attrs.append(pymqi.CFST(Parameter=pymqi.CMQCFC.MQCACH_CHANNEL_NAME, String=utils.py3str2bytes(self.tls_channel_name))) attrs.append(pymqi.CFIN(Parameter=pymqi.CMQCFC.MQIACH_CHANNEL_TYPE, Value=pymqi.CMQC.MQCHT_SVRCONN)) attrs.append(pymqi.CFST(Parameter=pymqi.CMQCFC.MQCACH_SSL_CIPHER_SPEC, String=self.cypher_spec)) attrs.append(pymqi.CFST(Parameter=pymqi.CMQCFC.MQCACH_SSL_PEER_NAME, String=self.client_dn)) attrs.append(pymqi.CFIN(Parameter=pymqi.CMQCFC.MQIACH_SSL_CLIENT_AUTH, Value=pymqi.CMQXC.MQSCA_OPTIONAL)) attrs.append(pymqi.CFST(Parameter=pymqi.CMQC.MQCA_CERT_LABEL, String=self.certificate_label_qmgr)) attrs.append(pymqi.CFIN(Parameter=pymqi.CMQCFC.MQIACF_REPLACE, Value=pymqi.CMQCFC.MQRP_YES)) self.create_channel(self.tls_channel_name, attrs) attrs = [] attrs.append(pymqi.CFST(Parameter=pymqi.CMQCFC.MQCACH_CHANNEL_NAME, String=utils.py3str2bytes(self.tls_channel_name))) attrs.append(pymqi.CFIN(Parameter=pymqi.CMQCFC.MQIACF_CHLAUTH_TYPE, Value=pymqi.CMQCFC.MQCAUT_USERMAP)) attrs.append(pymqi.CFIN(Parameter=pymqi.CMQCFC.MQIACF_ACTION, Value=pymqi.CMQCFC.MQACT_REPLACE)) attrs.append(pymqi.CFST(Parameter=pymqi.CMQCFC.MQCACH_CLIENT_USER_ID, String=utils.py3str2bytes(self.user))) attrs.append(pymqi.CFIN(Parameter=pymqi.CMQC.MQIA_CHECK_CLIENT_BINDING, Value=pymqi.CMQCFC.MQCHK_REQUIRED_ADMIN)) attrs.append(pymqi.CFIN(Parameter=pymqi.CMQCFC.MQIACH_USER_SOURCE, Value=pymqi.CMQC.MQUSRC_MAP)) attrs.append(pymqi.CFST(Parameter=pymqi.CMQCFC.MQCACH_MCA_USER_ID, String=b'mqm')) self.create_auth_rec(attrs) attrs = [] attrs.append(pymqi.CFST(Parameter=pymqi.CMQCFC.MQCACH_CHANNEL_NAME, String=utils.py3str2bytes(self.tls_channel_name))) attrs.append(pymqi.CFIN(Parameter=pymqi.CMQCFC.MQIACF_CHLAUTH_TYPE, Value=pymqi.CMQCFC.MQCAUT_BLOCKUSER)) attrs.append(pymqi.CFST(Parameter=pymqi.CMQCFC.MQCACH_MCA_USER_ID_LIST, String=b'nobody')) attrs.append(pymqi.CFIN(Parameter=pymqi.CMQCFC.MQIACH_WARNING, Value=pymqi.CMQC.MQWARN_NO)) attrs.append(pymqi.CFIN(Parameter=pymqi.CMQCFC.MQIACF_ACTION, Value=pymqi.CMQCFC.MQACT_REPLACE)) self.create_auth_rec(attrs)
def delete_channel(self, channel_name): """Delete channel.""" pcf = pymqi.PCFExecute(self.qmgr) attrs = [] attrs.append( pymqi.CFST(Parameter=pymqi.CMQCFC.MQCACH_CHANNEL_NAME, String=utils.py3str2bytes(channel_name))) pcf.MQCMD_DELETE_CHANNEL(attrs)
def create_channel(self, channel_name, attrs=None): """Create channle.""" if not attrs: attrs = [] attrs.append(pymqi.CFST(Parameter=pymqi.CMQCFC.MQCACH_CHANNEL_NAME, String=utils.py3str2bytes(channel_name))) attrs.append(pymqi.CFIN(Parameter=pymqi.CMQCFC.MQIACH_CHANNEL_TYPE, Value=pymqi.CMQC.MQCHT_SVRCONN)) attrs.append(pymqi.CFIN(Parameter=pymqi.CMQCFC.MQIACF_REPLACE, Value=pymqi.CMQCFC.MQRP_YES)) self.pcf.MQCMD_CREATE_CHANNEL(attrs)
def create_queue(self, queue_name, max_depth=5000, attrs=None): """Create queue.""" if not attrs: attrs = [] attrs.append(pymqi.CFST(Parameter=pymqi.CMQC.MQCA_Q_NAME, String=utils.py3str2bytes(queue_name))) attrs.append(pymqi.CFIN(Parameter=pymqi.CMQC.MQIA_Q_TYPE, Value=pymqi.CMQC.MQQT_LOCAL)) attrs.append(pymqi.CFIN(Parameter=pymqi.CMQC.MQIA_MAX_Q_DEPTH, Value=max_depth)) attrs.append(pymqi.CFIN(Parameter=pymqi.CMQCFC.MQIACF_REPLACE, Value=pymqi.CMQCFC.MQRP_YES)) self.pcf.MQCMD_CREATE_Q(attrs)
def prepare_queue_manager(): import pymqi conn_info = '{0}({1})'.format(common.HOST, common.PORT) qm_name = common.QUEUE_MANAGER.lower() qmgr = pymqi.QueueManager(None) qmgr.connectTCPClient(common.QUEUE_MANAGER, pymqi.CD(), common.CHANNEL, conn_info, common.USERNAME, common.PASSWORD) pcf = pymqi.PCFExecute(qmgr, response_wait_interval=5000) attrs = [ pymqi.CFST( Parameter=pymqi.CMQC.MQCA_SSL_KEY_REPOSITORY, String=pymqi.ensure_bytes('/etc/mqm/pki/keys/{}'.format(qm_name)), ), pymqi.CFST(Parameter=pymqi.CMQC.MQCA_CERT_LABEL, String=pymqi.ensure_bytes(qm_name)), ] pcf.MQCMD_CHANGE_Q_MGR(attrs) tls_channel_name = pymqi.ensure_bytes(common.CHANNEL_SSL) cypher_spec = pymqi.ensure_bytes(common.SSL_CYPHER_SPEC) client_dn = pymqi.ensure_bytes('CN={}'.format(common.SSL_CLIENT_LABEL)) certificate_label_qmgr = pymqi.ensure_bytes(qm_name) attrs = [ pymqi.CFST(Parameter=pymqi.CMQCFC.MQCACH_CHANNEL_NAME, String=pymqi.ensure_bytes(tls_channel_name)), pymqi.CFIN(Parameter=pymqi.CMQCFC.MQIACH_CHANNEL_TYPE, Value=pymqi.CMQC.MQCHT_SVRCONN), pymqi.CFST(Parameter=pymqi.CMQCFC.MQCACH_SSL_CIPHER_SPEC, String=cypher_spec), pymqi.CFST(Parameter=pymqi.CMQCFC.MQCACH_SSL_PEER_NAME, String=client_dn), pymqi.CFIN(Parameter=pymqi.CMQCFC.MQIACH_SSL_CLIENT_AUTH, Value=pymqi.CMQXC.MQSCA_OPTIONAL), pymqi.CFST(Parameter=pymqi.CMQC.MQCA_CERT_LABEL, String=certificate_label_qmgr), pymqi.CFIN(Parameter=pymqi.CMQCFC.MQIACF_REPLACE, Value=pymqi.CMQCFC.MQRP_YES), ] pcf.MQCMD_CREATE_CHANNEL(attrs) attrs = [ pymqi.CFST(Parameter=pymqi.CMQCFC.MQCACH_CHANNEL_NAME, String=pymqi.ensure_bytes(tls_channel_name)), pymqi.CFIN(Parameter=pymqi.CMQCFC.MQIACF_CHLAUTH_TYPE, Value=pymqi.CMQCFC.MQCAUT_USERMAP), pymqi.CFIN(Parameter=pymqi.CMQCFC.MQIACF_ACTION, Value=pymqi.CMQCFC.MQACT_REPLACE), pymqi.CFST(Parameter=pymqi.CMQCFC.MQCACH_CLIENT_USER_ID, String=pymqi.ensure_bytes(common.USERNAME)), pymqi.CFIN(Parameter=pymqi.CMQC.MQIA_CHECK_CLIENT_BINDING, Value=pymqi.CMQCFC.MQCHK_REQUIRED_ADMIN), pymqi.CFIN(Parameter=pymqi.CMQCFC.MQIACH_USER_SOURCE, Value=pymqi.CMQC.MQUSRC_MAP), pymqi.CFST(Parameter=pymqi.CMQCFC.MQCACH_MCA_USER_ID, String=b'mqm'), ] pcf.MQCMD_SET_CHLAUTH_REC(attrs) attrs = [ pymqi.CFST(Parameter=pymqi.CMQCFC.MQCACH_CHANNEL_NAME, String=pymqi.ensure_bytes(tls_channel_name)), pymqi.CFIN(Parameter=pymqi.CMQCFC.MQIACF_CHLAUTH_TYPE, Value=pymqi.CMQCFC.MQCAUT_BLOCKUSER), pymqi.CFST(Parameter=pymqi.CMQCFC.MQCACH_MCA_USER_ID_LIST, String=b'nobody'), pymqi.CFIN(Parameter=pymqi.CMQCFC.MQIACH_WARNING, Value=pymqi.CMQC.MQWARN_NO), pymqi.CFIN(Parameter=pymqi.CMQCFC.MQIACF_ACTION, Value=pymqi.CMQCFC.MQACT_REPLACE), ] pcf.MQCMD_SET_CHLAUTH_REC(attrs) pcf.disconnect() qmgr.disconnect()