143 lines
4.4 KiB
Python
143 lines
4.4 KiB
Python
from tests.unittests import helpers
|
|
|
|
from cloudinit import mergers
|
|
|
|
|
|
class TestSimpleRun(helpers.MockerTestCase):
|
|
def test_basic_merge(self):
|
|
source = {
|
|
'Blah': ['blah2'],
|
|
'Blah3': 'c',
|
|
}
|
|
merge_with = {
|
|
'Blah2': ['blah3'],
|
|
'Blah3': 'b',
|
|
'Blah': ['123'],
|
|
}
|
|
# Basic merge should not do thing special
|
|
merge_how = "list()+dict()+str()"
|
|
merger_set = mergers.string_extract_mergers(merge_how)
|
|
self.assertEquals(3, len(merger_set))
|
|
merger = mergers.construct(merger_set)
|
|
merged = merger.merge(source, merge_with)
|
|
self.assertEquals(merged['Blah'], ['blah2'])
|
|
self.assertEquals(merged['Blah2'], ['blah3'])
|
|
self.assertEquals(merged['Blah3'], 'c')
|
|
|
|
def test_dict_overwrite(self):
|
|
source = {
|
|
'Blah': ['blah2'],
|
|
}
|
|
merge_with = {
|
|
'Blah': ['123'],
|
|
}
|
|
# Now lets try a dict overwrite
|
|
merge_how = "list()+dict(overwrite)+str()"
|
|
merger_set = mergers.string_extract_mergers(merge_how)
|
|
self.assertEquals(3, len(merger_set))
|
|
merger = mergers.construct(merger_set)
|
|
merged = merger.merge(source, merge_with)
|
|
self.assertEquals(merged['Blah'], ['123'])
|
|
|
|
def test_string_append(self):
|
|
source = {
|
|
'Blah': 'blah2',
|
|
}
|
|
merge_with = {
|
|
'Blah': '345',
|
|
}
|
|
merge_how = "list()+dict()+str(append)"
|
|
merger_set = mergers.string_extract_mergers(merge_how)
|
|
self.assertEquals(3, len(merger_set))
|
|
merger = mergers.construct(merger_set)
|
|
merged = merger.merge(source, merge_with)
|
|
self.assertEquals(merged['Blah'], 'blah2345')
|
|
|
|
def test_list_extend(self):
|
|
source = ['abc']
|
|
merge_with = ['123']
|
|
merge_how = "list(extend)+dict()+str()"
|
|
merger_set = mergers.string_extract_mergers(merge_how)
|
|
self.assertEquals(3, len(merger_set))
|
|
merger = mergers.construct(merger_set)
|
|
merged = merger.merge(source, merge_with)
|
|
self.assertEquals(merged, ['abc', '123'])
|
|
|
|
def test_deep_merge(self):
|
|
source = {
|
|
'a': [1, 'b', 2],
|
|
'b': 'blahblah',
|
|
'c': {
|
|
'e': [1, 2, 3],
|
|
'f': 'bigblobof',
|
|
'iamadict': {
|
|
'ok': 'ok',
|
|
}
|
|
},
|
|
'run': [
|
|
'runme',
|
|
'runme2',
|
|
],
|
|
'runmereally': [
|
|
'e', ['a'], 'd',
|
|
],
|
|
}
|
|
merge_with = {
|
|
'a': ['e', 'f', 'g'],
|
|
'b': 'more',
|
|
'c': {
|
|
'a': 'b',
|
|
'f': 'stuff',
|
|
},
|
|
'run': [
|
|
'morecmd',
|
|
'moremoremore',
|
|
],
|
|
'runmereally': [
|
|
'blah', ['b'], 'e',
|
|
],
|
|
}
|
|
merge_how = "list(extend)+dict()+str(append)"
|
|
merger_set = mergers.string_extract_mergers(merge_how)
|
|
self.assertEquals(3, len(merger_set))
|
|
merger = mergers.construct(merger_set)
|
|
merged = merger.merge(source, merge_with)
|
|
self.assertEquals(merged['a'], [1, 'b', 2, 'e', 'f', 'g'])
|
|
self.assertEquals(merged['b'], 'blahblahmore')
|
|
self.assertEquals(merged['c']['f'], 'bigblobofstuff')
|
|
self.assertEquals(merged['run'], ['runme', 'runme2', 'morecmd',
|
|
'moremoremore'])
|
|
self.assertEquals(merged['runmereally'], ['e', ['a'], 'd', 'blah',
|
|
['b'], 'e'])
|
|
|
|
def test_dict_overwrite_layered(self):
|
|
source = {
|
|
'Blah3': {
|
|
'f': '3',
|
|
'g': {
|
|
'a': 'b',
|
|
}
|
|
}
|
|
}
|
|
merge_with = {
|
|
'Blah3': {
|
|
'e': '2',
|
|
'g': {
|
|
'e': 'f',
|
|
}
|
|
}
|
|
}
|
|
merge_how = "list()+dict()+str()"
|
|
merger_set = mergers.string_extract_mergers(merge_how)
|
|
self.assertEquals(3, len(merger_set))
|
|
merger = mergers.construct(merger_set)
|
|
merged = merger.merge(source, merge_with)
|
|
self.assertEquals(merged['Blah3'], {
|
|
'e': '2',
|
|
'f': '3',
|
|
'g': {
|
|
'a': 'b',
|
|
'e': 'f',
|
|
}
|
|
})
|