示例#1
0
    def test_deepsea_iscsi_interfaces(self):
        with mock.patch("requests.Session") as mock_requests_session:
            login_resp = mock.MagicMock()
            login_resp.ok = True
            login_resp.status_code = 200
            login_resp.json.return_value = {
                'return': [{'token': 'validtoken'}]
            }

            rest_iscsi = mock.MagicMock()
            rest_iscsi.ok = True
            rest_iscsi.status_code = 200
            rest_iscsi.json.return_value = {
                'return': [{
                    'minion1': ['192.168.10.101', '192.168.121.41'],
                    'minion2': ['192.168.10.102', '192.168.121.42']
                }]
            }
            mock_requests_session().post.side_effect = [login_resp, rest_iscsi]

            api = DeepSea('localhost', 8000, 'auto', 'admin', 'admin')
            res = api.iscsi_interfaces()

            self.assertTrue(mock_requests_session().post.called)
            self.assertTrue(api._is_logged_in())
            self.assertEqual(res, [
                {'hostname': 'minion1', 'interfaces': ['192.168.10.101', '192.168.121.41']},
                {'hostname': 'minion2', 'interfaces': ['192.168.10.102', '192.168.121.42']}
            ])
示例#2
0
    def test_deepsea_get_minions(self):
        with mock.patch("rest_client.TimeoutRequestsSession") as mock_requests_session:
            resp_pillar = mock.MagicMock()
            resp_pillar.ok = True
            resp_pillar.status_code = 200
            resp_pillar.json.return_value = {
                'return': [{
                    'minion1': {
                        'roles': ['storage', 'mon', 'igw'],
                        'public_network': '10.1.0.0/24',
                        'cluster_network': '10.1.0.0/24',
                        'fsid': 'aaabbb',
                    },
                    'minion2': {
                        'roles': ['storage', 'rgw'],
                        'public_network': '10.1.0.0/24',
                        'cluster_network': '10.1.0.0/24',
                        'fsid': 'aaabbb',
                    }
                }]
            }
            mock_requests_session().post.side_effect = [self._login_resp, resp_pillar]

            resp = mock.MagicMock()
            resp.ok = True
            resp.status_code = 200
            resp.json.return_value = {
                'return': {
                    'minions': ['minion1'],
                    'minions_pre': [],
                    'minions_denied': [],
                    'minions_rejected': ['minion2']
                }
            }
            mock_requests_session().get.return_value = resp

            api = DeepSea('localhost', 8000, 'auto', 'hello', 'world')
            res = api.get_minions()

            self.assertTrue(mock_requests_session().post.called)
            self.assertTrue(mock_requests_session().get.called)
            self.assertTrue(api._is_logged_in())
            self.assertEqual(res, [
                {
                    'roles': ['storage', 'mon', 'igw'],
                    'hostname': 'minion1',
                    'key_status': 'accepted',
                    'public_network': '10.1.0.0/24',
                    'cluster_network': '10.1.0.0/24',
                    'fsid': 'aaabbb',
                },
                {
                    'roles': ['storage', 'rgw'],
                    'public_network': '10.1.0.0/24',
                    'hostname': 'minion2',
                    'key_status': 'rejected',
                    'cluster_network': '10.1.0.0/24',
                    'fsid': 'aaabbb',
                }
            ])
示例#3
0
    def test_deepsea_keys_response_format_error_2(self):
        with mock.patch("requests.Session") as mock_requests_session:
            mock_requests_session().post.return_value = self._login_resp

            resp = mock.MagicMock()
            resp.ok = True
            resp.status_code = 200
            resp.json.return_value = {
                'return': {
                    'minions': ['minion1', 'minion2'],
                    'minions_pre': 'minion3',
                    'minions_denied': [],
                    'minions_rejected': ['minion4']
                }
            }
            mock_requests_session().get.return_value = resp

            api = DeepSea('localhost', 8000, 'auto', 'hello', 'world')
            with self.assertRaises(BadResponseFormatException) as context:
                api.key_list()

            self.assertTrue(mock_requests_session().post.called)
            self.assertTrue(mock_requests_session().get.called)
            self.assertTrue(api._is_logged_in())
            self.assertEqual(str(context.exception), "minion3 is not an array")
示例#4
0
    def test_deepsea_keys_success(self):
        with mock.patch("requests.Session") as mock_requests_session:
            mock_requests_session().post.return_value = self._login_resp

            resp = mock.MagicMock()
            resp.ok = True
            resp.status_code = 200
            resp.json.return_value = {
                'return': {
                    'minions': ['minion1', 'minion2'],
                    'minions_pre': ['minion3'],
                    'minions_denied': [],
                    'minions_rejected': ['minion4']
                }
            }
            mock_requests_session().get.return_value = resp

            api = DeepSea('localhost', 8000, 'auto', 'hello', 'world')
            res = api.key_list()

            self.assertTrue(mock_requests_session().post.called)
            self.assertTrue(mock_requests_session().get.called)
            self.assertTrue(api._is_logged_in())
            self.assertEqual(
                res, {
                    'minions': ['minion1', 'minion2'],
                    'minions_pre': ['minion3'],
                    'minions_denied': [],
                    'minions_rejected': ['minion4']
                })
示例#5
0
    def test_deepsea_login_connection_error(self):
        with mock.patch("rest_client.TimeoutRequestsSession") as mock_requests_session:
            mock_requests_session().post.side_effect = ConnectionError()

            api = DeepSea('localhost', 8000, 'auto', 'hello', 'world')
            with self.assertRaises(RequestException) as context:
                api._login()

            self.assertEqual(context.exception.status_code, None)
            self.assertTrue(mock_requests_session().post.called)
            self.assertEqual(mock_requests_session().post.call_args[1]['data'],
                             {'username': '******', 'password': '******', 'eauth': 'auto'})
            self.assertFalse(api._is_logged_in())
            self.assertEqual(api.token, None)
示例#6
0
    def test_deepsea_service_offline_connection_error(self):
        with mock.patch("requests.Session") as mock_requests_session:
            resp_post = mock.MagicMock()
            resp_post.ok = True
            resp_post.status_code = 200
            resp_post.json.return_value = {'return': [{'token': 'validtoken'}]}
            mock_requests_session().post.return_value = resp_post
            mock_requests_session().get.side_effect = ConnectionError()

            api = DeepSea('localhost', 8000, 'auto', 'hello', 'world')
            with self.assertRaises(RequestException):
                api.is_service_online()

            self.assertTrue(mock_requests_session().get.called)
            self.assertTrue(api._is_logged_in())
示例#7
0
    def test_deepsea_login_fail_401(self):
        with mock.patch("rest_client.TimeoutRequestsSession") as mock_requests_session:
            resp = mock.MagicMock()
            resp.ok = False
            resp.status_code = 401
            mock_requests_session().post.return_value = resp

            api = DeepSea('localhost', 8000, 'auto', 'hello', 'world')
            with self.assertRaises(RequestException) as context:
                api._login()

            self.assertEqual(context.exception.status_code, 401)
            self.assertTrue(mock_requests_session().post.called)
            self.assertEqual(mock_requests_session().post.call_args[1]['data'],
                             {'username': '******', 'password': '******', 'eauth': 'auto'})
            self.assertFalse(api._is_logged_in())
            self.assertEqual(api.token, None)
示例#8
0
    def test_deepsea_login_success(self):
        with mock.patch("rest_client.TimeoutRequestsSession") as mock_requests_session:
            resp = mock.MagicMock()
            resp.ok = True
            resp.status_code = 200
            resp.json.return_value = {
                'return': [{'token': 'validtoken'}]
            }
            mock_requests_session().post.return_value = resp

            api = DeepSea('localhost', 8000, 'auto', 'hello', 'world')
            api._login()

            self.assertTrue(mock_requests_session().post.called)
            self.assertEqual(mock_requests_session().post.call_args[1]['data'],
                             {'username': '******', 'password': '******', 'eauth': 'auto'})
            self.assertTrue(api._is_logged_in())
            self.assertEqual(api.token, 'validtoken')
示例#9
0
    def test_deepsea_pillar_items_success(self):
        with mock.patch("requests.Session") as mock_requests_session:

            resp = mock.MagicMock()
            resp.ok = True
            resp.status_code = 200
            resp.json.return_value = {
                'return': [{
                    'minion1': {
                        'roles': ['storage', 'mon', 'igw'],
                        'public_network': '10.1.0.0/24',
                        'cluster_network': '10.1.0.0/24',
                        'fsid': 'aaabbb',
                    },
                    'minion2': {
                        'roles': ['storage', 'rgw'],
                        'public_network': '10.1.0.0/24',
                        'cluster_network': '10.1.0.0/24',
                        'fsid': 'aaabbb',
                    }
                }]
            }
            mock_requests_session().post.side_effect = [self._login_resp, resp]

            api = DeepSea('localhost', 8000, 'auto', 'hello', 'world')
            res = api.pillar_items()

            self.assertTrue(mock_requests_session().post.called)
            self.assertTrue(api._is_logged_in())
            self.assertEqual(
                res, {
                    'minion1': {
                        'roles': ['storage', 'mon', 'igw'],
                        'public_network': '10.1.0.0/24',
                        'cluster_network': '10.1.0.0/24',
                        'fsid': 'aaabbb',
                    },
                    'minion2': {
                        'roles': ['storage', 'rgw'],
                        'public_network': '10.1.0.0/24',
                        'cluster_network': '10.1.0.0/24',
                        'fsid': 'aaabbb',
                    }
                })
示例#10
0
    def test_deepsea_service_online(self):
        with mock.patch("requests.Session") as mock_requests_session:
            resp_post = mock.MagicMock()
            resp_post.ok = True
            resp_post.status_code = 200
            resp_post.json.return_value = {'return': [{'token': 'validtoken'}]}
            mock_requests_session().post.return_value = resp_post

            resp = mock.MagicMock()
            resp.ok = True
            resp.status_code = 200
            resp.json.return_value = {'return': 'Welcome'}
            mock_requests_session().get.return_value = resp

            api = DeepSea('localhost', 8000, 'auto', 'hello', 'world')
            self.assertTrue(api.is_service_online())

            self.assertTrue(mock_requests_session().get.called)
            self.assertTrue(api._is_logged_in())
示例#11
0
    def test_deepsea_login_response_format_error(self):
        with mock.patch("rest_client.TimeoutRequestsSession") as mock_requests_session:
            resp = mock.MagicMock()
            resp.ok = True
            resp.status_code = 200
            resp.json.return_value = {
                'return': {'invalidtoken': 'validtoken'}
            }
            mock_requests_session().post.return_value = resp

            api = DeepSea('localhost', 8000, 'auto', 'hello', 'world')
            with self.assertRaises(BadResponseFormatException):
                api._login()

            self.assertTrue(mock_requests_session().post.called)
            self.assertEqual(mock_requests_session().post.call_args[1]['data'],
                             {'username': '******', 'password': '******', 'eauth': 'auto'})
            self.assertFalse(api._is_logged_in())
            self.assertEqual(api.token, None)
示例#12
0
    def test_deepsea_service_offline_response_format_error(self):
        with mock.patch("rest_client.TimeoutRequestsSession") as mock_requests_session:
            resp_post = mock.MagicMock()
            resp_post.ok = True
            resp_post.status_code = 200
            resp_post.json.return_value = {
                'return': [{'token': 'validtoken'}]
            }
            mock_requests_session().post.return_value = resp_post

            resp = mock.MagicMock()
            resp.ok = True
            resp.status_code = 200
            resp.json.return_value = {'no_return': 'Welcome'}
            mock_requests_session().get.return_value = resp

            api = DeepSea('localhost', 8000, 'auto', 'hello', 'world')
            with self.assertRaises(BadResponseFormatException):
                api.is_service_online()

            self.assertTrue(mock_requests_session().get.called)
            self.assertTrue(api._is_logged_in())