mirror of
https://github.com/jupyter/docker-stacks.git
synced 2025-10-11 12:02:56 +00:00
Switch to pytest for container testing
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
language: generic
|
||||
|
||||
language: python
|
||||
python:
|
||||
- 3.6
|
||||
sudo: required
|
||||
services:
|
||||
- docker
|
||||
|
||||
install:
|
||||
- pip install pytest docker
|
||||
script:
|
||||
- make build-test-all
|
||||
|
15
Makefile
15
Makefile
@@ -54,15 +54,8 @@ dev/%: PORT?=8888
|
||||
dev/%: ## run a foreground container for a stack
|
||||
docker run -it --rm -p $(PORT):8888 $(DARGS) $(OWNER)/$(notdir $@) $(ARGS)
|
||||
|
||||
test/%:
|
||||
@TEST_IMAGE="$(OWNER)/$(notdir $@)" pytest test
|
||||
|
||||
|
||||
test/%: ## run a stack container, check for jupyter server liveliness
|
||||
@-docker rm -f iut
|
||||
@docker run -d --name iut $(OWNER)/$(notdir $@)
|
||||
@for i in $$(seq 0 9); do \
|
||||
sleep $$i; \
|
||||
docker exec iut bash -c 'wget http://localhost:8888 -O- | grep -i jupyter'; \
|
||||
if [[ $$? == 0 ]]; then exit 0; fi; \
|
||||
done ; exit 1
|
||||
|
||||
test-all: $(ALL_IMAGES:%=test/%) ## test all stacks
|
||||
test/base-notebook: ## test supported options in the base notebook
|
||||
@TEST_IMAGE="$(OWNER)/$(notdir $@)" pytest test base-notebook/test
|
52
test/test_notebook.py
Normal file
52
test/test_notebook.py
Normal file
@@ -0,0 +1,52 @@
|
||||
# Copyright (c) Jupyter Development Team.
|
||||
# Distributed under the terms of the Modified BSD License.
|
||||
import os
|
||||
import time
|
||||
|
||||
import docker
|
||||
import pytest
|
||||
import requests
|
||||
|
||||
|
||||
@pytest.fixture(scope='session')
|
||||
def docker_client():
|
||||
"""Docker client to use"""
|
||||
return docker.from_env()
|
||||
|
||||
|
||||
@pytest.fixture(scope='session')
|
||||
def image_name():
|
||||
"""Image name to test"""
|
||||
return os.getenv('TEST_IMAGE', 'jupyter/base-notebook')
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def nb_container(docker_client, image_name):
|
||||
"""Notebook container to test"""
|
||||
container = docker_client.containers.run(
|
||||
image_name,
|
||||
detach=True,
|
||||
auto_remove=True,
|
||||
ports={
|
||||
'8888/tcp': 8888
|
||||
}
|
||||
)
|
||||
yield container
|
||||
container.kill()
|
||||
|
||||
|
||||
def test_server_liveliness(nb_container):
|
||||
"""Notebook server should eventually respond with HTTP 200 OK."""
|
||||
for i in range(10):
|
||||
try:
|
||||
resp = requests.get('http://localhost:8888')
|
||||
except requests.exceptions.ConnectionError:
|
||||
# Wait a bit and try again. Just because the docker container
|
||||
# is running doesn't mean the notebook server is ready to accept
|
||||
# connections inside it.
|
||||
time.sleep(i)
|
||||
else:
|
||||
assert resp.status_code == 200
|
||||
break
|
||||
else:
|
||||
assert False, 'could not connect to server'
|
Reference in New Issue
Block a user