예제 #1
0
 def test_rpcerror_repr(self):
     rsp = etree.XML(rpc_xml)
     obj = RpcError(rsp=rsp)
     err = 'RpcError(severity: error, bad_element: bgp, ' \
           'message: syntax error)'
     self.assertEqual(str, type(obj.__repr__()))
     self.assertEqual(obj.__repr__(), err)
예제 #2
0
 def test_rpcerror_repr(self):
     rsp = etree.XML(rpc_xml)
     obj = RpcError(rsp=rsp)
     err = 'RpcError(severity: error, bad_element: bgp, ' \
           'message: syntax error)'
     self.assertEqual(str, type(obj.__repr__()))
     self.assertEqual(obj.__repr__(), err)
예제 #3
0
 def test_config_mode_close_configuration_ex(self, mock_exec):
     self.dev.rpc.open_configuration = MagicMock()
     ex = RpcError(rsp='ok')
     ex.message = 'Configuration database is not open'
     self.dev.rpc.close_configuration = MagicMock(side_effect=ex)
     with Config(self.dev, mode='batch') as conf:
         conf.load('conf', format='set')
     self.assertTrue(self.dev.rpc.close_configuration.called)
예제 #4
0
 def test_config_mode_close_configuration_ex(self, mock_exec):
     self.dev.rpc.open_configuration = MagicMock()
     ex = RpcError(rsp='ok')
     ex.message = 'Configuration database is not open'
     self.dev.rpc.close_configuration = MagicMock(side_effect=ex)
     try:
         with Config(self.dev, mode='batch') as conf:
             conf.load('conf', format='set')
     except Exception as ex:
         self.assertTrue(isinstance(ex, RpcError))
     self.assertTrue(self.dev.rpc.close_configuration.called)
예제 #5
0
 def test_config_commit_check_exception_RpcError(self):
     ex = RpcError(rsp='ok')
     self.conf.rpc.commit_configuration = MagicMock(side_effect=ex)
     self.assertTrue(self.conf.commit_check())
     import xml.etree.ElementTree as ET
     xmldata = """<data><company name="Juniper">
         <code>pyez</code>
         <year>2013</year>
         </company></data>"""
     root = ET.fromstring(xmldata)
     el = root.find('company')
     ex = RpcError(rsp=el)
     self.conf.rpc.commit_configuration = MagicMock(side_effect=ex)
     self.assertRaises(CommitError, self.conf.commit_check)
예제 #6
0
def get_facts(device):
    """
    Gathers facts from the <get-chassis-inventory/> RPC.
    """
    rsp = device.rpc.get_chassis_inventory(normalize=True)
    if rsp.tag == 'error':
        raise RpcError()

    if (rsp.tag == 'output'
            and rsp.text.find('can only be used on the master routing engine')
            != -1):
        # An error; due to the fact that this RPC can only be executed on the
        # master Routing Engine
        raise ConnectNotMasterError()

    RE_hw_mi = False
    if rsp.tag == 'multi-routing-engine-results':
        RE_hw_mi = True

    serialnumber = (
        rsp.findtext('.//chassis[1]/serial-number')
        or rsp.findtext('.//chassis-module[name="Backplane"]/serial-number')
        or rsp.findtext('.//chassis-module[name="Midplane"]/serial-number'))

    return {
        'RE_hw_mi': RE_hw_mi,
        'serialnumber': serialnumber,
    }
예제 #7
0
 def _mock_manager_ifd_style_switch(self, *args, **kwargs):
     if args:
         if (args[0].tag == 'command'):
             raise RpcError()
         else:
             return self._read_file('ifd_style_switch_' + args[0].tag +
                                    '.xml')
예제 #8
0
 def _mock_manager_ifd_style_switch(self, *args, **kwargs):
     if args:
         if args[0].tag == "command":
             raise RpcError()
         else:
             return self._read_file("ifd_style_switch_" + args[0].tag +
                                    ".xml")
 def _mock_manager_none(self, *args, **kwargs):
     if args:
         if args[0].tag == 'get-ethernet-switching-table-information':
             raise RpcError()
         else:
             return self._read_file('switch_style_none_' + args[0].tag +
                                    '.xml')
예제 #10
0
 def _mock_manager_vc(self, *args, **kwargs):
     if args:
         if (args[0].tag == 'command' and args[0].text
                 == 'show version invoke-on all-routing-engines'):
             raise RpcError()
         else:
             return self._read_file('sw_info_vc_' + args[0].tag + '.xml')
예제 #11
0
 def _mock_manager_current_re_jdm(self, *args, **kwargs):
     if args:
         if (args[0].tag == 'get-interface-information'):
             raise RpcError()
         else:
             return self._read_file('current_re_jdm_' + args[0].tag +
                                    '.xml')
예제 #12
0
 def _mock_manager_srx_cluster(self, *args, **kwargs):
     if args:
         if args[0].tag == "command":
             raise RpcError()
         else:
             return self._read_file("sw_info_srx_cluster_" + args[0].tag +
                                    ".xml")
예제 #13
0
 def _mock_manager_no_version(self, *args, **kwargs):
     if args:
         if args[0].tag == "command":
             raise RpcError()
         else:
             return self._read_file("sw_info_no_version_" + args[0].tag +
                                    ".xml")
예제 #14
0
 def _mock_manager_no_version(self, *args, **kwargs):
     if args:
         if (args[0].tag == 'command'):
             raise RpcError()
         else:
             return self._read_file('sw_info_no_version_' + args[0].tag +
                                    '.xml')
예제 #15
0
 def test_sw_safe_copy_cleanfs_fail(self, mock_execute):
     mock_execute.side_effect = RpcError()
     package = 'foo.tgz'
     self.assertFalse(
         self.sw.safe_copy(package,
                           progress=self._myprogress,
                           cleanfs=True,
                           checksum='96a35ab371e1ca10408c3caecdbd8a67'))
예제 #16
0
 def _mock_manager_nfx(self, *args, **kwargs):
     if args:
         if (args[0].tag == 'command'):
             raise RpcError()
         elif (args[0].tag == 'get-software-information'
               and args[0].find('./*') is None):
             return True
         else:
             return self._read_file('sw_info_nfx_' + args[0].tag + '.xml')
예제 #17
0
 def test_config_load_try_load_exception(self, mock_open):
     ex = RpcError(rsp=etree.fromstring(("""<load-configuration-results>
             <rpc-error>
             <error-severity>error</error-severity>
             <error-message>syntax error</error-message>
             </rpc-error>
             </load-configuration-results>""")))
     self.conf.rpc.load_config = MagicMock(side_effect=ex)
     self.assertRaises(RpcError, self.conf.load, path='config.conf')
 def _mock_manager_vc(self, *args, **kwargs):
     if args:
         if (args[0].tag == 'command' and
            args[0].text == 'show version invoke-on all-routing-engines'):
             raise RpcError()
         elif args[0].tag == 'file-show' and args[0].xpath('filename')[0].text == '/usr/share/cevo/cevo_version':
             raise RpcError
         else:
             return self._read_file('sw_info_vc_' + args[0].tag + '.xml')
예제 #19
0
 def _mock_manager_gnf(self, *args, **kwargs):
     if args:
         if args[0].tag == "command":
             raise RpcError()
         elif (args[0].tag == "get-software-information"
               and args[0].find("./*") is None):
             return True
         else:
             return self._read_file("sw_info_gnf_" + args[0].tag + ".xml")
예제 #20
0
 def _issu_test_helper(self):
     self.sw.log = MagicMock()
     self.dev.rpc.request_shell_execute = MagicMock()
     self.dev.rpc = MagicMock()
     self.dev.rpc.get_routing_task_replication_state.return_value = self._read_file(
         "get-routing-task-replication-state.xml")
     self.dev.rpc.check_in_service_upgrade.return_value = self._read_file(
         "check-in-service-upgrade.xml")
     self.dev.rpc.request_shell_execute.side_effect = RpcError(rsp="not ok")
예제 #21
0
 def test_sw_remote_checksum_not_found(self, mock_execute):
     xml = '''<rpc-error>
     <error-severity>error</error-severity>
     <error-message>
     md5: /var/tmp/123: No such file or directory
     </error-message>
     </rpc-error>'''
     mock_execute.side_effect = RpcError(rsp=etree.fromstring(xml))
     package = 'test.tgz'
     self.assertEqual(self.sw.remote_checksum(package), None)
예제 #22
0
 def _mock_manager_jdm(self, *args, **kwargs):
     if args:
         if args[0].tag == "command":
             if args[0].text == "show version invoke-on all-routing-engines":
                 raise RpcError()
             else:
                 return self._read_file("sw_info_jdm_command_" +
                                        args[0].text + ".xml")
         else:
             return self._read_file("sw_info_jdm_" + args[0].tag + ".xml")
예제 #23
0
 def _mock_manager_current_re_jdm(self, *args, **kwargs):
     if args:
         if args[0].tag == 'file-show' and args[0].xpath(
                 'filename')[0].text == '/usr/share/cevo/cevo_version':
             raise RpcError
         elif (args[0].tag == 'get-interface-information'):
             raise RpcError()
         else:
             return self._read_file('current_re_jdm_' + args[0].tag +
                                    '.xml')
예제 #24
0
 def test__enter__batch_exception_RpcError(self):
     rpc_xml = """<rpc-error>
         <error-severity>error</error-severity>
         <error-message>syntax error</error-message>
         </rpc-error>"""
     rsp = etree.XML(rpc_xml)
     self.conf.rpc.open_configuration = \
         MagicMock(side_effect=RpcError(rsp=rsp))
     self.assertRaises(RpcError, Config.__enter__,
                       Config(self.dev, mode='batch'))
예제 #25
0
 def test_sw_remote_checksum_not_rpc_error(self, mock_execute):
     xml = '''<rpc-error>
     <error-severity>error</error-severity>
     <error-message>
     something else!
     </error-message>
     </rpc-error>'''
     mock_execute.side_effect = RpcError(rsp=etree.fromstring(xml))
     package = 'test.tgz'
     with self.assertRaises(RpcError):
         self.sw.remote_checksum(package)
예제 #26
0
 def _mock_manager(self, *args, **kwargs):
     if kwargs and "ignore_warning" not in kwargs:
         # Little hack for mocked execute
         if "dev_timeout" in kwargs:
             if (
                 args
                 and args[0].findtext("package-name")
                 == "/var/tmp/test_no_result.tgz"
             ):
                 return self._read_file(args[0].tag + ".no_result.xml")
             elif (
                 args
                 and args[0].findtext("package-name")
                 == "/var/tmp/test_no_mx80_packages.tgz"
             ):
                 return self._read_file(args[0].tag + ".no_mx80_packages.xml")
             else:
                 return self._read_file(args[0].tag + ".xml")
         if "path" in kwargs:
             if kwargs["path"] == "/packages":
                 return self._read_file("file-list_dir.xml")
         if args and self._testMethodName == "test_sw_zeroize":
             return self._read_file("request-zeroize.xml")
         device_params = kwargs["device_params"]
         device_handler = make_device_handler(device_params)
         session = SSHSession(device_handler)
         return Manager(session, device_handler)
     elif args:
         if self._testMethodName == "test_sw_reboot_output_in_reply":
             return self._read_file("request-reboot-output.xml")
         elif args[0].find("at") is not None:
             return self._read_file("request-reboot-at.xml")
         elif self._testMethodName == "test_sw_check_pending_install":
             if args[0].text == "request-package-check-pending-install":
                 return self._read_file(
                     "request-package-check-pending-install-error.xml"
                 )
         elif (
             self._testMethodName
             == "test_sw_check_pending_install_RpcError_continue"
         ):
             if args[0].text == "request-package-check-pending-install":
                 xml = """<rpc-error>
                     <error-type>protocol</error-type>
                     <error-tag>operation-failed</error-tag>
                     <error-severity>error</error-severity>
                     <error-message>syntax error</error-message>
                     <error-info>
                     <bad-element>request-package-check-pendings-install</bad-element>
                     </error-info>
                     </rpc-error>"""
                 return RpcError(rsp=etree.fromstring(xml))
         else:
             return self._read_file(args[0].tag + ".xml")
예제 #27
0
 def _mock_manager_current_re_jdm(self, *args, **kwargs):
     if args:
         if (args[0].tag == "file-show"
                 and args[0].xpath("filename")[0].text
                 == "/usr/share/cevo/cevo_version"):
             raise RpcError
         elif args[0].tag == "get-interface-information":
             raise RpcError()
         else:
             return self._read_file("current_re_jdm_" + args[0].tag +
                                    ".xml")
예제 #28
0
 def _mock_manager_vc(self, *args, **kwargs):
     if args:
         if (args[0].tag == "command" and args[0].text
                 == "show version invoke-on all-routing-engines"):
             raise RpcError()
         elif (args[0].tag == "file-show"
               and args[0].xpath("filename")[0].text
               == "/usr/share/cevo/cevo_version"):
             raise RpcError
         else:
             return self._read_file("sw_info_vc_" + args[0].tag + ".xml")
예제 #29
0
 def test_config_diff_exception_severity_warning_still_raise(self):
     rpc_xml = '''
         <rpc-error>
         <error-severity>warning</error-severity>
         <error-info><bad-element>bgp</bad-element></error-info>
         <error-message>statement not found</error-message>
     </rpc-error>
     '''
     rsp = etree.XML(rpc_xml)
     self.conf.rpc.get_configuration = MagicMock(
         side_effect=RpcError(rsp=rsp))
     self.assertRaises(RpcError, self.conf.diff)
 def _mock_manager_mx_non_master_re(self, *args, **kwargs):
     if args:
         if args[0].tag == 'get-ethernet-switching-table-information':
             raise RpcError()
         elif args[0].tag == 'command':
             xml = """
                 <xnm:error xmlns="http://xml.juniper.net/xnm/1.1/xnm" xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm">
                     <message>the l2-learning subsystem is not running</message>
                     <reason>
                         <daemon>l2-learning</daemon>
                         <process-not-running/>
                     </reason>
                 </xnm:error>
             """
             rsp = etree.XML(xml)
             err = RpcError(rsp=rsp)
             err.rpc_error['bad_element'] = 'none'
             err.rpc_error['message'] = 'the l2-learning subsystem is not running'
             raise err
         else:
             return None
 def _mock_manager_ptx(self, *args, **kwargs):
     if args:
         if args[0].tag == 'get-ethernet-switching-table-information':
             raise RpcError()
         elif args[0].tag == 'command':
             xml = """
                 <rpc-error>
                     <error-type>protocol</error-type>
                     <error-tag>operation-failed</error-tag>
                     <error-severity>error</error-severity>
                     <error-message>syntax error, expecting &lt;command&gt;</error-message>
                     <error-info>
                         <bad-element>bridge</bad-element>
                     </error-info>
                 </rpc-error>
             """
             rsp = etree.XML(xml)
             err = RpcError(rsp=rsp)
             err.rpc_error['bad_element'] = 'bridge'
             raise err
         else:
             return None
 def _mock_manager_ptx(self, *args, **kwargs):
     if args:
         if args[0].tag == 'get-ethernet-switching-table-information':
             raise RpcError()
         elif args[0].tag == 'command':
             xml = """
                 <rpc-error>
                     <error-type>protocol</error-type>
                     <error-tag>operation-failed</error-tag>
                     <error-severity>error</error-severity>
                     <error-message>syntax error, expecting &lt;command&gt;</error-message>
                     <error-info>
                         <bad-element>bridge</bad-element>
                     </error-info>
                 </rpc-error>
             """
             rsp = etree.XML(xml)
             err = RpcError(rsp=rsp)
             err.rpc_error['bad_element'] = 'bridge'
             raise err
         else:
             return None
예제 #33
0
 def test_config_diff_exception_severity_warning(self):
     rpc_xml = '''
         <rpc-error>
         <error-severity>warning</error-severity>
         <error-info><bad-element>bgp</bad-element></error-info>
         <error-message>mgd: statement must contain additional statements</error-message>
     </rpc-error>
     '''
     rsp = etree.XML(rpc_xml)
     self.conf.rpc.get_configuration = MagicMock(
         side_effect=RpcError(rsp=rsp))
     self.assertEqual(self.conf.diff(),
                      "Unable to parse diff from response!")
예제 #34
0
 def test_rpcerror_repr(self):
     rsp = etree.XML('<root><a>test</a></root>')
     obj = RpcError(rsp=rsp)
     self.assertEquals(str, type(obj.__repr__()))
     self.assertEqual(obj.__repr__(), '<root>\n  <a>test</a>\n</root>\n')