container_test.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. from __future__ import unicode_literals
  2. from .. import unittest
  3. import mock
  4. from fig.packages 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"],
  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_environment(self):
  32. container = Container(None, {
  33. 'Id': 'abc',
  34. 'Config': {
  35. 'Env': [
  36. 'FOO=BAR',
  37. 'BAZ=DOGE',
  38. ]
  39. }
  40. }, has_been_inspected=True)
  41. self.assertEqual(container.environment, {
  42. 'FOO': 'BAR',
  43. 'BAZ': 'DOGE',
  44. })
  45. def test_number(self):
  46. container = Container.from_ps(None,
  47. self.container_dict,
  48. has_been_inspected=True)
  49. self.assertEqual(container.number, 1)
  50. def test_name(self):
  51. container = Container.from_ps(None,
  52. self.container_dict,
  53. has_been_inspected=True)
  54. self.assertEqual(container.name, "figtest_db_1")
  55. def test_name_without_project(self):
  56. container = Container.from_ps(None,
  57. self.container_dict,
  58. has_been_inspected=True)
  59. self.assertEqual(container.name_without_project, "db_1")
  60. def test_inspect_if_not_inspected(self):
  61. mock_client = mock.create_autospec(docker.Client)
  62. container = Container(mock_client, dict(Id="the_id"))
  63. container.inspect_if_not_inspected()
  64. mock_client.inspect_container.assert_called_once_with("the_id")
  65. self.assertEqual(container.dictionary,
  66. mock_client.inspect_container.return_value)
  67. self.assertTrue(container.has_been_inspected)
  68. container.inspect_if_not_inspected()
  69. self.assertEqual(mock_client.inspect_container.call_count, 1)
  70. def test_human_readable_ports_none(self):
  71. container = Container(None, self.container_dict, has_been_inspected=True)
  72. self.assertEqual(container.human_readable_ports, '')
  73. def test_human_readable_ports_public_and_private(self):
  74. self.container_dict['NetworkSettings']['Ports'].update({
  75. "45454/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "49197" } ],
  76. "45453/tcp": [],
  77. })
  78. container = Container(None, self.container_dict, has_been_inspected=True)
  79. expected = "45453/tcp, 0.0.0.0:49197->45454/tcp"
  80. self.assertEqual(container.human_readable_ports, expected)
  81. def test_get_local_port(self):
  82. self.container_dict['NetworkSettings']['Ports'].update({
  83. "45454/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "49197" } ],
  84. })
  85. container = Container(None, self.container_dict, has_been_inspected=True)
  86. self.assertEqual(
  87. container.get_local_port(45454, protocol='tcp'),
  88. '0.0.0.0:49197')