def test_send_to_elastic_PUT_method(self, mock_get_obj_info, mock_url):

        client = self.client.return_value
        client.put.return_value = self.response(status_code=201)

        # Mocked result from _get_es_obj_url
        mock_url.return_value = 'obj-url'

        # Mocked result from get_obj_info
        obj_info = {
            'project_id': '1234',
            'container': 'con',
            'object': 'o/b/j',
            'headers': {},
            'timestamp': '1997'
        }
        mock_get_obj_info.return_value = obj_info

        es = ElasticSearchUtils('token_url', 'cli_id', 'cli_sec', 'es_url')

        self.data['http_method'] = 'PUT'
        _, status = es.send_to_elastic(self.data)

        client.put.assert_called_with(
            'obj-url',
            data=json.dumps(obj_info),
            headers={'Content-Type': 'application/json'})

        self.assertTrue(status)
    def test_send_to_elastic_PUT_failed_connection(self, mock_get_obj_info,
                                                   mock_url):

        client = self.client.return_value
        client.put.side_effect = Exception

        # Mocked result from _get_es_obj_url
        mock_url.return_value = 'obj-url'

        # Mocked result from get_obj_info
        obj_info = {
            'project_id': '1234',
            'container': 'con',
            'object': 'o/b/j',
            'headers': {},
            'timestamp': '1997'
        }
        mock_get_obj_info.return_value = obj_info

        es = ElasticSearchUtils('token_url', 'cli_id', 'cli_sec', 'es_url')

        self.data['http_method'] = 'PUT'
        msg, status = es.send_to_elastic(self.data)

        client.put.assert_called_with(
            'obj-url',
            data=json.dumps(obj_info),
            headers={'Content-Type': 'application/json'})

        self.assertFalse(status)
        self.assertEqual(msg, 'Unable to PUT data to ES')
    def test_send_to_elastic_DELETE_failed_connection(self, mock_get_obj_info,
                                                      mock_url):

        client = self.client.return_value
        client.delete.side_effect = Exception

        # Mocked result from _get_es_obj_url
        mock_url.return_value = 'obj-url'

        # Mocked result from get_obj_info
        obj_info = {
            'project_id': '1234',
            'container': 'con',
            'object': 'o/b/j',
            'headers': {},
            'timestamp': '1997'
        }
        mock_get_obj_info.return_value = obj_info

        es = ElasticSearchUtils('token_url', 'cli_id', 'cli_sec', 'es_url')

        self.data['http_method'] = 'DELETE'
        msg, status = es.send_to_elastic(self.data)

        client.delete.assert_called_with('obj-url')
        self.assertFalse(status)
        self.assertEqual(msg, 'Unable to DELETE data on ES')
    def test_send_to_elastic_DELETE_method_return_404(self, mock_get_obj_info,
                                                      mock_url):

        client = self.client.return_value
        client.delete.return_value = self.response(status_code=404)

        # Mocked result from _get_es_obj_url
        mock_url.return_value = 'obj-url'

        # Mocked result from get_obj_info
        obj_info = {
            'project_id': '1234',
            'container': 'con',
            'object': 'o/b/j',
            'headers': {},
            'timestamp': '1997'
        }
        mock_get_obj_info.return_value = obj_info

        es = ElasticSearchUtils('token_url', 'cli_id', 'cli_sec', 'es_url')

        self.data['http_method'] = 'DELETE'
        _, status = es.send_to_elastic(self.data)

        client.delete.assert_called_with('obj-url')
        self.assertTrue(status)
    def test_send_to_elastic_ES_error(self, mock_get_obj_info, mock_url):

        client = self.client.return_value
        client.post.return_value = self.response(status_code=403)

        # Mocked result from _get_es_obj_url
        mock_url.return_value = 'obj-url'

        # Mocked result from get_obj_info
        obj_info = {
            'project_id': '1234',
            'container': 'con',
            'object': 'o/b/j',
            'headers': {},
            'timestamp': '1997'
        }
        mock_get_obj_info.return_value = obj_info

        es = ElasticSearchUtils('token_url', 'cli_id', 'cli_sec', 'es_url')
        msg, status = es.send_to_elastic(self.data)

        client.post.assert_called_with(
            'obj-url',
            data=json.dumps(obj_info),
            headers={'Content-Type': 'application/json'})

        self.assertFalse(status)
        self.assertEquals(msg, "Object not created")
    def test_send_to_elastic_invalid_data(self):

        es = ElasticSearchUtils('token_url', 'cli_id', 'cli_sec', 'es_url')
        msg, status = es.send_to_elastic({})

        self.assertFalse(status)
        self.assertEquals(msg, "Invalid object info")
    def test_get_es_obj_url(self):
        es = ElasticSearchUtils('token_url', 'cli_id', 'cli_sec', 'es_url')

        obj_info = {
            'project_id': '1234',
            'container': 'con',
            'object': 'o/b/j'
        }

        computed = es._get_es_obj_url(obj_info)
        expected = 'es_url/1234%2Fcon%2Fo%2Fb%2Fj'

        self.assertEqual(computed, expected)
    def test_send_to_elastic_invalid_method(self, mock_get_obj_info):

        obj_info = {
            'project_id': '1234',
            'container': 'con',
            'object': 'o/b/j',
            'headers': {},
            'timestamp': '1997'
        }
        mock_get_obj_info.return_value = obj_info

        es = ElasticSearchUtils('token_url', 'cli_id', 'cli_sec', 'es_url')
        msg, status = es.send_to_elastic({'http_method': 'GET'})

        self.assertFalse(status)
        self.assertEquals(msg, "Invalid http method")
    def test_get_alf_client(self):

        ElasticSearchUtils('token_url', 'cli_id', 'cli_sec', 'es_url')

        self.client.assert_called_with(token_endpoint='token_url',
                                       client_id='cli_id',
                                       client_secret='cli_sec')