docker_client_test.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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.docker_client import docker_client
  7. from compose.cli.docker_client import tls_config_from_options
  8. from tests import mock
  9. from tests import unittest
  10. class DockerClientTestCase(unittest.TestCase):
  11. def test_docker_client_no_home(self):
  12. with mock.patch.dict(os.environ):
  13. del os.environ['HOME']
  14. docker_client()
  15. def test_docker_client_with_custom_timeout(self):
  16. timeout = 300
  17. with mock.patch('compose.cli.docker_client.HTTP_TIMEOUT', 300):
  18. client = docker_client()
  19. self.assertEqual(client.timeout, int(timeout))
  20. class TLSConfigTestCase(unittest.TestCase):
  21. ca_cert = 'tests/fixtures/tls/ca.pem'
  22. client_cert = 'tests/fixtures/tls/cert.pem'
  23. key = 'tests/fixtures/tls/key.key'
  24. def test_simple_tls(self):
  25. options = {'--tls': True}
  26. result = tls_config_from_options(options)
  27. assert result is True
  28. def test_tls_ca_cert(self):
  29. options = {
  30. '--tlscacert': self.ca_cert, '--tlsverify': True
  31. }
  32. result = tls_config_from_options(options)
  33. assert isinstance(result, docker.tls.TLSConfig)
  34. assert result.ca_cert == options['--tlscacert']
  35. assert result.verify is True
  36. def test_tls_ca_cert_explicit(self):
  37. options = {
  38. '--tlscacert': self.ca_cert, '--tls': True,
  39. '--tlsverify': True
  40. }
  41. result = tls_config_from_options(options)
  42. assert isinstance(result, docker.tls.TLSConfig)
  43. assert result.ca_cert == options['--tlscacert']
  44. assert result.verify is True
  45. def test_tls_client_cert(self):
  46. options = {
  47. '--tlscert': self.client_cert, '--tlskey': self.key
  48. }
  49. result = tls_config_from_options(options)
  50. assert isinstance(result, docker.tls.TLSConfig)
  51. assert result.cert == (options['--tlscert'], options['--tlskey'])
  52. def test_tls_client_cert_explicit(self):
  53. options = {
  54. '--tlscert': self.client_cert, '--tlskey': self.key,
  55. '--tls': True
  56. }
  57. result = tls_config_from_options(options)
  58. assert isinstance(result, docker.tls.TLSConfig)
  59. assert result.cert == (options['--tlscert'], options['--tlskey'])
  60. def test_tls_client_and_ca(self):
  61. options = {
  62. '--tlscert': self.client_cert, '--tlskey': self.key,
  63. '--tlsverify': True, '--tlscacert': self.ca_cert
  64. }
  65. result = tls_config_from_options(options)
  66. assert isinstance(result, docker.tls.TLSConfig)
  67. assert result.cert == (options['--tlscert'], options['--tlskey'])
  68. assert result.ca_cert == options['--tlscacert']
  69. assert result.verify is True
  70. def test_tls_client_and_ca_explicit(self):
  71. options = {
  72. '--tlscert': self.client_cert, '--tlskey': self.key,
  73. '--tlsverify': True, '--tlscacert': self.ca_cert,
  74. '--tls': True
  75. }
  76. result = tls_config_from_options(options)
  77. assert isinstance(result, docker.tls.TLSConfig)
  78. assert result.cert == (options['--tlscert'], options['--tlskey'])
  79. assert result.ca_cert == options['--tlscacert']
  80. assert result.verify is True
  81. def test_tls_client_missing_key(self):
  82. options = {'--tlscert': self.client_cert}
  83. with pytest.raises(docker.errors.TLSParameterError):
  84. tls_config_from_options(options)
  85. options = {'--tlskey': self.key}
  86. with pytest.raises(docker.errors.TLSParameterError):
  87. tls_config_from_options(options)