Fix Unix socket adapter bug with double slash in path + regression test

This commit is contained in:
Joffrey F 2015-06-24 22:29:11 +02:00
parent c8c957c983
commit 9e87884ba8
2 changed files with 19 additions and 5 deletions

View File

@ -52,15 +52,16 @@ class Client(requests.Session):
base_url = utils.parse_host(base_url)
if base_url.startswith('http+unix://'):
unix_socket_adapter = unixconn.UnixAdapter(base_url, timeout)
self.mount('http+docker://', unix_socket_adapter)
self._adapter = unixconn.UnixAdapter(base_url, timeout)
self.mount('http+docker://', self._adapter)
self.base_url = 'http+docker://localunixsocket'
else:
# Use SSLAdapter for the ability to specify SSL version
if isinstance(tls, TLSConfig):
tls.configure_client(self)
elif tls:
self.mount('https://', ssladapter.SSLAdapter())
self._adapter = ssladapter.SSLAdapter()
self.mount('https://', self._adapter)
self.base_url = base_url
# version detection needs to be after unix adapter mounting
@ -243,6 +244,14 @@ class Client(requests.Session):
def api_version(self):
return self._version
def get_adapter(self, url):
try:
return super(Client, self).get_adapter(url)
except requests.exceptions.InvalidSchema as e:
if self._adapter:
return self._adapter
raise e
@check_resource
def attach(self, container, stdout=True, stderr=True,
stream=False, logs=False):

View File

@ -872,8 +872,8 @@ class TestRunContainerStreaming(BaseTestCase):
id = container['Id']
self.client.start(id)
self.tmp_containers.append(id)
socket = self.client.attach_socket(container, ws=False)
self.assertTrue(socket.fileno() > -1)
sock = self.client.attach_socket(container, ws=False)
self.assertTrue(sock.fileno() > -1)
class TestPauseUnpauseContainer(BaseTestCase):
@ -1467,12 +1467,17 @@ class TestRegressions(BaseTestCase):
result = self.client.containers(all=True, trunc=True)
self.assertEqual(len(result[0]['Id']), 12)
def test_647(self):
with self.assertRaises(docker.errors.APIError):
self.client.inspect_image('gensokyo.jp//kirisame')
def test_649(self):
self.client.timeout = None
ctnr = self.client.create_container('busybox', ['sleep', '2'])
self.client.start(ctnr)
self.client.stop(ctnr)
if __name__ == '__main__':
c = docker.Client(base_url=DEFAULT_BASE_URL)
c.pull('busybox')