Merge pull request #2317 from docker/fix_socket_detach_helper

Fix socket detach helper
This commit is contained in:
Joffrey F 2019-05-01 00:57:27 -07:00 committed by GitHub
commit 992e0dcdfb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 8 deletions

View File

@ -2,16 +2,16 @@ import functools
import os import os
import os.path import os.path
import random import random
import re
import socket
import tarfile import tarfile
import tempfile import tempfile
import time import time
import re
import six
import socket
import docker import docker
import paramiko import paramiko
import pytest import pytest
import six
def make_tree(dirs, files): def make_tree(dirs, files):
@ -119,13 +119,18 @@ def assert_cat_socket_detached_with_keys(sock, inputs):
# If we're using a Unix socket, the sock.send call will fail with a # If we're using a Unix socket, the sock.send call will fail with a
# BrokenPipeError ; INET sockets will just stop receiving / sending data # BrokenPipeError ; INET sockets will just stop receiving / sending data
# but will not raise an error # but will not raise an error
if getattr(sock, 'family', -9) == getattr(socket, 'AF_UNIX', -1): if isinstance(sock, paramiko.Channel):
with pytest.raises(socket.error):
sock.sendall(b'make sure the socket is closed\n')
elif isinstance(sock, paramiko.Channel):
with pytest.raises(OSError): with pytest.raises(OSError):
sock.sendall(b'make sure the socket is closed\n') sock.sendall(b'make sure the socket is closed\n')
else: else:
if getattr(sock, 'family', -9) == getattr(socket, 'AF_UNIX', -1):
# We do not want to use pytest.raises here because future versions
# of the daemon no longer cause this to raise an error.
try:
sock.sendall(b'make sure the socket is closed\n')
except socket.error:
return
sock.sendall(b"make sure the socket is closed\n") sock.sendall(b"make sure the socket is closed\n")
data = sock.recv(128) data = sock.recv(128)
# New in 18.06: error message is broadcast over the socket when reading # New in 18.06: error message is broadcast over the socket when reading

View File

@ -1251,7 +1251,7 @@ class AttachContainerTest(BaseAPIIntegrationTest):
output = self.client.attach(container, stream=False, logs=True) output = self.client.attach(container, stream=False, logs=True)
assert output == 'hello\n'.encode(encoding='ascii') assert output == 'hello\n'.encode(encoding='ascii')
@pytest.mark.timeout(5) @pytest.mark.timeout(10)
@pytest.mark.skipif(os.environ.get('DOCKER_HOST', '').startswith('ssh://'), @pytest.mark.skipif(os.environ.get('DOCKER_HOST', '').startswith('ssh://'),
reason='No cancellable streams over SSH') reason='No cancellable streams over SSH')
def test_attach_stream_and_cancel(self): def test_attach_stream_and_cancel(self):