Use stdlib modules instead of deprecated pytest fixtures

Signed-off-by: Lumír Balhar <lbalhar@redhat.com>
This commit is contained in:
Lumir Balhar 2019-08-27 12:26:01 +02:00
parent 60458c8ae7
commit 73cc89c15f
4 changed files with 196 additions and 173 deletions

View File

@ -8,7 +8,6 @@ import random
import shutil import shutil
import tempfile import tempfile
import py
import pytest import pytest
from docker.errors import APIError from docker.errors import APIError
from docker.errors import NotFound from docker.errors import NotFound
@ -16,6 +15,7 @@ from docker.errors import NotFound
from .. import mock from .. import mock
from ..helpers import build_config as load_config from ..helpers import build_config as load_config
from ..helpers import BUSYBOX_IMAGE_WITH_TAG from ..helpers import BUSYBOX_IMAGE_WITH_TAG
from ..helpers import cd
from ..helpers import create_host_file from ..helpers import create_host_file
from .testcases import DockerClientTestCase from .testcases import DockerClientTestCase
from .testcases import SWARM_SKIP_CONTAINERS_ALL from .testcases import SWARM_SKIP_CONTAINERS_ALL
@ -1329,9 +1329,9 @@ class ProjectTest(DockerClientTestCase):
}) })
details = config.ConfigDetails('.', [base_file, override_file]) details = config.ConfigDetails('.', [base_file, override_file])
tmpdir = py.test.ensuretemp('logging_test') tmpdir = tempfile.mkdtemp('logging_test')
self.addCleanup(tmpdir.remove) self.addCleanup(shutil.rmtree, tmpdir)
with tmpdir.as_cwd(): with cd(tmpdir):
config_data = config.load(details) config_data = config.load(details)
project = Project.from_config( project = Project.from_config(
name='composetest', config_data=config_data, client=self.client name='composetest', config_data=config_data, client=self.client

View File

@ -6,8 +6,10 @@ from __future__ import absolute_import
from __future__ import unicode_literals from __future__ import unicode_literals
import copy import copy
import os
import shutil
import tempfile
import py
from docker.errors import ImageNotFound from docker.errors import ImageNotFound
from ..helpers import BUSYBOX_IMAGE_WITH_TAG from ..helpers import BUSYBOX_IMAGE_WITH_TAG
@ -426,26 +428,29 @@ class ServiceStateTest(DockerClientTestCase):
@no_cluster('Can not guarantee the build will be run on the same node the service is deployed') @no_cluster('Can not guarantee the build will be run on the same node the service is deployed')
def test_trigger_recreate_with_build(self): def test_trigger_recreate_with_build(self):
context = py.test.ensuretemp('test_trigger_recreate_with_build') context = tempfile.mkdtemp('test_trigger_recreate_with_build')
self.addCleanup(context.remove) self.addCleanup(shutil.rmtree, context)
base_image = "FROM busybox\nLABEL com.docker.compose.test_image=true\n" base_image = "FROM busybox\nLABEL com.docker.compose.test_image=true\n"
dockerfile = context.join('Dockerfile') dockerfile = os.path.join(context, 'Dockerfile')
dockerfile.write(base_image) with open(dockerfile, mode="w") as dockerfile_fh:
dockerfile_fh.write(base_image)
web = self.create_service('web', build={'context': str(context)}) web = self.create_service('web', build={'context': str(context)})
container = web.create_container() container = web.create_container()
dockerfile.write(base_image + 'CMD echo hello world\n') with open(dockerfile, mode="w") as dockerfile_fh:
dockerfile_fh.write(base_image + 'CMD echo hello world\n')
web.build() web.build()
web = self.create_service('web', build={'context': str(context)}) web = self.create_service('web', build={'context': str(context)})
assert ('recreate', [container]) == web.convergence_plan() assert ('recreate', [container]) == web.convergence_plan()
def test_image_changed_to_build(self): def test_image_changed_to_build(self):
context = py.test.ensuretemp('test_image_changed_to_build') context = tempfile.mkdtemp('test_image_changed_to_build')
self.addCleanup(context.remove) self.addCleanup(shutil.rmtree, context)
context.join('Dockerfile').write(""" with open(os.path.join(context, 'Dockerfile'), mode="w") as dockerfile:
dockerfile.write("""
FROM busybox FROM busybox
LABEL com.docker.compose.test_image=true LABEL com.docker.compose.test_image=true
""") """)

View File

@ -10,7 +10,6 @@ import tempfile
from operator import itemgetter from operator import itemgetter
from random import shuffle from random import shuffle
import py
import pytest import pytest
import yaml import yaml
from ddt import data from ddt import data
@ -18,6 +17,7 @@ from ddt import ddt
from ...helpers import build_config_details from ...helpers import build_config_details
from ...helpers import BUSYBOX_IMAGE_WITH_TAG from ...helpers import BUSYBOX_IMAGE_WITH_TAG
from ...helpers import cd
from compose.config import config from compose.config import config
from compose.config import types from compose.config import types
from compose.config.config import ConfigFile from compose.config.config import ConfigFile
@ -780,13 +780,14 @@ class ConfigTest(unittest.TestCase):
}) })
details = config.ConfigDetails('.', [base_file, override_file]) details = config.ConfigDetails('.', [base_file, override_file])
tmpdir = py.test.ensuretemp('config_test') tmpdir = tempfile.mkdtemp('config_test')
self.addCleanup(tmpdir.remove) self.addCleanup(shutil.rmtree, tmpdir)
tmpdir.join('common.yml').write(""" with open(os.path.join(tmpdir, 'common.yml'), mode="w") as common_fh:
common_fh.write("""
base: base:
labels: ['label=one'] labels: ['label=one']
""") """)
with tmpdir.as_cwd(): with cd(tmpdir):
service_dicts = config.load(details).services service_dicts = config.load(details).services
expected = [ expected = [
@ -815,9 +816,10 @@ class ConfigTest(unittest.TestCase):
} }
) )
tmpdir = pytest.ensuretemp('config_test') tmpdir = tempfile.mkdtemp('config_test')
self.addCleanup(tmpdir.remove) self.addCleanup(shutil.rmtree, tmpdir)
tmpdir.join('base.yml').write(""" with open(os.path.join(tmpdir, 'base.yml'), mode="w") as base_fh:
base_fh.write("""
version: '2.2' version: '2.2'
services: services:
base: base:
@ -827,7 +829,7 @@ class ConfigTest(unittest.TestCase):
""") """)
details = config.ConfigDetails('.', [main_file]) details = config.ConfigDetails('.', [main_file])
with tmpdir.as_cwd(): with cd(tmpdir):
service_dicts = config.load(details).services service_dicts = config.load(details).services
assert service_dicts[0] == { assert service_dicts[0] == {
'name': 'prodweb', 'name': 'prodweb',
@ -1765,22 +1767,23 @@ class ConfigTest(unittest.TestCase):
assert services[0]['environment']['SPRING_JPA_HIBERNATE_DDL-AUTO'] == 'none' assert services[0]['environment']['SPRING_JPA_HIBERNATE_DDL-AUTO'] == 'none'
def test_load_yaml_with_yaml_error(self): def test_load_yaml_with_yaml_error(self):
tmpdir = py.test.ensuretemp('invalid_yaml_test') tmpdir = tempfile.mkdtemp('invalid_yaml_test')
self.addCleanup(tmpdir.remove) self.addCleanup(shutil.rmtree, tmpdir)
invalid_yaml_file = tmpdir.join('docker-compose.yml') invalid_yaml_file = os.path.join(tmpdir, 'docker-compose.yml')
invalid_yaml_file.write(""" with open(invalid_yaml_file, mode="w") as invalid_yaml_file_fh:
invalid_yaml_file_fh.write("""
web: web:
this is bogus: ok: what this is bogus: ok: what
""") """)
with pytest.raises(ConfigurationError) as exc: with pytest.raises(ConfigurationError) as exc:
config.load_yaml(str(invalid_yaml_file)) config.load_yaml(str(invalid_yaml_file))
assert 'line 3, column 32' in exc.exconly() assert 'line 3, column 36' in exc.exconly()
def test_load_yaml_with_bom(self): def test_load_yaml_with_bom(self):
tmpdir = py.test.ensuretemp('bom_yaml') tmpdir = tempfile.mkdtemp('bom_yaml')
self.addCleanup(tmpdir.remove) self.addCleanup(shutil.rmtree, tmpdir)
bom_yaml = tmpdir.join('docker-compose.yml') bom_yaml = os.path.join(tmpdir, 'docker-compose.yml')
with codecs.open(str(bom_yaml), 'w', encoding='utf-8') as f: with codecs.open(str(bom_yaml), 'w', encoding='utf-8') as f:
f.write('''\ufeff f.write('''\ufeff
version: '2.3' version: '2.3'
@ -4724,10 +4727,12 @@ class ExtendsTest(unittest.TestCase):
@mock.patch.dict(os.environ) @mock.patch.dict(os.environ)
def test_extends_with_environment_and_env_files(self): def test_extends_with_environment_and_env_files(self):
tmpdir = py.test.ensuretemp('test_extends_with_environment') tmpdir = tempfile.mkdtemp('test_extends_with_environment')
self.addCleanup(tmpdir.remove) self.addCleanup(shutil.rmtree, tmpdir)
commondir = tmpdir.mkdir('common') commondir = os.path.join(tmpdir, 'common')
commondir.join('base.yml').write(""" os.mkdir(commondir)
with open(os.path.join(commondir, 'base.yml'), mode="w") as base_fh:
base_fh.write("""
app: app:
image: 'example/app' image: 'example/app'
env_file: env_file:
@ -4737,7 +4742,8 @@ class ExtendsTest(unittest.TestCase):
- TEST_ONE=common - TEST_ONE=common
- TEST_TWO=common - TEST_TWO=common
""") """)
tmpdir.join('docker-compose.yml').write(""" with open(os.path.join(tmpdir, 'docker-compose.yml'), mode="w") as docker_compose_fh:
docker_compose_fh.write("""
ext: ext:
extends: extends:
file: common/base.yml file: common/base.yml
@ -4748,14 +4754,16 @@ class ExtendsTest(unittest.TestCase):
- THING - THING
- TEST_ONE=top - TEST_ONE=top
""") """)
commondir.join('envs').write(""" with open(os.path.join(commondir, 'envs'), mode="w") as envs_fh:
envs_fh.write("""
COMMON_ENV_FILE COMMON_ENV_FILE
TEST_ONE=common-env-file TEST_ONE=common-env-file
TEST_TWO=common-env-file TEST_TWO=common-env-file
TEST_THREE=common-env-file TEST_THREE=common-env-file
TEST_FOUR=common-env-file TEST_FOUR=common-env-file
""") """)
tmpdir.join('envs').write(""" with open(os.path.join(tmpdir, 'envs'), mode="w") as envs_fh:
envs_fh.write("""
TOP_ENV_FILE TOP_ENV_FILE
TEST_ONE=top-env-file TEST_ONE=top-env-file
TEST_TWO=top-env-file TEST_TWO=top-env-file
@ -4783,14 +4791,15 @@ class ExtendsTest(unittest.TestCase):
os.environ['THING'] = 'thing' os.environ['THING'] = 'thing'
os.environ['COMMON_ENV_FILE'] = 'secret' os.environ['COMMON_ENV_FILE'] = 'secret'
os.environ['TOP_ENV_FILE'] = 'secret' os.environ['TOP_ENV_FILE'] = 'secret'
config = load_from_filename(str(tmpdir.join('docker-compose.yml'))) config = load_from_filename(str(os.path.join(tmpdir, 'docker-compose.yml')))
assert config == expected assert config == expected
def test_extends_with_mixed_versions_is_error(self): def test_extends_with_mixed_versions_is_error(self):
tmpdir = py.test.ensuretemp('test_extends_with_mixed_version') tmpdir = tempfile.mkdtemp('test_extends_with_mixed_version')
self.addCleanup(tmpdir.remove) self.addCleanup(shutil.rmtree, tmpdir)
tmpdir.join('docker-compose.yml').write(""" with open(os.path.join(tmpdir, 'docker-compose.yml'), mode="w") as docker_compose_fh:
docker_compose_fh.write("""
version: "2" version: "2"
services: services:
web: web:
@ -4799,20 +4808,22 @@ class ExtendsTest(unittest.TestCase):
service: base service: base
image: busybox image: busybox
""") """)
tmpdir.join('base.yml').write(""" with open(os.path.join(tmpdir, 'base.yml'), mode="w") as base_fh:
base_fh.write("""
base: base:
volumes: ['/foo'] volumes: ['/foo']
ports: ['3000:3000'] ports: ['3000:3000']
""") """)
with pytest.raises(ConfigurationError) as exc: with pytest.raises(ConfigurationError) as exc:
load_from_filename(str(tmpdir.join('docker-compose.yml'))) load_from_filename(str(os.path.join(tmpdir, 'docker-compose.yml')))
assert 'Version mismatch' in exc.exconly() assert 'Version mismatch' in exc.exconly()
def test_extends_with_defined_version_passes(self): def test_extends_with_defined_version_passes(self):
tmpdir = py.test.ensuretemp('test_extends_with_defined_version') tmpdir = tempfile.mkdtemp('test_extends_with_defined_version')
self.addCleanup(tmpdir.remove) self.addCleanup(shutil.rmtree, tmpdir)
tmpdir.join('docker-compose.yml').write(""" with open(os.path.join(tmpdir, 'docker-compose.yml'), mode="w") as docker_compose_fh:
docker_compose_fh.write("""
version: "2" version: "2"
services: services:
web: web:
@ -4821,7 +4832,8 @@ class ExtendsTest(unittest.TestCase):
service: base service: base
image: busybox image: busybox
""") """)
tmpdir.join('base.yml').write(""" with open(os.path.join(tmpdir, 'base.yml'), mode="w") as base_fh:
base_fh.write("""
version: "2" version: "2"
services: services:
base: base:
@ -4830,13 +4842,14 @@ class ExtendsTest(unittest.TestCase):
command: top command: top
""") """)
service = load_from_filename(str(tmpdir.join('docker-compose.yml'))) service = load_from_filename(str(os.path.join(tmpdir, 'docker-compose.yml')))
assert service[0]['command'] == "top" assert service[0]['command'] == "top"
def test_extends_with_depends_on(self): def test_extends_with_depends_on(self):
tmpdir = py.test.ensuretemp('test_extends_with_depends_on') tmpdir = tempfile.mkdtemp('test_extends_with_depends_on')
self.addCleanup(tmpdir.remove) self.addCleanup(shutil.rmtree, tmpdir)
tmpdir.join('docker-compose.yml').write(""" with open(os.path.join(tmpdir, 'docker-compose.yml'), mode="w") as docker_compose_fh:
docker_compose_fh.write("""
version: "2" version: "2"
services: services:
base: base:
@ -4848,7 +4861,7 @@ class ExtendsTest(unittest.TestCase):
other: other:
image: example image: example
""") """)
services = load_from_filename(str(tmpdir.join('docker-compose.yml'))) services = load_from_filename(str(os.path.join(tmpdir, 'docker-compose.yml')))
assert service_sort(services)[2]['depends_on'] == { assert service_sort(services)[2]['depends_on'] == {
'other': {'condition': 'service_started'} 'other': {'condition': 'service_started'}
} }
@ -4867,9 +4880,10 @@ class ExtendsTest(unittest.TestCase):
}] }]
def test_extends_with_ports(self): def test_extends_with_ports(self):
tmpdir = py.test.ensuretemp('test_extends_with_ports') tmpdir = tempfile.mkdtemp('test_extends_with_ports')
self.addCleanup(tmpdir.remove) self.addCleanup(shutil.rmtree, tmpdir)
tmpdir.join('docker-compose.yml').write(""" with open(os.path.join(tmpdir, 'docker-compose.yml'), mode="w") as docker_compose_fh:
docker_compose_fh.write("""
version: '2' version: '2'
services: services:
@ -4882,16 +4896,17 @@ class ExtendsTest(unittest.TestCase):
extends: extends:
service: a service: a
""") """)
services = load_from_filename(str(tmpdir.join('docker-compose.yml'))) services = load_from_filename(str(os.path.join(tmpdir, 'docker-compose.yml')))
assert len(services) == 2 assert len(services) == 2
for svc in services: for svc in services:
assert svc['ports'] == [types.ServicePort('80', None, None, None, None)] assert svc['ports'] == [types.ServicePort('80', None, None, None, None)]
def test_extends_with_security_opt(self): def test_extends_with_security_opt(self):
tmpdir = py.test.ensuretemp('test_extends_with_ports') tmpdir = tempfile.mkdtemp('test_extends_with_ports')
self.addCleanup(tmpdir.remove) self.addCleanup(shutil.rmtree, tmpdir)
tmpdir.join('docker-compose.yml').write(""" with open(os.path.join(tmpdir, 'docker-compose.yml'), mode="w") as docker_compose_fh:
docker_compose_fh.write("""
version: '2' version: '2'
services: services:
@ -4905,7 +4920,7 @@ class ExtendsTest(unittest.TestCase):
extends: extends:
service: a service: a
""") """)
services = load_from_filename(str(tmpdir.join('docker-compose.yml'))) services = load_from_filename(str(os.path.join(tmpdir, 'docker-compose.yml')))
assert len(services) == 2 assert len(services) == 2
for svc in services: for svc in services:
assert types.SecurityOpt.parse('apparmor:unconfined') in svc['security_opt'] assert types.SecurityOpt.parse('apparmor:unconfined') in svc['security_opt']

View File

@ -4,6 +4,9 @@ from __future__ import print_function
from __future__ import unicode_literals from __future__ import unicode_literals
import codecs import codecs
import os
import shutil
import tempfile
import pytest import pytest
@ -46,19 +49,19 @@ class EnvironmentTest(unittest.TestCase):
assert env.get_boolean('UNDEFINED') is False assert env.get_boolean('UNDEFINED') is False
def test_env_vars_from_file_bom(self): def test_env_vars_from_file_bom(self):
tmpdir = pytest.ensuretemp('env_file') tmpdir = tempfile.mkdtemp('env_file')
self.addCleanup(tmpdir.remove) self.addCleanup(shutil.rmtree, tmpdir)
with codecs.open('{}/bom.env'.format(str(tmpdir)), 'w', encoding='utf-8') as f: with codecs.open('{}/bom.env'.format(str(tmpdir)), 'w', encoding='utf-8') as f:
f.write('\ufeffPARK_BOM=박봄\n') f.write('\ufeffPARK_BOM=박봄\n')
assert env_vars_from_file(str(tmpdir.join('bom.env'))) == { assert env_vars_from_file(str(os.path.join(tmpdir, 'bom.env'))) == {
'PARK_BOM': '박봄' 'PARK_BOM': '박봄'
} }
def test_env_vars_from_file_whitespace(self): def test_env_vars_from_file_whitespace(self):
tmpdir = pytest.ensuretemp('env_file') tmpdir = tempfile.mkdtemp('env_file')
self.addCleanup(tmpdir.remove) self.addCleanup(shutil.rmtree, tmpdir)
with codecs.open('{}/whitespace.env'.format(str(tmpdir)), 'w', encoding='utf-8') as f: with codecs.open('{}/whitespace.env'.format(str(tmpdir)), 'w', encoding='utf-8') as f:
f.write('WHITESPACE =yes\n') f.write('WHITESPACE =yes\n')
with pytest.raises(ConfigurationError) as exc: with pytest.raises(ConfigurationError) as exc:
env_vars_from_file(str(tmpdir.join('whitespace.env'))) env_vars_from_file(str(os.path.join(tmpdir, 'whitespace.env')))
assert 'environment variable' in exc.exconly() assert 'environment variable' in exc.exconly()