|
@@ -0,0 +1,87 @@
|
|
|
+#!/usr/bin/env python
|
|
|
+
|
|
|
+from http import HTTPStatus
|
|
|
+
|
|
|
+import pytest
|
|
|
+
|
|
|
+pytestmark = pytest.mark.docker
|
|
|
+
|
|
|
+
|
|
|
+def test_no_agent(crowdsec, flavor):
|
|
|
+ """Test DISABLE_AGENT=true"""
|
|
|
+ env = {
|
|
|
+ 'DISABLE_AGENT': 'true',
|
|
|
+ }
|
|
|
+ with crowdsec(flavor=flavor, environment=env) as cs:
|
|
|
+ cs.wait_for_log("*CrowdSec Local API listening on 0.0.0.0:8080*")
|
|
|
+ cs.wait_for_http(8080, '/health', want_status=HTTPStatus.OK)
|
|
|
+ res = cs.cont.exec_run('cscli lapi status')
|
|
|
+ assert res.exit_code == 0
|
|
|
+ stdout = res.output.decode()
|
|
|
+ assert "You can successfully interact with Local API (LAPI)" in stdout
|
|
|
+
|
|
|
+
|
|
|
+def test_machine_register(crowdsec, flavor, tmp_path_factory):
|
|
|
+ """A local agent is always registered for use by cscli"""
|
|
|
+
|
|
|
+ data_dir = tmp_path_factory.mktemp('data')
|
|
|
+
|
|
|
+ env = {
|
|
|
+ 'DISABLE_AGENT': 'true',
|
|
|
+ }
|
|
|
+
|
|
|
+ volumes = {
|
|
|
+ data_dir: {'bind': '/var/lib/crowdsec/data', 'mode': 'rw'},
|
|
|
+ }
|
|
|
+
|
|
|
+ with crowdsec(flavor=flavor, environment=env, volumes=volumes) as cs:
|
|
|
+ cs.wait_for_log([
|
|
|
+ "*Generate local agent credentials*",
|
|
|
+ "*CrowdSec Local API listening on 0.0.0.0:8080*",
|
|
|
+ ])
|
|
|
+ cs.wait_for_http(8080, '/health', want_status=HTTPStatus.OK)
|
|
|
+ res = cs.cont.exec_run('cscli lapi status')
|
|
|
+ assert res.exit_code == 0
|
|
|
+ stdout = res.output.decode()
|
|
|
+ assert "You can successfully interact with Local API (LAPI)" in stdout
|
|
|
+
|
|
|
+ # The local agent is not registered, because we didn't persist local_api_credentials.yaml
|
|
|
+
|
|
|
+ with crowdsec(flavor=flavor, environment=env, volumes=volumes) as cs:
|
|
|
+ cs.wait_for_log([
|
|
|
+ "*Generate local agent credentials*",
|
|
|
+ "*CrowdSec Local API listening on 0.0.0.0:8080*",
|
|
|
+ ])
|
|
|
+ cs.wait_for_http(8080, '/health', want_status=HTTPStatus.OK)
|
|
|
+ res = cs.cont.exec_run('cscli lapi status')
|
|
|
+ assert res.exit_code == 0
|
|
|
+ stdout = res.output.decode()
|
|
|
+ assert "You can successfully interact with Local API (LAPI)" in stdout
|
|
|
+
|
|
|
+ config_dir = tmp_path_factory.mktemp('config')
|
|
|
+
|
|
|
+ volumes[config_dir] = {'bind': '/etc/crowdsec', 'mode': 'rw'}
|
|
|
+
|
|
|
+ with crowdsec(flavor=flavor, environment=env, volumes=volumes) as cs:
|
|
|
+ cs.wait_for_log([
|
|
|
+ "*Generate local agent credentials*",
|
|
|
+ "*CrowdSec Local API listening on 0.0.0.0:8080*",
|
|
|
+ ])
|
|
|
+ cs.wait_for_http(8080, '/health', want_status=HTTPStatus.OK)
|
|
|
+ res = cs.cont.exec_run('cscli lapi status')
|
|
|
+ assert res.exit_code == 0
|
|
|
+ stdout = res.output.decode()
|
|
|
+ assert "You can successfully interact with Local API (LAPI)" in stdout
|
|
|
+
|
|
|
+ # The local agent is now already registered
|
|
|
+
|
|
|
+ with crowdsec(flavor=flavor, environment=env, volumes=volumes) as cs:
|
|
|
+ cs.wait_for_log([
|
|
|
+ "*Local agent already registered*",
|
|
|
+ "*CrowdSec Local API listening on 0.0.0.0:8080*",
|
|
|
+ ])
|
|
|
+ cs.wait_for_http(8080, '/health', want_status=HTTPStatus.OK)
|
|
|
+ res = cs.cont.exec_run('cscli lapi status')
|
|
|
+ assert res.exit_code == 0
|
|
|
+ stdout = res.output.decode()
|
|
|
+ assert "You can successfully interact with Local API (LAPI)" in stdout
|