1
0

project_test.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. from __future__ import unicode_literals
  2. from .. import unittest
  3. from fig.service import Service
  4. from fig.project import Project, ConfigurationError
  5. class ProjectTest(unittest.TestCase):
  6. def test_from_dict(self):
  7. project = Project.from_dicts('figtest', [
  8. {
  9. 'name': 'web',
  10. 'image': 'busybox:latest'
  11. },
  12. {
  13. 'name': 'db',
  14. 'image': 'busybox:latest'
  15. },
  16. ], None)
  17. self.assertEqual(len(project.services), 2)
  18. self.assertEqual(project.get_service('web').name, 'web')
  19. self.assertEqual(project.get_service('web').options['image'], 'busybox:latest')
  20. self.assertEqual(project.get_service('db').name, 'db')
  21. self.assertEqual(project.get_service('db').options['image'], 'busybox:latest')
  22. def test_from_dict_sorts_in_dependency_order(self):
  23. project = Project.from_dicts('figtest', [
  24. {
  25. 'name': 'web',
  26. 'image': 'busybox:latest',
  27. 'links': ['db'],
  28. },
  29. {
  30. 'name': 'db',
  31. 'image': 'busybox:latest',
  32. 'volumes_from': ['volume']
  33. },
  34. {
  35. 'name': 'volume',
  36. 'image': 'busybox:latest',
  37. 'volumes': ['/tmp'],
  38. }
  39. ], None)
  40. self.assertEqual(project.services[0].name, 'volume')
  41. self.assertEqual(project.services[1].name, 'db')
  42. self.assertEqual(project.services[2].name, 'web')
  43. def test_from_config(self):
  44. project = Project.from_config('figtest', {
  45. 'web': {
  46. 'image': 'busybox:latest',
  47. },
  48. 'db': {
  49. 'image': 'busybox:latest',
  50. },
  51. }, None)
  52. self.assertEqual(len(project.services), 2)
  53. self.assertEqual(project.get_service('web').name, 'web')
  54. self.assertEqual(project.get_service('web').options['image'], 'busybox:latest')
  55. self.assertEqual(project.get_service('db').name, 'db')
  56. self.assertEqual(project.get_service('db').options['image'], 'busybox:latest')
  57. def test_from_config_throws_error_when_not_dict(self):
  58. with self.assertRaises(ConfigurationError):
  59. project = Project.from_config('figtest', {
  60. 'web': 'busybox:latest',
  61. }, None)
  62. def test_get_service(self):
  63. web = Service(
  64. project='figtest',
  65. name='web',
  66. client=None,
  67. image="busybox:latest",
  68. )
  69. project = Project('test', [web], None)
  70. self.assertEqual(project.get_service('web'), web)
  71. def test_get_services_returns_all_services_without_args(self):
  72. web = Service(
  73. project='figtest',
  74. name='web',
  75. )
  76. console = Service(
  77. project='figtest',
  78. name='console',
  79. )
  80. project = Project('test', [web, console], None)
  81. self.assertEqual(project.get_services(), [web, console])
  82. def test_get_services_returns_listed_services_with_args(self):
  83. web = Service(
  84. project='figtest',
  85. name='web',
  86. )
  87. console = Service(
  88. project='figtest',
  89. name='console',
  90. )
  91. project = Project('test', [web, console], None)
  92. self.assertEqual(project.get_services(['console']), [console])
  93. def test_get_services_with_include_links(self):
  94. db = Service(
  95. project='figtest',
  96. name='db',
  97. )
  98. web = Service(
  99. project='figtest',
  100. name='web',
  101. links=[(db, 'database')]
  102. )
  103. cache = Service(
  104. project='figtest',
  105. name='cache'
  106. )
  107. console = Service(
  108. project='figtest',
  109. name='console',
  110. links=[(web, 'web')]
  111. )
  112. project = Project('test', [web, db, cache, console], None)
  113. self.assertEqual(
  114. project.get_services(['console'], include_links=True),
  115. [db, web, console]
  116. )
  117. def test_get_services_removes_duplicates_following_links(self):
  118. db = Service(
  119. project='figtest',
  120. name='db',
  121. )
  122. web = Service(
  123. project='figtest',
  124. name='web',
  125. links=[(db, 'database')]
  126. )
  127. project = Project('test', [web, db], None)
  128. self.assertEqual(
  129. project.get_services(['web', 'db'], include_links=True),
  130. [db, web]
  131. )