interpolation_test.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. from __future__ import absolute_import
  2. from __future__ import unicode_literals
  3. import os
  4. import mock
  5. import pytest
  6. from compose.config.environment import Environment
  7. from compose.config.interpolation import interpolate_environment_variables
  8. @pytest.yield_fixture
  9. def mock_env():
  10. with mock.patch.dict(os.environ):
  11. Environment.reset()
  12. os.environ['USER'] = 'jenny'
  13. os.environ['FOO'] = 'bar'
  14. yield
  15. def test_interpolate_environment_variables_in_services(mock_env):
  16. services = {
  17. 'servivea': {
  18. 'image': 'example:${USER}',
  19. 'volumes': ['$FOO:/target'],
  20. 'logging': {
  21. 'driver': '${FOO}',
  22. 'options': {
  23. 'user': '$USER',
  24. }
  25. }
  26. }
  27. }
  28. expected = {
  29. 'servivea': {
  30. 'image': 'example:jenny',
  31. 'volumes': ['bar:/target'],
  32. 'logging': {
  33. 'driver': 'bar',
  34. 'options': {
  35. 'user': 'jenny',
  36. }
  37. }
  38. }
  39. }
  40. assert interpolate_environment_variables(services, 'service') == expected
  41. def test_interpolate_environment_variables_in_volumes(mock_env):
  42. volumes = {
  43. 'data': {
  44. 'driver': '$FOO',
  45. 'driver_opts': {
  46. 'max': 2,
  47. 'user': '${USER}'
  48. }
  49. },
  50. 'other': None,
  51. }
  52. expected = {
  53. 'data': {
  54. 'driver': 'bar',
  55. 'driver_opts': {
  56. 'max': 2,
  57. 'user': 'jenny'
  58. }
  59. },
  60. 'other': {},
  61. }
  62. assert interpolate_environment_variables(volumes, 'volume') == expected