resilience_test.py 1.7 KB

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