Merge branch 'pytest' of https://github.com/aanand/docker-py into aanand-pytest

This commit is contained in:
Joffrey F 2015-08-25 16:10:47 -07:00
commit f9a540aa77
6 changed files with 113 additions and 238 deletions

View File

@ -13,10 +13,10 @@ build-py3:
test: unit-test integration-test unit-test-py3 integration-test-py3 test: unit-test integration-test unit-test-py3 integration-test-py3
unit-test: build unit-test: build
docker run docker-py python tests/test.py docker run docker-py py.test tests/test.py
unit-test-py3: build-py3 unit-test-py3: build-py3
docker run docker-py3 python tests/test.py docker run docker-py3 py.test tests/test.py
integration-test: build integration-test: build
docker run -e NOT_ON_HOST=true -v `$(HOST_TMPDIR)`:/tmp -v /var/run/docker.sock:/var/run/docker.sock docker-py python tests/integration_test.py docker run -e NOT_ON_HOST=true -v `$(HOST_TMPDIR)`:/tmp -v /var/run/docker.sock:/var/run/docker.sock docker-py python tests/integration_test.py

View File

@ -1,2 +1,3 @@
mock==1.0.1 mock==1.0.1
coverage==3.7.1 pytest==2.7.2
pytest-cov==2.1.0

View File

@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
import fake_stat from . import fake_stat
CURRENT_VERSION = 'v1.19' CURRENT_VERSION = 'v1.19'

View File

@ -27,16 +27,16 @@ import tarfile
import tempfile import tempfile
import threading import threading
import time import time
import unittest
import warnings
import random import random
import docker import docker
import requests import requests
import six import six
import base from . import base
import fake_api from . import fake_api
import pytest
try: try:
from unittest import mock from unittest import mock
@ -46,9 +46,6 @@ except ImportError:
DEFAULT_TIMEOUT_SECONDS = docker.client.constants.DEFAULT_TIMEOUT_SECONDS DEFAULT_TIMEOUT_SECONDS = docker.client.constants.DEFAULT_TIMEOUT_SECONDS
warnings.simplefilter('error')
warnings.filterwarnings('error')
def response(status_code=200, content='', headers=None, reason=None, elapsed=0, def response(status_code=200, content='', headers=None, reason=None, elapsed=0,
request=None): request=None):
@ -138,15 +135,13 @@ class DockerClientTest(Cleanup, base.BaseTestCase):
} }
def test_ctor(self): def test_ctor(self):
try: with pytest.raises(docker.errors.DockerException) as excinfo:
docker.Client(version=1.12) docker.Client(version=1.12)
except Exception as e:
self.assertTrue(isinstance(e, docker.errors.DockerException)) self.assertEqual(
if not six.PY3: str(excinfo.value),
self.assertEqual( 'Version parameter must be a string or None. Found float'
str(e), )
'Version parameter must be a string or None. Found float'
)
######################### #########################
# INFORMATION TESTS # # INFORMATION TESTS #
@ -187,11 +182,9 @@ class DockerClientTest(Cleanup, base.BaseTestCase):
) )
def test_image_viz(self): def test_image_viz(self):
try: with pytest.raises(Exception):
self.client.images('busybox', viz=True) self.client.images('busybox', viz=True)
self.fail('Viz output should not be supported!') self.fail('Viz output should not be supported!')
except Exception:
pass
def test_events(self): def test_events(self):
self.client.events() self.client.events()
@ -615,19 +608,21 @@ class DockerClientTest(Cleanup, base.BaseTestCase):
) )
def test_start_container_none(self): def test_start_container_none(self):
try: with pytest.raises(ValueError) as excinfo:
self.client.start(container=None) self.client.start(container=None)
except ValueError as e:
self.assertEqual(str(e), 'image or container param is undefined')
else:
self.fail('Command should raise ValueError')
try: self.assertEqual(
str(excinfo.value),
'image or container param is undefined',
)
with pytest.raises(ValueError) as excinfo:
self.client.start(None) self.client.start(None)
except ValueError as e:
self.assertEqual(str(e), 'image or container param is undefined') self.assertEqual(
else: str(excinfo.value),
self.fail('Command should raise ValueError') 'image or container param is undefined',
)
def test_start_container_regression_573(self): def test_start_container_regression_573(self):
self.client.start(**{'container': fake_api.FAKE_CONTAINER_ID}) self.client.start(**{'container': fake_api.FAKE_CONTAINER_ID})
@ -765,7 +760,7 @@ class DockerClientTest(Cleanup, base.BaseTestCase):
) )
def test_create_container_with_binds_mode_and_ro_error(self): def test_create_container_with_binds_mode_and_ro_error(self):
try: with pytest.raises(ValueError):
mount_dest = '/mnt' mount_dest = '/mnt'
mount_origin = '/tmp' mount_origin = '/tmp'
self.client.create_container( self.client.create_container(
@ -777,10 +772,6 @@ class DockerClientTest(Cleanup, base.BaseTestCase):
}} }}
) )
) )
except ValueError:
return
self.fail('Command should raise ValueError')
def test_create_container_with_binds_list(self): def test_create_container_with_binds_list(self):
self.client.create_container( self.client.create_container(
@ -962,192 +953,93 @@ class DockerClientTest(Cleanup, base.BaseTestCase):
) )
def test_start_container_with_lxc_conf(self): def test_start_container_with_lxc_conf(self):
if six.PY2: def call_start():
try: self.client.start(
self.client.start( fake_api.FAKE_CONTAINER_ID,
fake_api.FAKE_CONTAINER_ID, lxc_conf={'lxc.conf.k': 'lxc.conf.value'}
lxc_conf={'lxc.conf.k': 'lxc.conf.value'} )
)
except DeprecationWarning: pytest.deprecated_call(call_start)
return
else:
self.fail('Expected a DeprecationWarning')
else:
with self.assertWarns(DeprecationWarning):
self.client.start(
fake_api.FAKE_CONTAINER_ID,
lxc_conf={'lxc.conf.k': 'lxc.conf.value'}
)
def test_start_container_with_lxc_conf_compat(self): def test_start_container_with_lxc_conf_compat(self):
if six.PY2: def call_start():
try: self.client.start(
self.client.start( fake_api.FAKE_CONTAINER_ID,
fake_api.FAKE_CONTAINER_ID, lxc_conf=[{'Key': 'lxc.conf.k', 'Value': 'lxc.conf.value'}]
lxc_conf=[{'Key': 'lxc.conf.k', 'Value': 'lxc.conf.value'}] )
)
except DeprecationWarning: pytest.deprecated_call(call_start)
return
else:
self.fail('Expected a DeprecationWarning')
else:
with self.assertWarns(DeprecationWarning):
self.client.start(
fake_api.FAKE_CONTAINER_ID,
lxc_conf=[{'Key': 'lxc.conf.k', 'Value': 'lxc.conf.value'}]
)
def test_start_container_with_binds_ro(self): def test_start_container_with_binds_ro(self):
mount_dest = '/mnt' def call_start():
mount_origin = '/tmp' self.client.start(
fake_api.FAKE_CONTAINER_ID, binds={
'/tmp': {
"bind": '/mnt',
"ro": True
}
}
)
if six.PY2: pytest.deprecated_call(call_start)
try:
self.client.start(
fake_api.FAKE_CONTAINER_ID, binds={
mount_origin: {
"bind": mount_dest,
"ro": True
}
}
)
except DeprecationWarning:
return
else:
self.fail('Expected a DeprecationWarning')
else:
with self.assertWarns(DeprecationWarning):
self.client.start(
fake_api.FAKE_CONTAINER_ID, binds={
mount_origin: {
"bind": mount_dest,
"ro": True
}
}
)
def test_start_container_with_binds_rw(self): def test_start_container_with_binds_rw(self):
mount_dest = '/mnt' def call_start():
mount_origin = '/tmp' self.client.start(
if six.PY2: fake_api.FAKE_CONTAINER_ID, binds={
try: '/tmp': {"bind": '/mnt', "ro": False}
self.client.start( }
fake_api.FAKE_CONTAINER_ID, binds={ )
mount_origin: {"bind": mount_dest, "ro": False}
} pytest.deprecated_call(call_start)
)
except DeprecationWarning:
return
else:
self.fail('Expected a DeprecationWarning')
else:
with self.assertWarns(DeprecationWarning):
self.client.start(
fake_api.FAKE_CONTAINER_ID, binds={
mount_origin: {"bind": mount_dest, "ro": False}
}
)
def test_start_container_with_port_binds(self): def test_start_container_with_port_binds(self):
self.maxDiff = None self.maxDiff = None
if six.PY2:
try: def call_start():
self.client.start(fake_api.FAKE_CONTAINER_ID, port_bindings={ self.client.start(fake_api.FAKE_CONTAINER_ID, port_bindings={
1111: None, 1111: None,
2222: 2222, 2222: 2222,
'3333/udp': (3333,), '3333/udp': (3333,),
4444: ('127.0.0.1',), 4444: ('127.0.0.1',),
5555: ('127.0.0.1', 5555), 5555: ('127.0.0.1', 5555),
6666: [('127.0.0.1',), ('192.168.0.1',)] 6666: [('127.0.0.1',), ('192.168.0.1',)]
}) })
except DeprecationWarning:
return pytest.deprecated_call(call_start)
else:
self.fail('Expected a DeprecationWarning')
else:
with self.assertWarns(DeprecationWarning):
self.client.start(fake_api.FAKE_CONTAINER_ID, port_bindings={
1111: None,
2222: 2222,
'3333/udp': (3333,),
4444: ('127.0.0.1',),
5555: ('127.0.0.1', 5555),
6666: [('127.0.0.1',), ('192.168.0.1',)]
})
def test_start_container_with_links(self): def test_start_container_with_links(self):
# one link def call_start():
link_path = 'path' self.client.start(
alias = 'alias' fake_api.FAKE_CONTAINER_ID, links={'path': 'alias'}
)
if six.PY2: pytest.deprecated_call(call_start)
try:
self.client.start(fake_api.FAKE_CONTAINER_ID,
links={link_path: alias})
except DeprecationWarning:
return
else:
self.fail('Expected a DeprecationWarning')
else:
with self.assertWarns(DeprecationWarning):
self.client.start(
fake_api.FAKE_CONTAINER_ID, links={link_path: alias}
)
def test_start_container_with_multiple_links(self): def test_start_container_with_multiple_links(self):
link_path = 'path' def call_start():
alias = 'alias' self.client.start(
if six.PY2: fake_api.FAKE_CONTAINER_ID,
try: links={
self.client.start( 'path1': 'alias1',
fake_api.FAKE_CONTAINER_ID, 'path2': 'alias2'
links={ }
link_path + '1': alias + '1', )
link_path + '2': alias + '2'
} pytest.deprecated_call(call_start)
)
except DeprecationWarning:
return
else:
self.fail('Expected a DeprecationWarning')
else:
with self.assertWarns(DeprecationWarning):
self.client.start(
fake_api.FAKE_CONTAINER_ID,
links={
link_path + '1': alias + '1',
link_path + '2': alias + '2'
}
)
def test_start_container_with_links_as_list_of_tuples(self): def test_start_container_with_links_as_list_of_tuples(self):
# one link def call_start():
link_path = 'path' self.client.start(fake_api.FAKE_CONTAINER_ID,
alias = 'alias' links=[('path', 'alias')])
if six.PY2:
try: pytest.deprecated_call(call_start)
self.client.start(fake_api.FAKE_CONTAINER_ID,
links=[(link_path, alias)])
except DeprecationWarning:
return
else:
self.fail('Expected a DeprecationWarning')
else:
with self.assertWarns(DeprecationWarning):
self.client.start(fake_api.FAKE_CONTAINER_ID,
links=[(link_path, alias)])
def test_start_container_privileged(self): def test_start_container_privileged(self):
if six.PY2: def call_start():
try: self.client.start(fake_api.FAKE_CONTAINER_ID, privileged=True)
self.client.start(fake_api.FAKE_CONTAINER_ID, privileged=True)
except DeprecationWarning: pytest.deprecated_call(call_start)
return
else:
self.fail('Expected a DeprecationWarning')
else:
with self.assertWarns(DeprecationWarning):
self.client.start(fake_api.FAKE_CONTAINER_ID, privileged=True)
def test_start_container_with_dict_instead_of_id(self): def test_start_container_with_dict_instead_of_id(self):
self.client.start({'Id': fake_api.FAKE_CONTAINER_ID}) self.client.start({'Id': fake_api.FAKE_CONTAINER_ID})
@ -1716,14 +1608,12 @@ class DockerClientTest(Cleanup, base.BaseTestCase):
def test_inspect_container_undefined_id(self): def test_inspect_container_undefined_id(self):
for arg in None, '', {True: True}: for arg in None, '', {True: True}:
try: with pytest.raises(docker.errors.NullResource) as excinfo:
self.client.inspect_container(arg) self.client.inspect_container(arg)
except docker.errors.NullResource as e:
self.assertEqual( self.assertEqual(
e.args[0], 'image or container param is undefined' excinfo.value.args[0], 'image or container param is undefined'
) )
else:
self.fail('Command expected NullResource exception')
def test_container_stats(self): def test_container_stats(self):
self.client.stats(fake_api.FAKE_CONTAINER_ID) self.client.stats(fake_api.FAKE_CONTAINER_ID)
@ -1869,14 +1759,12 @@ class DockerClientTest(Cleanup, base.BaseTestCase):
def test_inspect_image_undefined_id(self): def test_inspect_image_undefined_id(self):
for arg in None, '', {True: True}: for arg in None, '', {True: True}:
try: with pytest.raises(docker.errors.NullResource) as excinfo:
self.client.inspect_image(arg) self.client.inspect_image(arg)
except docker.errors.NullResource as e:
self.assertEqual( self.assertEqual(
e.args[0], 'image or container param is undefined' excinfo.value.args[0], 'image or container param is undefined'
) )
else:
self.fail('Command expected NullResource exception')
def test_insert_image(self): def test_insert_image(self):
try: try:
@ -2331,6 +2219,3 @@ class StreamTest(Cleanup, base.BaseTestCase):
self.assertEqual(list(stream), [ self.assertEqual(list(stream), [
str(i).encode() for i in range(50)]) str(i).encode() for i in range(50)])
if __name__ == '__main__':
unittest.main()

View File

@ -1,6 +1,5 @@
import os import os
import os.path import os.path
import unittest
import tempfile import tempfile
from docker.client import Client from docker.client import Client
@ -13,7 +12,9 @@ from docker.utils import (
from docker.utils.ports import build_port_bindings, split_port from docker.utils.ports import build_port_bindings, split_port
from docker.auth import resolve_repository_name, resolve_authconfig from docker.auth import resolve_repository_name, resolve_authconfig
import base from . import base
import pytest
class UtilsTest(base.BaseTestCase): class UtilsTest(base.BaseTestCase):
@ -80,13 +81,8 @@ class UtilsTest(base.BaseTestCase):
} }
for host in invalid_hosts: for host in invalid_hosts:
try: with pytest.raises(DockerException):
parsed = parse_host(host) parse_host(host)
self.fail('Expected to fail but success: %s -> %s' % (
host, parsed
))
except DockerException:
pass
for host, expected in valid_hosts.items(): for host, expected in valid_hosts.items():
self.assertEqual(parse_host(host), expected, msg=host) self.assertEqual(parse_host(host), expected, msg=host)
@ -476,6 +472,3 @@ class UtilsTest(base.BaseTestCase):
["127.0.0.1:1000:1000", "127.0.0.1:2000:2000"]) ["127.0.0.1:1000:1000", "127.0.0.1:2000:2000"])
self.assertEqual(port_bindings["1000"], [("127.0.0.1", "1000")]) self.assertEqual(port_bindings["1000"], [("127.0.0.1", "1000")])
self.assertEqual(port_bindings["2000"], [("127.0.0.1", "2000")]) self.assertEqual(port_bindings["2000"], [("127.0.0.1", "2000")])
if __name__ == '__main__':
unittest.main()

View File

@ -5,11 +5,7 @@ skipsdist=True
[testenv] [testenv]
usedevelop=True usedevelop=True
commands = commands =
{envbindir}/coverage run -p tests/test.py py.test --cov=docker tests/test.py tests/utils_test.py
{envbindir}/coverage run -p tests/utils_test.py
{envbindir}/coverage combine
{envbindir}/coverage report
{envbindir}/coverage html
deps = deps =
-r{toxinidir}/test-requirements.txt -r{toxinidir}/test-requirements.txt
-r{toxinidir}/requirements.txt -r{toxinidir}/requirements.txt