From 0f7c37c7765a2905bfad834f82d9ec982a2c0763 Mon Sep 17 00:00:00 2001 From: gengchc2 Date: Wed, 26 Dec 2018 16:47:35 -0800 Subject: [PATCH] Add unit test for action_manager and session_manager Change-Id: Icbd505f50d882078df1e2f26bc539cd52c111d5c --- freezer_api/tests/unit/test_elasticv2.py | 358 +++++++++++++++++++++++ 1 file changed, 358 insertions(+) diff --git a/freezer_api/tests/unit/test_elasticv2.py b/freezer_api/tests/unit/test_elasticv2.py index 3203b735..4eb896e4 100644 --- a/freezer_api/tests/unit/test_elasticv2.py +++ b/freezer_api/tests/unit/test_elasticv2.py @@ -1141,3 +1141,361 @@ class TestElasticSearchEngine_job(unittest.TestCase, ElasticSearchDB): job_id=common.fake_job_0_job_id, doc=common.get_fake_job_0()) self.assertEqual(3, res) + + +class TestElasticSearchEngine_action(unittest.TestCase, ElasticSearchDB): + @patch('freezer_api.storage.elasticv2.logging') + @patch('freezer_api.storage.elasticv2.elasticsearch') + def setUp(self, mock_elasticsearch, mock_logging): + backend = 'elasticsearch' + grp = cfg.OptGroup(backend) + CONF.register_group(grp) + CONF.register_opts(self._ES_OPTS, group=backend) + mock_elasticsearch.Elasticsearch.return_value = mock.Mock() + kwargs = {'hosts': 'http://elasticservaddr:1997'} + self.eng = elastic.ElasticSearchEngineV2(backend=backend) + self.eng.init(index='freezer', **kwargs) + self.eng.action_manager = mock.Mock() + + def test_get_action_userid_and_action_id_return_doc(self): + self.eng.action_manager.get.return_value = common.get_fake_action_0() + res = self.eng.get_action(project_id='tecs', + user_id=common.fake_action_0['user_id'], + action_id=common.fake_action_0['action_id']) + self.assertEqual(common.fake_action_0, res) + self.eng.action_manager.get.assert_called_with( + project_id='tecs', + user_id=common.fake_action_0['user_id'], + doc_id=common.fake_action_0['action_id']) + + def test_get_action_userid_and_action_id_return_none(self): + self.eng.action_manager.get.return_value = None + res = self.eng.get_action(project_id='tecs', + user_id=common.fake_action_0['user_id'], + action_id=common.fake_action_0['action_id']) + self.assertIsNone(res) + self.eng.action_manager.get.assert_called_with( + project_id='tecs', + user_id=common.fake_action_0['user_id'], + doc_id=common.fake_action_0['action_id']) + + def test_get_action_with_userid_and_search_return_list(self): + self.eng.action_manager.search.return_value = \ + [common.fake_action_0, common.fake_action_0] + my_search = {'match': [{'some_field': 'some text'}, + {'description': 'some other text'}]} + res = self.eng.search_action(project_id='tecs', + user_id=common.fake_action_0['user_id'], + offset=6, limit=15, + search=my_search) + self.assertEqual([common.fake_action_0, common.fake_action_0], res) + self.eng.action_manager.search.assert_called_with( + project_id='tecs', + user_id=common.fake_action_0['user_id'], + search=my_search, + limit=15, offset=6) + + def test_get_action_with_userid_and_search_return_empty_list(self): + self.eng.action_manager.search.return_value = [] + my_search = {'match': [{'some_field': 'some text'}, + {'description': 'some other text'}]} + res = self.eng.search_action(project_id='tecs', + user_id=common.fake_action_0['user_id'], + offset=6, limit=15, + search=my_search) + self.assertEqual([], res) + self.eng.action_manager.search.assert_called_with( + project_id='tecs', + user_id=common.fake_action_0['user_id'], + search=my_search, + limit=15, offset=6) + + @patch('freezer_api.common.elasticv2_utils.ActionDoc') + def test_add_action_ok(self, mock_actiondoc): + mock_actiondoc.create.return_value = common.get_fake_action_0() + self.eng.action_manager.insert.return_value = (True, 1) + res = self.eng.add_action(project_id='tecs', + user_id=common.fake_action_0['user_id'], + doc=common.get_fake_action_0()) + self.assertEqual(common.fake_action_0['action_id'], res) + self.eng.action_manager.insert.assert_called_with( + common.fake_action_0, common.fake_action_0['action_id'] + ) + + def test_add_action_raises_StorageEngineError_when_manager_insert_raises( + self): + self.eng.action_manager.get.return_value = None + self.eng.action_manager.insert.side_effect = ( + exceptions.StorageEngineError('regular test failure') + ) + self.assertRaises(exceptions.StorageEngineError, self.eng.add_action, + project_id='tecs', + user_id=common.fake_action_0['user_id'], + doc=common.get_fake_action_0()) + + def test_delete_action_ok(self): + self.eng.action_manager.delete.return_value = common.fake_action_0[ + 'action_id'] + res = self.eng.delete_action( + project_id='tecs', + user_id=common.fake_action_0['action_id'], + action_id=common.fake_action_0['action_id']) + self.assertEqual(common.fake_action_0['action_id'], res) + + def test_delete_client_raises_StorageEngineError_when_es_delete_raises( + self): + self.eng.action_manager.delete.side_effect = ( + exceptions.StorageEngineError() + ) + self.assertRaises(exceptions.StorageEngineError, + self.eng.delete_action, + project_id='tecs', + user_id=common.fake_action_0['action_id'], + action_id=common.fake_action_0['action_id']) + + def test_update_action_raises_DocumentNotFound_when_doc_not_exists(self): + self.eng.action_manager.get.side_effect = exceptions.DocumentNotFound( + 'regular test failure') + patch = {'action_id': 'black_milk'} + self.assertRaises(exceptions.DocumentNotFound, self.eng.update_action, + project_id='tecs', + user_id=common.fake_action_0['action_id'], + action_id=common.fake_action_0['action_id'], + patch_doc=patch) + + def test_update_action_raises_DocumentNotFound_when_update_raises( + self): + self.eng.action_manager.get.return_value = common.get_fake_action_0() + patch = {'action_id': 'black_milk'} + self.eng.action_manager.update.side_effect = ( + exceptions.DocumentNotFound('regular test failure') + ) + self.assertRaises(exceptions.DocumentNotFound, self.eng.update_action, + project_id='tecs', + user_id=common.fake_action_0['action_id'], + action_id=common.fake_action_0['action_id'], + patch_doc=patch) + + def test_update_action_returns_new_doc_version(self): + self.eng.action_manager.get.return_value = common.get_fake_action_0() + patch = {'action_id': 'group_four'} + self.eng.action_manager.update.return_value = 11 + res = self.eng.update_action( + project_id='tecs', + user_id=common.fake_action_0['action_id'], + action_id=common.fake_action_0['action_id'], + patch_doc=patch) + self.assertEqual(11, res) + + def test_replace_action_raises_AccessForbidden_when_action_manager_raises( + self): + self.eng.action_manager.get.side_effect = exceptions.AccessForbidden( + 'regular test failure') + self.eng.action_manager.insert.return_value = (True, 3) + self.assertRaises(exceptions.AccessForbidden, self.eng.replace_action, + project_id='tecs', + user_id=common.fake_action_0['action_id'], + action_id=common.fake_action_0['action_id'], + doc=common.get_fake_action_0()) + + # def test_replace_action_returns_ok_when_doc_is_new(self): + # self.eng.action_manager.get.side_effect = ( + # exceptions.DocumentNotFound('regular test failure') + # ) + # self.eng.action_manager.insert.return_value = (True, 1) + # res = self.eng.replace_action( + # user_id=common.fake_action_0['action_id'], + # action_id=common.fake_action_0['action_id'], + # doc=common.get_fake_action_0()) + # self.assertEqual(res, 1) + # + # def test_replace_action_returns_version_1_when_doc_is_overwritten( + # self): + # self.eng.action_manager.get.return_value = common.get_fake_action_0() + # self.eng.action_manager.insert.return_value = (False, 3) + # res = self.eng.replace_action( + # user_id=common.fake_action_0['action_id'], + # action_id=common.fake_action_0['action_id'], + # doc=common.get_fake_action_0()) + # self.assertEqual(res, 3) + + +class TestElasticSearchEngine_session(unittest.TestCase, ElasticSearchDB): + @patch('freezer_api.storage.elasticv2.logging') + @patch('freezer_api.storage.elasticv2.elasticsearch') + def setUp(self, mock_elasticsearch, mock_logging): + backend = 'elasticsearch' + grp = cfg.OptGroup(backend) + CONF.register_group(grp) + CONF.register_opts(self._ES_OPTS, group=backend) + mock_elasticsearch.Elasticsearch.return_value = mock.Mock() + kwargs = {'hosts': 'http://elasticservaddr:1997'} + self.eng = elastic.ElasticSearchEngineV2(backend=backend) + self.eng.init(index='freezer', **kwargs) + self.eng.session_manager = mock.Mock() + + def test_get_session_userid_and_session_id_return_doc(self): + self.eng.session_manager.get.return_value = common.get_fake_session_0() + res = self.eng.get_session(project_id='tecs', + user_id=common.fake_session_0['user_id'], + session_id=common.fake_session_0[ + 'session_id']) + self.assertEqual(common.fake_session_0, res) + self.eng.session_manager.get.assert_called_with( + project_id='tecs', + user_id=common.fake_session_0['user_id'], + doc_id=common.fake_session_0['session_id']) + + def test_get_session_userid_and_session_id_return_none(self): + self.eng.session_manager.get.return_value = None + res = self.eng.get_session(project_id='tecs', + user_id=common.fake_session_0['user_id'], + session_id=common.fake_session_0[ + 'session_id']) + self.assertIsNone(res) + self.eng.session_manager.get.assert_called_with( + project_id='tecs', + user_id=common.fake_session_0['user_id'], + doc_id=common.fake_session_0['session_id']) + + def test_get_session_with_userid_and_search_return_list(self): + self.eng.session_manager.search.return_value = \ + [common.fake_session_0, common.fake_session_0] + my_search = {'match': [{'some_field': 'some text'}, + {'description': 'some other text'}]} + res = self.eng.search_session( + project_id='tecs', + user_id=common.fake_session_0['user_id'], + offset=6, limit=15, + search=my_search) + self.assertEqual([common.fake_session_0, common.fake_session_0], res) + self.eng.session_manager.search.assert_called_with( + project_id='tecs', + user_id=common.fake_session_0['user_id'], + search=my_search, + limit=15, offset=6) + + def test_get_session_with_userid_and_search_return_empty_list(self): + self.eng.session_manager.search.return_value = [] + my_search = {'match': [{'some_field': 'some text'}, + {'description': 'some other text'}]} + res = self.eng.search_session( + project_id='tecs', + user_id=common.fake_session_0['user_id'], + offset=6, limit=15, + search=my_search) + self.assertEqual([], res) + self.eng.session_manager.search.assert_called_with( + project_id='tecs', + user_id=common.fake_session_0['user_id'], + search=my_search, + limit=15, offset=6) + + @patch('freezer_api.common.elasticv2_utils.SessionDoc') + def test_add_session_ok(self, mock_sessiondoc): + mock_sessiondoc.create.return_value = common.get_fake_session_0() + self.eng.session_manager.insert.return_value = (True, 1) + res = self.eng.add_session(project_id='tecs', + user_id=common.fake_session_0['user_id'], + doc=common.get_fake_session_0()) + self.assertEqual(common.fake_session_0['session_id'], res) + self.eng.session_manager.insert.assert_called_with( + common.fake_session_0, + common.fake_session_0['session_id']) + + def test_add_session_raises_StorageEngineError_when_manager_insert_raises( + self): + self.eng.session_manager.get.return_value = None + self.eng.session_manager.insert.side_effect = ( + exceptions.StorageEngineError('regular test failure') + ) + self.assertRaises(exceptions.StorageEngineError, self.eng.add_session, + project_id='tecs', + user_id=common.fake_session_0['user_id'], + doc=common.get_fake_session_0()) + + def test_delete_session_ok(self): + self.eng.session_manager.delete.return_value = common.fake_session_0[ + 'session_id'] + res = self.eng.delete_session( + project_id='tecs', + user_id=common.fake_session_0['session_id'], + session_id=common.fake_session_0['session_id']) + self.assertEqual(common.fake_session_0['session_id'], res) + + def test_delete_client_raises_StorageEngineError_when_es_delete_raises( + self): + self.eng.session_manager.delete.side_effect = ( + exceptions.StorageEngineError() + ) + self.assertRaises(exceptions.StorageEngineError, + self.eng.delete_session, + project_id='tecs', + user_id=common.fake_session_0['session_id'], + session_id=common.fake_session_0['session_id']) + + def test_update_session_raises_DocumentNotFound_when_doc_not_exists(self): + self.eng.session_manager.get.side_effect = exceptions.DocumentNotFound( + 'regular test failure') + patch = {'session_id': 'black_milk'} + self.assertRaises(exceptions.DocumentNotFound, self.eng.update_session, + project_id='tecs', + user_id=common.fake_session_0['session_id'], + session_id=common.fake_session_0['session_id'], + patch_doc=patch) + + def test_update_session_raises_DocumentNotFound_when_update_raises( + self): + self.eng.session_manager.get.return_value = common.get_fake_session_0() + patch = {'session_id': 'black_milk'} + self.eng.session_manager.update.side_effect = ( + exceptions.DocumentNotFound('regular test failure') + ) + self.assertRaises(exceptions.DocumentNotFound, self.eng.update_session, + project_id='tecs', + user_id=common.fake_session_0['session_id'], + session_id=common.fake_session_0['session_id'], + patch_doc=patch) + + def test_update_session_returns_new_doc_version(self): + self.eng.session_manager.get.return_value = common.get_fake_session_0() + patch = {'session_id': 'group_four'} + self.eng.session_manager.update.return_value = 11 + res = self.eng.update_session( + project_id='tecs', + user_id=common.fake_session_0['session_id'], + session_id=common.fake_session_0['session_id'], + patch_doc=patch) + self.assertEqual(11, res) + + def test_replace_session_raises_AccessForbidden_when_session_manager_raise( + self): + self.eng.session_manager.get.side_effect = exceptions.AccessForbidden( + 'regular test failure') + self.eng.session_manager.insert.return_value = (True, 3) + self.assertRaises(exceptions.AccessForbidden, self.eng.replace_session, + project_id='tecs', + user_id=common.fake_session_0['session_id'], + session_id=common.fake_session_0['session_id'], + doc=common.get_fake_session_0()) + + def test_replace_session_returns_ok_when_doc_is_new(self): + self.eng.session_manager.get.side_effect = exceptions.DocumentNotFound( + 'regular test failure') + self.eng.session_manager.insert.return_value = (True, 1) + res = self.eng.replace_session( + project_id='tecs', + user_id=common.fake_session_0['session_id'], + session_id=common.fake_session_0['session_id'], + doc=common.get_fake_session_0()) + self.assertEqual(1, res) + + def test_replace_session_returns_version_1_when_doc_is_overwritten(self): + self.eng.session_manager.get.return_value = common.get_fake_session_0() + self.eng.session_manager.insert.return_value = (False, 3) + res = self.eng.replace_session( + project_id='tecs', + user_id=common.fake_session_0['session_id'], + session_id=common.fake_session_0['session_id'], + doc=common.get_fake_session_0()) + self.assertEqual(3, res)