diff options
author | Ulysses Souza <ulysses.souza@docker.com> | 2019-09-09 10:03:43 +0200 |
---|---|---|
committer | Ulysses Souza <ulysses.souza@docker.com> | 2019-09-09 10:04:05 +0200 |
commit | 70ead597d271bf87ec0b564f3901ae5809abdfbc (patch) | |
tree | 1474c0200f91088217056eeff8b31b4ba0a25010 | |
parent | b9092cacdb51bb4077aee5a18e0bb750833ca4ab (diff) |
Add tests to 'get_secret' warnings
Signed-off-by: Ulysses Souza <ulysses.souza@docker.com>
-rw-r--r-- | compose/project.py | 2 | ||||
-rw-r--r-- | tests/unit/project_test.py | 84 |
2 files changed, 85 insertions, 1 deletions
diff --git a/compose/project.py b/compose/project.py index b2305e67..478e50b5 100644 --- a/compose/project.py +++ b/compose/project.py @@ -810,7 +810,7 @@ def get_secrets(service, service_secrets, secret_defs): secret_file = secret_def.get('file') if not path.isfile(str(secret_file)): - log.warn( + log.warning( "Service \"{service}\" uses an undefined secret file \"{secret_file}\", " "the following folder is created \"{secret_file}\"".format( service=service, secret_file=secret_file diff --git a/tests/unit/project_test.py b/tests/unit/project_test.py index 93a9aa29..e1453e7f 100644 --- a/tests/unit/project_test.py +++ b/tests/unit/project_test.py @@ -3,6 +3,8 @@ from __future__ import absolute_import from __future__ import unicode_literals import datetime +import os +import tempfile import docker import pytest @@ -11,6 +13,7 @@ from docker.errors import NotFound from .. import mock from .. import unittest from ..helpers import BUSYBOX_IMAGE_WITH_TAG +from compose.config import ConfigurationError from compose.config.config import Config from compose.config.types import VolumeFromSpec from compose.const import COMPOSEFILE_V1 as V1 @@ -21,6 +24,7 @@ from compose.const import DEFAULT_TIMEOUT from compose.const import LABEL_SERVICE from compose.container import Container from compose.errors import OperationFailedError +from compose.project import get_secrets from compose.project import NoSuchService from compose.project import Project from compose.project import ProjectError @@ -841,3 +845,83 @@ class ProjectTest(unittest.TestCase): with mock.patch('compose.service.Service.push') as fake_push: project.push() assert fake_push.call_count == 2 + + def test_get_secrets_no_secret_def(self): + service = 'foo' + secret_source = 'bar' + + secret_defs = mock.Mock() + secret_defs.get.return_value = None + secret = mock.Mock(source=secret_source) + + with self.assertRaises(ConfigurationError): + get_secrets(service, [secret], secret_defs) + + def test_get_secrets_external_warning(self): + service = 'foo' + secret_source = 'bar' + + secret_def = mock.Mock() + secret_def.get.return_value = True + + secret_defs = mock.Mock() + secret_defs.get.side_effect = secret_def + secret = mock.Mock(source=secret_source) + + with mock.patch('compose.project.log') as mock_log: + get_secrets(service, [secret], secret_defs) + + mock_log.warning.assert_called_with("Service \"{service}\" uses secret \"{secret}\" " + "which is external. External secrets are not available" + " to containers created by docker-compose." + .format(service=service, secret=secret_source)) + + def test_get_secrets_uid_gid_mode_warning(self): + service = 'foo' + secret_source = 'bar' + + _, filename_path = tempfile.mkstemp() + self.addCleanup(os.remove, filename_path) + + def mock_get(key): + return {'external': False, 'file': filename_path}[key] + + secret_def = mock.MagicMock() + secret_def.get = mock.MagicMock(side_effect=mock_get) + + secret_defs = mock.Mock() + secret_defs.get.return_value = secret_def + + secret = mock.Mock(uid=True, gid=True, mode=True, source=secret_source) + + with mock.patch('compose.project.log') as mock_log: + get_secrets(service, [secret], secret_defs) + + mock_log.warning.assert_called_with("Service \"{service}\" uses secret \"{secret}\" with uid, " + "gid, or mode. These fields are not supported by this " + "implementation of the Compose file" + .format(service=service, secret=secret_source)) + + def test_get_secrets_secret_file_warning(self): + service = 'foo' + secret_source = 'bar' + not_a_path = 'NOT_A_PATH' + + def mock_get(key): + return {'external': False, 'file': not_a_path}[key] + + secret_def = mock.MagicMock() + secret_def.get = mock.MagicMock(side_effect=mock_get) + + secret_defs = mock.Mock() + secret_defs.get.return_value = secret_def + + secret = mock.Mock(uid=False, gid=False, mode=False, source=secret_source) + + with mock.patch('compose.project.log') as mock_log: + get_secrets(service, [secret], secret_defs) + + mock_log.warning.assert_called_with("Service \"{service}\" uses an undefined secret file " + "\"{secret_file}\", the following folder is created " + "\"{secret_file}\"" + .format(service=service, secret_file=not_a_path)) |