def test_parse_v20(self):
        res = ucs.parse(getpath('../tests/response/clispec-sample-2.0.xml'))
        self.assertEqual('svc', res.array_type)
        self.assertEqual([('svc', '6.3')], res.array_infos)
        self.assertEqual(['CMMV', 'EFFSG', 'EFFST'], res.errors)
        self.assertEqual(sorted(['for_test2', 'for_test3', 'sainfo', 'satask',
                                 'svcinfo', 'svcinfo_0', 'svcinfo_1',
                                 'svctask', 'svctask_0', 'svctask_1']),
                         sorted(dir(res)))

        cmd_lscluster = res.svcinfo.lscluster
        self.assertEqual(['filtervalue', 'nohdr', 'bytes', 'delim',
                           'filtervalue_0', 'cluster_id_or_name'],
                         list(cmd_lscluster.params.keys()))
        self.assertEqual('filtervalue_0', cmd_lscluster.params[
                          'filtervalue_0'].name)
        self.assertEqual(
            '-filtervalue?', cmd_lscluster.params['filtervalue_0'].realname)
        self.assertEqual(False, cmd_lscluster.params[
                          'cluster_id_or_name'].with_name)
        self.assertEqual(True, cmd_lscluster.params[
                          'cluster_id_or_name'].with_value)

        cmd_mkhost = res.svctask.mkhost
        self.assertEqual(['name', 'hbawwpn', 'iscsiname', 'iogrp', 'mask',
                          'force', 'type'], list(cmd_mkhost.params.keys()))
        self.assertEqual(['hbawwpn', 'iscsiname'], [
                          p.name for p in cmd_mkhost.param_choices[0].params])
        self.assertEqual(True, cmd_mkhost.param_choices[0].required)
        self.assertEqual(False, cmd_mkhost.params['iogrp'].required)
        self.assertEqual(True, cmd_mkhost.params['force'].with_name)
        self.assertEqual(False, cmd_mkhost.params['force'].with_value)
        self.assertEqual(['hpux', 'tpgs', 'generic'],
                          cmd_mkhost.params['type'].options)
 def test_parse_empty_param_name(self):
     self.assertRaisesEx(ucs.CLISpecError, ucs.parse,
                         StringIO(SPEC_EMPTY_PARAM_NAME))
     expect_ = ucs.parse(StringIO(SPEC_EMPTY_PARAM_NAME), flexible=True)
     self.assertEqual(
         5, len(expect_.cmds['svcinfo'].cmds['lscluster'].params))
     self.assertEqual(0, len(expect_.cmds['svcinfo'].cmds[
                       'lscluster'].param_choices))
    def test_parse_v20_cmd(self):
        res = ucs.parse(getpath('../tests/response/clispec-sample-2.0.xml'))

        cmd = res.svcinfo.lscluster
        self.assertEqual(ucs.SVCCommand, type(cmd))
        self.assertTrue(ucr.is_svc_response(cmd.resp_helper))
        expect_ = r'''Help on lscluster(**kwargs): Returns a concise list or a detailed view of a cluster. >>- svcinfo -- -- lscluster -- -->
>--
It is wrapper for CLI "svcinfo lscluster".

Parameters:
	filtervalue:
	nohdr:
	bytes:
	delim:
	filtervalue_0:
	cluster_id_or_name:'''
        self.assertEqual(expect_, cmd.__doc__)

        cmd = res.svctask.mkhost
        self.assertEqual(ucs.SVCCommand, type(cmd))
        self.assertTrue(ucr.is_svc_response(cmd.resp_helper))

        cmd = res.for_test2.cmd1
        self.assertEqual(ucs.CLICommand, type(cmd))
        self.assertEqual(None, cmd.resp_helper)
        self.assertEqual(['optiontype', 'optiontype_0', 'force', 'noforce'],
                         list(cmd.params.keys()))
        self.assertEqual(
            'for_test2 cmd1 --optiontype?? o1',
            cmd(nothing, {
                'optiontype': 'o1',
                'xsf.check_return_code': False
            }))
        self.assertEqual(
            'for_test2 cmd1 --optiontype tryonce',
            cmd(nothing, {
                'optiontype_0': 'tryonce',
                'xsf.check_return_code': False
            }))
        self.assertRaisesEx(ucs.CLISpecError, cmd, nothing,
                            dict(optiontype_0='bad'))

        cmd = res.for_test3
        self.assertEqual(ucs.CLICommand, type(cmd))
        self.assertEqual(None, cmd.resp_helper)
        self.assertEqual(['network', 'interface', 'g', 'force'],
                         list(cmd.params.keys()))
        self.assertEqual(
            'for_test3 n1 inf1 -g g1 --force %s' %
            ucs.show_return_code_if_fail(),
            cmd(nothing,
                dict(network='n1', interface='inf1', g='g1', force=None)))
        self.assertRaisesEx(ucs.CLISpecError, cmd, nothing,
                            dict(interface='inf1', g='g1'))
 def test_cmd_input(self):
     res = ucs.parse(getpath('../tests/response/svc-6.3.xml'))
     cmd = res.svcinfo.lsnode
     self.assertEqual(ucs.SVCCommand, type(cmd))
     self.assertTrue(ucr.is_svc_response(cmd.resp_helper))
     self.assertEqual('svcinfo lsnode -delim , 1 %s' %
                       ucs.show_return_code_if_fail(),
                      cmd(nothing, dict(object='1')))
     self.assertEqual('svcinfo lsnode -delim , 1 %s' %
                      ucs.show_return_code_if_fail(),
                      cmd(nothing, {'object': '1', 'xsf.ignore': '1'}))
     self.assertEqual('svcinfo lsnode -delim , 1 %s' %
                      ucs.show_return_code_if_fail(),
                      cmd(nothing, {'object': '1', 'badparam': '1',
                                    'xsf.flexible': True}))
     self.assertRaisesEx(ucs.CLISpecError, cmd, nothing,
                         dict(object='1', badparam='1'))
 def test_parse_svc_5_1(self):
     res = ucs.parse(getpath('../tests/response/svc-5.1.xml'))
     self.assertEqual('svc', res.array_type)
     self.assertEqual([('svc', '5.1')], res.array_infos)
     self.assertEqual(['CMMV', 'EFFSG', 'EFFST'], res.errors)
     self.assertEqual(sorted(['svcservicemodeinfo', 'svcservicemodetask',
                              'svcinfo', 'svctask']), sorted(dir(res)))
     self.assertEqual(14, len(dir(res.svcservicemodeinfo)))
     self.assertEqual(6, len(dir(res.svcservicemodetask)))
     self.assertEqual(88, len(dir(res.svcinfo)))
     self.assertEqual(122, len(dir(res.svctask)))
     self.assertEqual(ucr.SVCResponse, res.svcinfo.lscluster.resp_helper)
     self.assertEqual(['-filtervalue', '-nohdr', '-bytes', '-delim',
                       'cluster', 'cluster_id', 'cluster_name'],
                      [v.realname for _, v in
                       res.svcinfo.lscluster.params.items()])
     self.assertEqual(ucr.SVCResponse, res.svctask.mkmdiskgrp.resp_helper)
 def test_parse_empty_cmd_name(self):
     self.assertRaisesEx(ucs.CLISpecError, ucs.parse,
                         StringIO(SPEC_EMPTY_CMD_NAME))
     expect_ = ucs.parse(StringIO(SPEC_EMPTY_CMD_NAME), flexible=True)
     self.assertFalse(expect_.cmds['svcinfo'].cmds)
 def test_parse_no_cmd_name(self):
     self.assertRaisesEx(ucs.CLISpecError, ucs.parse,
                         StringIO(SPEC_NO_CMD_NAME))
     expect_ = ucs.parse(StringIO(SPEC_NO_CMD_NAME), flexible=True)
     self.assertTrue(expect_.cmds['svcinfo'].cmds['lscluster'])
 def test_parse_no_exe_name(self):
     self.assertRaisesEx(ucs.CLISpecError, ucs.parse,
                         StringIO(SPEC_NO_EXE_NAME))
     expect_ = ucs.parse(StringIO(SPEC_NO_EXE_NAME), flexible=True)
     self.assertFalse(expect_.cmds)
 def test_parse_no_error(self):
     res = ucs.parse(StringIO(SPEC_NO_ERROR))
     self.assertEqual([''], res.errors)
 def test_parse_no_array_type(self):
     self.assertRaisesEx(ucs.CLISpecError, ucs.parse,
                         StringIO(SPEC_NO_ARRAY_TYPE))
     expect_ = ucs.parse(StringIO(SPEC_NO_ARRAY_TYPE), flexible=True)
     self.assertTrue(expect_.cmds)
 def test_parse_no_version(self):
     self.assertRaisesEx(ucs.CLISpecError, ucs.parse,
                         StringIO(SPEC_NO_VERSION))
     expect_ = ucs.parse(StringIO(SPEC_NO_VERSION), flexible=True)
     self.assertTrue(expect_.cmds)
def parse_cli_spec(conn, source):
    spec = parse(source, flexible=conn.flexible)
    # make sure there is CLI command defined in CLI spec
    return spec if spec and spec.cmds else None