1
0

resilience_test.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from __future__ import absolute_import
  2. from __future__ import unicode_literals
  3. from .. import mock
  4. from .testcases import DockerClientTestCase
  5. from compose.config.types import VolumeSpec
  6. from compose.project import Project
  7. from compose.service import ConvergenceStrategy
  8. class ResilienceTest(DockerClientTestCase):
  9. def setUp(self):
  10. self.db = self.create_service(
  11. 'db',
  12. volumes=[VolumeSpec.parse('/var/db')],
  13. command='top')
  14. self.project = Project('composetest', [self.db], self.client)
  15. container = self.db.create_container()
  16. container.start()
  17. self.host_path = container.get('Volumes')['/var/db']
  18. def test_successful_recreate(self):
  19. self.project.up(strategy=ConvergenceStrategy.always)
  20. container = self.db.containers()[0]
  21. self.assertEqual(container.get('Volumes')['/var/db'], self.host_path)
  22. def test_create_failure(self):
  23. with mock.patch('compose.service.Service.create_container', crash):
  24. with self.assertRaises(Crash):
  25. self.project.up(strategy=ConvergenceStrategy.always)
  26. self.project.up()
  27. container = self.db.containers()[0]
  28. self.assertEqual(container.get('Volumes')['/var/db'], self.host_path)
  29. def test_start_failure(self):
  30. with mock.patch('compose.container.Container.start', crash):
  31. with self.assertRaises(Crash):
  32. self.project.up(strategy=ConvergenceStrategy.always)
  33. self.project.up()
  34. container = self.db.containers()[0]
  35. self.assertEqual(container.get('Volumes')['/var/db'], self.host_path)
  36. class Crash(Exception):
  37. pass
  38. def crash(*args, **kwargs):
  39. raise Crash()