Validate version format on formats 2+

Signed-off-by: ulyssessouza <ulyssessouza@gmail.com>
This commit is contained in:
ulyssessouza 2019-12-12 01:03:19 +01:00 committed by Ulysses Souza
parent e9220f45df
commit 7f49bbb998
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',