mirror of
https://github.com/valitydev/salt.git
synced 2024-11-07 17:09:03 +00:00
147 lines
3.4 KiB
Python
147 lines
3.4 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
# Import python libs
|
|
from __future__ import absolute_import
|
|
|
|
# Import Salt Testing libs
|
|
from salttesting import TestCase
|
|
from salttesting.helpers import ensure_in_syspath
|
|
ensure_in_syspath('../../')
|
|
|
|
# Import salt libs
|
|
from salt.utils.aggregation import aggregate, Map, Scalar
|
|
|
|
|
|
class TestAggregation(TestCase):
|
|
def test_merging(self):
|
|
a = {
|
|
'foo': 42,
|
|
'bar': 'first'
|
|
}
|
|
b = {
|
|
'bar': 'second'
|
|
}
|
|
|
|
c, d = 'first', 'second'
|
|
|
|
# introspection
|
|
for level in (None, False, 0, []):
|
|
assert aggregate(a, b, level=level) == {
|
|
'bar': 'second'
|
|
}
|
|
assert aggregate(c, d, level=level) == 'second'
|
|
|
|
# first level aggregation
|
|
for level in (1, [1, 0], [True], '10000'):
|
|
assert aggregate(a, b, level=level) == {
|
|
'foo': 42,
|
|
'bar': 'second'
|
|
}
|
|
assert aggregate(c, d, level=level) == ['first', 'second']
|
|
|
|
# 1-2nd level aggregation
|
|
for level in (2, [1, 1], [True, True], '11'):
|
|
assert aggregate(a, b, level=level) == {
|
|
'foo': 42,
|
|
'bar': ['first', 'second']
|
|
}, aggregate(a, b, level=2)
|
|
assert aggregate(c, d, level=level) == ['first', 'second']
|
|
|
|
# full aggregation
|
|
for level in (True,):
|
|
assert aggregate(a, b, level=level) == {
|
|
'foo': 42,
|
|
'bar': ['first', 'second']
|
|
}
|
|
assert aggregate(c, d, level=level) == ['first', 'second']
|
|
|
|
def test_nested(self):
|
|
a = {
|
|
'foo': {
|
|
'bar': 'first'
|
|
}
|
|
}
|
|
b = {
|
|
'foo': {
|
|
'bar': 'second'
|
|
}
|
|
}
|
|
assert aggregate(a, b) == {
|
|
'foo': {
|
|
'bar': 'second'
|
|
}
|
|
}, aggregate(a, b)
|
|
|
|
a = {
|
|
'foo': {
|
|
'bar': Scalar('first')
|
|
}
|
|
}
|
|
b = {
|
|
'foo': {
|
|
'bar': Scalar('second'),
|
|
}
|
|
}
|
|
|
|
assert aggregate(a, b) == {
|
|
'foo': {
|
|
'bar': ['first', 'second']
|
|
}
|
|
}, aggregate(a, b)
|
|
|
|
def test_introspection(self):
|
|
|
|
a = {
|
|
'foo': {
|
|
'lvl1': {
|
|
'lvl2-a': 'first',
|
|
'lvl2-b': 'first'
|
|
}
|
|
}
|
|
}
|
|
|
|
b = {
|
|
'foo': {
|
|
'lvl1': {
|
|
'lvl2-a': 'second'
|
|
}
|
|
}
|
|
}
|
|
|
|
assert aggregate(a, b) == {
|
|
'foo': {
|
|
'lvl1': {
|
|
'lvl2-a': 'second'
|
|
}
|
|
}
|
|
}, aggregate(a, b)
|
|
|
|
def test_instruction(self):
|
|
a = {
|
|
'foo': Map({
|
|
'bar': Scalar('first')
|
|
})
|
|
}
|
|
b = {
|
|
'foo': Map({
|
|
'bar': Scalar('second')
|
|
})
|
|
}
|
|
c = {
|
|
'foo': Map({
|
|
'another': 'value'
|
|
})
|
|
}
|
|
result = aggregate(c, aggregate(a, b), level=2)
|
|
assert result == {
|
|
'foo': {
|
|
'bar': ['first', 'second'],
|
|
'another': 'value'
|
|
}
|
|
}, result
|
|
|
|
|
|
if __name__ == '__main__':
|
|
from integration import run_tests
|
|
run_tests(TestAggregation, needs_daemon=False)
|