Skip to content

Commit

Permalink
Move fixtures to conftest.py
Browse files Browse the repository at this point in the history
  • Loading branch information
LourensVeen committed Feb 10, 2019
1 parent 238585a commit 8a58a7a
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 96 deletions.
17 changes: 0 additions & 17 deletions tests/clean_up.py

This file was deleted.

77 changes: 77 additions & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
import docker
import pytest
import random
import time

import cerise_manager.service as cs


@pytest.fixture(scope='session')
def docker_client():
return docker.from_env()


def clean_up_service(docker_client, srv_name):
try:
test_srv = docker_client.containers.get(srv_name)
test_srv.stop()
test_srv.remove()
except docker.errors.NotFound:
pass


@pytest.fixture(scope='session')
def clean_up(docker_client):
clean_up_service(docker_client, 'cerise_manager_test_service')
clean_up_service(docker_client, 'cerise_manager_test_service2')
clean_up_service(docker_client, 'cerise_manager_test_service3')


@pytest.fixture(scope='session')
def test_image(clean_up):
"""Get a plain cerise image for testing.
Ignores errors; we may have a local image available already,
in which case we want to continue, otherwise the other
tests will fail.
"""
docker_client = docker.from_env()
try:
docker_client.images.pull('mdstudio/cerise:develop')
except docker.errors.APIError:
pass
return 'mdstudio/cerise:develop'


def wait_for_status(container, status):
while container.status != status:
time.sleep(0.05)
container.reload()


@pytest.fixture(scope='session')
def test_port():
return 29593 + random.randrange(100)


@pytest.fixture(scope='session')
def test_container(request, test_image, test_port, docker_client):
image = docker_client.images.get(test_image)

container = docker_client.containers.run(
image,
name='cerise_manager_test_service',
ports={'29593/tcp': ('127.0.0.1', test_port) },
detach=True)

wait_for_status(container, 'running')

yield container

container.stop()
container.remove()


@pytest.fixture(scope='session')
def test_service(test_container):
return cs.get_service('cerise_manager_test_service')
26 changes: 0 additions & 26 deletions tests/fixtures.py

This file was deleted.

61 changes: 8 additions & 53 deletions tests/test_service.py
Original file line number Diff line number Diff line change
@@ -1,57 +1,12 @@
import docker
import json
import os
import pytest
import random
import requests
import sys
import time
from unittest.mock import patch


# clean up any mess left over from previous failed tests
from .clean_up import clean_up
clean_up()

import cerise_manager.service as cs
import cerise_manager.errors as ce
from .clean_up import clean_up_service

from .fixtures import docker_client, test_image


def wait_for_status(container, status):
while container.status != status:
time.sleep(0.05)
container.reload()


@pytest.fixture(scope='session')
def test_port():
return 29593 + random.randrange(100)


@pytest.fixture(scope='session')
def test_container(request, test_image, test_port, docker_client):
image = docker_client.images.get(test_image)

container = docker_client.containers.run(
image,
name='cerise_manager_test_service',
ports={'29593/tcp': ('127.0.0.1', test_port) },
detach=True)

wait_for_status(container, 'running')

yield container

container.stop()
container.remove()


@pytest.fixture(scope='session')
def test_service(test_container):
return cs.get_service('cerise_manager_test_service')
from .conftest import clean_up_service, wait_for_status


def test_service_exists(test_container):
Expand Down Expand Up @@ -86,28 +41,28 @@ def test_create_service(docker_client):
srv = cs.create_service('cerise_manager_test_service2',
'mdstudio/cerise:develop')
assert isinstance(srv, cs.ManagedService)
clean_up_service('cerise_manager_test_service2')
clean_up_service(docker_client, 'cerise_manager_test_service2')

def test_create_existing_service(test_container):
with pytest.raises(ce.ServiceAlreadyExists):
cs.create_service('cerise_manager_test_service',
'mdstudio/cerise:develop')

def test_create_service_port_occupied(test_container, test_port):
def test_create_service_port_occupied(docker_client, test_container, test_port):
with pytest.raises(ce.PortNotAvailable):
cs.create_service('cerise_manager_test_service2',
'mdstudio/cerise:develop', test_port)
clean_up_service('cerise_manager_test_service2')
clean_up_service(docker_client, 'cerise_manager_test_service2')

def test_create_service_auto_port_occupied():
def test_create_service_auto_port_occupied(docker_client):
with patch('cerise_manager.service._RAND_RANGE', 1):
srv0 = cs.create_service('cerise_manager_test_service2',
'mdstudio/cerise:develop')
srv1 = cs.create_service('cerise_manager_test_service3',
'mdstudio/cerise:develop')
assert srv0._port != srv1._port
clean_up_service('cerise_manager_test_service2')
clean_up_service('cerise_manager_test_service3')
clean_up_service(docker_client, 'cerise_manager_test_service2')
clean_up_service(docker_client, 'cerise_manager_test_service3')

def test_create_two_services_and_destroy(test_container, test_port, docker_client):
srv = cs.create_service('cerise_manager_test_service2',
Expand All @@ -132,7 +87,7 @@ def test_require_service(docker_client):
srv = cs.require_service('cerise_manager_test_service2',
'mdstudio/cerise:develop')
assert isinstance(srv, cs.ManagedService)
clean_up_service('cerise_manager_test_service2')
clean_up_service(docker_client, 'cerise_manager_test_service2')

def test_require_existing_service(docker_client, test_container, test_port):
srv = cs.require_service('cerise_manager_test_service',
Expand Down

0 comments on commit 8a58a7a

Please sign in to comment.