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