138 lines
5.3 KiB
Python
138 lines
5.3 KiB
Python
"""Test Home Assistant yaml loader."""
|
|
import io
|
|
import unittest
|
|
import os
|
|
import tempfile
|
|
|
|
from homeassistant.util import yaml
|
|
|
|
|
|
class TestYaml(unittest.TestCase):
|
|
"""Test util.yaml loader."""
|
|
|
|
def test_simple_list(self):
|
|
"""Test simple list."""
|
|
conf = "config:\n - simple\n - list"
|
|
with io.StringIO(conf) as f:
|
|
doc = yaml.yaml.safe_load(f)
|
|
assert doc['config'] == ["simple", "list"]
|
|
|
|
def test_simple_dict(self):
|
|
"""Test simple dict."""
|
|
conf = "key: value"
|
|
with io.StringIO(conf) as f:
|
|
doc = yaml.yaml.safe_load(f)
|
|
assert doc['key'] == 'value'
|
|
|
|
def test_duplicate_key(self):
|
|
"""Test simple dict."""
|
|
conf = "key: thing1\nkey: thing2"
|
|
try:
|
|
with io.StringIO(conf) as f:
|
|
yaml.yaml.safe_load(f)
|
|
except Exception:
|
|
pass
|
|
else:
|
|
assert 0
|
|
|
|
def test_enviroment_variable(self):
|
|
"""Test config file with enviroment variable."""
|
|
os.environ["PASSWORD"] = "secret_password"
|
|
conf = "password: !env_var PASSWORD"
|
|
with io.StringIO(conf) as f:
|
|
doc = yaml.yaml.safe_load(f)
|
|
assert doc['password'] == "secret_password"
|
|
del os.environ["PASSWORD"]
|
|
|
|
def test_invalid_enviroment_variable(self):
|
|
"""Test config file with no enviroment variable sat."""
|
|
conf = "password: !env_var PASSWORD"
|
|
try:
|
|
with io.StringIO(conf) as f:
|
|
yaml.yaml.safe_load(f)
|
|
except Exception:
|
|
pass
|
|
else:
|
|
assert 0
|
|
|
|
def test_include_yaml(self):
|
|
"""Test include yaml."""
|
|
with tempfile.NamedTemporaryFile() as include_file:
|
|
include_file.write(b"value")
|
|
include_file.seek(0)
|
|
conf = "key: !include {}".format(include_file.name)
|
|
with io.StringIO(conf) as f:
|
|
doc = yaml.yaml.safe_load(f)
|
|
assert doc["key"] == "value"
|
|
|
|
def test_include_dir_list(self):
|
|
"""Test include dir list yaml."""
|
|
with tempfile.TemporaryDirectory() as include_dir:
|
|
file_1 = tempfile.NamedTemporaryFile(dir=include_dir,
|
|
suffix=".yaml", delete=False)
|
|
file_1.write(b"one")
|
|
file_1.close()
|
|
file_2 = tempfile.NamedTemporaryFile(dir=include_dir,
|
|
suffix=".yaml", delete=False)
|
|
file_2.write(b"two")
|
|
file_2.close()
|
|
conf = "key: !include_dir_list {}".format(include_dir)
|
|
with io.StringIO(conf) as f:
|
|
doc = yaml.yaml.safe_load(f)
|
|
assert sorted(doc["key"]) == sorted(["one", "two"])
|
|
|
|
def test_include_dir_named(self):
|
|
"""Test include dir named yaml."""
|
|
with tempfile.TemporaryDirectory() as include_dir:
|
|
file_1 = tempfile.NamedTemporaryFile(dir=include_dir,
|
|
suffix=".yaml", delete=False)
|
|
file_1.write(b"one")
|
|
file_1.close()
|
|
file_2 = tempfile.NamedTemporaryFile(dir=include_dir,
|
|
suffix=".yaml", delete=False)
|
|
file_2.write(b"two")
|
|
file_2.close()
|
|
conf = "key: !include_dir_named {}".format(include_dir)
|
|
correct = {}
|
|
correct[os.path.splitext(os.path.basename(file_1.name))[0]] = "one"
|
|
correct[os.path.splitext(os.path.basename(file_2.name))[0]] = "two"
|
|
with io.StringIO(conf) as f:
|
|
doc = yaml.yaml.safe_load(f)
|
|
assert doc["key"] == correct
|
|
|
|
def test_include_dir_merge_list(self):
|
|
"""Test include dir merge list yaml."""
|
|
with tempfile.TemporaryDirectory() as include_dir:
|
|
file_1 = tempfile.NamedTemporaryFile(dir=include_dir,
|
|
suffix=".yaml", delete=False)
|
|
file_1.write(b"- one")
|
|
file_1.close()
|
|
file_2 = tempfile.NamedTemporaryFile(dir=include_dir,
|
|
suffix=".yaml", delete=False)
|
|
file_2.write(b"- two\n- three")
|
|
file_2.close()
|
|
conf = "key: !include_dir_merge_list {}".format(include_dir)
|
|
with io.StringIO(conf) as f:
|
|
doc = yaml.yaml.safe_load(f)
|
|
assert sorted(doc["key"]) == sorted(["one", "two", "three"])
|
|
|
|
def test_include_dir_merge_named(self):
|
|
"""Test include dir merge named yaml."""
|
|
with tempfile.TemporaryDirectory() as include_dir:
|
|
file_1 = tempfile.NamedTemporaryFile(dir=include_dir,
|
|
suffix=".yaml", delete=False)
|
|
file_1.write(b"key1: one")
|
|
file_1.close()
|
|
file_2 = tempfile.NamedTemporaryFile(dir=include_dir,
|
|
suffix=".yaml", delete=False)
|
|
file_2.write(b"key2: two\nkey3: three")
|
|
file_2.close()
|
|
conf = "key: !include_dir_merge_named {}".format(include_dir)
|
|
with io.StringIO(conf) as f:
|
|
doc = yaml.yaml.safe_load(f)
|
|
assert doc["key"] == {
|
|
"key1": "one",
|
|
"key2": "two",
|
|
"key3": "three"
|
|
}
|