main_test.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. from __future__ import absolute_import
  2. from compose import container
  3. from compose.cli.log_printer import LogPrinter
  4. from compose.cli.main import attach_to_logs
  5. from compose.cli.main import build_log_printer
  6. from compose.project import Project
  7. from tests import mock
  8. from tests import unittest
  9. def mock_container(service, number):
  10. return mock.create_autospec(
  11. container.Container,
  12. service=service,
  13. number=number,
  14. name_without_project='{0}_{1}'.format(service, number))
  15. class CLIMainTestCase(unittest.TestCase):
  16. def test_build_log_printer(self):
  17. containers = [
  18. mock_container('web', 1),
  19. mock_container('web', 2),
  20. mock_container('db', 1),
  21. mock_container('other', 1),
  22. mock_container('another', 1),
  23. ]
  24. service_names = ['web', 'db']
  25. log_printer = build_log_printer(containers, service_names, True)
  26. self.assertEqual(log_printer.containers, containers[:3])
  27. def test_build_log_printer_all_services(self):
  28. containers = [
  29. mock_container('web', 1),
  30. mock_container('db', 1),
  31. mock_container('other', 1),
  32. ]
  33. service_names = []
  34. log_printer = build_log_printer(containers, service_names, True)
  35. self.assertEqual(log_printer.containers, containers)
  36. def test_attach_to_logs(self):
  37. project = mock.create_autospec(Project)
  38. log_printer = mock.create_autospec(LogPrinter, containers=[])
  39. service_names = ['web', 'db']
  40. timeout = 12
  41. with mock.patch('compose.cli.main.signal', autospec=True) as mock_signal:
  42. attach_to_logs(project, log_printer, service_names, timeout)
  43. mock_signal.signal.assert_called_once_with(mock_signal.SIGINT, mock.ANY)
  44. log_printer.run.assert_called_once_with()
  45. project.stop.assert_called_once_with(
  46. service_names=service_names,
  47. timeout=timeout)