diff --git a/salt/state.py b/salt/state.py index 8eb98075e4..bbed589c76 100644 --- a/salt/state.py +++ b/salt/state.py @@ -1829,6 +1829,8 @@ class BaseHighState(object): if env != self.opts['environment']: continue for match, data in body.items(): + if isinstance(data, string_types): + data = [data] if self.matcher.confirm_top( match, data, diff --git a/tests/unit/highstateconf_test.py b/tests/unit/highstateconf_test.py new file mode 100644 index 0000000000..d177326c24 --- /dev/null +++ b/tests/unit/highstateconf_test.py @@ -0,0 +1,41 @@ +# Import Salt Testing libs +from salttesting import TestCase +from salttesting.helpers import ensure_in_syspath + +ensure_in_syspath('../') +ensure_in_syspath('../../') + +# Import Salt libs +import salt.config +from salt.state import HighState + + +OPTS = salt.config.minion_config(None, check_dns=False) +OPTS['id'] = 'match' +OPTS['file_client'] = 'local' +OPTS['file_roots'] = dict(base=['/tmp']) +OPTS['test'] = False +OPTS['grains'] = salt.loader.grains(OPTS) + + +class HighStateTestCase(TestCase): + def setUp(self): + self.highstate = HighState(OPTS) + self.highstate.push_active() + + def tearDown(self): + self.highstate.pop_active() + + def test_top_matches_with_list(self): + top = {'env': {'match': ['state1', 'state2'], 'nomatch': ['state3']}} + matches = self.highstate.top_matches(top) + self.assertEqual(matches, {'env': ['state1', 'state2']}) + + def test_top_matches_with_string(self): + top = {'env': {'match': 'state1', 'nomatch': 'state2'}} + matches = self.highstate.top_matches(top) + self.assertEqual(matches, {'env': ['state1']}) + +if __name__ == '__main__': + from integration import run_tests + run_tests(HighStateTestCase, needs_daemon=False)