class TestClient(unittest.TestCase): """ Unit test cases for CvpClient """ # pylint: disable=protected-access # pylint: disable=invalid-name def setUp(self): """ Setup for CvpClient unittests """ self.clnt = CvpClient() nodes = ['1.1.1.1'] self.clnt.nodes = nodes self.clnt.node_cnt = len(nodes) self.clnt.node_pool = cycle(nodes) def test_create_session_default_https(self): """ Test connection to CVP nodes will default to https. """ url = 'https://1.1.1.1:443/web' self.clnt._reset_session = Mock() self.clnt._reset_session.return_value = None self.clnt._create_session(all_nodes=True) self.assertEqual(self.clnt.url_prefix, url) def test_create_session_https_port(self): """ Test https session with user provided port. """ self.clnt.port = 7777 url = 'https://1.1.1.1:7777/web' self.clnt._reset_session = Mock() self.clnt._reset_session.return_value = None self.clnt._create_session(all_nodes=True) self.assertEqual(self.clnt.url_prefix, url) def test_create_session_http_fallback(self): """ Test a failed https connection will attempt to fallback to http. """ self.clnt.port = None url = 'http://1.1.1.1:80/web' self.clnt._reset_session = Mock() self.clnt._reset_session.side_effect = [ 'Failed to connect via https', None ] self.clnt._create_session(all_nodes=True) self.assertEqual(self.clnt.url_prefix, url) self.assertEqual(self.clnt.error_msg, '\n') def test_create_session_http_fallback_port(self): """ Test http fallback will use a user provided port number. """ self.clnt.port = 8888 url = 'http://1.1.1.1:8888/web' self.clnt._reset_session = Mock() self.clnt._reset_session.side_effect = [ 'Failed to connect via https', None ] self.clnt._create_session(all_nodes=True) self.assertEqual(self.clnt.url_prefix, url) self.assertEqual(self.clnt.error_msg, '\n') def test_create_session_no_http_fallback_with_cert(self): """ If user passes a certificate to CvpClient it will only attempt to use https and not fall back to http. """ self.clnt.port = None self.clnt.cert = 'cert' url = 'https://1.1.1.1:443/web' error = '\n1.1.1.1: Failed to connect via https\n' self.clnt._reset_session = Mock() self.clnt._reset_session.return_value = 'Failed to connect via https' self.clnt._create_session(all_nodes=True) self.assertEqual(self.clnt.url_prefix, url) self.assertEqual(self.clnt.error_msg, error) def test_make_request_good(self): """ Test request does not raise exception and returns json. """ self.clnt.session = Mock() self.clnt.session.return_value = True request_return_value = Mock() self.clnt.session.get.return_value = request_return_value self.clnt._create_session = Mock() self.clnt.NUM_RETRY_REQUESTS = 2 self.clnt.connect_timeout = 2 self.clnt.node_cnt = 2 self.clnt.url_prefix = 'https://1.1.1.1:7777/web' self.clnt._is_good_response = Mock(return_value='Good') self.assertIsNone(self.clnt.last_used_node) self.clnt._make_request('GET', 'url', 2, {'data': 'data'}) request_return_value.json.assert_called_once_with() self.assertEqual(self.clnt.last_used_node, '1.1.1.1') def test_make_request_timeout(self): """ Test request timeout exception raised if hit on multiple nodes. """ self.clnt.session = Mock() self.clnt.session.return_value = True self.clnt.session.get.side_effect = ReadTimeout('Timeout') self.clnt._create_session = Mock() self.clnt.NUM_RETRY_REQUESTS = 3 self.clnt.connect_timeout = 2 self.clnt.node_cnt = 3 self.clnt.url_prefix = 'https://1.1.1.1:7777/web' self.clnt._is_good_response = Mock(return_value='Good') self.assertIsNone(self.clnt.last_used_node) with self.assertRaises(ReadTimeout): self.clnt._make_request('GET', 'url', 2, {'data': 'data'}) self.assertEqual(self.clnt.last_used_node, '1.1.1.1') def test_make_request_http_error(self): """ Test request http exception raised if hit on multiple nodes. """ self.clnt.session = Mock() self.clnt.session.return_value = True self.clnt.session.get.side_effect = HTTPError('HTTPError') self.clnt._create_session = Mock() self.clnt.NUM_RETRY_REQUESTS = 2 self.clnt.connect_timeout = 2 self.clnt.node_cnt = 2 self.clnt.url_prefix = 'https://1.1.1.1:7777/web' self.clnt._is_good_response = Mock(return_value='Good') self.assertIsNone(self.clnt.last_used_node) with self.assertRaises(HTTPError): self.clnt._make_request('GET', 'url', 2, {'data': 'data'}) self.assertEqual(self.clnt.last_used_node, '1.1.1.1') def test_make_request_no_session_error(self): """ Test request exception raised if hit on multiple nodes and _create_session fails to reset clnt.session. """ self.clnt.session = Mock() self.clnt.session.return_value = True self.clnt.session.get.side_effect = HTTPError('HTTPError') self.clnt.NUM_RETRY_REQUESTS = 2 self.clnt.connect_timeout = 0.01 self.clnt.node_cnt = 2 self.clnt.url_prefix = 'https://1.1.1.1:7777/web' self.clnt._is_good_response = Mock(return_value='Good') self.assertIsNone(self.clnt.last_used_node) with self.assertRaises(HTTPError): self.clnt._make_request('GET', 'url', 2, {'data': 'data'}) self.assertEqual(self.clnt.last_used_node, '1.1.1.1') def test_make_request_response_error(self): """ Test request exception raised from CVP response data. """ self.clnt.session = Mock() self.clnt.session.return_value = True self.clnt.session.get.return_value = Mock() self.clnt._create_session = Mock() self.clnt.NUM_RETRY_REQUESTS = 2 self.clnt.connect_timeout = 2 self.clnt.node_cnt = 2 self.clnt.url_prefix = 'https://1.1.1.1:7777/web' self.clnt._is_good_response = Mock() self.clnt._is_good_response.side_effect = CvpApiError('CvpApiError') self.assertIsNone(self.clnt.last_used_node) with self.assertRaises(CvpApiError): self.clnt._make_request('GET', 'url', 2, {'data': 'data'}) self.assertEqual(self.clnt.last_used_node, '1.1.1.1') def test_make_request_response_error_unauthorized(self): """ Test request exception raised if CVP responds unauthorized user. """ self.clnt.session = Mock() self.clnt.session.return_value = True self.clnt.session.get.return_value = Mock() self.clnt._create_session = Mock() self.clnt._reset_session = Mock() self.clnt.NUM_RETRY_REQUESTS = 2 self.clnt.connect_timeout = 2 self.clnt.node_cnt = 2 self.clnt.url_prefix = 'https://1.1.1.1:7777/web' self.clnt._is_good_response = Mock() self.clnt._is_good_response.side_effect = CvpApiError( msg='Unauthorized User') self.assertIsNone(self.clnt.last_used_node) with self.assertRaises(CvpApiError): self.clnt._make_request('GET', 'url', 2, {'data': 'data'}) self.assertEqual(self.clnt.last_used_node, '1.1.1.1') def test_make_request_response_error_logout(self): """ Test request exception raised if CVP logout error hit. """ self.clnt.session = Mock() self.clnt.session.return_value = True self.clnt.session.get.return_value = Mock() self.clnt._create_session = Mock() self.clnt._reset_session = Mock() self.clnt.NUM_RETRY_REQUESTS = 2 self.clnt.connect_timeout = 2 self.clnt.node_cnt = 2 self.clnt.url_prefix = 'https://1.1.1.1:7777/web' self.clnt._is_good_response = Mock() self.clnt._is_good_response.side_effect = CvpSessionLogOutError('bad') self.assertIsNone(self.clnt.last_used_node) with self.assertRaises(CvpSessionLogOutError): self.clnt._make_request('GET', 'url', 2, {'data': 'data'}) self.assertEqual(self.clnt.last_used_node, '1.1.1.1')
class TestClient(unittest.TestCase): """ Unit test cases for CvpClient """ # pylint: disable=protected-access # pylint: disable=invalid-name # pylint: disable=too-many-statements def setUp(self): """ Setup for CvpClient unittests """ self.clnt = CvpClient() nodes = ['1.1.1.1'] self.clnt.nodes = nodes self.clnt.node_cnt = len(nodes) self.clnt.node_pool = cycle(nodes) def test_set_version(self): """ Test setting of client.apiversion parameter """ self.assertEqual(self.clnt.apiversion, None) test_version = '2018.0' self.clnt.set_version(test_version) self.assertEqual(self.clnt.apiversion, 1.0) self.clnt.apiversion = None test_version = '2018.1' self.clnt.set_version(test_version) self.assertEqual(self.clnt.apiversion, 1.0) self.clnt.apiversion = None test_version = '2018.1.0' self.clnt.set_version(test_version) self.assertEqual(self.clnt.apiversion, 1.0) self.clnt.apiversion = None test_version = '2018.1.3' self.clnt.set_version(test_version) self.assertEqual(self.clnt.apiversion, 1.0) self.clnt.apiversion = None test_version = '2018.2' self.clnt.set_version(test_version) self.assertEqual(self.clnt.apiversion, 2.0) self.clnt.apiversion = None test_version = '2018.2.0' self.clnt.set_version(test_version) self.assertEqual(self.clnt.apiversion, 2.0) self.clnt.apiversion = None test_version = '2018.2.5' self.clnt.set_version(test_version) self.assertEqual(self.clnt.apiversion, 2.0) self.clnt.apiversion = None test_version = '2019.0' self.clnt.set_version(test_version) self.assertEqual(self.clnt.apiversion, 3.0) self.clnt.apiversion = None test_version = '2019.1' self.clnt.set_version(test_version) self.assertEqual(self.clnt.apiversion, 3.0) self.clnt.apiversion = None test_version = '2019.1.0' self.clnt.set_version(test_version) self.assertEqual(self.clnt.apiversion, 3.0) self.clnt.apiversion = None test_version = '2019.1.1' self.clnt.set_version(test_version) self.assertEqual(self.clnt.apiversion, 3.0) self.clnt.apiversion = None test_version = '2019.1.4' self.clnt.set_version(test_version) self.assertEqual(self.clnt.apiversion, 3.0) self.clnt.apiversion = None test_version = '2020.0' self.clnt.set_version(test_version) self.assertEqual(self.clnt.apiversion, 3.0) self.clnt.apiversion = None test_version = '2020.0.0' self.clnt.set_version(test_version) self.assertEqual(self.clnt.apiversion, 3.0) self.clnt.apiversion = None test_version = '2020.1' self.clnt.set_version(test_version) self.assertEqual(self.clnt.apiversion, 3.0) self.clnt.apiversion = None test_version = '2020.1.0' self.clnt.set_version(test_version) self.assertEqual(self.clnt.apiversion, 3.0) self.clnt.apiversion = None test_version = '2020.1.0.1' self.clnt.set_version(test_version) self.assertEqual(self.clnt.apiversion, 3.0) self.clnt.apiversion = None test_version = '2020.1.1' self.clnt.set_version(test_version) self.assertEqual(self.clnt.apiversion, 4.0) self.clnt.apiversion = None test_version = '2020.1.1.1' self.clnt.set_version(test_version) self.assertEqual(self.clnt.apiversion, 4.0) self.clnt.apiversion = None test_version = '2020.2' self.clnt.set_version(test_version) self.assertEqual(self.clnt.apiversion, 4.0) self.clnt.apiversion = None test_version = '2020.2.0' self.clnt.set_version(test_version) self.assertEqual(self.clnt.apiversion, 4.0) self.clnt.apiversion = None def test_create_session_default_https(self): """ Test connection to CVP nodes will default to https. """ url = 'https://1.1.1.1:443/web' self.clnt._reset_session = Mock() self.clnt._reset_session.return_value = None self.clnt._create_session(all_nodes=True) self.assertEqual(self.clnt.url_prefix, url) def test_create_session_https_port(self): """ Test https session with user provided port. """ self.clnt.port = 7777 url = 'https://1.1.1.1:7777/web' self.clnt._reset_session = Mock() self.clnt._reset_session.return_value = None self.clnt._create_session(all_nodes=True) self.assertEqual(self.clnt.url_prefix, url) def test_create_session_no_http_fallback(self): """ Test a failed https connection will not attempt to fallback to http. """ self.clnt.port = None url = 'https://1.1.1.1:443/web' error = '\n1.1.1.1: Failed to connect via https\n' self.clnt._reset_session = Mock() self.clnt._reset_session.side_effect = [ 'Failed to connect via https', None ] self.clnt._create_session(all_nodes=True) self.assertEqual(self.clnt.url_prefix, url) self.assertEqual(self.clnt.error_msg, error) def test_make_request_good(self): """ Test request does not raise exception and returns json. """ self.clnt.session = Mock() self.clnt.session.return_value = True request_return_value = Mock() self.clnt.session.get.return_value = request_return_value self.clnt._create_session = Mock() self.clnt.NUM_RETRY_REQUESTS = 2 self.clnt.connect_timeout = 2 self.clnt.node_cnt = 2 self.clnt.url_prefix = 'https://1.1.1.1:7777/web' self.clnt._is_good_response = Mock(return_value='Good') self.assertIsNone(self.clnt.last_used_node) self.clnt._make_request('GET', 'url', 2, {'data': 'data'}) request_return_value.json.assert_called_once_with() self.assertEqual(self.clnt.last_used_node, '1.1.1.1') def test_make_request_timeout(self): """ Test request timeout exception raised if hit on multiple nodes. """ self.clnt.session = Mock() self.clnt.session.return_value = True self.clnt.session.get.side_effect = ReadTimeout('Timeout') self.clnt._create_session = Mock() self.clnt.NUM_RETRY_REQUESTS = 3 self.clnt.connect_timeout = 2 self.clnt.node_cnt = 3 self.clnt.url_prefix = 'https://1.1.1.1:7777/web' self.clnt._is_good_response = Mock(return_value='Good') self.assertIsNone(self.clnt.last_used_node) with self.assertRaises(ReadTimeout): self.clnt._make_request('GET', 'url', 2, {'data': 'data'}) self.assertEqual(self.clnt.last_used_node, '1.1.1.1') def test_make_request_http_error(self): """ Test request http exception raised if hit on multiple nodes. """ self.clnt.session = Mock() self.clnt.session.return_value = True self.clnt.session.get.side_effect = HTTPError('HTTPError') self.clnt._create_session = Mock() self.clnt.NUM_RETRY_REQUESTS = 2 self.clnt.connect_timeout = 2 self.clnt.node_cnt = 2 self.clnt.url_prefix = 'https://1.1.1.1:7777/web' self.clnt._is_good_response = Mock(return_value='Good') self.assertIsNone(self.clnt.last_used_node) with self.assertRaises(HTTPError): self.clnt._make_request('GET', 'url', 2, {'data': 'data'}) self.assertEqual(self.clnt.last_used_node, '1.1.1.1') def test_make_request_no_session_error(self): """ Test request exception raised if hit on multiple nodes and _create_session fails to reset clnt.session. """ self.clnt.session = Mock() self.clnt.session.return_value = True self.clnt.session.get.side_effect = HTTPError('HTTPError') self.clnt.NUM_RETRY_REQUESTS = 2 self.clnt.connect_timeout = 0.01 self.clnt.node_cnt = 2 self.clnt.url_prefix = 'https://1.1.1.1:7777/web' self.clnt._is_good_response = Mock(return_value='Good') self.assertIsNone(self.clnt.last_used_node) with self.assertRaises(HTTPError): self.clnt._make_request('GET', 'url', 2, {'data': 'data'}) self.assertEqual(self.clnt.last_used_node, '1.1.1.1') def test_make_request_response_error(self): """ Test request exception raised from CVP response data. """ self.clnt.session = Mock() self.clnt.session.return_value = True self.clnt.session.get.return_value = Mock() self.clnt._create_session = Mock() self.clnt.NUM_RETRY_REQUESTS = 2 self.clnt.connect_timeout = 2 self.clnt.node_cnt = 2 self.clnt.url_prefix = 'https://1.1.1.1:7777/web' self.clnt._is_good_response = Mock() self.clnt._is_good_response.side_effect = CvpApiError('CvpApiError') self.assertIsNone(self.clnt.last_used_node) with self.assertRaises(CvpApiError): self.clnt._make_request('GET', 'url', 2, {'data': 'data'}) self.assertEqual(self.clnt.last_used_node, '1.1.1.1') def test_make_request_response_error_unauthorized(self): """ Test request exception raised if CVP responds unauthorized user. """ self.clnt.session = Mock() self.clnt.session.return_value = True self.clnt.session.get.return_value = Mock() self.clnt._create_session = Mock() self.clnt._reset_session = Mock() self.clnt.NUM_RETRY_REQUESTS = 2 self.clnt.connect_timeout = 2 self.clnt.node_cnt = 2 self.clnt.url_prefix = 'https://1.1.1.1:7777/web' self.clnt._is_good_response = Mock() self.clnt._is_good_response.side_effect = CvpApiError( msg='Unauthorized User') self.assertIsNone(self.clnt.last_used_node) with self.assertRaises(CvpApiError): self.clnt._make_request('GET', 'url', 2, {'data': 'data'}) self.assertEqual(self.clnt.last_used_node, '1.1.1.1') def test_make_request_response_error_logout(self): """ Test request exception raised if CVP logout error hit. """ self.clnt.session = Mock() self.clnt.session.return_value = True self.clnt.session.get.return_value = Mock() self.clnt._create_session = Mock() self.clnt._reset_session = Mock() self.clnt.NUM_RETRY_REQUESTS = 2 self.clnt.connect_timeout = 2 self.clnt.node_cnt = 2 self.clnt.url_prefix = 'https://1.1.1.1:7777/web' self.clnt._is_good_response = Mock() self.clnt._is_good_response.side_effect = CvpSessionLogOutError('bad') self.assertIsNone(self.clnt.last_used_node) with self.assertRaises(CvpSessionLogOutError): self.clnt._make_request('GET', 'url', 2, {'data': 'data'}) self.assertEqual(self.clnt.last_used_node, '1.1.1.1') def test_finditem(self): """ Test _finditem """ testobj = { 'key1': 'value1', 'key2': { 'nestkey1': 'nestval1' }, 'key3': ['nestlist1', 'nestlist2'], 'key4': [{ 'nestobjkey1': 'nestobjval1' }, { 'nestobjkey2': 'nestobjval2' }, ['nestlist1', 'nestlist2'], 'neststring'] } value = self.clnt._finditem(testobj, 'key5') self.assertIsNone(value) value = self.clnt._finditem(testobj, 'key1') self.assertEqual(value, 'value1') value = self.clnt._finditem(testobj, 'nestkey1') self.assertEqual(value, 'nestval1') value = self.clnt._finditem(testobj, 'key2') self.assertEqual(value, {'nestkey1': 'nestval1'}) value = self.clnt._finditem(testobj, 'key3') self.assertEqual(value, ['nestlist1', 'nestlist2']) value = self.clnt._finditem(testobj, 'nestobjkey2') self.assertEqual(value, 'nestobjval2')
class TestClient(unittest.TestCase): """ Unit test cases for CvpClient """ # pylint: disable=protected-access # pylint: disable=invalid-name def setUp(self): """ Setup for CvpClient unittests """ self.clnt = CvpClient() nodes = ['1.1.1.1'] self.clnt.nodes = nodes self.clnt.node_cnt = len(nodes) self.clnt.node_pool = cycle(nodes) def test_create_session_default_https(self): """ Test connection to CVP nodes will default to https. """ url = 'https://1.1.1.1:443/web' self.clnt._reset_session = Mock() self.clnt._reset_session.return_value = None self.clnt._create_session(all_nodes=True) self.assertEqual(self.clnt.url_prefix, url) def test_create_session_https_port(self): """ Test https session with user provided port. """ self.clnt.port = 7777 url = 'https://1.1.1.1:7777/web' self.clnt._reset_session = Mock() self.clnt._reset_session.return_value = None self.clnt._create_session(all_nodes=True) self.assertEqual(self.clnt.url_prefix, url) def test_create_session_http_fallback(self): """ Test a failed https connection will attempt to fallback to http. """ self.clnt.port = None url = 'http://1.1.1.1:80/web' self.clnt._reset_session = Mock() self.clnt._reset_session.side_effect = ['Failed to connect via https', None] self.clnt._create_session(all_nodes=True) self.assertEqual(self.clnt.url_prefix, url) self.assertEqual(self.clnt.error_msg, '\n') def test_create_session_http_fallback_port(self): """ Test http fallback will use a user provided port number. """ self.clnt.port = 8888 url = 'http://1.1.1.1:8888/web' self.clnt._reset_session = Mock() self.clnt._reset_session.side_effect = ['Failed to connect via https', None] self.clnt._create_session(all_nodes=True) self.assertEqual(self.clnt.url_prefix, url) self.assertEqual(self.clnt.error_msg, '\n') def test_create_session_no_http_fallback_with_cert(self): """ If user passes a certificate to CvpClient it will only attempt to use https and not fall back to http. """ self.clnt.port = None self.clnt.cert = 'cert' url = 'https://1.1.1.1:443/web' error = '\n1.1.1.1: Failed to connect via https\n' self.clnt._reset_session = Mock() self.clnt._reset_session.return_value = 'Failed to connect via https' self.clnt._create_session(all_nodes=True) self.assertEqual(self.clnt.url_prefix, url) self.assertEqual(self.clnt.error_msg, error) def test_make_request_good(self): """ Test request does not raise exception and returns json. """ self.clnt.session = Mock() self.clnt.session.return_value = True request_return_value = Mock() self.clnt.session.get.return_value = request_return_value self.clnt._create_session = Mock() self.clnt.NUM_RETRY_REQUESTS = 2 self.clnt.connect_timeout = 2 self.clnt.node_cnt = 2 self.clnt.url_prefix = 'https://1.1.1.1:7777/web' self.clnt._is_good_response = Mock(return_value='Good') self.assertIsNone(self.clnt.last_used_node) self.clnt._make_request('GET', 'url', 2, {'data': 'data'}) request_return_value.json.assert_called_once_with() self.assertEqual(self.clnt.last_used_node, '1.1.1.1') def test_make_request_timeout(self): """ Test request timeout exception raised if hit on multiple nodes. """ self.clnt.session = Mock() self.clnt.session.return_value = True self.clnt.session.get.side_effect = ReadTimeout('Timeout') self.clnt._create_session = Mock() self.clnt.NUM_RETRY_REQUESTS = 3 self.clnt.connect_timeout = 2 self.clnt.node_cnt = 3 self.clnt.url_prefix = 'https://1.1.1.1:7777/web' self.clnt._is_good_response = Mock(return_value='Good') self.assertIsNone(self.clnt.last_used_node) with self.assertRaises(ReadTimeout): self.clnt._make_request('GET', 'url', 2, {'data': 'data'}) self.assertEqual(self.clnt.last_used_node, '1.1.1.1') def test_make_request_http_error(self): """ Test request http exception raised if hit on multiple nodes. """ self.clnt.session = Mock() self.clnt.session.return_value = True self.clnt.session.get.side_effect = HTTPError('HTTPError') self.clnt._create_session = Mock() self.clnt.NUM_RETRY_REQUESTS = 2 self.clnt.connect_timeout = 2 self.clnt.node_cnt = 2 self.clnt.url_prefix = 'https://1.1.1.1:7777/web' self.clnt._is_good_response = Mock(return_value='Good') self.assertIsNone(self.clnt.last_used_node) with self.assertRaises(HTTPError): self.clnt._make_request('GET', 'url', 2, {'data': 'data'}) self.assertEqual(self.clnt.last_used_node, '1.1.1.1') def test_make_request_no_session_error(self): """ Test request exception raised if hit on multiple nodes and _create_session fails to reset clnt.session. """ self.clnt.session = Mock() self.clnt.session.return_value = True self.clnt.session.get.side_effect = HTTPError('HTTPError') self.clnt.NUM_RETRY_REQUESTS = 2 self.clnt.connect_timeout = 0.01 self.clnt.node_cnt = 2 self.clnt.url_prefix = 'https://1.1.1.1:7777/web' self.clnt._is_good_response = Mock(return_value='Good') self.assertIsNone(self.clnt.last_used_node) with self.assertRaises(HTTPError): self.clnt._make_request('GET', 'url', 2, {'data': 'data'}) self.assertEqual(self.clnt.last_used_node, '1.1.1.1') def test_make_request_response_error(self): """ Test request exception raised from CVP response data. """ self.clnt.session = Mock() self.clnt.session.return_value = True self.clnt.session.get.return_value = Mock() self.clnt._create_session = Mock() self.clnt.NUM_RETRY_REQUESTS = 2 self.clnt.connect_timeout = 2 self.clnt.node_cnt = 2 self.clnt.url_prefix = 'https://1.1.1.1:7777/web' self.clnt._is_good_response = Mock() self.clnt._is_good_response.side_effect = CvpApiError('CvpApiError') self.assertIsNone(self.clnt.last_used_node) with self.assertRaises(CvpApiError): self.clnt._make_request('GET', 'url', 2, {'data': 'data'}) self.assertEqual(self.clnt.last_used_node, '1.1.1.1') def test_make_request_response_error_unauthorized(self): """ Test request exception raised if CVP responds unauthorized user. """ self.clnt.session = Mock() self.clnt.session.return_value = True self.clnt.session.get.return_value = Mock() self.clnt._create_session = Mock() self.clnt._reset_session = Mock() self.clnt.NUM_RETRY_REQUESTS = 2 self.clnt.connect_timeout = 2 self.clnt.node_cnt = 2 self.clnt.url_prefix = 'https://1.1.1.1:7777/web' self.clnt._is_good_response = Mock() self.clnt._is_good_response.side_effect = CvpApiError( msg='Unauthorized User') self.assertIsNone(self.clnt.last_used_node) with self.assertRaises(CvpApiError): self.clnt._make_request('GET', 'url', 2, {'data': 'data'}) self.assertEqual(self.clnt.last_used_node, '1.1.1.1') def test_make_request_response_error_logout(self): """ Test request exception raised if CVP logout error hit. """ self.clnt.session = Mock() self.clnt.session.return_value = True self.clnt.session.get.return_value = Mock() self.clnt._create_session = Mock() self.clnt._reset_session = Mock() self.clnt.NUM_RETRY_REQUESTS = 2 self.clnt.connect_timeout = 2 self.clnt.node_cnt = 2 self.clnt.url_prefix = 'https://1.1.1.1:7777/web' self.clnt._is_good_response = Mock() self.clnt._is_good_response.side_effect = CvpSessionLogOutError('bad') self.assertIsNone(self.clnt.last_used_node) with self.assertRaises(CvpSessionLogOutError): self.clnt._make_request('GET', 'url', 2, {'data': 'data'}) self.assertEqual(self.clnt.last_used_node, '1.1.1.1')