12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- # -*- coding: utf-8 -*-
- """
- integration.loader.ext_grains
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Test Salt's loader regarding external grains
- """
- from __future__ import absolute_import, print_function, unicode_literals
- import os
- import time
- import pytest
- import salt.config
- import salt.loader
- from tests.support.case import ModuleCase
- from tests.support.helpers import PYTEST_MIGRATION_SKIP_REASON
- from tests.support.runtests import RUNTIME_VARS
- from tests.support.unit import skipIf
- @pytest.mark.windows_whitelisted
- 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)
- @pytest.mark.skip_on_windows(reason=PYTEST_MIGRATION_SKIP_REASON)
- @pytest.mark.slow_test(seconds=5) # Test takes >1 and <=5 seconds
- 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(
- RUNTIME_VARS.RUNTIME_CONFIGS["minion"]["cachedir"],
- "files",
- "base",
- "_grains",
- "custom_grain2.py",
- )
- tries = 0
- while not os.path.exists(module):
- tries += 1
- if tries > 60:
- pytest.fail(
- "Failed to found custom grains module in cache path {}".format(
- module
- )
- )
- 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")
- @pytest.mark.windows_whitelisted
- 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"])
|