summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlysses Souza <ulysses.souza@docker.com>2019-09-09 10:03:43 +0200
committerUlysses Souza <ulysses.souza@docker.com>2019-09-09 10:04:05 +0200
commit70ead597d271bf87ec0b564f3901ae5809abdfbc (patch)
tree1474c0200f91088217056eeff8b31b4ba0a25010
parentb9092cacdb51bb4077aee5a18e0bb750833ca4ab (diff)
Add tests to 'get_secret' warnings
Signed-off-by: Ulysses Souza <ulysses.souza@docker.com>
-rw-r--r--compose/project.py2
-rw-r--r--tests/unit/project_test.py84
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))