resilience_test.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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. self.db.start_container(container)
  17. self.host_path = container.get_mount('/var/db')['Source']
  18. def tearDown(self):
  19. del self.project
  20. del self.db
  21. super(ResilienceTest, self).tearDown()
  22. def test_successful_recreate(self):
  23. self.project.up(strategy=ConvergenceStrategy.always)
  24. container = self.db.containers()[0]
  25. self.assertEqual(container.get_mount('/var/db')['Source'], self.host_path)
  26. def test_create_failure(self):
  27. with mock.patch('compose.service.Service.create_container', crash):
  28. with self.assertRaises(Crash):
  29. self.project.up(strategy=ConvergenceStrategy.always)
  30. self.project.up()
  31. container = self.db.containers()[0]
  32. self.assertEqual(container.get_mount('/var/db')['Source'], self.host_path)
  33. def test_start_failure(self):
  34. with mock.patch('compose.service.Service.start_container', crash):
  35. with self.assertRaises(Crash):
  36. self.project.up(strategy=ConvergenceStrategy.always)
  37. self.project.up()
  38. container = self.db.containers()[0]
  39. self.assertEqual(container.get_mount('/var/db')['Source'], self.host_path)
  40. class Crash(Exception):
  41. pass
  42. def crash(*args, **kwargs):
  43. raise Crash()