docker_client_test.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. from __future__ import absolute_import
  2. from __future__ import unicode_literals
  3. import os
  4. import docker
  5. import pytest
  6. from compose.cli import errors
  7. from compose.cli.docker_client import docker_client
  8. from compose.cli.docker_client import tls_config_from_options
  9. from tests import mock
  10. from tests import unittest
  11. class DockerClientTestCase(unittest.TestCase):
  12. def test_docker_client_no_home(self):
  13. with mock.patch.dict(os.environ):
  14. del os.environ['HOME']
  15. docker_client(os.environ)
  16. @mock.patch.dict(os.environ)
  17. def test_docker_client_with_custom_timeout(self):
  18. os.environ['COMPOSE_HTTP_TIMEOUT'] = '123'
  19. client = docker_client(os.environ)
  20. assert client.timeout == 123
  21. @mock.patch.dict(os.environ)
  22. def test_custom_timeout_error(self):
  23. os.environ['COMPOSE_HTTP_TIMEOUT'] = '123'
  24. client = docker_client(os.environ)
  25. with mock.patch('compose.cli.errors.log') as fake_log:
  26. with pytest.raises(errors.ConnectionError):
  27. with errors.handle_connection_errors(client):
  28. raise errors.RequestsConnectionError(
  29. errors.ReadTimeoutError(None, None, None))
  30. assert fake_log.error.call_count == 1
  31. assert '123' in fake_log.error.call_args[0][0]
  32. class TLSConfigTestCase(unittest.TestCase):
  33. ca_cert = 'tests/fixtures/tls/ca.pem'
  34. client_cert = 'tests/fixtures/tls/cert.pem'
  35. key = 'tests/fixtures/tls/key.key'
  36. def test_simple_tls(self):
  37. options = {'--tls': True}
  38. result = tls_config_from_options(options)
  39. assert result is True
  40. def test_tls_ca_cert(self):
  41. options = {
  42. '--tlscacert': self.ca_cert, '--tlsverify': True
  43. }
  44. result = tls_config_from_options(options)
  45. assert isinstance(result, docker.tls.TLSConfig)
  46. assert result.ca_cert == options['--tlscacert']
  47. assert result.verify is True
  48. def test_tls_ca_cert_explicit(self):
  49. options = {
  50. '--tlscacert': self.ca_cert, '--tls': True,
  51. '--tlsverify': True
  52. }
  53. result = tls_config_from_options(options)
  54. assert isinstance(result, docker.tls.TLSConfig)
  55. assert result.ca_cert == options['--tlscacert']
  56. assert result.verify is True
  57. def test_tls_client_cert(self):
  58. options = {
  59. '--tlscert': self.client_cert, '--tlskey': self.key
  60. }
  61. result = tls_config_from_options(options)
  62. assert isinstance(result, docker.tls.TLSConfig)
  63. assert result.cert == (options['--tlscert'], options['--tlskey'])
  64. def test_tls_client_cert_explicit(self):
  65. options = {
  66. '--tlscert': self.client_cert, '--tlskey': self.key,
  67. '--tls': True
  68. }
  69. result = tls_config_from_options(options)
  70. assert isinstance(result, docker.tls.TLSConfig)
  71. assert result.cert == (options['--tlscert'], options['--tlskey'])
  72. def test_tls_client_and_ca(self):
  73. options = {
  74. '--tlscert': self.client_cert, '--tlskey': self.key,
  75. '--tlsverify': True, '--tlscacert': self.ca_cert
  76. }
  77. result = tls_config_from_options(options)
  78. assert isinstance(result, docker.tls.TLSConfig)
  79. assert result.cert == (options['--tlscert'], options['--tlskey'])
  80. assert result.ca_cert == options['--tlscacert']
  81. assert result.verify is True
  82. def test_tls_client_and_ca_explicit(self):
  83. options = {
  84. '--tlscert': self.client_cert, '--tlskey': self.key,
  85. '--tlsverify': True, '--tlscacert': self.ca_cert,
  86. '--tls': True
  87. }
  88. result = tls_config_from_options(options)
  89. assert isinstance(result, docker.tls.TLSConfig)
  90. assert result.cert == (options['--tlscert'], options['--tlskey'])
  91. assert result.ca_cert == options['--tlscacert']
  92. assert result.verify is True
  93. def test_tls_client_missing_key(self):
  94. options = {'--tlscert': self.client_cert}
  95. with pytest.raises(docker.errors.TLSParameterError):
  96. tls_config_from_options(options)
  97. options = {'--tlskey': self.key}
  98. with pytest.raises(docker.errors.TLSParameterError):
  99. tls_config_from_options(options)
  100. def test_assert_hostname_explicit_skip(self):
  101. options = {'--tlscacert': self.ca_cert, '--skip-hostname-check': True}
  102. result = tls_config_from_options(options)
  103. assert isinstance(result, docker.tls.TLSConfig)
  104. assert result.assert_hostname is False