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 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 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 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 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_mqcfbs(self): """Test MQCFBS PCF byte string parameter. Also uses MQCFIN and MQCFIL as parameters """ attrs = [] # type: List[pymqi.MQOpts] attrs.append( pymqi.CFBS(Parameter=pymqi.CMQCFC.MQBACF_GENERIC_CONNECTION_ID, String=b'')) attrs.append( pymqi.CFIN(Parameter=pymqi.CMQCFC.MQIACF_CONN_INFO_TYPE, Value=pymqi.CMQCFC.MQIACF_CONN_INFO_CONN)) attrs.append( pymqi.CFIL(Parameter=pymqi.CMQCFC.MQIACF_CONNECTION_ATTRS, Values=[pymqi.CMQCFC.MQIACF_ALL])) object_filters = [] object_filters.append( pymqi.CFIF(Parameter=pymqi.CMQC.MQIA_APPL_TYPE, Operator=pymqi.CMQCFC.MQCFOP_EQUAL, FilterValue=pymqi.CMQC.MQAT_USER)) results = self.pcf.MQCMD_INQUIRE_CONNECTION(attrs, object_filters) self.assertGreater(len(results), 0)
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 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 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 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()