Esempio n. 1
0
    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)
Esempio n. 2
0
    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()
Esempio n. 3
0
    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()
Esempio n. 4
0
    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)
Esempio n. 5
0
    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]))
Esempio n. 6
0
    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)
Esempio n. 7
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]))
Esempio n. 8
0
    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)
Esempio n. 9
0
 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)
Esempio n. 10
0
    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)
Esempio n. 11
0
 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)
Esempio n. 12
0
 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)
Esempio n. 13
0
    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)
Esempio n. 14
0
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()