Fix docker tests by increasing timeout (again) and move compose test to plugin (#2112)

* Fix docker tests by increasing timeout (again) and move compose test to plugin

* Bump workflow timeout to 30 min

* Test only alpine-slim and debian-full flavors
This commit is contained in:
mmetc 2023-03-09 12:00:29 +01:00 committed by GitHub
parent e161507d08
commit 0a114ca7d1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 21 additions and 46 deletions

View file

@ -17,6 +17,7 @@ on:
jobs: jobs:
test_docker_image: test_docker_image:
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 30
steps: steps:
- name: Check out the repo - name: Check out the repo
@ -29,17 +30,17 @@ jobs:
with: with:
config: .github/buildkit.toml config: .github/buildkit.toml
- name: "Build flavor: full" # - name: "Build flavor: full"
uses: docker/build-push-action@v4 # uses: docker/build-push-action@v4
with: # with:
context: . # context: .
file: ./Dockerfile # file: ./Dockerfile
tags: crowdsecurity/crowdsec:test # tags: crowdsecurity/crowdsec:test
target: full # target: full
platforms: linux/amd64 # platforms: linux/amd64
load: true # load: true
cache-from: type=gha # cache-from: type=gha
cache-to: type=gha,mode=min # cache-to: type=gha,mode=min
- name: "Build flavor: slim" - name: "Build flavor: slim"
uses: docker/build-push-action@v4 uses: docker/build-push-action@v4
@ -94,9 +95,9 @@ jobs:
- name: "Run tests" - name: "Run tests"
env: env:
CROWDSEC_TEST_VERSION: test CROWDSEC_TEST_VERSION: test
CROWDSEC_TEST_FLAVORS: full,slim,debian CROWDSEC_TEST_FLAVORS: slim,debian
CROWDSEC_TEST_NETWORK: net-test CROWDSEC_TEST_NETWORK: net-test
CROWDSEC_TEST_TIMEOUT: 60 CROWDSEC_TEST_TIMEOUT: 90
run: | run: |
cd docker/test cd docker/test
pipenv run pytest -n 2 --durations=0 --color=yes pipenv run pytest -n 2 --durations=0 --color=yes

View file

@ -1,21 +0,0 @@
#!/usr/bin/env python
import time
import pytest
import requests
pytestmark = pytest.mark.compose
def test_compose_simple(compose, datadir):
with compose(datadir / 'docker-compose.yml') as project:
j = project.ps()
assert len(j) == 1
assert j[0]['Name'] == 'test_compose-server-1'
assert j[0]['State'] == 'running'
assert j[0]['Publishers'][0]['TargetPort'] == 8000
port = j[0]['Publishers'][0]['PublishedPort']
# XXX: should retry with a timeout
time.sleep(.5)
assert requests.get(f'http://localhost:{port}').status_code == 200

View file

@ -1,8 +0,0 @@
version: "3"
services:
server:
image: python:alpine
command: python -m http.server 8000
ports:
- 8000

View file

@ -8,7 +8,7 @@ import pytest
pytestmark = pytest.mark.docker pytestmark = pytest.mark.docker
def test_split_lapi_agent(crowdsec): def test_split_lapi_agent(crowdsec, flavor):
rand = str(random.randint(0, 10000)) rand = str(random.randint(0, 10000))
lapiname = f'lapi-{rand}' lapiname = f'lapi-{rand}'
agentname = f'agent-{rand}' agentname = f'agent-{rand}'
@ -25,7 +25,10 @@ def test_split_lapi_agent(crowdsec):
'LOCAL_API_URL': f'http://{lapiname}:8080', 'LOCAL_API_URL': f'http://{lapiname}:8080',
} }
with crowdsec(name=lapiname, environment=lapi_env) as lapi, crowdsec(name=agentname, environment=agent_env) as agent: cs_lapi = crowdsec(name=lapiname, environment=lapi_env, flavor=flavor)
cs_agent = crowdsec(name=agentname, environment=agent_env, flavor=flavor)
with cs_lapi as lapi, cs_agent as agent:
lapi.wait_for_log("*CrowdSec Local API listening on 0.0.0.0:8080*") lapi.wait_for_log("*CrowdSec Local API listening on 0.0.0.0:8080*")
agent.wait_for_log("*Starting processing data*") agent.wait_for_log("*Starting processing data*")
lapi.wait_for_http(8080, '/health', want_status=HTTPStatus.OK) lapi.wait_for_http(8080, '/health', want_status=HTTPStatus.OK)

View file

@ -6,8 +6,8 @@ pytestmark = pytest.mark.docker
# XXX this is redundant, already tested in pytest_cs # XXX this is redundant, already tested in pytest_cs
def test_crowdsec(crowdsec): def test_crowdsec(crowdsec, flavor):
with crowdsec() as cs: with crowdsec(flavor=flavor) as cs:
for waiter in cs.log_waiters(): for waiter in cs.log_waiters():
with waiter as matcher: with waiter as matcher:
matcher.fnmatch_lines(["*Starting processing data*"]) matcher.fnmatch_lines(["*Starting processing data*"])