mirror of https://github.com/docker/compose.git
Update unit tests for stream_output to match the behaviour of a docker-py response.
Signed-off-by: Daniel Nephin <dnephin@gmail.com>
This commit is contained in:
parent
7e4c3142d7
commit
71ff872e8e
|
@ -4,13 +4,12 @@ from __future__ import unicode_literals
|
|||
import sys
|
||||
from itertools import cycle
|
||||
|
||||
import six
|
||||
from six import next
|
||||
|
||||
from compose import utils
|
||||
from . import colors
|
||||
from .multiplexer import Multiplexer
|
||||
from .utils import split_buffer
|
||||
from compose import utils
|
||||
|
||||
|
||||
class LogPrinter(object):
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
import codecs
|
||||
import json
|
||||
|
||||
import six
|
||||
|
||||
from compose import utils
|
||||
|
||||
|
||||
class StreamOutputError(Exception):
|
||||
pass
|
||||
|
@ -10,14 +11,13 @@ class StreamOutputError(Exception):
|
|||
|
||||
def stream_output(output, stream):
|
||||
is_terminal = hasattr(stream, 'isatty') and stream.isatty()
|
||||
if not six.PY3:
|
||||
stream = codecs.getwriter('utf-8')(stream)
|
||||
stream = utils.get_output_stream(stream)
|
||||
all_events = []
|
||||
lines = {}
|
||||
diff = 0
|
||||
|
||||
for chunk in output:
|
||||
if six.PY3 and not isinstance(chunk, str):
|
||||
if six.PY3:
|
||||
chunk = chunk.decode('utf-8')
|
||||
event = json.loads(chunk)
|
||||
all_events.append(event)
|
||||
|
|
|
@ -324,11 +324,11 @@ class Project(object):
|
|||
else:
|
||||
service_names = self.service_names
|
||||
|
||||
containers = filter(None, [
|
||||
containers = list(filter(None, [
|
||||
Container.from_ps(self.client, container)
|
||||
for container in self.client.containers(
|
||||
all=stopped,
|
||||
filters={'label': self.labels(one_off=one_off)})])
|
||||
filters={'label': self.labels(one_off=one_off)})]))
|
||||
|
||||
def matches_service_names(container):
|
||||
return container.labels.get(LABEL_SERVICE) in service_names
|
||||
|
|
|
@ -710,6 +710,8 @@ class Service(object):
|
|||
log.info('Building %s...' % self.name)
|
||||
|
||||
path = self.options['build']
|
||||
# python2 os.path() doesn't support unicode, so we need to encode it to
|
||||
# a byte string
|
||||
if not six.PY3:
|
||||
path = path.encode('utf8')
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import logging
|
|||
import sys
|
||||
from threading import Thread
|
||||
|
||||
import six
|
||||
from docker.errors import APIError
|
||||
from six.moves.queue import Empty
|
||||
from six.moves.queue import Queue
|
||||
|
@ -18,7 +19,7 @@ def parallel_execute(objects, obj_callable, msg_index, msg):
|
|||
For a given list of objects, call the callable passing in the first
|
||||
object we give it.
|
||||
"""
|
||||
stream = codecs.getwriter('utf-8')(sys.stdout)
|
||||
stream = get_output_stream()
|
||||
lines = []
|
||||
errors = {}
|
||||
|
||||
|
@ -70,6 +71,12 @@ def parallel_execute(objects, obj_callable, msg_index, msg):
|
|||
stream.write("ERROR: for {} {} \n".format(error, errors[error]))
|
||||
|
||||
|
||||
def get_output_stream(stream=sys.stdout):
|
||||
if six.PY3:
|
||||
return stream
|
||||
return codecs.getwriter('utf-8')(stream)
|
||||
|
||||
|
||||
def write_out_msg(stream, lines, msg_index, msg, status="done"):
|
||||
"""
|
||||
Using special ANSI code characters we can write out the msg over the top of
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import unittest
|
||||
|
||||
from docker.errors import APIError
|
||||
from mock import Mock
|
||||
|
||||
from .. import mock
|
||||
from .testcases import DockerClientTestCase
|
||||
from compose import legacy
|
||||
from compose.project import Project
|
||||
|
@ -66,7 +66,7 @@ class UtilitiesTestCase(unittest.TestCase):
|
|||
)
|
||||
|
||||
def test_get_legacy_containers(self):
|
||||
client = Mock()
|
||||
client = mock.Mock()
|
||||
client.containers.return_value = [
|
||||
{
|
||||
"Id": "abc123",
|
||||
|
|
|
@ -10,27 +10,27 @@ from tests import unittest
|
|||
class ProgressStreamTestCase(unittest.TestCase):
|
||||
def test_stream_output(self):
|
||||
output = [
|
||||
'{"status": "Downloading", "progressDetail": {"current": '
|
||||
'31019763, "start": 1413653874, "total": 62763875}, '
|
||||
'"progress": "..."}',
|
||||
b'{"status": "Downloading", "progressDetail": {"current": '
|
||||
b'31019763, "start": 1413653874, "total": 62763875}, '
|
||||
b'"progress": "..."}',
|
||||
]
|
||||
events = progress_stream.stream_output(output, StringIO())
|
||||
self.assertEqual(len(events), 1)
|
||||
|
||||
def test_stream_output_div_zero(self):
|
||||
output = [
|
||||
'{"status": "Downloading", "progressDetail": {"current": '
|
||||
'0, "start": 1413653874, "total": 0}, '
|
||||
'"progress": "..."}',
|
||||
b'{"status": "Downloading", "progressDetail": {"current": '
|
||||
b'0, "start": 1413653874, "total": 0}, '
|
||||
b'"progress": "..."}',
|
||||
]
|
||||
events = progress_stream.stream_output(output, StringIO())
|
||||
self.assertEqual(len(events), 1)
|
||||
|
||||
def test_stream_output_null_total(self):
|
||||
output = [
|
||||
'{"status": "Downloading", "progressDetail": {"current": '
|
||||
'0, "start": 1413653874, "total": null}, '
|
||||
'"progress": "..."}',
|
||||
b'{"status": "Downloading", "progressDetail": {"current": '
|
||||
b'0, "start": 1413653874, "total": null}, '
|
||||
b'"progress": "..."}',
|
||||
]
|
||||
events = progress_stream.stream_output(output, StringIO())
|
||||
self.assertEqual(len(events), 1)
|
||||
|
|
|
@ -280,7 +280,7 @@ class ServiceTest(unittest.TestCase):
|
|||
|
||||
def test_build_does_not_pull(self):
|
||||
self.mock_client.build.return_value = [
|
||||
'{"stream": "Successfully built 12345"}',
|
||||
b'{"stream": "Successfully built 12345"}',
|
||||
]
|
||||
|
||||
service = Service('foo', client=self.mock_client, build='.')
|
||||
|
|
Loading…
Reference in New Issue