# Copyright 2020 Huawei Technologies Co., Ltd # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================ """Test the model module.""" from unittest import TestCase, mock from unittest.mock import MagicMock from mindinsight.lineagemgr.model import filter_summary_lineage, get_flattened_lineage from mindinsight.lineagemgr.common.exceptions.exceptions import LineageSummaryParseException, \ LineageQuerierParamException, LineageQuerySummaryDataError, LineageSearchConditionParamError, LineageParamTypeError from mindinsight.lineagemgr.common.path_parser import SummaryPathParser from tests.st.func.lineagemgr.test_model import LINEAGE_FILTRATION_EXCEPT_RUN, \ LINEAGE_FILTRATION_RUN1, LINEAGE_FILTRATION_RUN2 class TestFilterAPI(TestCase): """Test the function of filter_summary_lineage.""" _MOCK_DATA_MANAGER = MagicMock() @mock.patch('mindinsight.lineagemgr.model.Querier') @mock.patch('mindinsight.lineagemgr.lineage_parser.SummaryPathParser.get_lineage_summaries') def test_filter_summary_lineage(self, latest_summary_mock, qurier_mock): """Test the function of filter_summary_lineage.""" latest_summary_mock.return_value = ['/path/to/summary_base_dir/summary_dir'] mock_querier = MagicMock() qurier_mock.return_value = mock_querier mock_querier.filter_summary_lineage.return_value = [{'loss': 3.0}] result = filter_summary_lineage(self._MOCK_DATA_MANAGER) self.assertEqual(result, [{'loss': 3.0}]) @mock.patch('mindinsight.lineagemgr.model.validate_condition') def test_invalid_search_condition(self, mock_valid): """Test filter_summary_lineage with invalid invalid param.""" mock_valid.side_effect = LineageParamTypeError( 'Invalid search_condition type.') self.assertRaisesRegex( LineageSearchConditionParamError, 'Invalid search_condition type.', filter_summary_lineage, self._MOCK_DATA_MANAGER, 'invalid_condition' ) def test_failed_to_get_summary_files(self): """Test filter_summary_lineage with invalid invalid param.""" default_result = { 'customized': {}, 'object': [], 'count': 0 } assert default_result == filter_summary_lineage(self._MOCK_DATA_MANAGER) @mock.patch('mindinsight.lineagemgr.model.validate_search_model_condition') @mock.patch('mindinsight.lineagemgr.model.validate_condition') @mock.patch.object(SummaryPathParser, 'get_lineage_summaries') @mock.patch('mindinsight.lineagemgr.model.Querier') def test_failed_to_querier(self, mock_query, *args): """Test filter_summary_lineage with invalid invalid param.""" mock_query.side_effect = LineageSummaryParseException() args[0].return_value = None res = filter_summary_lineage(self._MOCK_DATA_MANAGER) assert res == {'object': [], 'count': 0} mock_query.side_effect = LineageQuerierParamException(['keys'], 'key') self.assertRaisesRegex( LineageQuerySummaryDataError, 'Filter summary lineage failed.', filter_summary_lineage, self._MOCK_DATA_MANAGER ) @mock.patch('mindinsight.lineagemgr.model.filter_summary_lineage') def test_get_lineage_table(self, mock_filter_summary_lineage): """Test get_flattened_lineage with valid param.""" mock_data = { 'object': [LINEAGE_FILTRATION_EXCEPT_RUN, LINEAGE_FILTRATION_RUN1, LINEAGE_FILTRATION_RUN2] } mock_data_manager = MagicMock() mock_filter_summary_lineage.return_value = mock_data result = get_flattened_lineage(mock_data_manager) assert result.get('[U]info') == [None, 'info1', 'info1']