Page tree
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 8 Next »

Универсальные фильтры

case

Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_case_filter.py

check_attr

Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_check_attr.py

delete_attrs

Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_delete_attrs_filter.py

divide

Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_divide_filter.py

format

Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_format_filter.py

map

Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_map_filter.py

match

Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_match_filter.py

multiply

Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_multiply_filter.py

reduce

Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_reduce_filter.py

set_tag

Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_set_tag_filter.py

set_value

Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_set_value.py

split

Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_split_filter.py

Специальные фильтры

encode_dhcp_options (только after)

Тесты: https://gitlab.com/latera/hard/blob/master/src/hydra/hard/tests/filters/test_encode_dhcp_options.py

render_reply (только after)

reject_on_error (!)

Спецификации фильтров

В конфигурации любого настроенного фильтра, в секции 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',
 },
}
  • No labels