container_test.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. from __future__ import unicode_literals
  2. from .. import unittest
  3. import mock
  4. import docker
  5. from fig.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": ["/figtest_db_1", "/figtest_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(container.dictionary, {
  27. "Id": "abc",
  28. "Image":"busybox:latest",
  29. "Name": "/figtest_db_1",
  30. })
  31. def test_from_ps_prefixed(self):
  32. self.container_dict['Names'] = ['/swarm-host-1' + n for n in self.container_dict['Names']]
  33. container = Container.from_ps(None,
  34. self.container_dict,
  35. has_been_inspected=True)
  36. self.assertEqual(container.dictionary, {
  37. "Id": "abc",
  38. "Image":"busybox:latest",
  39. "Name": "/figtest_db_1",
  40. })
  41. def test_environment(self):
  42. container = Container(None, {
  43. 'Id': 'abc',
  44. 'Config': {
  45. 'Env': [
  46. 'FOO=BAR',
  47. 'BAZ=DOGE',
  48. ]
  49. }
  50. }, has_been_inspected=True)
  51. self.assertEqual(container.environment, {
  52. 'FOO': 'BAR',
  53. 'BAZ': 'DOGE',
  54. })
  55. def test_number(self):
  56. container = Container.from_ps(None,
  57. self.container_dict,
  58. has_been_inspected=True)
  59. self.assertEqual(container.number, 1)
  60. def test_name(self):
  61. container = Container.from_ps(None,
  62. self.container_dict,
  63. has_been_inspected=True)
  64. self.assertEqual(container.name, "figtest_db_1")
  65. def test_name_without_project(self):
  66. container = Container.from_ps(None,
  67. self.container_dict,
  68. has_been_inspected=True)
  69. self.assertEqual(container.name_without_project, "db_1")
  70. def test_inspect_if_not_inspected(self):
  71. mock_client = mock.create_autospec(docker.Client)
  72. container = Container(mock_client, dict(Id="the_id"))
  73. container.inspect_if_not_inspected()
  74. mock_client.inspect_container.assert_called_once_with("the_id")
  75. self.assertEqual(container.dictionary,
  76. mock_client.inspect_container.return_value)
  77. self.assertTrue(container.has_been_inspected)
  78. container.inspect_if_not_inspected()
  79. self.assertEqual(mock_client.inspect_container.call_count, 1)
  80. def test_human_readable_ports_none(self):
  81. container = Container(None, self.container_dict, has_been_inspected=True)
  82. self.assertEqual(container.human_readable_ports, '')
  83. def test_human_readable_ports_public_and_private(self):
  84. self.container_dict['NetworkSettings']['Ports'].update({
  85. "45454/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "49197" } ],
  86. "45453/tcp": [],
  87. })
  88. container = Container(None, self.container_dict, has_been_inspected=True)
  89. expected = "45453/tcp, 0.0.0.0:49197->45454/tcp"
  90. self.assertEqual(container.human_readable_ports, expected)
  91. def test_get_local_port(self):
  92. self.container_dict['NetworkSettings']['Ports'].update({
  93. "45454/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "49197" } ],
  94. })
  95. container = Container(None, self.container_dict, has_been_inspected=True)
  96. self.assertEqual(
  97. container.get_local_port(45454, protocol='tcp'),
  98. '0.0.0.0:49197')
  99. def test_get(self):
  100. container = Container(None, {
  101. "Status":"Up 8 seconds",
  102. "HostConfig": {
  103. "VolumesFrom": ["volume_id",]
  104. },
  105. }, has_been_inspected=True)
  106. self.assertEqual(container.get('Status'), "Up 8 seconds")
  107. self.assertEqual(container.get('HostConfig.VolumesFrom'), ["volume_id",])
  108. self.assertEqual(container.get('Foo.Bar.DoesNotExist'), None)