openstacksdk/openstack/tests/unit/config/test_loader.py

179 lines
5.1 KiB
Python

# Copyright 2020 Red Hat, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import os
import tempfile
import textwrap
from openstack.config import loader
from openstack import exceptions
from openstack.tests.unit.config import base
FILES = {
'yaml': textwrap.dedent(
'''
foo: bar
baz:
- 1
- 2
- 3
'''
),
'json': textwrap.dedent(
'''
{
"foo": "bar",
"baz": [
1,
2,
3
]
}
'''
),
'txt': textwrap.dedent(
'''
foo
bar baz
test
one two
'''
),
}
class TestLoader(base.TestCase):
def test_base_load_yaml_json_file(self):
with tempfile.TemporaryDirectory() as tmpdir:
tested_files = []
for key, value in FILES.items():
fn = os.path.join(tmpdir, 'file.{ext}'.format(ext=key))
with open(fn, 'w+') as fp:
fp.write(value)
tested_files.append(fn)
path, result = loader.OpenStackConfig()._load_yaml_json_file(
tested_files
)
# NOTE(hberaud): Prefer to test path rather than file because
# our FILES var is a dict so results are appened
# without keeping the initial order (python 3.5)
self.assertEqual(tmpdir, os.path.dirname(path))
def test__load_yaml_json_file_without_json(self):
with tempfile.TemporaryDirectory() as tmpdir:
tested_files = []
for key, value in FILES.items():
if key == 'json':
continue
fn = os.path.join(tmpdir, 'file.{ext}'.format(ext=key))
with open(fn, 'w+') as fp:
fp.write(value)
tested_files.append(fn)
path, result = loader.OpenStackConfig()._load_yaml_json_file(
tested_files
)
# NOTE(hberaud): Prefer to test path rather than file because
# our FILES var is a dict so results are appened
# without keeping the initial order (python 3.5)
self.assertEqual(tmpdir, os.path.dirname(path))
def test__load_yaml_json_file_without_json_yaml(self):
with tempfile.TemporaryDirectory() as tmpdir:
tested_files = []
fn = os.path.join(tmpdir, 'file.txt')
with open(fn, 'w+') as fp:
fp.write(FILES['txt'])
tested_files.append(fn)
path, result = loader.OpenStackConfig()._load_yaml_json_file(
tested_files
)
self.assertEqual(fn, path)
def test__load_yaml_json_file_without_perm(self):
with tempfile.TemporaryDirectory() as tmpdir:
tested_files = []
fn = os.path.join(tmpdir, 'file.txt')
with open(fn, 'w+') as fp:
fp.write(FILES['txt'])
os.chmod(fn, 222)
tested_files.append(fn)
path, result = loader.OpenStackConfig()._load_yaml_json_file(
tested_files
)
self.assertEqual(None, path)
def test__load_yaml_json_file_nonexisting(self):
tested_files = []
fn = os.path.join('/fake', 'file.txt')
tested_files.append(fn)
path, result = loader.OpenStackConfig()._load_yaml_json_file(
tested_files
)
self.assertEqual(None, path)
class TestFixArgv(base.TestCase):
def test_no_changes(self):
argv = [
'-a',
'-b',
'--long-arg',
'--multi-value',
'key1=value1',
'--multi-value',
'key2=value2',
]
expected = argv[:]
loader._fix_argv(argv)
self.assertEqual(expected, argv)
def test_replace(self):
argv = [
'-a',
'-b',
'--long-arg',
'--multi_value',
'key1=value1',
'--multi_value',
'key2=value2',
]
expected = [
'-a',
'-b',
'--long-arg',
'--multi-value',
'key1=value1',
'--multi-value',
'key2=value2',
]
loader._fix_argv(argv)
self.assertEqual(expected, argv)
def test_mix(self):
argv = [
'-a',
'-b',
'--long-arg',
'--multi_value',
'key1=value1',
'--multi-value',
'key2=value2',
]
self.assertRaises(exceptions.ConfigException, loader._fix_argv, argv)