Skip to content

Commit 35ac4f0

Browse files
committed
[tests] test_plugins: Add tests when loading configuration files
1 parent 203b1b8 commit 35ac4f0

File tree

1 file changed

+124
-0
lines changed

1 file changed

+124
-0
lines changed

tests/test_plugins.py

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
from meshroom.core import pluginManager, loadClassesNodes
44
from meshroom.core.plugins import NodePluginStatus, Plugin
5+
from .utils import registeredPlugins
56

7+
from pathlib import Path
68
import os
79
import time
810

@@ -214,3 +216,125 @@ def test_reloadNodePlugin(self):
214216
pluginManager.unregisterNode(node)
215217
assert node.status == NodePluginStatus.DESC_ERROR # Not NOT_LOADED
216218
assert not pluginManager.isRegistered(nodeName)
219+
220+
221+
class TestPluginsConfiguration:
222+
CONFIG_PATH = ("CONFIG_PATH", "sharedTemplate.mg", "config.json")
223+
ERRONEOUS_CONFIG_PATH = ("ERRONEOUS_CONFIG_PATH", "erroneous_path", "not_erroneous_path")
224+
CONFIG_STRING = ("CONFIG_STRING", "configFile", "notConfigFile")
225+
226+
CONFIG_KEYS = [CONFIG_PATH[0], ERRONEOUS_CONFIG_PATH[0], CONFIG_STRING[0]]
227+
228+
def test_loadedConfig(self):
229+
# Check that the config.json file for the plugins in the "plugins" directory is
230+
# correctly loaded
231+
folder = os.path.join(os.path.dirname(__file__), "plugins")
232+
with registeredPlugins(folder):
233+
plugin = pluginManager.getPlugin("pluginA")
234+
assert plugin
235+
236+
# Check that the config file has been properly loaded
237+
config = plugin.configEnv
238+
configFullEnv = plugin.configFullEnv
239+
assert len(config) == 3, "The configuration file contains exactly 3 keys."
240+
assert len(configFullEnv) >= len(os.environ) and \
241+
len(configFullEnv) == len(os.environ) + len(config), \
242+
"The configuration environment should have the same number of keys as " \
243+
"os.environ and the configuration file"
244+
245+
# Check that all the keys have been properly read
246+
assert list(config.keys()) == self.CONFIG_KEYS
247+
248+
# Check that the valid path has been correctly read, resolved and set
249+
assert configFullEnv[self.CONFIG_PATH[0]] == config[self.CONFIG_PATH[0]]
250+
assert configFullEnv[self.CONFIG_PATH[0]] == Path(
251+
os.path.join(plugin.path, self.CONFIG_PATH[1])).resolve().as_posix()
252+
253+
# Check that the invalid path has been read, unresolved, and set
254+
assert configFullEnv[self.ERRONEOUS_CONFIG_PATH[0]] == self.ERRONEOUS_CONFIG_PATH[1]
255+
assert config[self.ERRONEOUS_CONFIG_PATH[0]] == self.ERRONEOUS_CONFIG_PATH[1]
256+
257+
# Check that the string has been correctly read and set
258+
assert configFullEnv[self.CONFIG_STRING[0]] == self.CONFIG_STRING[1]
259+
assert config[self.CONFIG_STRING[0]] == self.CONFIG_STRING[1]
260+
261+
def test_loadedConfigWithOnlyExistingKeys(self):
262+
# Set the keys from the config file in the current environment
263+
env = os.environ.copy()
264+
os.environ[self.CONFIG_PATH[0]] = self.CONFIG_PATH[2]
265+
os.environ[self.ERRONEOUS_CONFIG_PATH[0]] = self.ERRONEOUS_CONFIG_PATH[2]
266+
os.environ[self.CONFIG_STRING[0]] = self.CONFIG_STRING[2]
267+
268+
folder = os.path.join(os.path.dirname(__file__), "plugins")
269+
with registeredPlugins(folder):
270+
plugin = pluginManager.getPlugin("pluginA")
271+
assert plugin
272+
273+
# Check that the config file has been properly loaded and read
274+
# Environment variables that are already set should not have any effect on that
275+
# reading of values
276+
config = plugin.configEnv
277+
assert len(config) == 3
278+
assert list(config.keys()) == self.CONFIG_KEYS
279+
assert config[self.CONFIG_PATH[0]] == Path(
280+
os.path.join(plugin.path, self.CONFIG_PATH[1])).resolve().as_posix()
281+
assert config[self.ERRONEOUS_CONFIG_PATH[0]] == self.ERRONEOUS_CONFIG_PATH[1]
282+
assert config[self.CONFIG_STRING[0]] == self.CONFIG_STRING[1]
283+
284+
# Check that the values of the configuration file are not taking precedence over
285+
# those in the environment
286+
configFullEnv = plugin.configFullEnv
287+
assert all(key in configFullEnv for key in config.keys())
288+
289+
assert config[self.CONFIG_PATH[0]] != self.CONFIG_PATH[2]
290+
assert configFullEnv[self.CONFIG_PATH[0]] == self.CONFIG_PATH[2]
291+
292+
assert config[self.ERRONEOUS_CONFIG_PATH[0]] != self.ERRONEOUS_CONFIG_PATH[2]
293+
assert configFullEnv[self.ERRONEOUS_CONFIG_PATH[0]] == self.ERRONEOUS_CONFIG_PATH[2]
294+
295+
assert config[self.CONFIG_STRING[0]] != self.CONFIG_STRING[2]
296+
assert configFullEnv[self.CONFIG_STRING[0]] == self.CONFIG_STRING[2]
297+
298+
# Restore os.environ to its original state
299+
os.environ = env
300+
301+
def test_loadedConfigWithSomeExistingKeys(self):
302+
# Set some keys from the config file in the current environment
303+
env = os.environ.copy()
304+
os.environ[self.ERRONEOUS_CONFIG_PATH[0]] = self.ERRONEOUS_CONFIG_PATH[2]
305+
os.environ[self.CONFIG_STRING[0]] = self.CONFIG_STRING[2]
306+
307+
folder = os.path.join(os.path.dirname(__file__), "plugins")
308+
with registeredPlugins(folder):
309+
plugin = pluginManager.getPlugin("pluginA")
310+
assert plugin
311+
312+
# Check that the config file has been properly loaded and read
313+
# Environment variables that are already set should not have any effect on that
314+
# reading of values
315+
config = plugin.configEnv
316+
assert len(config) == 3
317+
assert list(config.keys()) == self.CONFIG_KEYS
318+
assert config[self.CONFIG_PATH[0]] == Path(
319+
os.path.join(plugin.path, self.CONFIG_PATH[1])).resolve().as_posix()
320+
assert config[self.ERRONEOUS_CONFIG_PATH[0]] == self.ERRONEOUS_CONFIG_PATH[1]
321+
assert config[self.CONFIG_STRING[0]] == self.CONFIG_STRING[1]
322+
323+
# Check that the values of the configuration file are not taking precedence over
324+
# those in the environment
325+
configFullEnv = plugin.configFullEnv
326+
assert all(key in configFullEnv for key in config.keys())
327+
328+
assert config[self.CONFIG_PATH[0]] == Path(os.path.join(
329+
plugin.path, self.CONFIG_PATH[1])).resolve().as_posix()
330+
assert configFullEnv[self.CONFIG_PATH[0]] == Path(os.path.join(
331+
plugin.path, self.CONFIG_PATH[1])).resolve().as_posix()
332+
333+
assert config[self.ERRONEOUS_CONFIG_PATH[0]] != self.ERRONEOUS_CONFIG_PATH[2]
334+
assert configFullEnv[self.ERRONEOUS_CONFIG_PATH[0]] == self.ERRONEOUS_CONFIG_PATH[2]
335+
336+
assert config[self.CONFIG_STRING[0]] != self.CONFIG_STRING[2]
337+
assert configFullEnv[self.CONFIG_STRING[0]] == self.CONFIG_STRING[2]
338+
339+
# Restore os.environ to its original state
340+
os.environ = env

0 commit comments

Comments
 (0)