1####################################################### 2# 3# Test peers() 4# Ref:Redmine:4848 (https://cfengine.com/dev/issues/4848) 5####################################################### 6 7### TODO this test is failing, because for example the variable 8### default:this.test#actual_peers_nohosts_2 9### is never VariableTablePut 10### regex:VariableTablePut\([^)]*actual_peers_nohosts_2 11### 12### TODO figure out why actual_peers_nohosts_2 is never Put() 13 14body common control 15{ 16 inputs => { "../../default.cf.sub" }; 17 bundlesequence => { default("$(this.promise_filename)") }; 18 version => "1.0"; 19} 20 21####################################################### 22bundle agent init 23{ 24 methods: 25 "nohosts" 26 usebundle => file_empty("$(G.testfile).nohosts"), 27 comment => "Test the behavior when there are no entries in the file."; 28 29 "nopeers" 30 usebundle => file_mustache_jsonstring 31 ( 32 "$(this.promise_filename).mustache", 33 '{ "peers": [ "a", "b", "c" ] }', 34 "$(G.testfile).nopeers" 35 ), 36 comment => "Test the behaviour when there are no peers (some hosts, but 37 when the executing host is not found in the list)"; 38 39 "somepeers" 40 usebundle => file_mustache_jsonstring 41 ( 42 "$(this.promise_filename).mustache", 43 '{ "peers": [ "a", "b", "c", "$(sys.fqhost)" ] }', 44 "$(G.testfile).somepeers" 45 ), 46 comment => "Test the behaviour when there are some peers."; 47 48 49 "allpeers" usebundle => file_mustache_jsonstring 50 ( 51 "$(this.promise_filename).mustache", 52 '{ "peers": [ "$(sys.fqhost)", "$(sys.fqhost)", "$(sys.fqhost)", "$(sys.fqhost)" ] }', 53 "$(G.testfile).allpeers" 54 ); 55} 56 57bundle agent test 58{ 59 vars: 60 "tests" slist => { "nohosts", "nopeers", "somepeers", "allpeers" }; 61 "subtests" ilist => { "0", "1", "2", "3", "4", "5" }; 62 63 "peers_$(tests)_$(subtests)" slist => peers("$(G.testfile).$(tests)", "#.*", $(subtests)); 64 "peerleaders_$(tests)_$(subtests)" slist => peerleaders("$(G.testfile).$(tests)", "#.*", $(subtests)); 65 "actual_peers_$(tests)_$(subtests)" string => format("%S", "peers_$(tests)_$(subtests)"); 66 "actual_peerleaders_$(tests)_$(subtests)" string => format("%S", "peerleaders_$(tests)_$(subtests)"); 67 "actual_peerleader_$(tests)_$(subtests)" string => peerleader("$(G.testfile).$(tests)", "#.*", $(subtests)); 68} 69 70####################################################### 71 72bundle agent check 73{ 74 vars: 75 "f" slist => { "peers", "peerleader", "peerleaders" }; 76 "tests" slist => { @(test.tests) }; 77 "subtests" ilist => { @(test.subtests) }; 78 79 "good_cases" slist => 80 { 81 "peers_nohosts_2", "peers_nohosts_3", "peers_nohosts_4", "peers_nohosts_5", 82 "peers_nopeers_2", "peers_nopeers_3", "peers_nopeers_4", "peers_nopeers_5", 83 "peers_somepeers_2", "peers_somepeers_3", "peers_somepeers_4", "peers_somepeers_5", 84 "peers_allpeers_2", "peers_allpeers_3", "peers_allpeers_4", "peers_allpeers_5", 85 "peers_somepeers_2", "peers_somepeers_4", "peers_somepeers_5", 86 87 "peerleader_somepeers_2", "peerleader_somepeers_3", "peerleader_somepeers_4", "peerleader_somepeers_5", 88 "peerleader_allpeers_2", "peerleader_allpeers_3", "peerleader_allpeers_4", "peerleader_allpeers_5", 89 90 "peerleaders_nohosts_2", "peerleaders_nohosts_3", "peerleaders_nohosts_4", "peerleaders_nohosts_5", 91 "peerleaders_nopeers_2", "peerleaders_nopeers_3", "peerleaders_nopeers_4", "peerleaders_nopeers_5", 92 "peerleaders_somepeers_2", "peerleaders_somepeers_3", "peerleaders_somepeers_4", "peerleaders_somepeers_5", 93 "peerleaders_allpeers_2", "peerleaders_allpeers_3", "peerleaders_allpeers_4", "peerleaders_allpeers_5", 94 }; 95 96 "bad_cases" slist => 97 { 98 "peers_nohosts_0", "peers_nohosts_1", 99 "peers_nopeers_0", "peers_nopeers_1", 100 "peers_somepeers_0", "peers_somepeers_1", 101 "peers_allpeers_0", "peers_allpeers_1", 102 103 "peerleader_nohosts_0", "peerleader_nohosts_1", "peerleader_nohosts_2", "peerleader_nohosts_3", "peerleader_nohosts_4", "peerleader_nohosts_5", 104 "peerleader_nopeers_0", "peerleader_nopeers_1", "peerleader_nopeers_2", "peerleader_nopeers_3", "peerleader_nopeers_4", "peerleader_nopeers_5", 105 "peerleader_somepeers_0", "peerleader_somepeers_1", 106 "peerleader_allpeers_0", "peerleader_allpeers_1", 107 108 "peerleaders_nohosts_0", "peerleaders_nohosts_1", 109 "peerleaders_nopeers_0", "peerleaders_nopeers_1", 110 "peerleaders_somepeers_0", "peerleaders_somepeers_1", 111 "peerleaders_allpeers_0", "peerleaders_allpeers_1", 112 }; 113 114 "expected_peers_allpeers_$(subtests)" string => '{ }'; 115 "expected_peers_nopeers_$(subtests)" string => '{ }'; 116 "expected_peers_nohosts_$(subtests)" string => '{ }'; 117 "expected_peers_allpeers_$(subtests)" string => '{ }'; 118 "expected_peers_nopeers_$(subtests)" string => '{ }'; 119 "expected_peers_nohosts_$(subtests)" string => '{ }'; 120 "expected_peers_somepeers_2" string => '{ "c" }'; 121 "expected_peers_somepeers_3" string => '{ }'; 122 "expected_peers_somepeers_4" string => '{ "a", "b", "c" }'; 123 "expected_peers_somepeers_5" string => '{ "a", "b", "c" }'; 124 125 "expected_peerleader_allpeers_$(subtests)" string => 'localhost'; 126 "expected_peerleader_somepeers_2" string => 'c'; 127 "expected_peerleader_somepeers_3" string => 'localhost'; 128 "expected_peerleader_somepeers_4" string => 'a'; 129 "expected_peerleader_somepeers_5" string => 'a'; 130 131 "expected_peerleaders_nohosts_$(subtests)" string => '{ }'; 132 133 "expected_peerleaders_nopeers_2" string => '{ "a", "c" }'; 134 "expected_peerleaders_nopeers_3" string => '{ "a" }'; 135 "expected_peerleaders_nopeers_4" string => '{ "a" }'; 136 "expected_peerleaders_nopeers_5" string => '{ "a" }'; 137 138 "expected_peerleaders_somepeers_2" string => '{ "a", "c" }'; 139 "expected_peerleaders_somepeers_3" string => '{ "a", "localhost" }'; 140 "expected_peerleaders_somepeers_4" string => '{ "a" }'; 141 "expected_peerleaders_somepeers_5" string => '{ "a" }'; 142 143 "expected_peerleaders_allpeers_2" string => '{ "localhost", "localhost" }'; 144 "expected_peerleaders_allpeers_3" string => '{ "localhost", "localhost" }'; 145 "expected_peerleaders_allpeers_4" string => '{ "localhost" }'; 146 "expected_peerleaders_allpeers_5" string => '{ "localhost" }'; 147 148 "c[$(f)_$(tests)_$(subtests)]" string => "ok_$(f)_$(tests)_$(subtests)"; 149 "cases" slist => getvalues(c); 150 "cs" string => join(",", cases); 151 152 classes: 153 "ok_$(bad_cases)" not => isvariable("test.actual_$(bad_cases)"); 154 "ok_$(good_cases)" expression => strcmp("$(expected_$(good_cases))", 155 "$(test.actual_$(good_cases))"); 156 157 methods: 158 "" usebundle => dcs_passif_expected($(cs), "", $(this.promise_filename)), 159 inherit => "true"; 160 161 reports: 162 EXTRA:: 163 "$(good_cases): as expected, '$(expected_$(good_cases))'" 164 if => "ok_$(good_cases)"; 165 166 "$(bad_cases): as expected, no variable" 167 if => "ok_$(bad_cases)"; 168 169 #"test.actual_$(good_cases) = '$(test.actual_$(good_cases))'"; 170 171 DEBUG:: 172 "$(good_cases): NOT as expected, '$(expected_$(good_cases))' != '$(test.actual_$(good_cases))'" 173 if => "!ok_$(good_cases)"; 174 175 "$(bad_cases): NOT as expected, has variable '$(test.actual_$(bad_cases))'" 176 if => "!ok_$(bad_cases)"; 177} 178