sort_service_test.py 6.6 KB

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