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)
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)
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)
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)
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, }
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_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')
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')
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')
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")
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")
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')
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'))
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')
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')
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")
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")
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)
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")
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')
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'))
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)
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")
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")
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")
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 <command></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 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!")
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')