Přeskočit obsah

Testování parserů

Je důležité testovat parsers, aby byla ověřena jejich funkčnost s různými vstupy. LogMan.io nabízí nástroje pro manuální a automatizované testování parserů.

LogMan.io Utility pro Parsování

Tento nástroj je určen pro ruční spuštění parserů z příkazového řádku. Je užitečný pro testování, protože aplikuje vybrané skupiny parserů na vstup a nezpracované události jsou uloženy do speciálního souboru, aby mohl být parser vylepšen, dokud tento „neparsovaný“ výstup nebude prázdný. Je navržen pro parsování velmi velkých vstupů.

Utility pro parsování je program příkazového řádku. Spouští se následujícím příkazem:

python3 ./parse.py -i input-syslog.txt -u unparsed-syslog.txt ./example/syslog_rfc5424-parser

-i, --input-file určuje soubor se vstupními řádky k parsování

-u, --unparsed-file určuje soubor pro uložení neparcovaných událostí ze vstupu

a dále následují skupiny parserů z knihovny, odkud se načítají deklarativní parsers.

Následující aplikace provádí parsování na zadaném vstupním souboru s řádky oddělenými novými řádky, například:

Feb 5 10:50:01 192.168.1.1 %ASA-1-105043 test1
Feb 5 10:55:10 192.168.1.1 %ASA-1-105043 test2
Feb 10 8:25:00 192.168.A1.1 X %ASA-1-105044 test3

a produkuje soubor pouze s neparcovanými událostmi, který má stejnou strukturu:

Feb 10 8:25:00 192.168.A1.1 X %ASA-1-105044 test3

Jednotkové Testy Parserů

LogMan.io poskytuje nástroj pro spuštění jednotkových testů nad knihovnou deklarací parserů a obohacovačů.

Chcete-li spustit:

python3 ./test.py ./example [--config ./config.json]

Nástroj hledá testy v knihovně, načítá je a poté je provádí v pořadí.

Formát jednotkových testů

Soubor jednotkového testu musí být umístěn v adresáři test a název souboru musí odpovídat šabloně test*.yaml. Jeden YAML testovací soubor může obsahovat jeden nebo více YAML dokumentů se specifikací testu.

---
input: |
  line 1
  line 2
  ...

groups:

  # To znamená, že vše ze vstupu bude parsováno
  unparsed: []

  parsed:
    - msg: line
      num: 1
    - msg: line
      num: 2