legacy_test.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. from docker.errors import APIError
  2. from compose import legacy
  3. from compose.project import Project
  4. from .testcases import DockerClientTestCase
  5. class LegacyTestCase(DockerClientTestCase):
  6. def setUp(self):
  7. super(LegacyTestCase, self).setUp()
  8. self.containers = []
  9. db = self.create_service('db')
  10. web = self.create_service('web', links=[(db, 'db')])
  11. nginx = self.create_service('nginx', links=[(web, 'web')])
  12. self.services = [db, web, nginx]
  13. self.project = Project('composetest', self.services, self.client)
  14. # Create a legacy container for each service
  15. for service in self.services:
  16. service.ensure_image_exists()
  17. container = self.client.create_container(
  18. name='{}_{}_1'.format(self.project.name, service.name),
  19. **service.options
  20. )
  21. self.client.start(container)
  22. self.containers.append(container)
  23. # Create a single one-off legacy container
  24. self.containers.append(self.client.create_container(
  25. name='{}_{}_run_1'.format(self.project.name, self.services[0].name),
  26. **self.services[0].options
  27. ))
  28. def tearDown(self):
  29. super(LegacyTestCase, self).tearDown()
  30. for container in self.containers:
  31. try:
  32. self.client.kill(container)
  33. except APIError:
  34. pass
  35. try:
  36. self.client.remove_container(container)
  37. except APIError:
  38. pass
  39. def get_legacy_containers(self, **kwargs):
  40. return list(legacy.get_legacy_containers(
  41. self.client,
  42. self.project.name,
  43. [s.name for s in self.services],
  44. **kwargs
  45. ))
  46. def test_get_legacy_container_names(self):
  47. self.assertEqual(len(self.get_legacy_containers()), len(self.services))
  48. def test_get_legacy_container_names_one_off(self):
  49. self.assertEqual(len(self.get_legacy_containers(stopped=True, one_off=True)), 1)
  50. def test_migration_to_labels(self):
  51. with self.assertRaises(legacy.LegacyContainersError) as cm:
  52. self.assertEqual(self.project.containers(stopped=True), [])
  53. self.assertEqual(
  54. set(cm.exception.names),
  55. set(['composetest_db_1', 'composetest_web_1', 'composetest_nginx_1']),
  56. )
  57. legacy.migrate_project_to_labels(self.project)
  58. self.assertEqual(len(self.project.containers(stopped=True)), len(self.services))