crowdsec/docker/test/tests/test_hub_parsers.py
2025-02-17 11:04:26 +01:00

66 lines
2.3 KiB
Python

"""
Test parser management
"""
import json
from http import HTTPStatus
import pytest
pytestmark = pytest.mark.docker
def test_install_two_parsers(crowdsec, flavor: str) -> None:
"""Test installing parsers at startup"""
it1 = "crowdsecurity/cpanel-logs"
it2 = "crowdsecurity/cowrie-logs"
env = {"PARSERS": f"{it1} {it2}"}
with crowdsec(flavor=flavor, environment=env) as cs:
cs.wait_for_log([f'*parsers install "{it1}"*', f'*parsers install "{it2}"*', "*Starting processing data*"])
cs.wait_for_http(8080, "/health", want_status=HTTPStatus.OK)
res = cs.cont.exec_run("cscli parsers list -o json")
assert res.exit_code == 0
j = json.loads(res.output)
items = {c["name"]: c for c in j["parsers"]}
assert items[it1]["status"] == "enabled"
assert items[it2]["status"] == "enabled"
# XXX check that the parser is preinstalled by default
def test_disable_parser(crowdsec, flavor: str) -> None:
"""Test removing a pre-installed parser at startup"""
it = "crowdsecurity/whitelists"
env = {"DISABLE_PARSERS": it}
with crowdsec(flavor=flavor, environment=env) as cs:
cs.wait_for_log(
[
f'*parsers remove "{it}"*',
"*Starting processing data*",
]
)
cs.wait_for_http(8080, "/health", want_status=HTTPStatus.OK)
res = cs.cont.exec_run("cscli parsers list -o json")
assert res.exit_code == 0
j = json.loads(res.output)
items = {c["name"] for c in j["parsers"]}
assert it not in items
def test_install_and_disable_parser(crowdsec, flavor: str) -> None:
"""Declare a parser to install AND disable: disable wins"""
it = "crowdsecurity/cpanel-logs"
env = {
"PARSERS": it,
"DISABLE_PARSERS": it,
}
with crowdsec(flavor=flavor, environment=env) as cs:
cs.wait_for_log("*Starting processing data*")
cs.wait_for_http(8080, "/health", want_status=HTTPStatus.OK)
res = cs.cont.exec_run("cscli parsers list -o json")
assert res.exit_code == 0
j = json.loads(res.output)
items = {c["name"] for c in j["parsers"]}
assert it not in items
logs = cs.log_lines()
# check that there was no attempt to install
assert not any(f'parsers install "{it}"' in line for line in logs)