|
@@ -0,0 +1,47 @@
|
|
|
+#!/usr/bin/env python
|
|
|
+
|
|
|
+"""
|
|
|
+Test bind-mounting local items
|
|
|
+"""
|
|
|
+
|
|
|
+from http import HTTPStatus
|
|
|
+import json
|
|
|
+
|
|
|
+import pytest
|
|
|
+
|
|
|
+pytestmark = pytest.mark.docker
|
|
|
+
|
|
|
+
|
|
|
+def test_inject_local_item(crowdsec, tmp_path_factory, flavor):
|
|
|
+ """Test mounting a custom whitelist at startup"""
|
|
|
+
|
|
|
+ localitems = tmp_path_factory.mktemp('localitems')
|
|
|
+ custom_whitelists = localitems / 'custom_whitelists.yaml'
|
|
|
+
|
|
|
+ with open(custom_whitelists, 'w') as f:
|
|
|
+ f.write('{"whitelist":{"reason":"Good IPs","ip":["1.2.3.4"]}}')
|
|
|
+
|
|
|
+ volumes = {
|
|
|
+ custom_whitelists: {'bind': '/etc/crowdsec/parsers/s02-enrich/custom_whitelists.yaml'}
|
|
|
+ }
|
|
|
+
|
|
|
+ with crowdsec(flavor=flavor, volumes=volumes) as cs:
|
|
|
+ cs.wait_for_log([
|
|
|
+ "*Starting processing data*"
|
|
|
+ ])
|
|
|
+ cs.wait_for_http(8080, '/health', want_status=HTTPStatus.OK)
|
|
|
+
|
|
|
+ # the parser should be enabled
|
|
|
+ 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['custom_whitelists.yaml']['status'] == 'enabled,local'
|
|
|
+
|
|
|
+ # regression test: the linux collection should not be tainted
|
|
|
+ # (the parsers were not copied from /staging when using "cp -an" with local parsers)
|
|
|
+ res = cs.cont.exec_run('cscli collections inspect crowdsecurity/linux -o json')
|
|
|
+ assert res.exit_code == 0
|
|
|
+ j = json.loads(res.output)
|
|
|
+ # crowdsec <= 1.5.5 omits a "tainted" when it's false
|
|
|
+ assert j.get('tainted', False) is False
|