sort_service_test.py 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. from .. import unittest
  2. from compose.project import DependencyError
  3. from compose.project import sort_service_dicts
  4. class SortServiceTest(unittest.TestCase):
  5. def test_sort_service_dicts_1(self):
  6. services = [
  7. {
  8. 'links': ['redis'],
  9. 'name': 'web'
  10. },
  11. {
  12. 'name': 'grunt'
  13. },
  14. {
  15. 'name': 'redis'
  16. }
  17. ]
  18. sorted_services = sort_service_dicts(services)
  19. self.assertEqual(len(sorted_services), 3)
  20. self.assertEqual(sorted_services[0]['name'], 'grunt')
  21. self.assertEqual(sorted_services[1]['name'], 'redis')
  22. self.assertEqual(sorted_services[2]['name'], 'web')
  23. def test_sort_service_dicts_2(self):
  24. services = [
  25. {
  26. 'links': ['redis', 'postgres'],
  27. 'name': 'web'
  28. },
  29. {
  30. 'name': 'postgres',
  31. 'links': ['redis']
  32. },
  33. {
  34. 'name': 'redis'
  35. }
  36. ]
  37. sorted_services = sort_service_dicts(services)
  38. self.assertEqual(len(sorted_services), 3)
  39. self.assertEqual(sorted_services[0]['name'], 'redis')
  40. self.assertEqual(sorted_services[1]['name'], 'postgres')
  41. self.assertEqual(sorted_services[2]['name'], 'web')
  42. def test_sort_service_dicts_3(self):
  43. services = [
  44. {
  45. 'name': 'child'
  46. },
  47. {
  48. 'name': 'parent',
  49. 'links': ['child']
  50. },
  51. {
  52. 'links': ['parent'],
  53. 'name': 'grandparent'
  54. },
  55. ]
  56. sorted_services = sort_service_dicts(services)
  57. self.assertEqual(len(sorted_services), 3)
  58. self.assertEqual(sorted_services[0]['name'], 'child')
  59. self.assertEqual(sorted_services[1]['name'], 'parent')
  60. self.assertEqual(sorted_services[2]['name'], 'grandparent')
  61. def test_sort_service_dicts_4(self):
  62. services = [
  63. {
  64. 'name': 'child'
  65. },
  66. {
  67. 'name': 'parent',
  68. 'volumes_from': ['child']
  69. },
  70. {
  71. 'links': ['parent'],
  72. 'name': 'grandparent'
  73. },
  74. ]
  75. sorted_services = sort_service_dicts(services)
  76. self.assertEqual(len(sorted_services), 3)
  77. self.assertEqual(sorted_services[0]['name'], 'child')
  78. self.assertEqual(sorted_services[1]['name'], 'parent')
  79. self.assertEqual(sorted_services[2]['name'], 'grandparent')
  80. def test_sort_service_dicts_5(self):
  81. services = [
  82. {
  83. 'links': ['parent'],
  84. 'name': 'grandparent'
  85. },
  86. {
  87. 'name': 'parent',
  88. 'net': 'container:child'
  89. },
  90. {
  91. 'name': 'child'
  92. }
  93. ]
  94. sorted_services = sort_service_dicts(services)
  95. self.assertEqual(len(sorted_services), 3)
  96. self.assertEqual(sorted_services[0]['name'], 'child')
  97. self.assertEqual(sorted_services[1]['name'], 'parent')
  98. self.assertEqual(sorted_services[2]['name'], 'grandparent')
  99. def test_sort_service_dicts_6(self):
  100. services = [
  101. {
  102. 'links': ['parent'],
  103. 'name': 'grandparent'
  104. },
  105. {
  106. 'name': 'parent',
  107. 'volumes_from': ['child']
  108. },
  109. {
  110. 'name': 'child'
  111. }
  112. ]
  113. sorted_services = sort_service_dicts(services)
  114. self.assertEqual(len(sorted_services), 3)
  115. self.assertEqual(sorted_services[0]['name'], 'child')
  116. self.assertEqual(sorted_services[1]['name'], 'parent')
  117. self.assertEqual(sorted_services[2]['name'], 'grandparent')
  118. def test_sort_service_dicts_7(self):
  119. services = [
  120. {
  121. 'net': 'container:three',
  122. 'name': 'four'
  123. },
  124. {
  125. 'links': ['two'],
  126. 'name': 'three'
  127. },
  128. {
  129. 'name': 'two',
  130. 'volumes_from': ['one']
  131. },
  132. {
  133. 'name': 'one'
  134. }
  135. ]
  136. sorted_services = sort_service_dicts(services)
  137. self.assertEqual(len(sorted_services), 4)
  138. self.assertEqual(sorted_services[0]['name'], 'one')
  139. self.assertEqual(sorted_services[1]['name'], 'two')
  140. self.assertEqual(sorted_services[2]['name'], 'three')
  141. self.assertEqual(sorted_services[3]['name'], 'four')
  142. def test_sort_service_dicts_circular_imports(self):
  143. services = [
  144. {
  145. 'links': ['redis'],
  146. 'name': 'web'
  147. },
  148. {
  149. 'name': 'redis',
  150. 'links': ['web']
  151. },
  152. ]
  153. try:
  154. sort_service_dicts(services)
  155. except DependencyError as e:
  156. self.assertIn('redis', e.msg)
  157. self.assertIn('web', e.msg)
  158. else:
  159. self.fail('Should have thrown an DependencyError')
  160. def test_sort_service_dicts_circular_imports_2(self):
  161. services = [
  162. {
  163. 'links': ['postgres', 'redis'],
  164. 'name': 'web'
  165. },
  166. {
  167. 'name': 'redis',
  168. 'links': ['web']
  169. },
  170. {
  171. 'name': 'postgres'
  172. }
  173. ]
  174. try:
  175. sort_service_dicts(services)
  176. except DependencyError as e:
  177. self.assertIn('redis', e.msg)
  178. self.assertIn('web', e.msg)
  179. else:
  180. self.fail('Should have thrown an DependencyError')
  181. def test_sort_service_dicts_circular_imports_3(self):
  182. services = [
  183. {
  184. 'links': ['b'],
  185. 'name': 'a'
  186. },
  187. {
  188. 'name': 'b',
  189. 'links': ['c']
  190. },
  191. {
  192. 'name': 'c',
  193. 'links': ['a']
  194. }
  195. ]
  196. try:
  197. sort_service_dicts(services)
  198. except DependencyError as e:
  199. self.assertIn('a', e.msg)
  200. self.assertIn('b', e.msg)
  201. else:
  202. self.fail('Should have thrown an DependencyError')
  203. def test_sort_service_dicts_self_imports(self):
  204. services = [
  205. {
  206. 'links': ['web'],
  207. 'name': 'web'
  208. },
  209. ]
  210. try:
  211. sort_service_dicts(services)
  212. except DependencyError as e:
  213. self.assertIn('web', e.msg)
  214. else:
  215. self.fail('Should have thrown an DependencyError')