Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_case_filter.py
Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_check_attr.py
Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_delete_attrs_filter.py
Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_divide_filter.py
Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_format_filter.py
Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_map_filter.py
Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_match_filter.py
Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_multiply_filter.py
Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_reduce_filter.py
Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_set_tag_filter.py
Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_set_value.py
Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_split_filter.py
Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_encode_dhcp_options.py
В конфигурации любого настроенного фильтра, в секции specs
, могут быть описаны его спецификации — примеры входных данных и результатов их обработки фильтром. Агент HARD при запуске тестирует все активные, то есть участвующие хотя бы в одном стэке обработки запросов, фильтры, для которых задана спецификация. На вход фильтра подаются данные, указанные в секции input
спецификации, а результат обработки сравнивается с заданным в секции expected
. Если обнаруживается несоответствие, генерируется ошибка с указанием наименования проблемной спецификации (ключ name
) и отличий вывода фильтра от ожидаемого значения. Запуск агента при возникновении ошибки прекращается.
plugins: filters: set_value_before: fix_duplicated_acct-session-id_attribute: condition: ' $context.has_tag?("accounting") and $request.RAD_REQUEST.try("Acct-Session-Id", "").to_s() != $request.RAD_REQUEST.try("Acct-Session-Id", "")' destination: $request.RAD_REQUEST.Acct-Session-Id value_expression: $request.RAD_REQUEST.Acct-Session-Id[0] specs: - name: fix_duplicated_acct-session-id_attribute input: tags: [accounting] request: RAD_REQUEST: Acct-Session-Id: - '5746ECB0-00000027' - '5746ECB0-00000027' expected: tags: [accounting] request: RAD_REQUEST: Acct-Session-Id: '5746ECB0-00000027' - name: pass_through_correct_acct-session-id_attribute input: tags: [accounting] request: RAD_REQUEST: Acct-Session-Id: '5746ECB0-00000027' expected: tags: [accounting] request: RAD_REQUEST: Acct-Session-Id: '5746ECB0-00000027' |
Если в таком фильтре, в ключе condition
, заменить оператор !=
на, к примеру, ==
, то фильтр не изменит входных данные и возникнет ошибка:
25.11.2016 18:01:17.291 13384/Worker#1 MainThread ERROR Failed filter spec "fix_duplicate_acct-session-id_attribute" with diff --- a +++ b { 'RAD_REQUEST': { -'Acct-Session-Id': ['5746ECB0-00000027', '5746ECB0-00000027'], +'Acct-Session-Id': '5746ECB0-00000027', }, } |