Merge pull request #7093 from ulyssessouza/warn-invalid-version

Validate version format on formats 2+
This commit is contained in:
Ulysses Souza 2020-01-08 10:47:01 +01:00 committed by GitHub
commit 702dd9406c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 0 deletions

View File

@ -5,6 +5,7 @@ import functools
import io import io
import logging import logging
import os import os
import re
import string import string
import sys import sys
from collections import namedtuple from collections import namedtuple
@ -214,6 +215,12 @@ class ConfigFile(namedtuple('_ConfigFile', 'filename config')):
.format(self.filename, VERSION_EXPLANATION) .format(self.filename, VERSION_EXPLANATION)
) )
version_pattern = re.compile(r"^[2-9]+(\.\d+)?$")
if not version_pattern.match(version):
raise ConfigurationError(
'Version "{}" in "{}" is invalid.'
.format(version, self.filename))
if version == '2': if version == '2':
return const.COMPOSEFILE_V2_0 return const.COMPOSEFILE_V2_0

View File

@ -13,6 +13,8 @@ from random import shuffle
import py import py
import pytest import pytest
import yaml import yaml
from ddt import data
from ddt import ddt
from ...helpers import build_config_details from ...helpers import build_config_details
from ...helpers import BUSYBOX_IMAGE_WITH_TAG from ...helpers import BUSYBOX_IMAGE_WITH_TAG
@ -68,6 +70,7 @@ def secret_sort(secrets):
return sorted(secrets, key=itemgetter('source')) return sorted(secrets, key=itemgetter('source'))
@ddt
class ConfigTest(unittest.TestCase): class ConfigTest(unittest.TestCase):
def test_load(self): def test_load(self):
@ -1885,6 +1888,26 @@ class ConfigTest(unittest.TestCase):
} }
] ]
@data(
'2 ',
'3.',
'3.0.0',
'3.0.a',
'3.a',
'3a')
def test_invalid_version_formats(self, version):
content = {
'version': version,
'services': {
'web': {
'image': 'alpine',
}
}
}
with pytest.raises(ConfigurationError) as exc:
config.load(build_config_details(content))
assert 'Version "{}" in "filename.yml" is invalid.'.format(version) in exc.exconly()
def test_group_add_option(self): def test_group_add_option(self):
actual = config.load(build_config_details({ actual = config.load(build_config_details({
'version': '2', 'version': '2',