Lifecycle refactor (#298)
* no static initialization of states anymore * make transition labels more descriptive * introduce labeled keys * define default transition keys * fix memory management * introduce service for transition graph * export transition keys * remove keys, transition id unique, label ambiguous * semicolon for macro call
This commit is contained in:
		
							parent
							
								
									9d4b1c9912
								
							
						
					
					
						commit
						5e3d4be720
					
				
					 13 changed files with 933 additions and 659 deletions
				
			
		| 
						 | 
				
			
			@ -28,8 +28,7 @@
 | 
			
		|||
#include "rcutils/logging_macros.h"
 | 
			
		||||
 | 
			
		||||
#include "rcl_lifecycle/rcl_lifecycle.h"
 | 
			
		||||
 | 
			
		||||
#include "../src/default_state_machine.h"
 | 
			
		||||
#include "rcl_lifecycle/default_state_machine.h"
 | 
			
		||||
 | 
			
		||||
class TestDefaultStateMachine : public ::testing::Test
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -62,48 +61,47 @@ protected:
 | 
			
		|||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
std::vector<rcl_lifecycle_transition_key_t> keys =
 | 
			
		||||
{
 | 
			
		||||
  lifecycle_msgs__msg__Transition__TRANSITION_CONFIGURE,
 | 
			
		||||
  lifecycle_msgs__msg__Transition__TRANSITION_ACTIVATE,
 | 
			
		||||
  lifecycle_msgs__msg__Transition__TRANSITION_DEACTIVATE,
 | 
			
		||||
  lifecycle_msgs__msg__Transition__TRANSITION_CLEANUP,
 | 
			
		||||
  lifecycle_msgs__msg__Transition__TRANSITION_SHUTDOWN,
 | 
			
		||||
  lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
  lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_FAILURE,
 | 
			
		||||
  lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_ERROR
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
test_trigger_transition(
 | 
			
		||||
  rcl_lifecycle_state_machine_t * state_machine,
 | 
			
		||||
  int key,
 | 
			
		||||
  uint8_t key_id,
 | 
			
		||||
  unsigned int expected_current_state,
 | 
			
		||||
  unsigned int expected_goal_state)
 | 
			
		||||
{
 | 
			
		||||
  EXPECT_EQ(
 | 
			
		||||
    expected_current_state, state_machine->current_state->id);
 | 
			
		||||
  EXPECT_EQ(
 | 
			
		||||
    RCL_RET_OK, rcl_lifecycle_trigger_transition(
 | 
			
		||||
      state_machine, key, false));
 | 
			
		||||
    RCL_RET_OK, rcl_lifecycle_trigger_transition_by_id(
 | 
			
		||||
      state_machine, key_id, false));
 | 
			
		||||
  EXPECT_EQ(
 | 
			
		||||
    expected_goal_state, state_machine->current_state->id);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Test suite
 | 
			
		||||
 */
 | 
			
		||||
TEST_F(TestDefaultStateMachine, zero_init) {
 | 
			
		||||
  rcl_lifecycle_state_machine_t state_machine = rcl_lifecycle_get_zero_initialized_state_machine();
 | 
			
		||||
  ASSERT_EQ(rcl_lifecycle_state_machine_is_initialized(&state_machine), RCL_RET_ERROR);
 | 
			
		||||
  EXPECT_EQ(rcl_lifecycle_state_machine_is_initialized(&state_machine), RCL_RET_ERROR);
 | 
			
		||||
  rcl_reset_error();
 | 
			
		||||
  const rcl_lifecycle_transition_map_t * transition_map = &state_machine.transition_map;
 | 
			
		||||
  ASSERT_EQ(transition_map->states_size, (unsigned int)0);
 | 
			
		||||
  ASSERT_EQ(transition_map->states, nullptr);
 | 
			
		||||
  ASSERT_EQ(transition_map->transitions_size, (unsigned int)0);
 | 
			
		||||
  ASSERT_EQ(transition_map->transitions, nullptr);
 | 
			
		||||
  EXPECT_EQ(transition_map->states_size, 0u);
 | 
			
		||||
  EXPECT_EQ(transition_map->states, nullptr);
 | 
			
		||||
  EXPECT_EQ(transition_map->transitions_size, 0u);
 | 
			
		||||
  EXPECT_EQ(transition_map->transitions, nullptr);
 | 
			
		||||
 | 
			
		||||
  auto ret = rcl_lifecycle_state_machine_fini(&state_machine, this->node_ptr, this->allocator);
 | 
			
		||||
  ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string_safe();
 | 
			
		||||
  EXPECT_EQ(RCL_RET_OK, ret) << rcl_get_error_string_safe();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestDefaultStateMachine, default_init) {
 | 
			
		||||
  rcl_lifecycle_state_machine_t state_machine = rcl_lifecycle_get_zero_initialized_state_machine();
 | 
			
		||||
 | 
			
		||||
  auto ret = rcl_lifecycle_init_default_state_machine(&state_machine, this->allocator);
 | 
			
		||||
  EXPECT_EQ(RCL_RET_OK, ret) << rcl_get_error_string_safe();
 | 
			
		||||
 | 
			
		||||
  ret = rcl_lifecycle_state_machine_fini(&state_machine, this->node_ptr, this->allocator);
 | 
			
		||||
  EXPECT_EQ(RCL_RET_OK, ret) << rcl_get_error_string_safe();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(TestDefaultStateMachine, default_sequence) {
 | 
			
		||||
| 
						 | 
				
			
			@ -121,7 +119,7 @@ TEST_F(TestDefaultStateMachine, default_sequence) {
 | 
			
		|||
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_CONFIGURE_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_CONFIGURING,
 | 
			
		||||
    lifecycle_msgs__msg__State__PRIMARY_STATE_INACTIVE);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -133,7 +131,7 @@ TEST_F(TestDefaultStateMachine, default_sequence) {
 | 
			
		|||
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_ACTIVATE_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_ACTIVATING,
 | 
			
		||||
    lifecycle_msgs__msg__State__PRIMARY_STATE_ACTIVE);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -145,7 +143,7 @@ TEST_F(TestDefaultStateMachine, default_sequence) {
 | 
			
		|||
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_DEACTIVATE_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_DEACTIVATING,
 | 
			
		||||
    lifecycle_msgs__msg__State__PRIMARY_STATE_INACTIVE);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -157,19 +155,19 @@ TEST_F(TestDefaultStateMachine, default_sequence) {
 | 
			
		|||
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_CLEANUP_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_CLEANINGUP,
 | 
			
		||||
    lifecycle_msgs__msg__State__PRIMARY_STATE_UNCONFIGURED);
 | 
			
		||||
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_SHUTDOWN,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_UNCONFIGURED_SHUTDOWN,
 | 
			
		||||
    lifecycle_msgs__msg__State__PRIMARY_STATE_UNCONFIGURED,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_SHUTTINGDOWN);
 | 
			
		||||
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_SHUTDOWN_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_SHUTTINGDOWN,
 | 
			
		||||
    lifecycle_msgs__msg__State__PRIMARY_STATE_FINALIZED);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -184,13 +182,39 @@ TEST_F(TestDefaultStateMachine, wrong_default_sequence) {
 | 
			
		|||
  ret = rcl_lifecycle_init_default_state_machine(&state_machine, this->allocator);
 | 
			
		||||
  EXPECT_EQ(RCL_RET_OK, ret) << rcl_get_error_string_safe();
 | 
			
		||||
 | 
			
		||||
  std::vector<uint8_t> transition_ids =
 | 
			
		||||
  {
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CONFIGURE,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CLEANUP,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ACTIVATE,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_DEACTIVATE,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_SHUTDOWN,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_CONFIGURE_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_CONFIGURE_FAILURE,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_CONFIGURE_ERROR,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_CLEANUP_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_CLEANUP_FAILURE,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_CLEANUP_ERROR,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_ACTIVATE_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_ACTIVATE_FAILURE,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_ACTIVATE_ERROR,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_DEACTIVATE_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_DEACTIVATE_FAILURE,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_DEACTIVATE_ERROR,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_SHUTDOWN_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_SHUTDOWN_FAILURE,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_SHUTDOWN_ERROR,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_ERROR_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_ERROR_FAILURE,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_ERROR_ERROR,
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  { // supposed to stay unconfigured for all invalid
 | 
			
		||||
    for (auto it = keys.begin(); it != keys.end(); ++it) {
 | 
			
		||||
    for (auto it = transition_ids.begin(); it != transition_ids.end(); ++it) {
 | 
			
		||||
      if (*it == lifecycle_msgs__msg__Transition__TRANSITION_CONFIGURE ||
 | 
			
		||||
        *it == lifecycle_msgs__msg__Transition__TRANSITION_SHUTDOWN) {continue;}
 | 
			
		||||
 | 
			
		||||
      EXPECT_EQ(
 | 
			
		||||
        RCL_RET_ERROR, rcl_lifecycle_trigger_transition(&state_machine, *it, false));
 | 
			
		||||
      EXPECT_EQ(RCL_RET_ERROR, rcl_lifecycle_trigger_transition_by_id(&state_machine, *it, false));
 | 
			
		||||
      rcl_reset_error();
 | 
			
		||||
      EXPECT_EQ(
 | 
			
		||||
        state_machine.current_state->id,
 | 
			
		||||
| 
						 | 
				
			
			@ -205,12 +229,12 @@ TEST_F(TestDefaultStateMachine, wrong_default_sequence) {
 | 
			
		|||
      lifecycle_msgs__msg__State__PRIMARY_STATE_UNCONFIGURED,
 | 
			
		||||
      lifecycle_msgs__msg__State__TRANSITION_STATE_CONFIGURING);
 | 
			
		||||
 | 
			
		||||
    for (auto it = keys.begin(); it != keys.end(); ++it) {
 | 
			
		||||
      if (*it == lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS ||
 | 
			
		||||
        *it == lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_FAILURE ||
 | 
			
		||||
        *it == lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_ERROR) {continue;}
 | 
			
		||||
    for (auto it = transition_ids.begin(); it != transition_ids.end(); ++it) {
 | 
			
		||||
      if (*it == lifecycle_msgs__msg__Transition__TRANSITION_ON_CONFIGURE_SUCCESS ||
 | 
			
		||||
        *it == lifecycle_msgs__msg__Transition__TRANSITION_ON_CONFIGURE_FAILURE ||
 | 
			
		||||
        *it == lifecycle_msgs__msg__Transition__TRANSITION_ON_CONFIGURE_ERROR) {continue;}
 | 
			
		||||
 | 
			
		||||
      EXPECT_EQ(RCL_RET_ERROR, rcl_lifecycle_trigger_transition(&state_machine, *it, false));
 | 
			
		||||
      EXPECT_EQ(RCL_RET_ERROR, rcl_lifecycle_trigger_transition_by_id(&state_machine, *it, false));
 | 
			
		||||
      rcl_reset_error();
 | 
			
		||||
      EXPECT_EQ(state_machine.current_state->id,
 | 
			
		||||
        lifecycle_msgs__msg__State__TRANSITION_STATE_CONFIGURING);
 | 
			
		||||
| 
						 | 
				
			
			@ -220,18 +244,17 @@ TEST_F(TestDefaultStateMachine, wrong_default_sequence) {
 | 
			
		|||
  { // supposed to stay inactive for all invalid
 | 
			
		||||
    test_trigger_transition(
 | 
			
		||||
      &state_machine,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_ON_CONFIGURE_SUCCESS,
 | 
			
		||||
      lifecycle_msgs__msg__State__TRANSITION_STATE_CONFIGURING,
 | 
			
		||||
      lifecycle_msgs__msg__State__PRIMARY_STATE_INACTIVE);
 | 
			
		||||
 | 
			
		||||
    for (auto it = keys.begin(); it != keys.end(); ++it) {
 | 
			
		||||
    for (auto it = transition_ids.begin(); it != transition_ids.end(); ++it) {
 | 
			
		||||
      if (*it == lifecycle_msgs__msg__Transition__TRANSITION_CLEANUP ||
 | 
			
		||||
        *it == lifecycle_msgs__msg__Transition__TRANSITION_ACTIVATE ||
 | 
			
		||||
        *it == lifecycle_msgs__msg__Transition__TRANSITION_SHUTDOWN) {continue;}
 | 
			
		||||
 | 
			
		||||
      RCUTILS_LOG_INFO_NAMED(ROS_PACKAGE_NAME, "applying key %u", *it);
 | 
			
		||||
      EXPECT_EQ(
 | 
			
		||||
        RCL_RET_ERROR, rcl_lifecycle_trigger_transition(&state_machine, *it, false));
 | 
			
		||||
      EXPECT_EQ(RCL_RET_ERROR, rcl_lifecycle_trigger_transition_by_id(&state_machine, *it, false));
 | 
			
		||||
      rcl_reset_error();
 | 
			
		||||
      EXPECT_EQ(state_machine.current_state->id,
 | 
			
		||||
        lifecycle_msgs__msg__State__PRIMARY_STATE_INACTIVE);
 | 
			
		||||
| 
						 | 
				
			
			@ -245,12 +268,12 @@ TEST_F(TestDefaultStateMachine, wrong_default_sequence) {
 | 
			
		|||
      lifecycle_msgs__msg__State__PRIMARY_STATE_INACTIVE,
 | 
			
		||||
      lifecycle_msgs__msg__State__TRANSITION_STATE_ACTIVATING);
 | 
			
		||||
 | 
			
		||||
    for (auto it = keys.begin(); it != keys.end(); ++it) {
 | 
			
		||||
      if (*it == lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS ||
 | 
			
		||||
        *it == lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_FAILURE ||
 | 
			
		||||
        *it == lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_ERROR) {continue;}
 | 
			
		||||
    for (auto it = transition_ids.begin(); it != transition_ids.end(); ++it) {
 | 
			
		||||
      if (*it == lifecycle_msgs__msg__Transition__TRANSITION_ON_ACTIVATE_SUCCESS ||
 | 
			
		||||
        *it == lifecycle_msgs__msg__Transition__TRANSITION_ON_ACTIVATE_FAILURE ||
 | 
			
		||||
        *it == lifecycle_msgs__msg__Transition__TRANSITION_ON_ACTIVATE_ERROR) {continue;}
 | 
			
		||||
 | 
			
		||||
      EXPECT_EQ(RCL_RET_ERROR, rcl_lifecycle_trigger_transition(&state_machine, *it, false));
 | 
			
		||||
      EXPECT_EQ(RCL_RET_ERROR, rcl_lifecycle_trigger_transition_by_id(&state_machine, *it, false));
 | 
			
		||||
      rcl_reset_error();
 | 
			
		||||
      EXPECT_EQ(state_machine.current_state->id,
 | 
			
		||||
        lifecycle_msgs__msg__State__TRANSITION_STATE_ACTIVATING);
 | 
			
		||||
| 
						 | 
				
			
			@ -260,16 +283,16 @@ TEST_F(TestDefaultStateMachine, wrong_default_sequence) {
 | 
			
		|||
  { // supposed to stay active for all invalid
 | 
			
		||||
    test_trigger_transition(
 | 
			
		||||
      &state_machine,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_ON_ACTIVATE_SUCCESS,
 | 
			
		||||
      lifecycle_msgs__msg__State__TRANSITION_STATE_ACTIVATING,
 | 
			
		||||
      lifecycle_msgs__msg__State__PRIMARY_STATE_ACTIVE);
 | 
			
		||||
 | 
			
		||||
    for (auto it = keys.begin(); it != keys.end(); ++it) {
 | 
			
		||||
    for (auto it = transition_ids.begin(); it != transition_ids.end(); ++it) {
 | 
			
		||||
      if (*it == lifecycle_msgs__msg__Transition__TRANSITION_DEACTIVATE ||
 | 
			
		||||
        *it == lifecycle_msgs__msg__Transition__TRANSITION_SHUTDOWN)
 | 
			
		||||
      {continue;}
 | 
			
		||||
 | 
			
		||||
      EXPECT_EQ(RCL_RET_ERROR, rcl_lifecycle_trigger_transition(&state_machine, *it, false));
 | 
			
		||||
      EXPECT_EQ(RCL_RET_ERROR, rcl_lifecycle_trigger_transition_by_id(&state_machine, *it, false));
 | 
			
		||||
      rcl_reset_error();
 | 
			
		||||
      EXPECT_EQ(state_machine.current_state->id,
 | 
			
		||||
        lifecycle_msgs__msg__State__PRIMARY_STATE_ACTIVE);
 | 
			
		||||
| 
						 | 
				
			
			@ -283,12 +306,12 @@ TEST_F(TestDefaultStateMachine, wrong_default_sequence) {
 | 
			
		|||
      lifecycle_msgs__msg__State__PRIMARY_STATE_ACTIVE,
 | 
			
		||||
      lifecycle_msgs__msg__State__TRANSITION_STATE_DEACTIVATING);
 | 
			
		||||
 | 
			
		||||
    for (auto it = keys.begin(); it != keys.end(); ++it) {
 | 
			
		||||
      if (*it == lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS ||
 | 
			
		||||
        *it == lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_FAILURE ||
 | 
			
		||||
        *it == lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_ERROR) {continue;}
 | 
			
		||||
    for (auto it = transition_ids.begin(); it != transition_ids.end(); ++it) {
 | 
			
		||||
      if (*it == lifecycle_msgs__msg__Transition__TRANSITION_ON_DEACTIVATE_SUCCESS ||
 | 
			
		||||
        *it == lifecycle_msgs__msg__Transition__TRANSITION_ON_DEACTIVATE_FAILURE ||
 | 
			
		||||
        *it == lifecycle_msgs__msg__Transition__TRANSITION_ON_DEACTIVATE_ERROR) {continue;}
 | 
			
		||||
 | 
			
		||||
      EXPECT_EQ(RCL_RET_ERROR, rcl_lifecycle_trigger_transition(&state_machine, *it, false));
 | 
			
		||||
      EXPECT_EQ(RCL_RET_ERROR, rcl_lifecycle_trigger_transition_by_id(&state_machine, *it, false));
 | 
			
		||||
      rcl_reset_error();
 | 
			
		||||
      EXPECT_EQ(state_machine.current_state->id,
 | 
			
		||||
        lifecycle_msgs__msg__State__TRANSITION_STATE_DEACTIVATING);
 | 
			
		||||
| 
						 | 
				
			
			@ -299,7 +322,7 @@ TEST_F(TestDefaultStateMachine, wrong_default_sequence) {
 | 
			
		|||
    // skip inactive, we tested that already
 | 
			
		||||
    test_trigger_transition(
 | 
			
		||||
      &state_machine,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_ON_DEACTIVATE_SUCCESS,
 | 
			
		||||
      lifecycle_msgs__msg__State__TRANSITION_STATE_DEACTIVATING,
 | 
			
		||||
      lifecycle_msgs__msg__State__PRIMARY_STATE_INACTIVE);
 | 
			
		||||
    test_trigger_transition(
 | 
			
		||||
| 
						 | 
				
			
			@ -308,12 +331,12 @@ TEST_F(TestDefaultStateMachine, wrong_default_sequence) {
 | 
			
		|||
      lifecycle_msgs__msg__State__PRIMARY_STATE_INACTIVE,
 | 
			
		||||
      lifecycle_msgs__msg__State__TRANSITION_STATE_CLEANINGUP);
 | 
			
		||||
 | 
			
		||||
    for (auto it = keys.begin(); it != keys.end(); ++it) {
 | 
			
		||||
      if (*it == lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS ||
 | 
			
		||||
        *it == lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_FAILURE ||
 | 
			
		||||
        *it == lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_ERROR) {continue;}
 | 
			
		||||
    for (auto it = transition_ids.begin(); it != transition_ids.end(); ++it) {
 | 
			
		||||
      if (*it == lifecycle_msgs__msg__Transition__TRANSITION_ON_CLEANUP_SUCCESS ||
 | 
			
		||||
        *it == lifecycle_msgs__msg__Transition__TRANSITION_ON_CLEANUP_FAILURE ||
 | 
			
		||||
        *it == lifecycle_msgs__msg__Transition__TRANSITION_ON_CLEANUP_ERROR) {continue;}
 | 
			
		||||
 | 
			
		||||
      EXPECT_EQ(RCL_RET_ERROR, rcl_lifecycle_trigger_transition(&state_machine, *it, false));
 | 
			
		||||
      EXPECT_EQ(RCL_RET_ERROR, rcl_lifecycle_trigger_transition_by_id(&state_machine, *it, false));
 | 
			
		||||
      rcl_reset_error();
 | 
			
		||||
      EXPECT_EQ(state_machine.current_state->id,
 | 
			
		||||
        lifecycle_msgs__msg__State__TRANSITION_STATE_CLEANINGUP);
 | 
			
		||||
| 
						 | 
				
			
			@ -323,22 +346,22 @@ TEST_F(TestDefaultStateMachine, wrong_default_sequence) {
 | 
			
		|||
  { // supposed to stay shutting down for all invalid
 | 
			
		||||
    test_trigger_transition(
 | 
			
		||||
      &state_machine,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_ON_CLEANUP_SUCCESS,
 | 
			
		||||
      lifecycle_msgs__msg__State__TRANSITION_STATE_CLEANINGUP,
 | 
			
		||||
      lifecycle_msgs__msg__State__PRIMARY_STATE_UNCONFIGURED);
 | 
			
		||||
    // shutdown directly, since we tested already unconfigured
 | 
			
		||||
    test_trigger_transition(
 | 
			
		||||
      &state_machine,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_SHUTDOWN,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_UNCONFIGURED_SHUTDOWN,
 | 
			
		||||
      lifecycle_msgs__msg__State__PRIMARY_STATE_UNCONFIGURED,
 | 
			
		||||
      lifecycle_msgs__msg__State__TRANSITION_STATE_SHUTTINGDOWN);
 | 
			
		||||
 | 
			
		||||
    for (auto it = keys.begin(); it != keys.end(); ++it) {
 | 
			
		||||
      if (*it == lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS ||
 | 
			
		||||
        *it == lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_FAILURE ||
 | 
			
		||||
        *it == lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_ERROR) {continue;}
 | 
			
		||||
    for (auto it = transition_ids.begin(); it != transition_ids.end(); ++it) {
 | 
			
		||||
      if (*it == lifecycle_msgs__msg__Transition__TRANSITION_ON_SHUTDOWN_SUCCESS ||
 | 
			
		||||
        *it == lifecycle_msgs__msg__Transition__TRANSITION_ON_SHUTDOWN_FAILURE ||
 | 
			
		||||
        *it == lifecycle_msgs__msg__Transition__TRANSITION_ON_SHUTDOWN_ERROR) {continue;}
 | 
			
		||||
 | 
			
		||||
      EXPECT_EQ(RCL_RET_ERROR, rcl_lifecycle_trigger_transition(&state_machine, *it, false));
 | 
			
		||||
      EXPECT_EQ(RCL_RET_ERROR, rcl_lifecycle_trigger_transition_by_id(&state_machine, *it, false));
 | 
			
		||||
      rcl_reset_error();
 | 
			
		||||
      EXPECT_EQ(state_machine.current_state->id,
 | 
			
		||||
        lifecycle_msgs__msg__State__TRANSITION_STATE_SHUTTINGDOWN);
 | 
			
		||||
| 
						 | 
				
			
			@ -348,12 +371,12 @@ TEST_F(TestDefaultStateMachine, wrong_default_sequence) {
 | 
			
		|||
  { // supposed to stay finalized for all invalid
 | 
			
		||||
    test_trigger_transition(
 | 
			
		||||
      &state_machine,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_ON_SHUTDOWN_SUCCESS,
 | 
			
		||||
      lifecycle_msgs__msg__State__TRANSITION_STATE_SHUTTINGDOWN,
 | 
			
		||||
      lifecycle_msgs__msg__State__PRIMARY_STATE_FINALIZED);
 | 
			
		||||
 | 
			
		||||
    for (auto it = keys.begin(); it != keys.end(); ++it) {
 | 
			
		||||
      EXPECT_EQ(RCL_RET_ERROR, rcl_lifecycle_trigger_transition(&state_machine, *it, false));
 | 
			
		||||
    for (auto it = transition_ids.begin(); it != transition_ids.end(); ++it) {
 | 
			
		||||
      EXPECT_EQ(RCL_RET_ERROR, rcl_lifecycle_trigger_transition_by_id(&state_machine, *it, false));
 | 
			
		||||
      rcl_reset_error();
 | 
			
		||||
      EXPECT_EQ(state_machine.current_state->id,
 | 
			
		||||
        lifecycle_msgs__msg__State__PRIMARY_STATE_FINALIZED);
 | 
			
		||||
| 
						 | 
				
			
			@ -380,7 +403,7 @@ TEST_F(TestDefaultStateMachine, default_in_a_loop) {
 | 
			
		|||
 | 
			
		||||
    test_trigger_transition(
 | 
			
		||||
      &state_machine,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_ON_CONFIGURE_SUCCESS,
 | 
			
		||||
      lifecycle_msgs__msg__State__TRANSITION_STATE_CONFIGURING,
 | 
			
		||||
      lifecycle_msgs__msg__State__PRIMARY_STATE_INACTIVE);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -392,7 +415,7 @@ TEST_F(TestDefaultStateMachine, default_in_a_loop) {
 | 
			
		|||
 | 
			
		||||
    test_trigger_transition(
 | 
			
		||||
      &state_machine,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_ON_ACTIVATE_SUCCESS,
 | 
			
		||||
      lifecycle_msgs__msg__State__TRANSITION_STATE_ACTIVATING,
 | 
			
		||||
      lifecycle_msgs__msg__State__PRIMARY_STATE_ACTIVE);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -404,7 +427,7 @@ TEST_F(TestDefaultStateMachine, default_in_a_loop) {
 | 
			
		|||
 | 
			
		||||
    test_trigger_transition(
 | 
			
		||||
      &state_machine,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_ON_DEACTIVATE_SUCCESS,
 | 
			
		||||
      lifecycle_msgs__msg__State__TRANSITION_STATE_DEACTIVATING,
 | 
			
		||||
      lifecycle_msgs__msg__State__PRIMARY_STATE_INACTIVE);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -416,20 +439,20 @@ TEST_F(TestDefaultStateMachine, default_in_a_loop) {
 | 
			
		|||
 | 
			
		||||
    test_trigger_transition(
 | 
			
		||||
      &state_machine,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_ON_CLEANUP_SUCCESS,
 | 
			
		||||
      lifecycle_msgs__msg__State__TRANSITION_STATE_CLEANINGUP,
 | 
			
		||||
      lifecycle_msgs__msg__State__PRIMARY_STATE_UNCONFIGURED);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_SHUTDOWN,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_UNCONFIGURED_SHUTDOWN,
 | 
			
		||||
    lifecycle_msgs__msg__State__PRIMARY_STATE_UNCONFIGURED,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_SHUTTINGDOWN);
 | 
			
		||||
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_SHUTDOWN_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_SHUTTINGDOWN,
 | 
			
		||||
    lifecycle_msgs__msg__State__PRIMARY_STATE_FINALIZED);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -452,7 +475,7 @@ TEST_F(TestDefaultStateMachine, default_sequence_failure) {
 | 
			
		|||
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_FAILURE,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_CONFIGURE_FAILURE,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_CONFIGURING,
 | 
			
		||||
    lifecycle_msgs__msg__State__PRIMARY_STATE_UNCONFIGURED);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -465,7 +488,7 @@ TEST_F(TestDefaultStateMachine, default_sequence_failure) {
 | 
			
		|||
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_CONFIGURE_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_CONFIGURING,
 | 
			
		||||
    lifecycle_msgs__msg__State__PRIMARY_STATE_INACTIVE);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -477,7 +500,7 @@ TEST_F(TestDefaultStateMachine, default_sequence_failure) {
 | 
			
		|||
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_FAILURE,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_ACTIVATE_FAILURE,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_ACTIVATING,
 | 
			
		||||
    lifecycle_msgs__msg__State__PRIMARY_STATE_INACTIVE);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -490,7 +513,7 @@ TEST_F(TestDefaultStateMachine, default_sequence_failure) {
 | 
			
		|||
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_ACTIVATE_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_ACTIVATING,
 | 
			
		||||
    lifecycle_msgs__msg__State__PRIMARY_STATE_ACTIVE);
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
| 
						 | 
				
			
			@ -501,7 +524,7 @@ TEST_F(TestDefaultStateMachine, default_sequence_failure) {
 | 
			
		|||
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_FAILURE,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_DEACTIVATE_FAILURE,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_DEACTIVATING,
 | 
			
		||||
    lifecycle_msgs__msg__State__PRIMARY_STATE_ACTIVE);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -513,7 +536,7 @@ TEST_F(TestDefaultStateMachine, default_sequence_failure) {
 | 
			
		|||
    lifecycle_msgs__msg__State__TRANSITION_STATE_DEACTIVATING);
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_DEACTIVATE_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_DEACTIVATING,
 | 
			
		||||
    lifecycle_msgs__msg__State__PRIMARY_STATE_INACTIVE);
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
| 
						 | 
				
			
			@ -523,7 +546,7 @@ TEST_F(TestDefaultStateMachine, default_sequence_failure) {
 | 
			
		|||
    lifecycle_msgs__msg__State__TRANSITION_STATE_CLEANINGUP);
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_FAILURE,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_CLEANUP_FAILURE,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_CLEANINGUP,
 | 
			
		||||
    lifecycle_msgs__msg__State__PRIMARY_STATE_INACTIVE);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -535,17 +558,17 @@ TEST_F(TestDefaultStateMachine, default_sequence_failure) {
 | 
			
		|||
    lifecycle_msgs__msg__State__TRANSITION_STATE_CLEANINGUP);
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_CLEANUP_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_CLEANINGUP,
 | 
			
		||||
    lifecycle_msgs__msg__State__PRIMARY_STATE_UNCONFIGURED);
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_SHUTDOWN,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_UNCONFIGURED_SHUTDOWN,
 | 
			
		||||
    lifecycle_msgs__msg__State__PRIMARY_STATE_UNCONFIGURED,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_SHUTTINGDOWN);
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_FAILURE,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_SHUTDOWN_FAILURE,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_SHUTTINGDOWN,
 | 
			
		||||
    lifecycle_msgs__msg__State__PRIMARY_STATE_FINALIZED);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -568,13 +591,13 @@ TEST_F(TestDefaultStateMachine, default_sequence_error_resolved) {
 | 
			
		|||
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_ERROR,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_CONFIGURE_ERROR,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_CONFIGURING,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_ERRORPROCESSING);
 | 
			
		||||
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_ERROR_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_ERRORPROCESSING,
 | 
			
		||||
    lifecycle_msgs__msg__State__PRIMARY_STATE_UNCONFIGURED);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -587,7 +610,7 @@ TEST_F(TestDefaultStateMachine, default_sequence_error_resolved) {
 | 
			
		|||
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_CONFIGURE_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_CONFIGURING,
 | 
			
		||||
    lifecycle_msgs__msg__State__PRIMARY_STATE_INACTIVE);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -599,13 +622,13 @@ TEST_F(TestDefaultStateMachine, default_sequence_error_resolved) {
 | 
			
		|||
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_ERROR,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_ACTIVATE_ERROR,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_ACTIVATING,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_ERRORPROCESSING);
 | 
			
		||||
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_ERROR_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_ERRORPROCESSING,
 | 
			
		||||
    lifecycle_msgs__msg__State__PRIMARY_STATE_UNCONFIGURED);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -618,7 +641,7 @@ TEST_F(TestDefaultStateMachine, default_sequence_error_resolved) {
 | 
			
		|||
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_CONFIGURE_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_CONFIGURING,
 | 
			
		||||
    lifecycle_msgs__msg__State__PRIMARY_STATE_INACTIVE);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -630,7 +653,7 @@ TEST_F(TestDefaultStateMachine, default_sequence_error_resolved) {
 | 
			
		|||
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_ACTIVATE_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_ACTIVATING,
 | 
			
		||||
    lifecycle_msgs__msg__State__PRIMARY_STATE_ACTIVE);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -641,13 +664,13 @@ TEST_F(TestDefaultStateMachine, default_sequence_error_resolved) {
 | 
			
		|||
    lifecycle_msgs__msg__State__TRANSITION_STATE_DEACTIVATING);
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_ERROR,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_DEACTIVATE_ERROR,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_DEACTIVATING,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_ERRORPROCESSING);
 | 
			
		||||
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_ERROR_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_ERRORPROCESSING,
 | 
			
		||||
    lifecycle_msgs__msg__State__PRIMARY_STATE_UNCONFIGURED);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -659,7 +682,7 @@ TEST_F(TestDefaultStateMachine, default_sequence_error_resolved) {
 | 
			
		|||
    lifecycle_msgs__msg__State__TRANSITION_STATE_CONFIGURING);
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_CONFIGURE_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_CONFIGURING,
 | 
			
		||||
    lifecycle_msgs__msg__State__PRIMARY_STATE_INACTIVE);
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
| 
						 | 
				
			
			@ -669,30 +692,30 @@ TEST_F(TestDefaultStateMachine, default_sequence_error_resolved) {
 | 
			
		|||
    lifecycle_msgs__msg__State__TRANSITION_STATE_CLEANINGUP);
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_ERROR,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_CLEANUP_ERROR,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_CLEANINGUP,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_ERRORPROCESSING);
 | 
			
		||||
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_ERROR_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_ERRORPROCESSING,
 | 
			
		||||
    lifecycle_msgs__msg__State__PRIMARY_STATE_UNCONFIGURED);
 | 
			
		||||
 | 
			
		||||
  /////////////////////////////
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_SHUTDOWN,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_UNCONFIGURED_SHUTDOWN,
 | 
			
		||||
    lifecycle_msgs__msg__State__PRIMARY_STATE_UNCONFIGURED,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_SHUTTINGDOWN);
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_ERROR,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_SHUTDOWN_ERROR,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_SHUTTINGDOWN,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_ERRORPROCESSING);
 | 
			
		||||
  test_trigger_transition(
 | 
			
		||||
    &state_machine,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__Transition__TRANSITION_ON_ERROR_SUCCESS,
 | 
			
		||||
    lifecycle_msgs__msg__State__TRANSITION_STATE_ERRORPROCESSING,
 | 
			
		||||
    lifecycle_msgs__msg__State__PRIMARY_STATE_UNCONFIGURED);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -717,13 +740,13 @@ TEST_F(TestDefaultStateMachine, default_sequence_error_unresolved) {
 | 
			
		|||
 | 
			
		||||
    test_trigger_transition(
 | 
			
		||||
      &state_machine,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_ERROR,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_ON_CONFIGURE_ERROR,
 | 
			
		||||
      lifecycle_msgs__msg__State__TRANSITION_STATE_CONFIGURING,
 | 
			
		||||
      lifecycle_msgs__msg__State__TRANSITION_STATE_ERRORPROCESSING);
 | 
			
		||||
 | 
			
		||||
    test_trigger_transition(
 | 
			
		||||
      &state_machine,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_FAILURE,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_ON_ERROR_FAILURE,
 | 
			
		||||
      lifecycle_msgs__msg__State__TRANSITION_STATE_ERRORPROCESSING,
 | 
			
		||||
      lifecycle_msgs__msg__State__PRIMARY_STATE_FINALIZED);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -745,7 +768,7 @@ TEST_F(TestDefaultStateMachine, default_sequence_error_unresolved) {
 | 
			
		|||
 | 
			
		||||
    test_trigger_transition(
 | 
			
		||||
      &state_machine,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_SUCCESS,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_ON_CONFIGURE_SUCCESS,
 | 
			
		||||
      lifecycle_msgs__msg__State__TRANSITION_STATE_CONFIGURING,
 | 
			
		||||
      lifecycle_msgs__msg__State__PRIMARY_STATE_INACTIVE);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -757,14 +780,17 @@ TEST_F(TestDefaultStateMachine, default_sequence_error_unresolved) {
 | 
			
		|||
 | 
			
		||||
    test_trigger_transition(
 | 
			
		||||
      &state_machine,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_ERROR,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_ON_ACTIVATE_ERROR,
 | 
			
		||||
      lifecycle_msgs__msg__State__TRANSITION_STATE_ACTIVATING,
 | 
			
		||||
      lifecycle_msgs__msg__State__TRANSITION_STATE_ERRORPROCESSING);
 | 
			
		||||
 | 
			
		||||
    test_trigger_transition(
 | 
			
		||||
      &state_machine,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_CALLBACK_ERROR,
 | 
			
		||||
      lifecycle_msgs__msg__Transition__TRANSITION_ON_ERROR_ERROR,
 | 
			
		||||
      lifecycle_msgs__msg__State__TRANSITION_STATE_ERRORPROCESSING,
 | 
			
		||||
      lifecycle_msgs__msg__State__PRIMARY_STATE_FINALIZED);
 | 
			
		||||
 | 
			
		||||
    EXPECT_EQ(RCL_RET_OK,
 | 
			
		||||
      rcl_lifecycle_state_machine_fini(&state_machine, this->node_ptr, this->allocator));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue