Beispiel #1
0
    def qsygetph(self):
        special_value = False
        if self.pwd in ['*NOPWD', '*NOPWDCHK', '*NOPWDSTS']:
            self.pwd = ibmi_util.fmtTo10(self.pwd)
            special_value = True

        len_of_password = len(self.pwd)
        # Chang Le: the user name should be converted to upper case
        input_user = self.name.ljust(10).upper()
        input_password_len = str(len_of_password) + 'A'

        itransport = DatabaseTransport(self.conn)
        itool = iToolKit()
        if not special_value:
            itool.add(
                iPgm('qsygetph', 'qsygetph')
                .addParm(iData('userId', '10A', input_user))
                .addParm(iData('pwd', input_password_len, self.pwd))
                .addParm(iData('handle', '12A', '', {'hex': 'on'}))
                .addParm(
                    iDS('ERRC0100_t', {'len': 'errlen'})
                    .addData(iData('errRet', '10i0', ''))
                    .addData(iData('errAvl', '10i0', ''))
                    .addData(iData('errExp', '7A', '', {'setlen': 'errlen'}))
                    .addData(iData('errRsv', '1A', ''))
                )
                .addParm(iData('len', '10i0', str(len_of_password)))
                .addParm(iData('ccsid', '10i0', '37'))
            )
        else:
            itool.add(
                iPgm('qsygetph', 'qsygetph')
                .addParm(iData('userId', '10A', input_user))
                .addParm(iData('pwd', '10A', self.pwd))
                .addParm(iData('handle', '12A', '', {'hex': 'on'}))
                .addParm(
                    iDS('ERRC0100_t', {'len': 'errlen'})
                    .addData(iData('errRet', '10i0', ''))
                    .addData(iData('errAvl', '10i0', ''))
                    .addData(iData('errExp', '7A', '', {'setlen': 'errlen'}))
                    .addData(iData('errRsv', '1A', ''))
                )
            )
        itool.call(itransport)
        qsygetph = itool.dict_out('qsygetph')
        if 'success' in qsygetph:
            return qsygetph['handle']
        else:
            return None
def test_pgm(transport):
    """Test calling ZZCALL
    https://bitbucket.org/inext/xmlservice-rpg/src/master/test.rpg/zzcall.rpgle
    """

    transport.set_out("""<?xml version="1.0" ?>
<xmlservice>
    <pgm error="fast" lib="XMLSERVICE" name="ZZCALL" var="zzcall">
        <parm io="both" var="p1">
            <data type="1a" var="INCHARA">C</data>
        </parm>
        <parm io="both" var="p2">
            <data type="1a" var="INCHARB">D</data>
        </parm>
        <parm io="both" var="p3">
            <data type="7p4" var="INDEC1">321.1234</data>
        </parm>
        <parm io="both" var="p4">
            <data type="12p2" var="INDEC2">1234567890.12</data>
        </parm>
        <parm io="both" var="p5">
            <ds var="INDS1">
                <data type="1a" var="DSCHARA">E</data>
                <data type="1a" var="DSCHARB">F</data>
                <data type="7p4" var="DSDEC1">333.3330</data>
                <data type="12p2" var="DSDEC2">4444444444.44</data>
            </ds>
        </parm>
        <success>+++ success XMLSERVICE ZZCALL </success>
    </pgm>
</xmlservice>
""")

    tk = iToolKit()
    tk.add(
        iPgm('zzcall', 'ZZCALL', {
            'lib': 'XMLSERVICE'
        }).addParm(iData('INCHARA', '1a', 'a')).addParm(
            iData('INCHARB', '1a', 'b')).addParm(
                iData('INDEC1', '7p4', '32.1234')).addParm(
                    iData('INDEC2', '12p2', '33.33')).addParm(
                        iDS('INDS1').addData(iData(
                            'DSCHARA', '1a',
                            'a')).addData(iData('DSCHARB', '1a', 'b')).addData(
                                iData('DSDEC1', '7p4', '32.1234')).addData(
                                    iData('DSDEC2', '12p2', '33.33'))))
    tk.call(transport)

    zzcall = tk.dict_out('zzcall')

    assert ('success' in zzcall)

    assert (zzcall['INCHARA'] == 'C')
    assert (zzcall['INCHARB'] == 'D')
    assert (zzcall['INDEC1'] == '321.1234')
    assert (zzcall['INDEC2'] == '1234567890.12')
    assert (zzcall['INDS1']['DSCHARA'] == 'E')
    assert (zzcall['INDS1']['DSCHARB'] == 'F')
    assert (zzcall['INDS1']['DSDEC1'] == '333.3330')
    assert (zzcall['INDS1']['DSDEC2'] == '4444444444.44')
def remove_pending_joblog(conn, job_name, user_name, job_number):
    itransport = DatabaseTransport(conn)
    itool = iToolKit()
    itool.add(
        iPgm('qwtrmvjl', 'QWTRMVJL').addParm(
            iDS('RJLS0100_t', {
                'len': 'rhrlen'
            }).addData(iData('length', '10i0', '44')).addData(
                iData('day_since', '10i0', '0')).addData(
                    iData('job_name', '10A', job_name)).addData(
                        iData('user_name', '10A', user_name)).addData(
                            iData('job_number', '6A', job_number)).addData(
                                iData('job_log_output', '10A', '*ALL'))).
        addParm(iData('fmtnam', '8A', 'RJLS0100')).addParm(
            iDS('ERRC0100_t', {
                'len': 'errlen'
            }).addData(iData('errRet', '10i0', '')).addData(
                iData('errAvl', '10i0', '')).addData(
                    iData('errExp', '7A', '', {'setlen': 'errlen'})).addData(
                        iData('errRsv', '1A', ''))))
    itool.call(itransport)
    qwtrmvjl = itool.dict_out('qwtrmvjl')
    if 'success' in qwtrmvjl:
        return 0, qwtrmvjl['success']
    else:
        return -1, qwtrmvjl['error']
Beispiel #4
0
def getNonconfigureDisk(imodule, time):
    conn = imodule.get_connection()
    itransport = DatabaseTransport(conn)
    itool = iToolKit()
    itool.add(iPgm('qyasrdi', 'QYASRDI')
              .addParm(iDS('DMIN0100_t', {'len': 'dmilen'})
              .addData(iData('dniRet', '10i0', ''))
              .addData(iData('dmiAvl', '10i0', ''))
              .addData(iData('dmiOfset', '10i0', ''))
              .addData(iData('dmiNbr', '10i0', '', {'enddo': 'mycnt'}))
              .addData(iData('dmiLen', '10i0', ''))
              .addData(iData('dmiRes', '10i0', ''))
              .addData(iDS('res_t', {'dim': '999', 'dou': 'mycnt'})
                       .addData(iData('resDurn', '10a', ''))
                       .addData(iData('resDuff', '1a', ''))
                       .addData(iData('resTrnaswdu', '10a', ''))
                       .addData(iData('resTnawdu', '4a', ''))
                       .addData(iData('resDuaindpsf', '1a', ''))
                       .addData(iData('resDuaiedpsf', '1a', ''))
                       .addData(iData('resRes', '5a', ''))
                       .addData(iData('resDpsn', '10i0', ''))
                       .addData(iData('resCaadps', '10i0', ''))
                       )
                       )
              .addParm(iData('rcvlen', '10i0', '', {'setlen': 'dmilen'}))
              .addParm(iData('fmtnam', '10a', 'DMIN0100'))
              .addParm(iData('dmiDurna', '10a', '*UNCONFIG'))
              .addParm(iData('dmiNbr', '10i0', '1'))
              .addParm(iDS('ERRC0100_t', {'len': 'errlen'})
                       .addData(iData('errRet', '10i0', ''))
                       .addData(iData('errAvl', '10i0', ''))
                       .addData(iData('errExp', '7A', '', {'setlen': 'errlen'}))
                       .addData(iData('errRsv', '1A', ''))
                       )
              )
    itool.call(itransport)
    qyasrdi = itool.dict_out('qyasrdi')
    diskList = ''
    if 'success' in qyasrdi:
        DMIN0100_t = qyasrdi['DMIN0100_t']
        if int(DMIN0100_t['dmiNbr']) > 0:
            res_t = DMIN0100_t['res_t']
            if int(DMIN0100_t['dmiNbr']) == 1:
                diskList = res_t['resDurn']
            else:
                for rec in res_t:
                    diskList += rec['resDurn'] + ' '
        if diskList.endswith(' '):
            diskList = diskList[:-1]
    job_log = imodule.itoolkit_get_job_log(time)
    return diskList, job_log
Beispiel #5
0
def test_pgm():
    pgm = 'MYPGM'
    key = 'lljqezl'
    
    element = ET.fromstring( iPgm(key, pgm).xml_in())
    assert(element.tag == 'pgm')
    
    assert('var' in element.attrib)
    assert(element.attrib['var'] == key)
    
    assert('name' in element.attrib)
    assert(element.attrib['name'] == pgm)
    
    assert('error' in element.attrib)
    assert(element.attrib['error'] == 'fast')
Beispiel #6
0
def test_pgm_lib():
    pgm = 'MYPGM'
    key = 'rtoiu1nqew'
    lib = 'MYLIB'
    
    element = ET.fromstring(iPgm(key, pgm, {'lib': lib}).xml_in())
    assert(element.tag == 'pgm')
    
    assert('var' in element.attrib)
    assert(element.attrib['var'] == key)
    
    assert('name' in element.attrib)
    assert(element.attrib['name'] == pgm)
    
    assert('lib' in element.attrib)
    assert(element.attrib['lib'] == lib)
    
    assert('func' not in element.attrib)
Beispiel #7
0
def test_pgm_error_off():
    pgm = 'MYPGM'
    key = 'lkjwernm'
    error = 'off'
    
    element = ET.fromstring(iPgm(key, pgm, {'error': error}).xml_in())
    assert(element.tag == 'pgm')
    
    assert('var' in element.attrib)
    assert(element.attrib['var'] == key)
    
    assert('name' in element.attrib)
    assert(element.attrib['name'] == pgm)
    
    assert('lib' not in element.attrib)
    assert('func' not in element.attrib)
    
    assert('error' in element.attrib)
    assert(element.attrib['error'] == error)
Beispiel #8
0
 def qwtsetp(self):
     itransport = DatabaseTransport(self.conn)
     itool = iToolKit()
     itool.add(
         iPgm('qwtsetp', 'QWTSETP')
         .addParm(iData('handle', '12A', self.handle, {'hex': 'on'}))
         .addParm(
             iDS('ERRC0100_t', {'len': 'errlen'})
             .addData(iData('errRet', '10i0', ''))
             .addData(iData('errAvl', '10i0', ''))
             .addData(iData('errExp', '7A', '', {'setlen': 'errlen'}))
             .addData(iData('errRsv', '1A', ''))
         )
     )
     itool.call(itransport)
     qwtsetp = itool.dict_out('qwtsetp')
     ibmi_util.log_info(str(qwtsetp), 'qwtsetp')
     if 'success' in qwtsetp:
         return True
     else:
         return False
Beispiel #9
0
 def release_profile_handle(self):
     if not self.handle:
         return True
     itransport = DatabaseTransport(self.conn)
     itool = iToolKit()
     itool.add(
         iPgm('qsyrlsph', 'QSYRLSPH')
         .addParm(iData('handle', '12A', self.handle, {'hex': 'on'}))
         .addParm(
             iDS('ERRC0100_t', {'len': 'errlen'})
             .addData(iData('errRet', '10i0', ''))
             .addData(iData('errAvl', '10i0', ''))
             .addData(iData('errExp', '7A', '', {'setlen': 'errlen'}))
             .addData(iData('errRsv', '1A', ''))
         )
     )
     itool.call(itransport)
     qsyrlsph = itool.dict_out('qsyrlsph')
     ibmi_util.log_info(str(qsyrlsph), 'qsyrlsph')
     if 'success' in qsyrlsph:
         return True
     else:
         return False
def get_ptf_info(imodule, ptf_id, product_id, release_level):
    conn = imodule.get_connection()
    itransport = DatabaseTransport(conn)
    itool = iToolKit()
    system_release_info, err = imodule.get_ibmi_release()
    ibmi_util.log_debug(
        "get_ibmi_release() return release_info: " + str(system_release_info),
        sys._getframe().f_code.co_name)
    ibmi_util.log_debug("get_ibmi_release() return err: " + str(err),
                        sys._getframe().f_code.co_name)
    # Example output for system_release_info: {'version': 7, 'release': 2, 'version_release': 7.2}
    # Note, version_release is float but not string
    if system_release_info['version_release'] == 7.2:
        itool.add(
            iPgm('qpzrtvfx', 'QPZRTVFX').addParm(
                iDS('PTFR0300_t', {
                    'len': 'rhrlen'
                }).addData(iData('rhrRet', '10i0', '')).addData(
                    iData('rhrAvl', '10i0', '')).addData(
                        iData('rhrOftAddIn', '10i0', '')).addData(
                            iData('rhrPid', '7A', '')).addData(
                                iData('rhrPtfId', '7A', '')).addData(
                                    iData('rhrRlsLvl', '6A', '')).addData(
                                        iData('rhrPrdOpt', '4A', '')).addData(
                                            iData('rhrLodId', '4A', '')).
                addData(iData('rhrLdSts', '1A', '')).addData(
                    iData('rhrCvrLtrSts', '1A',
                          '')).addData(iData('rhrOnOrdSts', '1A', '')).addData(
                              iData('rhrSavfSts', '1A', '')).addData(
                                  iData('rhrFilNam', '10A', '')).addData(
                                      iData('rhrFilLibNam', '10A',
                                            '')).addData(
                                                iData('rhrPtfTyp', '1A',
                                                      '')).addData(
                                                          iData(
                                                              'rhrIplAct',
                                                              '1A', '')).
                addData(iData(
                    'rhrActPnd', '1A',
                    '')).addData(iData(
                        'rhrActReq', '1A',
                        '')).addData(iData('rhrPtfRls', '1A', '')).addData(
                            iData('rhrTgtRls', '6A', '')).addData(
                                iData('rhrSpsPtf', '7A', '')).addData(
                                    iData('rhrIplSid', '1A', '')).addData(
                                        iData('rhrMinLvl', '2A', '')).addData(
                                            iData('rhrMaxLvl', '2A', '')).
                addData(iData('rhrFmtInfAvl', '1A', '')).addData(
                    iData('rhrStsDtaTim', '13A',
                          '')).addData(iData('rhrLicGrp', '7A', '')).addData(
                              iData('rhrSpsByPtf', '7A', '')).addData(
                                  iData('rhrSvrIplSrc', '1A', '')).addData(
                                      iData('rhrSvrIplRad', '1A', '')).addData(
                                          iData('rhrCrtDtaTim', '13A',
                                                '')).addData(
                                                    iData(
                                                        'rhrTecRfsPtf', '1A',
                                                        ''))
                # .addData(iData('rhrTmpApyDtaTim', '13A', '')) # V7R2M0 does not has this field
                .addData(iData('rhrOftPreReqRec', '10i0', '')).addData(
                    iData('rhrNbrPreReq', '10i0', '',
                          {'enddo': 'mycnt'})).addData(
                              iData('rhrLenPreReq', '10i0', '')).
                addData(
                    iDS('rhrReqs', {
                        'dim': '999',
                        'dou': 'mycnt'
                    }).addData(iData(
                        'REQUISITE_PRODUCT_ID',
                        '7A',
                        '')).addData(iData(
                            'REQUISITE_PTF_ID',
                            '7A',
                            '')).addData(
                                iData('RELEASE_OF_REQUISITE', '6A',
                                      '')).addData(
                                          iData('REQUISITE_MIN_LEVLE', '2A',
                                                '')).
                    addData(iData('REQUISITE_MAX_LEVLE', '2A', '')).addData(
                        iData('TYPE_OF_REQUISITE', '1A', '')).addData(
                            iData(
                                'REQUISITE_IS_CONDITIONAL', '1A', '')).addData(
                                    iData('REQUISITE_IS_REQUIRED', '1A',
                                          '')).addData(
                                              iData(
                                                  'REQUISITE_OPTION', '4A',
                                                  '')).addData(
                                                      iData(
                                                          'REQUISITE_LOAD_ID',
                                                          '4A', '')))).
            addParm(iData('rcvlen', '10i0', '', {
                'setlen': 'rhrlen'
            })).addParm(
                iDS('Qpz_Rtv_PTF_Info_t').addData(iData(
                    'PTF_ID', '7A',
                    ptf_id)).addData(iData(
                        'PID', '7A', product_id)).addData(
                            iData('Rls_Lvl', '6A', release_level)).addData(
                                iData('CCSID', '10i0', '')).addData(
                                    iData('Close_Files', '1A', '')).addData(
                                        iData('Reserved', '25A', ''))
            ).addParm(iData('fmtnam', '8A', 'PTFR0300')).addParm(
                iDS('ERRC0100_t', {
                    'len': 'errlen'
                }).addData(iData('errRet', '10i0', '')).addData(
                    iData('errAvl', '10i0', '')).addData(
                        iData('errExp', '7A', '',
                              {'setlen': 'errlen'})).addData(
                                  iData('errRsv', '1A', ''))))
    else:
        itool.add(
            iPgm('qpzrtvfx', 'QPZRTVFX').addParm(
                iDS('PTFR0300_t', {
                    'len': 'rhrlen'
                }).addData(iData('rhrRet', '10i0', '')).addData(
                    iData('rhrAvl', '10i0', '')).addData(
                        iData('rhrOftAddIn', '10i0', '')).addData(
                            iData('rhrPid', '7A', '')).addData(
                                iData('rhrPtfId', '7A', '')).addData(
                                    iData('rhrRlsLvl', '6A', '')).addData(
                                        iData('rhrPrdOpt', '4A', '')).addData(
                                            iData('rhrLodId', '4A', '')).
                addData(iData('rhrLdSts', '1A', '')).addData(
                    iData('rhrCvrLtrSts', '1A',
                          '')).addData(iData('rhrOnOrdSts', '1A', '')).addData(
                              iData('rhrSavfSts', '1A', '')).addData(
                                  iData('rhrFilNam', '10A', '')).addData(
                                      iData('rhrFilLibNam', '10A',
                                            '')).addData(
                                                iData('rhrPtfTyp', '1A',
                                                      '')).addData(
                                                          iData(
                                                              'rhrIplAct',
                                                              '1A', '')).
                addData(iData(
                    'rhrActPnd', '1A',
                    '')).addData(iData(
                        'rhrActReq', '1A',
                        '')).addData(iData('rhrPtfRls', '1A', '')).addData(
                            iData('rhrTgtRls', '6A', '')).addData(
                                iData('rhrSpsPtf', '7A', '')).addData(
                                    iData('rhrIplSid', '1A', '')).addData(
                                        iData('rhrMinLvl', '2A', '')).addData(
                                            iData('rhrMaxLvl', '2A', '')).
                addData(iData('rhrFmtInfAvl', '1A', '')).addData(
                    iData('rhrStsDtaTim', '13A',
                          '')).addData(iData('rhrLicGrp', '7A', '')).addData(
                              iData('rhrSpsByPtf', '7A', '')).addData(
                                  iData('rhrSvrIplSrc', '1A', '')).addData(
                                      iData('rhrSvrIplRad', '1A', '')).addData(
                                          iData('rhrCrtDtaTim', '13A', '')).
                addData(iData(
                    'rhrTecRfsPtf', '1A',
                    '')).addData(iData(
                        'rhrTmpApyDtaTim',
                        '13A', '')).addData(
                            iData('rhrOftPreReqRec', '10i0',
                                  '')).addData(
                                      iData('rhrNbrPreReq', '10i0', '',
                                            {'enddo': 'mycnt'})).addData(
                                                iData('rhrLenPreReq', '10i0',
                                                      '')).
                addData(
                    iDS('rhrReqs', {
                        'dim': '999',
                        'dou': 'mycnt'
                    }).addData(iData(
                        'REQUISITE_PRODUCT_ID',
                        '7A',
                        '')).addData(iData(
                            'REQUISITE_PTF_ID',
                            '7A',
                            '')).addData(
                                iData('RELEASE_OF_REQUISITE', '6A',
                                      '')).addData(
                                          iData('REQUISITE_MIN_LEVLE', '2A',
                                                '')).addData(
                                                    iData(
                                                        'REQUISITE_MAX_LEVLE',
                                                        '2A', '')).
                    addData(iData(
                        'TYPE_OF_REQUISITE',
                        '1A',
                        '')).addData(
                            iData(
                                'REQUISITE_IS_CONDITIONAL', '1A', '')).addData(
                                    iData('REQUISITE_IS_REQUIRED', '1A',
                                          '')).addData(
                                              iData(
                                                  'REQUISITE_OPTION', '4A',
                                                  '')).addData(
                                                      iData(
                                                          'REQUISITE_LOAD_ID',
                                                          '4A', '')))).
            addParm(iData('rcvlen', '10i0', '', {
                'setlen': 'rhrlen'
            })).addParm(
                iDS('Qpz_Rtv_PTF_Info_t').addData(iData(
                    'PTF_ID', '7A',
                    ptf_id)).addData(iData(
                        'PID', '7A', product_id)).addData(
                            iData('Rls_Lvl', '6A', release_level)).addData(
                                iData('CCSID', '10i0', '')).addData(
                                    iData('Close_Files', '1A', '')).addData(
                                        iData('Reserved', '25A', ''))
            ).addParm(iData('fmtnam', '8A', 'PTFR0300')).addParm(
                iDS('ERRC0100_t', {
                    'len': 'errlen'
                }).addData(iData('errRet', '10i0', '')).addData(
                    iData('errAvl', '10i0', '')).addData(
                        iData('errExp', '7A', '',
                              {'setlen': 'errlen'})).addData(
                                  iData('errRsv', '1A', ''))))
    itool.call(itransport)
    qpzrtvfx = itool.dict_out('qpzrtvfx')
    ibmi_util.log_debug(str(qpzrtvfx), sys._getframe().f_code.co_name)
    res_list = []
    if 'success' in qpzrtvfx:
        ptfr0300_t = qpzrtvfx['PTFR0300_t']
        ibmi_util.log_debug(str(ptfr0300_t), sys._getframe().f_code.co_name)
        if int(ptfr0300_t['rhrNbrPreReq']) > 0:
            res = ptfr0300_t['rhrReqs']
            if isinstance(res, dict):
                res_list.append(res)
            elif isinstance(res, list):
                res_list = res
            ibmi_util.log_debug(str(res_list), sys._getframe().f_code.co_name)
        return 0, res_list, qpzrtvfx['success']
    else:
        return -1, res_list, qpzrtvfx['error']
Beispiel #11
0
def get_system_value(imodule, sysvaluename, expect=None, check='equal'):
    sysvalue = dict()
    sysvalue['name'] = sysvaluename.strip().upper()
    for value in sysval_array:
        for key in value['key']:
            if (sysvalue['name'] == key):
                sysvalue['type'] = value['type']
                if expect is not None:
                    sysvalue['expect'] = expect
                    if not check:
                        check = 'equal'
                    sysvalue['check'] = check
                break

    if sysvalue.get('type') is None:
        return -1, sysvalue, 'Unknown System Value Name'

    conn = imodule.get_connection()
    itransport = DatabaseTransport(conn)
    itool = iToolKit()
    itool.add(
        iPgm('qwcrsval', 'QWCRSVAL', {
            'lib': 'QSYS'
        }).addParm(
            iDS('QWCRSVAL_t', {
                'len': 'qwcrslen',
                'io': 'out'
            })
            # Number of system values returned
            .addData(iData('count', '10i0', ''))
            # Offset to system value information table
            .addData(iData('offset', '10i0',
                           '')).addData(iData('sysvalue', '10A',
                                              ''))  # System value
            # Type of data(C--character / B--binary / blank--not available.)
            .addData(iData('dataType', '1A', ''))
            # Information status(blank--The information was available.)
            .addData(iData('infoStatus', '1A',
                           '')).addData(iData('length', '10i0',
                                              ''))  # Length of data
            # Returned system value data
            .addData(iData('data', sysvalue['type'], ''))).addParm(
                iData('rcvlen', '10i0', '', {'setlen': 'qwcrslen'})).addParm(
                    iData('count', '10i0', '1')).addParm(
                        iData('valueName', '10A', sysvalue['name'])).addParm(
                            iDS('ERRC0100_t', {
                                'len': 'errlen'
                            }).addData(
                                iData('bytesProvided', '10i0', '',
                                      {'setlen': 'errlen'})).addData(
                                          iData('bytesAvailable', '10i0',
                                                '')).addData(
                                                    iData(
                                                        'messageID', '7A',
                                                        '')).addData(
                                                            iData(
                                                                'reserved',
                                                                '1A', ''))))
    itool.call(itransport)

    qwcrsval = itool.dict_out('qwcrsval')
    ibmi_util.log_debug(str(qwcrsval), sys._getframe().f_code.co_name)

    if 'success' in qwcrsval:
        qwcrsval_t = qwcrsval['QWCRSVAL_t']
        ibmi_util.log_debug(str(qwcrsval_t), sys._getframe().f_code.co_name)
        if int(qwcrsval_t['count']) > 0:
            sysvalue['value'] = qwcrsval_t['data']
            if 'expect' in sysvalue:
                sysvalue['compliant'] = chk_system_value(
                    sysvalue['value'], sysvalue['expect'], check)
            ibmi_util.log_debug(str(sysvalue), sys._getframe().f_code.co_name)
        return 0, sysvalue, qwcrsval['success']
    return -1, sysvalue, qwcrsval['error']
from itoolkit import iCmd, iData, iPgm, iToolKit
from itoolkit.db2.idb2call import iDB2Call

itransport = iDB2Call()
itool = iToolKit()

itool.add(iPgm('my_key', 'STRJVM', {'error': 'on', 'lib': 'QGPL'}))

itool.call(itransport)
def test_pgm_error(transport):
    """Test calling program which doesn't exist returns an error"""

    transport.set_out("""<?xml version="1.0" ?>
<xmlservice>
<pgm error="fast" name="ZZCALLNOT" var="zzcall">
    <error>*** error XMLSERVICE ZZCALLNOT</error>
    <version>XML Toolkit 1.9.9</version>
    <error>
        <errnoxml>1100016</errnoxml>
        <xmlerrmsg>XML run pgm failed</xmlerrmsg>
        <xmlhint><pgm error="fast" name="ZZCALLNOT" var="zzcall"><parm io="b</xmlhint>
    </error>
    <error>
        <errnoxml>1000005</errnoxml>
        <xmlerrmsg>PASE resolve failed</xmlerrmsg>
        <xmlhint>ZZCALLNOT</xmlhint>
    </error>
    <error>
        <errnoxml>1100016</errnoxml>
        <xmlerrmsg>XML run pgm failed</xmlerrmsg>
        <xmlhint><pgm error="fast" name="ZZCALLNOT" var="zzcall"><parm io="b</xmlhint>
    </error>
    <jobinfo>
    <jobipc>*na</jobipc>
    <jobipcskey>FFFFFFFF</jobipcskey>
    <jobname>QSQSRVR</jobname>
    <jobuser>QUSER</jobuser>
    <jobnbr>570746</jobnbr>
    <jobsts>*ACTIVE</jobsts>
    <curuser>KADLER</curuser>
    <ccsid>37</ccsid>
    <dftccsid>37</dftccsid>
    <paseccsid>819</paseccsid>
    <langid>ENU</langid>
    <cntryid>US</cntryid>
    <sbsname>QSYSWRK</sbsname>
    <sbslib>QSYS</sbslib>
    <curlib/>
    <syslibl>QSYS QSYS2 QHLPSYS QUSRSYS</syslibl>
    <usrlibl>QGPL QTEMP QDEVELOP QBLDSYS QBLDSYSR</usrlibl>
    <jobcpffind>see log scan, not error list</jobcpffind>
    </jobinfo>
</pgm>
</xmlservice>
""")  # noqa E501

    tk = iToolKit()
    tk.add(iPgm('zzcallnot', 'ZZCALLNOT', {'lib': 'XMLSERVICE'}))

    tk.call(transport)

    zzcallnot = tk.dict_out('zzcallnot')

    for k, v in zzcallnot.items():
        if not k.startswith('error'):
            continue

        if 'errnoxml' not in v:
            continue

        assert (v['errnoxml'] in ('1100005', '1100016'))