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