1# Test that the datastate() function gives good data 2 3body common control 4{ 5 inputs => { "../../default.cf.sub", "datastate.cf.sub" }; 6 bundlesequence => { default("$(this.promise_filename)") }; 7 version => "1.0"; 8} 9 10bundle agent init 11{ 12 classes: 13 "a" expression => "any", scope => "namespace"; 14 "b" expression => "any"; 15 "c" expression => "!any"; 16 17 vars: 18 "x" string => "1"; 19 "y" data => parsejson('{"ykey":["yvalue1", "yvalue2"]}'); 20 "z" slist => { "z1", "z2", "z3" }; 21} 22 23bundle agent test 24{ 25 vars: 26 "state" data => datastate(); 27} 28 29bundle agent check 30{ 31 vars: 32 "init_state_str" string => format("%S", "test.state[vars][init]"); 33 "ns_state_str" string => format("%S", "test.state[vars][visible_namespace:included]"); 34 "known_classes" slist => getindices("test.state[classes]"); 35 "printed_classes" string => format("%S", known_classes); 36 "init_expected" string => '{"x":"1","y":{"ykey":["yvalue1","yvalue2"]},"z":["z1","z2","z3"]}'; 37 "ns_expected" string => '{"i":"1","j":"two","k":["k2","everest"],"l":[1,"l","|"]}'; 38 39 classes: 40 "init_ok" expression => strcmp($(init_state_str), $(init_expected)); 41 "ns_ok" expression => strcmp($(ns_state_str), $(ns_expected)); 42 "classes_ok" and => { some("cfengine_3", known_classes), 43 some("a", known_classes), 44 some("visible_namespace:foo", known_classes) }; 45 "ok" and => { "init_ok", "ns_ok", "classes_ok" }; 46 47 reports: 48 DEBUG.!ns_ok:: 49 "visible_namespace:included data state is $(ns_state_str)"; 50 "expected visible_namespace:included state is $(ns_expected)"; 51 "expected state != visible_namespace:included data state"; 52 DEBUG.!init_ok:: 53 "init data state is $(init_state_str)"; 54 "expected init state is $(init_expected)"; 55 "expected init state != init data state"; 56 DEBUG.!classes_ok:: 57 "expected classes a, visible_namespace:foo, and cfengine_3 were not in $(printed_classes)"; 58 59 ok:: 60 "$(this.promise_filename) Pass"; 61 !ok:: 62 "$(this.promise_filename) FAIL"; 63} 64