Пример #1
0
 def test_validate_minddata_pipeline_condition_1(self):
     """Test the method exceptions."""
     with pytest.raises(ProfilerParamTypeErrorException) as exc_info:
         validate_minddata_pipeline_condition([])
     assert exc_info.value.error_code == '50546082'
     assert exc_info.value.message == 'Param type error. Invalid condition ' \
                                      'type, it should be dict.'
Пример #2
0
    def test_validate_minddata_pipeline_condition_exception(self):
        """Test the exception of validate minddata pipeline condition."""
        condition_list = [{
            'filter_condition': {
                'op_id': 0
            }
        }, {
            'filter_condition': {
                'op_id': {
                    'in': ['0']
                }
            }
        }]
        exception_message_list = [
            'The filter_condition in search_condition error, '
            'The filter condition value must be dict.',
            'The filter_condition in search_condition error, '
            'The item in filter value must be int.'
        ]

        for idx, condition in enumerate(condition_list):
            with pytest.raises(ProfilerFilterConditionException) as exc_info:
                validate_minddata_pipeline_condition(condition)
            assert exc_info.value.error_code == '50546186'
            assert exc_info.value.message == exception_message_list[idx]
Пример #3
0
 def test_validate_minddata_pipeline_condition(self):
     """Test the validate minddata pipeline condition of normal input."""
     filter_condition_list = [{
         'op_id': {
             'in': [1, 2]
         }
     }, {
         'op_type': {
             'in': ['add', 'conv2d']
         }
     }, {
         'is_display_op_detail': True
     }]
     for filter_condition in filter_condition_list:
         condition = {
             'device_id': '0',
             'op_type': 'aicpu_type',
             'filter_condition': filter_condition,
             'group_condition': {
                 'limit': 1,
                 'offset': 1
             },
             'sort_condition': {
                 'name': 'op_type',
                 'type': 'ascending'
             }
         }
         validate_minddata_pipeline_condition(condition)
Пример #4
0
 def test_validate_minddata_pipeline_condition_2(self):
     """Test the method exceptions."""
     condition = {'device_id': 0}
     with pytest.raises(ProfilerDeviceIdException) as exc_info:
         validate_minddata_pipeline_condition(condition)
     assert exc_info.value.error_code == '50546182'
     assert exc_info.value.message == 'The device_id in search_condition error, ' \
                                      'Invalid device_id type, it should be str.'
Пример #5
0
    def test_validate_minddata_pipeline_condition_5(self):
        """Test the method exceptions."""
        condition = {'sort_condition': 0}
        with pytest.raises(ProfilerSortConditionException) as exc_info:
            validate_minddata_pipeline_condition(condition)
        assert exc_info.value.error_code == '50546185'
        assert exc_info.value.message == 'The sort_condition in search_condition error, ' \
                                         'The sort condition must be dict.'

        condition = {'sort_condition': {'name': 0}}
        with pytest.raises(ProfilerSortConditionException) as exc_info:
            validate_minddata_pipeline_condition(condition)
        assert exc_info.value.error_code == '50546185'
        assert exc_info.value.message == 'The sort_condition in search_condition error, ' \
                                         'Wrong sorted name type.'

        condition = {'sort_condition': {'name': 'xxx'}}
        with pytest.raises(ProfilerSortConditionException) as exc_info:
            validate_minddata_pipeline_condition(condition)
        assert exc_info.value.error_code == '50546185'
        assert exc_info.value.message.startswith(
            'The sort_condition in search_condition error, The sorted_name must be in'
        )

        condition = {
            'sort_condition': {
                'name': 'output_queue_usage_rate',
                'type': 'xxx'
            }
        }
        with pytest.raises(ProfilerSortConditionException) as exc_info:
            validate_minddata_pipeline_condition(condition)
        assert exc_info.value.error_code == '50546185'
        assert exc_info.value.message == 'The sort_condition in search_condition error, ' \
                                         'The sorted type must be ascending or descending.'
Пример #6
0
    def test_validate_minddata_pipeline_condition_7(self):
        """Test the method exceptions."""
        condition = {'filter_condition': {'op_id': 0}}
        with pytest.raises(ProfilerFilterConditionException) as exc_info:
            validate_minddata_pipeline_condition(condition)
        assert exc_info.value.error_code == '50546186'
        assert exc_info.value.message == 'The filter_condition in search_condition error, ' \
                                         'The filter condition value must be dict.'

        condition = {'filter_condition': {'op_id': {'in': ['0']}}}
        with pytest.raises(ProfilerFilterConditionException) as exc_info:
            validate_minddata_pipeline_condition(condition)
        assert exc_info.value.error_code == '50546186'
        assert exc_info.value.message == 'The filter_condition in search_condition error, ' \
                                         'The item in filter value must be int.'
Пример #7
0
def get_minddata_pipeline_op_queue_info():
    """
    Get minddata pipeline operator info and queue info.

    Returns:
        str, the operation information and queue information.

    Raises:
        ParamValueError: If the search condition contains some errors.

    Examples:
        >>> POST http://xxxx/v1/mindinsight/profile/minddata-pipeline/op-queue
    """
    profiler_dir = get_profiler_dir(request)
    train_id = get_train_id(request)
    if not profiler_dir or not train_id:
        raise ParamValueError("No profiler_dir or train_id.")

    profiler_dir_abs = os.path.join(settings.SUMMARY_BASE_DIR, train_id,
                                    profiler_dir)
    try:
        profiler_dir_abs = validate_and_normalize_path(profiler_dir_abs,
                                                       "profiler")
    except ValidationError:
        raise ParamValueError("Invalid profiler dir.")

    check_train_job_and_profiler_dir(profiler_dir_abs)
    condition = request.stream.read()
    try:
        condition = json.loads(condition) if condition else {}
    except Exception:
        raise ParamValueError("Json data parse failed.")
    validate_minddata_pipeline_condition(condition)

    device_id = condition.get("device_id", "0")
    to_int(device_id, 'device_id')
    analyser = AnalyserFactory.instance().get_analyser('minddata_pipeline',
                                                       profiler_dir_abs,
                                                       device_id)
    op_info = analyser.query(condition)
    return jsonify(op_info)
Пример #8
0
    def test_validate_minddata_pipeline_condition_4(self):
        """Test the method exceptions."""
        condition = {
            'group_condition': {
                'limit': 0
            }
        }
        with pytest.raises(ProfilerGroupConditionException) as exc_info:
            validate_minddata_pipeline_condition(condition)
        assert exc_info.value.error_code == '50546184'
        assert exc_info.value.message == 'The group_condition in search_condition error, ' \
                                         'The limit must in [1, 100].'

        condition = {
            'group_condition': {
                'offset': '0'
            }
        }
        with pytest.raises(ProfilerGroupConditionException) as exc_info:
            validate_minddata_pipeline_condition(condition)
        assert exc_info.value.error_code == '50546184'
        assert exc_info.value.message == 'The group_condition in search_condition error, ' \
                                         'The offset must be int.'

        condition = {
            'group_condition': {
                'offset': 1000001
            }
        }
        with pytest.raises(ProfilerGroupConditionException) as exc_info:
            validate_minddata_pipeline_condition(condition)
        assert exc_info.value.error_code == '50546184'
        assert exc_info.value.message == 'The group_condition in search_condition error, ' \
                                         'The offset must le 1000000.'
Пример #9
0
    def test_validate_minddata_pipeline_condition_6(self):
        """Test the method exceptions."""
        condition = {
            'filter_condition': '0'
        }
        with pytest.raises(ProfilerFilterConditionException) as exc_info:
            validate_minddata_pipeline_condition(condition)
        assert exc_info.value.error_code == '50546186'
        assert exc_info.value.message == 'The filter_condition in search_condition error, ' \
                                         'The filter condition must be dict.'

        condition = {
            'filter_condition': {
                'xxx': 0
            }
        }
        with pytest.raises(ProfilerFilterConditionException) as exc_info:
            validate_minddata_pipeline_condition(condition)
        assert exc_info.value.error_code == '50546186'
        assert exc_info.value.message == 'The filter_condition in search_condition error, ' \
                                         'The key xxx of filter_condition is not support.'

        condition = {
            'filter_condition': {
                'is_display_op_detail': 0
            }
        }
        with pytest.raises(ProfilerFilterConditionException) as exc_info:
            validate_minddata_pipeline_condition(condition)
        assert exc_info.value.error_code == '50546186'
        assert exc_info.value.message == 'The filter_condition in search_condition error, ' \
                                         'The condition must be bool.'