salt/tests/integration/loader/test_ext_grains.py
Pedro Algarvio 451d8f98e3
The file listing needs to be sorted to return expectable results.
This seems like the only reasonable way to override, for example, grains.
Grains from `custom_grains_2` should override grains from `custom_grains_1`.
2017-06-01 18:47:22 +01:00

76 lines
2.4 KiB
Python

# -*- coding: utf-8 -*-
'''
integration.loader.ext_grains
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Test Salt's loader regarding external grains
'''
# Import Python libs
from __future__ import absolute_import
import os
import time
# Import Salt Testing libs
from tests.support.case import ModuleCase
from tests.support.paths import TMP
from tests.support.unit import skipIf
# Import salt libs
import salt.config
import salt.loader
class LoaderGrainsTest(ModuleCase):
'''
Test the loader standard behavior with external grains
'''
#def setUp(self):
# self.opts = minion_config(None)
# self.opts['disable_modules'] = ['pillar']
# self.opts['grains'] = grains(self.opts)
def test_grains_overwrite(self):
# Force a grains sync
self.run_function('saltutil.sync_grains')
# To avoid a race condition on Windows, we need to make sure the
# `test_custom_grain2.py` file is present in the _grains directory
# before trying to get the grains. This test may execute before the
# minion has finished syncing down the files it needs.
module = os.path.join(TMP, 'rootdir', 'cache', 'files',
'base', '_grains', 'test_custom_grain2.py')
tries = 0
while not os.path.exists(module):
tries += 1
if tries > 60:
break
time.sleep(1)
grains = self.run_function('grains.items')
# Check that custom grains are overwritten
self.assertEqual({'k2': 'v2'}, grains['a_custom'])
@skipIf(True, "needs a way to reload minion after config change")
class LoaderGrainsMergeTest(ModuleCase):
'''
Test the loader deep merge behavior with external grains
'''
def setUp(self):
# XXX: This seems like it should become a unit test instead
self.opts = salt.config.minion_config(None)
self.opts['grains_deep_merge'] = True
self.assertTrue(self.opts['grains_deep_merge'])
self.opts['disable_modules'] = ['pillar']
__grains__ = salt.loader.grains(self.opts)
def test_grains_merge(self):
__grain__ = self.run_function('grains.item', ['a_custom'])
# Check that the grain is present
self.assertIn('a_custom', __grain__)
# Check that the grains are merged
self.assertEqual({'k1': 'v1', 'k2': 'v2'}, __grain__['a_custom'])