13 #include <gtest/gtest.h>
19 using std::chrono::milliseconds;
31 root(
"root_parallel", 4),
32 action_1(
"action_1", milliseconds(100)),
34 action_2(
"action_2", milliseconds(300)),
69 action_R(
"action_3", milliseconds(400)),
95 ASSERT_EQ(NodeStatus::SUCCESS, condition_1.status());
96 ASSERT_EQ(NodeStatus::SUCCESS, condition_2.status());
97 ASSERT_EQ(NodeStatus::RUNNING, action_1.status());
98 ASSERT_EQ(NodeStatus::RUNNING, action_2.status());
99 ASSERT_EQ(NodeStatus::RUNNING, state);
101 std::this_thread::sleep_for(milliseconds(200));
102 state = root.executeTick();
104 ASSERT_EQ(NodeStatus::SUCCESS, condition_1.status());
105 ASSERT_EQ(NodeStatus::SUCCESS, condition_2.status());
106 ASSERT_EQ(NodeStatus::SUCCESS, action_1.status());
107 ASSERT_EQ(NodeStatus::RUNNING, action_2.status());
108 ASSERT_EQ(NodeStatus::RUNNING, state);
110 std::this_thread::sleep_for(milliseconds(200));
111 state = root.executeTick();
113 ASSERT_EQ(NodeStatus::IDLE, condition_1.status());
114 ASSERT_EQ(NodeStatus::IDLE, condition_2.status());
115 ASSERT_EQ(NodeStatus::IDLE, action_1.status());
116 ASSERT_EQ(NodeStatus::IDLE, action_2.status());
117 ASSERT_EQ(NodeStatus::SUCCESS, state);
122 root.setSuccessThreshold(3);
123 action_1.setTime(milliseconds(100));
124 action_2.setTime(milliseconds(500));
128 ASSERT_EQ(NodeStatus::SUCCESS, condition_1.status());
129 ASSERT_EQ(NodeStatus::SUCCESS, condition_2.status());
130 ASSERT_EQ(NodeStatus::RUNNING, action_1.status());
131 ASSERT_EQ(NodeStatus::RUNNING, action_2.status());
132 ASSERT_EQ(NodeStatus::RUNNING, state);
134 std::this_thread::sleep_for(milliseconds(150));
135 state = root.executeTick();
138 ASSERT_EQ(NodeStatus::IDLE, condition_1.status());
139 ASSERT_EQ(NodeStatus::IDLE, condition_2.status());
140 ASSERT_EQ(NodeStatus::IDLE, action_1.status());
141 ASSERT_EQ(NodeStatus::IDLE, action_2.status());
142 ASSERT_EQ(NodeStatus::SUCCESS, state);
147 root.setSuccessThreshold(-2);
148 action_1.setTime(milliseconds(100));
149 action_2.setTime(milliseconds(500));
153 ASSERT_EQ(NodeStatus::SUCCESS, condition_1.status());
154 ASSERT_EQ(NodeStatus::SUCCESS, condition_2.status());
155 ASSERT_EQ(NodeStatus::RUNNING, action_1.status());
156 ASSERT_EQ(NodeStatus::RUNNING, action_2.status());
157 ASSERT_EQ(NodeStatus::RUNNING, state);
159 std::this_thread::sleep_for(milliseconds(150));
160 state = root.executeTick();
163 ASSERT_EQ(NodeStatus::IDLE, condition_1.status());
164 ASSERT_EQ(NodeStatus::IDLE, condition_2.status());
165 ASSERT_EQ(NodeStatus::IDLE, action_1.status());
166 ASSERT_EQ(NodeStatus::IDLE, action_2.status());
167 ASSERT_EQ(NodeStatus::SUCCESS, state);
172 root.setSuccessThreshold(-1);
173 action_1.setTime(milliseconds(100));
174 action_2.setTime(milliseconds(500));
178 ASSERT_EQ(NodeStatus::SUCCESS, condition_1.status());
179 ASSERT_EQ(NodeStatus::SUCCESS, condition_2.status());
180 ASSERT_EQ(NodeStatus::RUNNING, action_1.status());
181 ASSERT_EQ(NodeStatus::RUNNING, action_2.status());
182 ASSERT_EQ(NodeStatus::RUNNING, state);
184 std::this_thread::sleep_for(milliseconds(150));
185 state = root.executeTick();
187 ASSERT_EQ(NodeStatus::SUCCESS, condition_1.status());
188 ASSERT_EQ(NodeStatus::SUCCESS, condition_2.status());
189 ASSERT_EQ(NodeStatus::SUCCESS, action_1.status());
190 ASSERT_EQ(NodeStatus::RUNNING, action_2.status());
191 ASSERT_EQ(NodeStatus::RUNNING, state);
193 std::this_thread::sleep_for(milliseconds(650));
194 state = root.executeTick();
196 ASSERT_EQ(NodeStatus::IDLE, condition_1.status());
197 ASSERT_EQ(NodeStatus::IDLE, condition_2.status());
198 ASSERT_EQ(NodeStatus::IDLE, action_1.status());
199 ASSERT_EQ(NodeStatus::IDLE, action_2.status());
200 ASSERT_EQ(NodeStatus::SUCCESS, state);
205 root.setSuccessThreshold(1);
206 root.setFailureThreshold(-1);
207 action_1.setTime(milliseconds(100));
208 action_1.setExpectedResult(NodeStatus::FAILURE);
209 condition_1.setExpectedResult(NodeStatus::FAILURE);
210 action_2.setTime(milliseconds(200));
211 condition_2.setExpectedResult(NodeStatus::FAILURE);
212 action_2.setExpectedResult(NodeStatus::FAILURE);
215 ASSERT_EQ(NodeStatus::RUNNING, state);
217 std::this_thread::sleep_for(milliseconds(250));
218 state = root.executeTick();
219 ASSERT_EQ(NodeStatus::FAILURE, state);
224 root.setSuccessThreshold(2);
227 ASSERT_EQ(NodeStatus::IDLE, condition_1.status());
228 ASSERT_EQ(NodeStatus::IDLE, condition_2.status());
229 ASSERT_EQ(NodeStatus::IDLE, action_1.status());
230 ASSERT_EQ(NodeStatus::IDLE, action_2.status());
231 ASSERT_EQ(NodeStatus::SUCCESS, state);
238 ASSERT_EQ(NodeStatus::RUNNING, parallel_left.status());
239 ASSERT_EQ(NodeStatus::SUCCESS, condition_L1.status());
240 ASSERT_EQ(NodeStatus::SUCCESS, condition_L2.status());
241 ASSERT_EQ(NodeStatus::RUNNING, action_L1.status());
242 ASSERT_EQ(NodeStatus::RUNNING, action_L2.status());
244 ASSERT_EQ(NodeStatus::SUCCESS, parallel_right.status());
245 ASSERT_EQ(NodeStatus::IDLE, condition_R.status());
246 ASSERT_EQ(NodeStatus::IDLE, action_R.status());
248 ASSERT_EQ(NodeStatus::RUNNING, state);
250 std::this_thread::sleep_for(milliseconds(200));
251 state = parallel_root.executeTick();
253 ASSERT_EQ(NodeStatus::IDLE, parallel_left.status());
254 ASSERT_EQ(NodeStatus::IDLE, condition_L1.status());
255 ASSERT_EQ(NodeStatus::IDLE, condition_L2.status());
256 ASSERT_EQ(NodeStatus::IDLE, action_L1.status());
257 ASSERT_EQ(NodeStatus::IDLE, action_L2.status());
259 ASSERT_EQ(NodeStatus::IDLE, parallel_right.status());
260 ASSERT_EQ(NodeStatus::IDLE, condition_R.status());
261 ASSERT_EQ(NodeStatus::IDLE, action_R.status());
263 ASSERT_EQ(NodeStatus::SUCCESS, state);
268 parallel_left.setFailureThreshold(3);
269 parallel_left.setSuccessThreshold(3);
270 condition_L1.setExpectedResult(NodeStatus::FAILURE);
271 condition_L2.setExpectedResult(NodeStatus::FAILURE);
277 ASSERT_EQ(NodeStatus::IDLE, parallel_left.status());
278 ASSERT_EQ(NodeStatus::IDLE, condition_L1.status());
279 ASSERT_EQ(NodeStatus::IDLE, condition_L2.status());
280 ASSERT_EQ(NodeStatus::IDLE, action_L1.status());
281 ASSERT_EQ(NodeStatus::IDLE, action_L2.status());
283 ASSERT_EQ(NodeStatus::IDLE, parallel_right.status());
284 ASSERT_EQ(NodeStatus::IDLE, condition_R.status());
285 ASSERT_EQ(NodeStatus::IDLE, action_R.status());
287 ASSERT_EQ(NodeStatus::FAILURE, state);
292 condition_R.setExpectedResult(NodeStatus::FAILURE);
298 ASSERT_EQ(NodeStatus::IDLE, parallel_left.status());
299 ASSERT_EQ(NodeStatus::IDLE, condition_L1.status());
300 ASSERT_EQ(NodeStatus::IDLE, condition_L2.status());
301 ASSERT_EQ(NodeStatus::IDLE, action_L1.status());
302 ASSERT_EQ(NodeStatus::IDLE, action_L2.status());
304 ASSERT_EQ(NodeStatus::IDLE, parallel_right.status());
305 ASSERT_EQ(NodeStatus::IDLE, condition_R.status());
306 ASSERT_EQ(NodeStatus::IDLE, action_R.status());
308 ASSERT_EQ(NodeStatus::FAILURE, state);
313 parallel_right.setFailureThreshold(2);
314 condition_R.setExpectedResult(NodeStatus::FAILURE);
319 ASSERT_EQ(NodeStatus::RUNNING, parallel_left.status());
320 ASSERT_EQ(NodeStatus::SUCCESS, condition_L1.status());
321 ASSERT_EQ(NodeStatus::SUCCESS, condition_L2.status());
322 ASSERT_EQ(NodeStatus::RUNNING, action_L1.status());
323 ASSERT_EQ(NodeStatus::RUNNING, action_L2.status());
325 ASSERT_EQ(NodeStatus::RUNNING, parallel_right.status());
326 ASSERT_EQ(NodeStatus::FAILURE, condition_R.status());
327 ASSERT_EQ(NodeStatus::RUNNING, action_R.status());
329 ASSERT_EQ(NodeStatus::RUNNING, state);
332 std::this_thread::sleep_for(milliseconds(500));
333 state = parallel_root.executeTick();
335 ASSERT_EQ(NodeStatus::IDLE, parallel_left.status());
336 ASSERT_EQ(NodeStatus::IDLE, condition_L1.status());
337 ASSERT_EQ(NodeStatus::IDLE, condition_L2.status());
338 ASSERT_EQ(NodeStatus::IDLE, action_L1.status());
339 ASSERT_EQ(NodeStatus::IDLE, action_L2.status());
341 ASSERT_EQ(NodeStatus::IDLE, parallel_right.status());
342 ASSERT_EQ(NodeStatus::IDLE, condition_R.status());
343 ASSERT_EQ(NodeStatus::IDLE, action_R.status());
345 ASSERT_EQ(NodeStatus::SUCCESS, state);
350 condition_R.setExpectedResult(NodeStatus::FAILURE);
352 parallel_right.setFailureThreshold(2);
353 parallel_left.setSuccessThreshold(4);
356 std::this_thread::sleep_for(milliseconds(300));
359 ASSERT_EQ(NodeStatus::RUNNING, parallel_left.status());
360 ASSERT_EQ(NodeStatus::SUCCESS, condition_L1.status());
361 ASSERT_EQ(NodeStatus::SUCCESS, condition_L2.status());
362 ASSERT_EQ(NodeStatus::SUCCESS, action_L1.status());
363 ASSERT_EQ(NodeStatus::SUCCESS, action_L2.status());
365 ASSERT_EQ(NodeStatus::RUNNING, parallel_right.status());
368 state = parallel_root.executeTick();
370 ASSERT_EQ(NodeStatus::SUCCESS, parallel_left.status());
371 ASSERT_EQ(NodeStatus::IDLE, condition_L1.status());
372 ASSERT_EQ(NodeStatus::IDLE, condition_L2.status());
373 ASSERT_EQ(NodeStatus::IDLE, action_L1.status());
374 ASSERT_EQ(NodeStatus::IDLE, action_L2.status());
376 ASSERT_EQ(NodeStatus::RUNNING, parallel_right.status());
377 ASSERT_EQ(NodeStatus::RUNNING, action_R.status());
379 ASSERT_EQ(NodeStatus::RUNNING, state);
382 std::this_thread::sleep_for(milliseconds(300));
383 state = parallel_root.executeTick();
385 ASSERT_EQ(NodeStatus::IDLE, parallel_left.status());
386 ASSERT_EQ(NodeStatus::IDLE, action_L1.status());
388 ASSERT_EQ(NodeStatus::IDLE, parallel_right.status());
389 ASSERT_EQ(NodeStatus::IDLE, action_R.status());
391 ASSERT_EQ(NodeStatus::SUCCESS, state);