salt/tests/unit/modules/grains_test.py
2013-11-09 09:01:18 +00:00

98 lines
3.7 KiB
Python

# Import Salt Testing libs
from salttesting import TestCase
from salttesting.helpers import ensure_in_syspath
ensure_in_syspath('../../')
# Import Salt libs
from salt.exceptions import SaltException
from salt.modules import grains as grainsmod
grainsmod.__grains__ = {
'os_family': 'MockedOS'
}
class GrainsModuleTestCase(TestCase):
def test_filter_by(self):
dict1={'A': 'B', 'C': {'D': {'E': 'F','G': 'H'}}}
mdict={'D': {'E': 'I'},'J': 'K'}
# test None result with non existent grain and no default
res=grainsmod.filter_by(dict1, grain='xxx')
self.assertIs(res,None)
# test None result with os_family grain and no matching result
res=grainsmod.filter_by(dict1)
self.assertIs(res,None)
# test with non existent grain, and a given default key
res=grainsmod.filter_by(dict1, grain='xxx', default='C')
self.assertEqual(res,{'D': {'E': 'F','G': 'H'}})
# add a merge dictionnary, F disapears
res=grainsmod.filter_by(dict1, grain='xxx', merge=mdict, default='C')
self.assertEqual(res,{'D': {'E': 'I','G': 'H'},'J': 'K'})
# dict1 was altered, restablish
dict1={'A': 'B', 'C': {'D': {'E': 'F','G': 'H'}}}
# default is not present in dict1, check we only have merge in result
res=grainsmod.filter_by(dict1, grain='xxx', merge=mdict, default='Z')
self.assertEqual(res,mdict)
# default is not present in dict1, and no merge, should get None
res=grainsmod.filter_by(dict1, grain='xxx', default='Z')
self.assertIs(res,None)
#test giving a list as merge argument raise exception
self.assertRaises(
SaltException,
grainsmod.filter_by,
dict1,
'xxx',
['foo'],
'C'
)
#Now, re-test with an existing grain (os_family), but with no match.
res=grainsmod.filter_by(dict1)
self.assertIs(res,None)
res=grainsmod.filter_by(dict1, default='C')
self.assertEqual(res,{'D': {'E': 'F','G': 'H'}})
res=grainsmod.filter_by(dict1, merge=mdict, default='C')
self.assertEqual(res,{'D': {'E': 'I','G': 'H'},'J': 'K'})
# dict1 was altered, restablish
dict1={'A': 'B', 'C': {'D': {'E': 'F','G': 'H'}}}
res=grainsmod.filter_by(dict1, merge=mdict, default='Z')
self.assertEqual(res,mdict)
res=grainsmod.filter_by(dict1, default='Z')
self.assertIs(res,None)
# this one is in fact a traceback in updatedict, merging a string with a dictionnary
self.assertRaises(
TypeError,
grainsmod.filter_by,
dict1,
merge=mdict,
default='A'
)
#Now, re-test with a matching grain.
dict1={'A': 'B', 'MockedOS': {'D': {'E': 'F','G': 'H'}}}
res=grainsmod.filter_by(dict1)
self.assertEqual(res,{'D': {'E': 'F','G': 'H'}})
res=grainsmod.filter_by(dict1, default='A')
self.assertEqual(res,{'D': {'E': 'F','G': 'H'}})
res=grainsmod.filter_by(dict1, merge=mdict, default='A')
self.assertEqual(res,{'D': {'E': 'I','G': 'H'},'J': 'K'})
# dict1 was altered, restablish
dict1={'A': 'B', 'MockedOS': {'D': {'E': 'F','G': 'H'}}}
res=grainsmod.filter_by(dict1, merge=mdict, default='Z')
self.assertEqual(res,{'D': {'E': 'I', 'G': 'H'},'J': 'K'})
# dict1 was altered, restablish
dict1={'A': 'B', 'MockedOS': {'D': {'E': 'F','G': 'H'}}}
res=grainsmod.filter_by(dict1, default='Z')
self.assertEqual(res,{'D': {'E': 'F','G': 'H'}})
if __name__ == '__main__':
from integration import run_tests
run_tests(GrainsModuleTestCase, needs_daemon=False)