resilience_test.py 1.8 KB

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