1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- """
- Tests for salt.loader
- """
- import os
- import shutil
- import sys
- import pytest
- import salt.loader
- import salt.loader_context
- import salt.utils.files
- from tests.support.helpers import dedent
- @pytest.fixture
- def loader_dir(tmp_path):
- """
- Create a simple directory with a couple modules to load and run tests
- against.
- """
- mod_content = dedent(
- """
- def __virtual__():
- return True
- def set_context(key, value):
- __context__[key] = value
- def get_context(key):
- return __context__[key]
- """
- )
- tmp_path = str(tmp_path)
- with salt.utils.files.fopen(os.path.join(tmp_path, "mod_a.py"), "w") as fp:
- fp.write(mod_content)
- with salt.utils.files.fopen(os.path.join(tmp_path, "mod_b.py"), "w") as fp:
- fp.write(mod_content)
- try:
- yield tmp_path
- finally:
- shutil.rmtree(tmp_path)
- def test_loaders_have_uniq_context(loader_dir):
- """
- Loaded functions run in the LazyLoader's context.
- """
- opts = {"optimization_order": [0, 1, 2]}
- loader_1 = salt.loader.LazyLoader([loader_dir], opts,)
- loader_2 = salt.loader.LazyLoader([loader_dir], opts,)
- loader_1._load_all()
- loader_2._load_all()
- assert loader_1.pack["__context__"] == {}
- assert loader_2.pack["__context__"] == {}
- loader_1["mod_a.set_context"]("foo", "bar")
- assert loader_1.pack["__context__"] == {"foo": "bar"}
- assert loader_1["mod_b.get_context"]("foo") == "bar"
- with pytest.raises(KeyError):
- loader_2["mod_a.get_context"]("foo")
- assert loader_2.pack["__context__"] == {}
- def test_loaded_methods_are_loaded_func(loader_dir):
- """
- Functions loaded from LazyLoader's item lookups are LoadedFunc objects
- """
- opts = {"optimization_order": [0, 1, 2]}
- loader_1 = salt.loader.LazyLoader([loader_dir], opts,)
- fun = loader_1["mod_a.get_context"]
- assert isinstance(fun, salt.loader.LoadedFunc)
- def test_loaded_modules_are_loaded_mods(loader_dir):
- """
- Modules looked up as attributes of LazyLoaders are LoadedMod objects.
- """
- opts = {"optimization_order": [0, 1, 2]}
- loader_1 = salt.loader.LazyLoader([loader_dir], opts,)
- mod = loader_1.mod_a
- assert isinstance(mod, salt.loader.LoadedMod)
- def test_loaders_create_named_loader_contexts(loader_dir):
- """
- LazyLoader's create NamedLoaderContexts on the modules the load.
- """
- opts = {"optimization_order": [0, 1, 2]}
- loader_1 = salt.loader.LazyLoader([loader_dir], opts,)
- mod = loader_1.mod_a
- assert isinstance(mod.mod, dict)
- func = mod.set_context
- assert isinstance(func, salt.loader.LoadedFunc)
- module_name = func.func.__module__
- module = sys.modules[module_name]
- assert isinstance(module.__context__, salt.loader_context.NamedLoaderContext)
|