1#######################################################
2#
3# Test mergedata()
4# This test is unstable until we have canonical JSON output
5#
6#######################################################
7
8body common control
9{
10      inputs => { "../../default.cf.sub" };
11      bundlesequence  => { default("$(this.promise_filename)") };
12      version => "1.0";
13}
14
15#######################################################
16
17bundle agent init
18{
19}
20
21#######################################################
22
23bundle agent test
24{
25  vars:
26      "load1" data => parsejson('[ 1, 2, 3]');
27      "load2" slist => { "element1", "element2", "element3" };
28      "load3" data => parsejson('{ "x": "y" }');
29      "load4" slist => { };
30      "load5[mykey]" slist => { "myvalue" };
31      "load5[anotherkey]" string => "anothervalue";
32      "load5[lastkey!]" slist => {};
33
34      "X" slist => { "1", "2", "3", "4", "5" };
35      "Y" slist => { @(X) };
36
37      "load_$(X)" data => mergedata("load$(X)");
38      "load_$(X)_$(Y)" data => mergedata("load$(X)", "load$(Y)");
39      "wrap_key_$(X)" data => mergedata('{ "wrapkey": load$(X) }');
40      "wrap_array_$(X)" data => mergedata('[ load$(X) ]');
41
42      "bad1" data => mergedata(missingvar);
43      "bad2" data => mergedata(load1, missingvar);
44
45      "justastring" string => "me";
46      "bad3" data => mergedata(justastring);
47      "bad4" data => mergedata(load1, justastring);
48}
49
50#######################################################
51
52bundle agent check
53{
54  vars:
55      "X" slist => { @(test.X) };
56      "Y" slist => { @(test.X) };
57
58      "expected_1" string => '[1,2,3]';
59      "expected_2" string => '["element1","element2","element3"]';
60      "expected_3" string => '{"x":"y"}';
61      "expected_4" string => '[]';
62      "expected_5" string => '{"anotherkey":"anothervalue","lastkey!":[],"mykey":["myvalue"]}';
63      "expected_1_1" string => '[1,2,3,1,2,3]';
64      "expected_1_2" string => '[1,2,3,"element1","element2","element3"]';
65      "expected_1_3" string => '{"0":1,"1":2,"2":3,"x":"y"}';
66      "expected_1_4" string => '[1,2,3]';
67      "expected_1_5" string => '{"0":1,"1":2,"2":3,"anotherkey":"anothervalue","lastkey!":[],"mykey":["myvalue"]}';
68      "expected_2_1" string => '["element1","element2","element3",1,2,3]';
69      "expected_2_2" string => '["element1","element2","element3","element1","element2","element3"]';
70      "expected_2_3" string => '{"0":"element1","1":"element2","2":"element3","x":"y"}';
71      "expected_2_4" string => '["element1","element2","element3"]';
72      "expected_2_5" string => '{"0":"element1","1":"element2","2":"element3","anotherkey":"anothervalue","lastkey!":[],"mykey":["myvalue"]}';
73      "expected_3_1" string => '{"0":1,"1":2,"2":3,"x":"y"}';
74      "expected_3_2" string => '{"0":"element1","1":"element2","2":"element3","x":"y"}';
75      "expected_3_3" string => '{"x":"y"}';
76      "expected_3_4" string => '{"x":"y"}';
77      "expected_3_5" string => '{"anotherkey":"anothervalue","lastkey!":[],"mykey":["myvalue"],"x":"y"}';
78      "expected_4_1" string => '[1,2,3]';
79      "expected_4_2" string => '["element1","element2","element3"]';
80      "expected_4_3" string => '{"x":"y"}';
81      "expected_4_4" string => '[]';
82      "expected_4_5" string => '{"anotherkey":"anothervalue","lastkey!":[],"mykey":["myvalue"]}';
83      "expected_5_1" string => '{"0":1,"1":2,"2":3,"anotherkey":"anothervalue","lastkey!":[],"mykey":["myvalue"]}';
84      "expected_5_2" string => '{"0":"element1","1":"element2","2":"element3","anotherkey":"anothervalue","lastkey!":[],"mykey":["myvalue"]}';
85      "expected_5_3" string => '{"anotherkey":"anothervalue","lastkey!":[],"mykey":["myvalue"],"x":"y"}';
86      "expected_5_4" string => '{"anotherkey":"anothervalue","lastkey!":[],"mykey":["myvalue"]}';
87      "expected_5_5" string => '{"anotherkey":"anothervalue","lastkey!":[],"mykey":["myvalue"]}';
88
89      "expected_wrapped_key_1" string => '{"wrapkey":[1,2,3]}';
90      "expected_wrapped_key_2" string => '{"wrapkey":["element1","element2","element3"]}';
91      "expected_wrapped_key_3" string => '{"wrapkey":{"x":"y"}}';
92      "expected_wrapped_key_4" string => '{"wrapkey":[]}';
93      "expected_wrapped_key_5" string => '{"wrapkey":{"anotherkey":"anothervalue","lastkey!":[],"mykey":["myvalue"]}}';
94
95      "expected_wrapped_array_1" string => '[[1,2,3]]';
96      "expected_wrapped_array_2" string => '[["element1","element2","element3"]]';
97      "expected_wrapped_array_3" string => '[{"x":"y"}]';
98      "expected_wrapped_array_4" string => '[[]]';
99      "expected_wrapped_array_5" string => '[{"anotherkey":"anothervalue","lastkey!":[],"mykey":["myvalue"]}]';
100
101      "actual_$(X)_$(Y)" string => format("%S", "test.load_$(X)_$(Y)");
102      "actual_$(X)" string => format("%S", "test.load_$(X)");
103      "actual_wrapped_key_$(X)" string => format("%S", "test.wrap_key_$(X)");
104      "actual_wrapped_array_$(X)" string => format("%S", "test.wrap_array_$(X)");
105
106  classes:
107      "ok_$(X)_$(Y)" expression => strcmp("$(actual_$(X)_$(Y))",
108                                          "$(expected_$(X)_$(Y))");
109
110      "ok_$(X)" expression => strcmp("$(actual_$(X))",
111                                     "$(expected_$(X))");
112
113      "not_ok_wrapped_key_$(X)" not => strcmp("$(actual_wrapped_key_$(X))",
114                                             "$(expected_wrapped_key_$(X))");
115
116      "not_ok_wrapped_array_$(X)" not => strcmp("$(actual_wrapped_array_$(X))",
117                                               "$(expected_wrapped_array_$(X))");
118
119      "ok" not => classmatch("not_ok_.*");
120
121  reports:
122    DEBUG::
123      "$(X): actual $(actual_$(X)) != $(X) expected $(expected_$(X))"
124       if => "!ok_$(X)";
125
126      "$(X): actual wrap key $(actual_wrapped_key_$(X)) != $(X) expected wrapped key $(expected_wrapped_key_$(X))"
127       if => "not_ok_wrapped_key_$(X)";
128
129      "$(X): actual wrap array $(actual_wrapped_array_$(X)) != $(X) expected wrapped array $(expected_wrapped_array_$(X))"
130       if => "not_ok_wrapped_array_$(X)";
131
132      "$(X)+$(Y): actual $(actual_$(X)_$(Y)) != $(X)+$(Y) expected $(expected_$(X)_$(Y))"
133       if => "!ok_$(X)_$(Y)";
134
135    ok::
136      "$(this.promise_filename) Pass";
137    !ok::
138      "$(this.promise_filename) FAIL";
139}
140