container_test.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. from __future__ import unicode_literals
  2. from .. import unittest
  3. import mock
  4. import docker
  5. from compose.container import Container
  6. class ContainerTest(unittest.TestCase):
  7. def setUp(self):
  8. self.container_dict = {
  9. "Id": "abc",
  10. "Image": "busybox:latest",
  11. "Command": "sleep 300",
  12. "Created": 1387384730,
  13. "Status": "Up 8 seconds",
  14. "Ports": None,
  15. "SizeRw": 0,
  16. "SizeRootFs": 0,
  17. "Names": ["/composetest_db_1", "/composetest_web_1/db"],
  18. "NetworkSettings": {
  19. "Ports": {},
  20. },
  21. }
  22. def test_from_ps(self):
  23. container = Container.from_ps(None,
  24. self.container_dict,
  25. has_been_inspected=True)
  26. self.assertEqual(
  27. container.dictionary,
  28. {
  29. "Id": "abc",
  30. "Image": "busybox:latest",
  31. "Name": "/composetest_db_1",
  32. })
  33. def test_from_ps_prefixed(self):
  34. self.container_dict['Names'] = ['/swarm-host-1' + n for n in self.container_dict['Names']]
  35. container = Container.from_ps(None,
  36. self.container_dict,
  37. has_been_inspected=True)
  38. self.assertEqual(container.dictionary, {
  39. "Id": "abc",
  40. "Image": "busybox:latest",
  41. "Name": "/composetest_db_1",
  42. })
  43. def test_environment(self):
  44. container = Container(None, {
  45. 'Id': 'abc',
  46. 'Config': {
  47. 'Env': [
  48. 'FOO=BAR',
  49. 'BAZ=DOGE',
  50. ]
  51. }
  52. }, has_been_inspected=True)
  53. self.assertEqual(container.environment, {
  54. 'FOO': 'BAR',
  55. 'BAZ': 'DOGE',
  56. })
  57. def test_number(self):
  58. container = Container.from_ps(None,
  59. self.container_dict,
  60. has_been_inspected=True)
  61. self.assertEqual(container.number, 1)
  62. def test_name(self):
  63. container = Container.from_ps(None,
  64. self.container_dict,
  65. has_been_inspected=True)
  66. self.assertEqual(container.name, "composetest_db_1")
  67. def test_name_without_project(self):
  68. container = Container.from_ps(None,
  69. self.container_dict,
  70. has_been_inspected=True)
  71. self.assertEqual(container.name_without_project, "db_1")
  72. def test_inspect_if_not_inspected(self):
  73. mock_client = mock.create_autospec(docker.Client)
  74. container = Container(mock_client, dict(Id="the_id"))
  75. container.inspect_if_not_inspected()
  76. mock_client.inspect_container.assert_called_once_with("the_id")
  77. self.assertEqual(container.dictionary,
  78. mock_client.inspect_container.return_value)
  79. self.assertTrue(container.has_been_inspected)
  80. container.inspect_if_not_inspected()
  81. self.assertEqual(mock_client.inspect_container.call_count, 1)
  82. def test_human_readable_ports_none(self):
  83. container = Container(None, self.container_dict, has_been_inspected=True)
  84. self.assertEqual(container.human_readable_ports, '')
  85. def test_human_readable_ports_public_and_private(self):
  86. self.container_dict['NetworkSettings']['Ports'].update({
  87. "45454/tcp": [{"HostIp": "0.0.0.0", "HostPort": "49197"}],
  88. "45453/tcp": [],
  89. })
  90. container = Container(None, self.container_dict, has_been_inspected=True)
  91. expected = "45453/tcp, 0.0.0.0:49197->45454/tcp"
  92. self.assertEqual(container.human_readable_ports, expected)
  93. def test_get_local_port(self):
  94. self.container_dict['NetworkSettings']['Ports'].update({
  95. "45454/tcp": [{"HostIp": "0.0.0.0", "HostPort": "49197"}],
  96. })
  97. container = Container(None, self.container_dict, has_been_inspected=True)
  98. self.assertEqual(
  99. container.get_local_port(45454, protocol='tcp'),
  100. '0.0.0.0:49197')
  101. def test_get(self):
  102. container = Container(None, {
  103. "Status": "Up 8 seconds",
  104. "HostConfig": {
  105. "VolumesFrom": ["volume_id"]
  106. },
  107. }, has_been_inspected=True)
  108. self.assertEqual(container.get('Status'), "Up 8 seconds")
  109. self.assertEqual(container.get('HostConfig.VolumesFrom'), ["volume_id"])
  110. self.assertEqual(container.get('Foo.Bar.DoesNotExist'), None)