Table of Contents |
---|
Info |
---|
|
Универсальные фильтры
case_before, case_after
Установка значений в зависимости от выполнения условий.
Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_case_filter.py
check_attr_before, check_attr_after
Прерывание обработки запроса.
Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_check_attr.py
delete_attrs_before, delete_attrs_after
Удаление ключей.
Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_delete_attrs_filter.py
divide_before, divide_after
Массовое деление значений ключей на заданные делители.
Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_divide_filter.py
format_before, format_after
Формирование значения на основе шаблона.
Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_format_filter.py
map_before, map_after
Применение некоторого преобразования к удовлетворяющим заданному фильтру элементам входного списка и формирование списка результатов (https://ru.wikipedia.org/wiki/Map).
Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_map_filter.py
match_before, match_after
Разбор входного значения-строки по шаблону. Шаблон - регулярное выражение с именованными группами. См. также фильтр split
.
Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_match_filter.py
multiply_before, multiply_after
Массовое умножение значений ключей на заданные множители.
Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_multiply_filter.py
reduce_before, reduce_after
Свёртка входного списка значений с предварительной фильтрацией его элементов (https://ru.wikipedia.org/wiki/%D0%A1%D0%B2%D1%91%D1%80%D1%82%D0%BA%D0%B0_%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0).
Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_reduce_filter.py
set_tag_before, set_tag_after
Маркировка запроса тегом (добавление тега в список $context.tags
).
Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_set_tag_filter.py
set_value_before, set_value_after
Установка значения одного ключа.
Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_set_value.py
split_before, split_after
Разбор входного значения-строки по разделителю с записью полученных значений в различные ключи. См. также фильтр match
.
Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_split_filter.py
Специальные фильтры
encode_dhcp_options
...
_after
...
Преобразование DHCP-опций в двоичный формат в соответствии с RFC 2132. Требуется дополнительная настройка hard.pm
. Аналог фильтра второй версии агента.
Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_encode_dhcp_options.py
render_reply
...
_after
Выбор шаблона и формирование по нему ответа на запрос. Позволяет формировать ответ отложенно, после выполнения некоторых after-фильтров. Пример — конфигурация агента для второй версии портала авторизации (ramtel-rad).
reject_on_error
...
Отправка Access-Reject при возникновении во время обработки запроса ошибки. Должен быть на вершине стека вызова
Спецификации фильтров
В конфигурации любого настроенного фильтра, в секции specs
, могут быть описаны его спецификации — примеры входных данных и результатов их обработки фильтром. Агент HARD при запуске тестирует все активные, то есть участвующие хотя бы в одном стэке обработки запросов, фильтры, для которых задана спецификация. На вход фильтра подаются данные, указанные в секции input
спецификации, а результат обработки сравнивается с заданным в секции expected
. Если обнаруживается несоответствие, генерируется ошибка с указанием наименования проблемной спецификации (ключ name
) и отличий вывода фильтра от ожидаемого значения. Запуск агента при возникновении ошибки прекращается.
...
Если в таком фильтре, в ключе condition
, заменить оператор !=
на, к примеру, на ==
, то фильтр не изменит входных данные и возникнет входные данные — результат работы фильтра не совпадёт с ожидаемым и будет сгенерирована ошибка:
Code Block |
---|
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', }, } |