Example #1
0
    def test_init(self):
        connection = Rest(device=self.device, alias='rest', via='rest')
        self.assertEqual(connection.device, self.device)

        with self.assertRaises(NotImplementedError):
            self.assertRaises(connection.execute())
        with self.assertRaises(NotImplementedError):
            self.assertRaises(connection.configure())
Example #2
0
 def test_connect_fail_no_retry(self):
     # Test connect failure with no retries
     self.mock_ics.return_value.post.return_value = FakeResponseRestarting()
     connection = Rest(device=self.device, alias="rest", via="rest")
     with self.assertRaises(iControlUnexpectedHTTPError):
         connection.connect(retries=0)
     self.assertFalse(connection.connected)
     self.mock_sleep.assert_not_called()
     self.mock_ics.return_value.post.assert_called_once()
Example #3
0
 def test_connect_fail(self):
     # Test connect failure with retries
     self.mock_ics.return_value.post.return_value = FakeResponseRestarting()
     connection = Rest(device=self.device, alias="rest", via="rest")
     with self.assertRaises(iControlUnexpectedHTTPError):
         connection.connect(retries=3, retry_wait=35)
     self.assertFalse(connection.connected)
     self.mock_sleep.assert_called_with(35)
     self.assertEqual(self.mock_sleep.call_count, 3)
     self.assertEqual(self.mock_ics.return_value.post.call_count, 4)
Example #4
0
 def test_get(self):
     self.mock_ics.return_value.post.return_value = FakeResponse()
     self.mock_ics.return_value.patch.return_value = FakeResponsePatch()
     self.mock_ics.return_value.delete.return_value = FakeResponseDelete()
     self.mock_ics.return_value.get.return_value = FakeResponseGet()
     connection = Rest(device=self.device, alias="rest", via="rest")
     connection.connect()
     result = connection.get("/mgmt/tm/ltm/global-settings")
     self.mock_ics.return_value.post.assert_called_once()
     self.mock_ics.return_value.get.assert_called_once()
     self.assertEqual(result, self.mock_ics.return_value.get.return_value)
Example #5
0
 def test_connect(self):
     # Test connect with 1 retry
     self.mock_ics.return_value.post.side_effect = [
         FakeResponseRestarting(), FakeResponse()
     ]
     connection = Rest(device=self.device, alias="rest", via="rest")
     result_is_connected, result_session = connection.connect(retry_wait=15)
     self.assertTrue(result_is_connected)
     self.assertTrue(connection.connected)
     self.mock_sleep.assert_called_once_with(15)
     self.assertEqual(self.mock_ics.return_value.post.call_count, 2)
     self.assertIsInstance(result_session, MagicMock)
Example #6
0
    def test_request_exception_retry(self):
        connection = Rest(device=self.device, alias='rest', via='rest')
        self.assertEqual(connection.connected, False)

        with patch('requests.Session') as req:
            resp = Response()
            resp.status_code = 200
            req().post.side_effect = [resp, resp]
            req().request.side_effect = [TimeoutError('Timeout'), resp]

            connection.connect()
            resp.json = MagicMock(return_value={'imdata': []})

            with self.assertLogs(
                    logger='rest.connector.libs.nxos.implementation',
                    level=logging.INFO) as log_cm:
                connection.post(dn='temp',
                                payload={'payload': 'something'},
                                retry_wait=0)
                self.assertIn('TimeoutError', '\n'.join(log_cm.output))

            self.assertEqual(connection.connected, True)
            connection.disconnect()

        self.assertEqual(connection.connected, False)
Example #7
0
    def test_connect(self, **kwargs):
        connection = Rest(device=self.device, alias='rest', via='rest')

        response_text = """\
<api xmlns="http://tail-f.com/ns/rest" xmlns:y="http://tail-f.com/ns/rest">
  <version>0.5</version>
  <config/>
  <running/>
  <operational/>
  <operations/>
  <rollbacks/>
</api>
"""

        kwargs['mock'].get('http://1.2.3.4:8080/api', text=response_text)
        output = connection.connect(verbose=True).text
        self.assertEqual(output, response_text)
        return connection
Example #8
0
    def test_post_connected(self):
        connection = Rest(device=self.device, alias='rest', via='rest')
        self.assertEqual(connection.connected, False)

        with patch('requests.Session') as req:
            resp = Response()
            resp.status_code = 200
            req().post.return_value = resp
            connection.connect()
            resp.json = MagicMock(return_value={'imdata': []})
            connection.post(dn='temp', payload={'payload': 'something'})
            connection.disconnect()
        self.assertEqual(connection.connected, False)
Example #9
0
    def test_delete_connected(self):
        connection = Rest(device=self.device, alias='rest', via='rest')
        self.assertEqual(connection.connected, False)

        with patch('requests.Session') as req:
            resp = Response()
            resp.status_code = 200
            req().get.return_value = resp
            req().delete.return_value = resp
            connection.connect()
            resp.json = MagicMock(return_value={'imdata': []})
            connection.delete(dn='temp')
            connection.disconnect()
        self.assertEqual(connection.connected, False)
Example #10
0
    def test_connection(self):
        connection = Rest(device=self.device, alias='rest', via='rest')
        self.assertEqual(connection.connected, False)

        with patch('requests.Session') as req:
            resp = Response()
            resp.status_code = 200
            req().get.return_value = resp
            connection.connect()
            self.assertEqual(connection.connected, True)
            connection.connect()
            self.assertEqual(connection.connected, True)

        # Now disconnect
        with patch('requests.Session') as req:
            connection.disconnect()
        self.assertEqual(connection.connected, False)
Example #11
0
    def test_post_xml_connected(self):
        connection = Rest(device=self.device, alias='rest', via='rest')
        self.assertEqual(connection.connected, False)

        with patch('requests.Session') as req:
            resp = Response()
            resp.status_code = 200
            req().post.return_value = resp
            connection.connect()
            resp._content = '<?xml version="1.0" encoding="UTF-8"?>' \
                            '<imdata totalCount="0"></imdata>'

            connection.post(dn='temp',
                            xml_payload=True,
                            payload='<fvTenant name="ExampleCorp"/>')
            connection.disconnect()
        self.assertEqual(connection.connected, False)
Example #12
0
 def test_disconnect(self):
     self.mock_ics.return_value.post.return_value = FakeResponse()
     self.mock_ics.return_value.patch.return_value = FakeResponsePatch()
     self.mock_ics.return_value.delete.return_value = FakeResponseDelete()
     connection = Rest(device=self.device, alias="rest", via="rest")
     connection.connect()
     connection.disconnect()
     self.mock_ics.return_value.post.assert_called_once()
     self.mock_ics.return_value.delete.assert_called_once()
     self.assertFalse(connection.connected)
Example #13
0
    def test_get_connected_change_expected(self):
        connection = Rest(device=self.device, alias='rest', via='rest')
        self.assertEqual(connection.connected, False)

        with patch('requests.Session') as req:
            resp = Response()
            resp.status_code = 200
            resp2 = Response()
            resp2.status_code = 300
            req().get.side_effect = [resp, resp]

            connection.connect()
            resp.json = MagicMock(return_value={'imdata': []})
            resp2.json = MagicMock(return_value={'imdata': []})

            connection.get(dn='temp')
            self.assertEqual(connection.connected, True)
            connection.disconnect()
        self.assertEqual(connection.connected, False)
Example #14
0
    def test_delete_connected_wrong_status(self):
        connection = Rest(device=self.device, alias='rest', via='rest')
        self.assertEqual(connection.connected, False)

        with patch('requests.Session') as req:

            resp = Response()
            resp.status_code = 200
            resp2 = Response()
            resp2.status_code = 300
            req().delete.return_value = resp2
            req().post.side_effect = [resp, resp, resp2]
            connection.connect()
            resp.json = MagicMock(return_value={'imdata': []})
            resp2.json = MagicMock(return_value={'imdata': []})

            with self.assertRaises(RequestException):
                connection.delete(dn='temp')
            self.assertEqual(connection.connected, True)
            connection.disconnect()
        self.assertEqual(connection.connected, False)
Example #15
0
    def test_delete_connected_wrong_status_change_expected(self):
        connection = Rest(device=self.device, alias='rest', via='rest')
        self.assertEqual(connection.connected, False)

        with patch('requests.Session') as req:
            resp = Response()
            resp.status_code = 200
            resp2 = Response()
            resp2.status_code = 400
            req().post.side_effect = [resp, resp]
            req().request.return_value = resp2

            connection.connect()

            with self.assertRaises(RequestException):
                connection.delete(dn='/temp')

            self.assertEqual(connection.connected, True)
            connection.disconnect()

        self.assertEqual(connection.connected, False)
Example #16
0
    def test_put_connected_change_expected(self):
        connection = Rest(device=self.device, alias='rest', via='rest')
        self.assertEqual(connection.connected, False)

        with patch('requests.Session') as req:
            resp = Response()
            resp.status_code = 200
            resp2 = Response()
            resp2.status_code = 300
            req().put.return_value = resp2
            req().post.side_effect = [resp, resp, resp2]

            connection.connect()
            resp.json = MagicMock(return_value={'imdata': []})
            resp2.json = MagicMock(return_value={'imdata': []})

            connection.put(api_url='temp',
                           payload={'payload': 'something'},
                           expected_status_code=300)
            self.assertEqual(connection.connected, True)
            connection.disconnect()
        self.assertEqual(connection.connected, False)
Example #17
0
    def test_post_connected_wrong_status(self):
        connection = Rest(device=self.device, alias='rest', via='rest')
        self.assertEqual(connection.connected, False)

        with patch('requests.Session') as req:
            resp = Response()
            resp.status_code = 200
            resp2 = Response()
            resp2.status_code = 400
            req().request.return_value = resp2
            req().get.return_value = resp
            req().post.return_value = resp2

            connection.connect()
            resp.json = MagicMock(return_value={'imdata': []})
            resp2.json = MagicMock(return_value={'imdata': []})

            with self.assertRaises(RequestException):
                connection.post(dn='temp', payload={'payload': 'something'})

            self.assertEqual(connection.connected, True)
            connection.disconnect()

        self.assertEqual(connection.connected, False)
Example #18
0
    def test_connection_wrong_code(self):
        connection = Rest(device=self.device, alias='rest', via='rest')
        self.assertEqual(connection.connected, False)

        with patch('requests.Session') as req:
            resp = Response()
            resp.status_code = 404
            req().post.return_value = resp

            with self.assertRaises(RequestException):
                connection.connect()

        self.assertEqual(connection.connected, False)

        # Now disconnect
        with patch('requests.Session') as req:
            connection.disconnect()
        self.assertEqual(connection.connected, False)
Example #19
0
 def test_post_not_connected(self):
     connection = Rest(device=self.device, alias='rest', via='rest')
     with self.assertRaises(Exception):
         connection.post(dn='temp', payload={'payload': 'something'})
Example #20
0
 def test_get_not_connected(self):
     connection = Rest(device=self.device, alias='rest', via='rest')
     with self.assertRaises(Exception):
         connection.get(api_url='temp')
Example #21
0
 def test_delete_not_connected(self):
     connection = Rest(device=self.device, alias='rest', via='rest')
     with self.assertRaises(Exception):
         connection.delete(dn='temp')