Beispiel #1
0
    def __init__(self, device_handler):
        capabilities = Capabilities(device_handler.get_capabilities())
        Session.__init__(self, capabilities)
        self._host = None
        self._host_keys = paramiko.HostKeys()
        self._transport = None
        self._connected = False
        self._channel = None
        self._channel_id = None
        self._channel_name = None
        self._buffer = StringIO()
        # parsing-related, see _parse()
        self._device_handler = device_handler
        self._parsing_state10 = 0
        self._parsing_pos10 = 0
        self._parsing_pos11 = 0
        self._parsing_state11 = 0
        self._expchunksize = 0
        self._curchunksize = 0
        self._inendpos = 0
        self._size_num_list = []
        self._message_list = []
        self._closing = threading.Event()

        self.logger = SessionLoggerAdapter(logger, {'session': self})
Beispiel #2
0
 def test_get_with_defaults_missing_capability(self, mock_request):
     session = ncclient.transport.SSHSession(self.device_handler)
     session._server_capabilities = Capabilities([])
     obj = Get(session, self.device_handler, raise_mode=RaiseMode.ALL)
     self.assertRaises(MissingCapabilityError,
                       obj.request,
                       with_defaults='report-all')
Beispiel #3
0
 def test_rpc_capability_error(self, mock_thread, mock_send):
     device_handler = manager.make_device_handler({'name': 'junos'})
     capabilities = Capabilities(device_handler.get_capabilities())
     session = ncclient.transport.Session(capabilities)
     session._server_capabilities = [':running']
     obj = RPC(session, device_handler, raise_mode=RaiseMode.ALL, timeout=0)
     obj._assert(':running')
     self.assertRaises(MissingCapabilityError, obj._assert, ':candidate')
Beispiel #4
0
 def test_get_config_with_defaults_missing_capability(self, mock_request):
     session = ncclient.transport.SSHSession(self.device_handler)
     session._server_capabilities = Capabilities([])
     obj = GetConfig(session, self.device_handler, raise_mode=RaiseMode.ALL)
     source = 'candidate'
     self.assertRaises(MissingCapabilityError,
                       obj.request,
                       source,
                       with_defaults='explicit')
Beispiel #5
0
 def test_rpc_timeout_error(self, mock_thread, mock_send):
     device_handler = manager.make_device_handler({'name': 'junos'})
     capabilities = Capabilities(device_handler.get_capabilities())
     session = ncclient.transport.Session(capabilities)
     obj = RPC(session, device_handler, raise_mode=RaiseMode.ALL, timeout=0)
     reply = RPCReply(xml1)
     obj.deliver_reply(reply)
     node = new_ele("commit")
     sub_ele(node, "confirmed")
     mock_thread.return_value = False
     self.assertRaises(TimeoutExpiredError, obj._request, node)
Beispiel #6
0
 def parse(raw):
     "Returns tuple of (session-id (str), capabilities (Capabilities)"
     sid, capabilities = 0, []
     root = to_ele(raw)
     for child in root.getchildren():
         if child.tag == qualify("session-id") or child.tag == "session-id":
             sid = child.text
         elif child.tag == qualify("capabilities") or child.tag == "capabilities" :
             for cap in child.getchildren():
                 if cap.tag == qualify("capability") or cap.tag == "capability":
                     capabilities.append(cap.text)
     return sid, Capabilities(capabilities)
Beispiel #7
0
    def test_rpc_rpcerror(self, mock_thread, mock_send):
        device_handler = manager.make_device_handler({'name': 'junos'})
        capabilities = Capabilities(device_handler.get_capabilities())
        session = ncclient.transport.Session(capabilities)
        obj = RPC(session, device_handler, raise_mode=RaiseMode.ALL, timeout=0)
        reply = RPCReply(xml1)
        obj._reply = reply
        node = new_ele("commit")
        sub_ele(node, "confirmed")

        err = RPCError(to_ele(xml2))
        obj.deliver_error(err)
        self.assertRaises(RPCError, obj._request, node)
Beispiel #8
0
 def test_rpc_async(self, mock_thread, mock_send):
     device_handler = manager.make_device_handler({'name': 'junos'})
     capabilities = Capabilities(device_handler.get_capabilities())
     session = ncclient.transport.Session(capabilities)
     obj = RPC(session,
               device_handler,
               raise_mode=RaiseMode.ALL,
               timeout=0,
               async=True)
     reply = RPCReply(xml1)
     obj._reply = reply
     node = new_ele("commit")
     result = obj._request(node)
     self.assertEqual(result, obj)
Beispiel #9
0
 def __init__(self, device_handler):
     capabilities = Capabilities(device_handler.get_capabilities())
     Session.__init__(self, capabilities)
     self._host_keys = paramiko.HostKeys()
     self._transport = None
     self._connected = False
     self._channel = None
     self._channel_id = None
     self._channel_name = None
     self._buffer = StringIO()  # for incoming data
     # parsing-related, see _parse()
     self._parsing_state = 0
     self._parsing_pos = 0
     self._device_handler = device_handler
Beispiel #10
0
    def test_get_with_defaults_not_supported(self, mock_request):
        session = ncclient.transport.SSHSession(self.device_handler)
        session._server_capabilities = Capabilities([
            "urn:ietf:params:netconf:capability:with-defaults:1.0"
            "?basic-mode=explicit"
            "&also-supported=report-all,trim"
        ])
        obj = Get(session, self.device_handler, raise_mode=RaiseMode.ALL)

        expected_error = (
            "Invalid 'with-defaults' mode 'report-all-tagged'; the server "
            "only supports the following: explicit, report-all, trim")
        self.assertRaisesRegexp(WithDefaultsError,
                                expected_error,
                                obj.request,
                                with_defaults='report-all-tagged')
Beispiel #11
0
    def __init__(self, device_handler):
        capabilities = Capabilities(device_handler.get_capabilities())
        Session.__init__(self, capabilities)
        self._host = None
        self._host_keys = paramiko.HostKeys()
        self._transport = None
        self._connected = False
        self._channel = None
        self._channel_id = None
        self._channel_name = None
        self._buffer = StringIO()
        self._device_handler = device_handler
        self._message_list = []
        self._closing = threading.Event()
        self.parser = DefaultXMLParser(self)  # SAX or DOM parser

        self.logger = SessionLoggerAdapter(logger, {'session': self})
Beispiel #12
0
    def test_get_with_defaults_basic_mode(self, mock_request):
        session = ncclient.transport.SSHSession(self.device_handler)
        session._server_capabilities = Capabilities([
            "urn:ietf:params:netconf:capability:with-defaults:1.0"
            "?basic-mode=explicit"
        ])
        obj = Get(session, self.device_handler, raise_mode=RaiseMode.ALL)
        obj.request(with_defaults='explicit')

        expected_xml = etree.fromstring(
            '<nc:get xmlns:nc="{base}">'
            '<ns0:with-defaults xmlns:ns0="{defaults}">explicit</ns0:with-defaults>'
            '</nc:get>'.format(base=BASE_NS_1_0,
                               defaults=NETCONF_WITH_DEFAULTS_NS))

        call = mock_request.call_args_list[0][0][0]
        self.assertEqual(etree.tostring(call), etree.tostring(expected_xml))
Beispiel #13
0
 def __init__(self, device_handler):
     capabilities = Capabilities(device_handler.get_capabilities())
     Session.__init__(self, capabilities)
     self._host_keys = paramiko.HostKeys()
     self._transport = None
     self._connected = False
     self._channel = None
     self._channel_id = None
     self._channel_name = None
     self._buffer = StringIO()  # for incoming data
     # parsing-related, see _parse()
     self._device_handler = device_handler
     self._parsing_state10 = 0
     self._parsing_pos10 = 0
     self._parsing_pos11 = 0
     self._parsing_state11 = 0
     self._expchunksize = 0
     self._curchunksize = 0
     self._inendpos = 0
     self._size_num_list = []
     self._message_list = []
Beispiel #14
0
 def test_rpc_send(self, mock_thread, mock_send):
     device_handler = manager.make_device_handler({'name': 'junos'})
     capabilities = Capabilities(device_handler.get_capabilities())
     session = ncclient.transport.Session(capabilities)
     obj = RPC(session, device_handler, raise_mode=RaiseMode.ALL, timeout=0)
     reply = RPCReply(xml1)
     obj._reply = reply
     node = new_ele("commit")
     sub_ele(node, "confirmed")
     sub_ele(node, "confirm-timeout").text = "50"
     sub_ele(node, "log").text = "message"
     result = obj._request(node)
     ele = new_ele("rpc", {"message-id": obj._id},
                   **device_handler.get_xml_extra_prefix_kwargs())
     ele.append(node)
     node = to_xml(ele)
     mock_send.assert_called_once_with(node)
     self.assertEqual(result.data_xml, (NCElement(
         reply, device_handler.transform_reply())).data_xml)
     self.assertEqual(obj.session, session)
     self.assertEqual(reply, obj.reply)
Beispiel #15
0
 def _mock_device_handler_and_session(self):
     device_handler = manager.make_device_handler({'name': 'junos'})
     capabilities = Capabilities(device_handler.get_capabilities())
     session = ncclient.transport.Session(capabilities)
     return device_handler, session
Beispiel #16
0
 def _connect(cls):
     if cls._session is not None:
         cls._session.close()
     session = transport.StdIOSession(Capabilities(CAPABILITIES))
     session.connect(path=shlex.split(cls.BIN_PATH))
     cls._session = session