def test_publish_transition(self): ROSINIT() lm = LifecycleManager(NODE_NAME) lm.start() state_sub = rospy.Subscriber(NODE_NAME + '/' + LIFECYCLE_STATE_TOPIC, Lifecycle, self.subscriber_cb) spin_thread = SpinThread(2, "SubscriberCB_Thread", 2) spin_thread.setDaemon(True) spin_thread.start() lm.configure() self.assertEquals(State.INACTIVE, lm.get_current_state()) rospy.sleep(1.0) lm.cleanup() self.assertEquals(State.UNCONFIGURED, lm.get_current_state()) rospy.sleep(1.0) lm.configure() rospy.sleep(1.0) lm.activate() self.assertEquals(State.ACTIVE, lm.get_current_state()) rospy.sleep(1.0) lm.shutdown() self.assertEquals(State.FINALIZED, lm.get_current_state()) rospy.sleep(3.0) self.assertEquals(5, self.Count) spin_thread.join(1.0) lm.__del__()
def test_transitions_for_active(self): ROSINIT() lm = LifecycleManager(NODE_NAME) lm.configure() lm.activate() self.assertEquals(State.ACTIVE, lm.get_current_state()) # make sure these are not accepted with self.assertRaises(IllegalTransitionException): lm.configure() self.assertEquals(State.ACTIVE, lm.get_current_state()) with self.assertRaises(IllegalTransitionException): lm.activate() self.assertEquals(State.ACTIVE, lm.get_current_state()) with self.assertRaises(IllegalTransitionException): lm.cleanup() self.assertEquals(State.ACTIVE, lm.get_current_state()) # now make sure all the valid ones are accepted self.assertTrue(lm.deactivate()) self.assertEquals(State.INACTIVE, lm.get_current_state()) # go back lm.activate() self.assertEquals(State.ACTIVE, lm.get_current_state()) self.assertTrue(lm.shutdown()) self.assertEquals(State.FINALIZED, lm.get_current_state())
def test_internal(self): ROSINIT() lm = LifecycleManager(NODE_NAME) lm.configure() self.assertEquals(State.INACTIVE, lm.get_current_state()) lm.cleanup() self.assertEquals(State.UNCONFIGURED, lm.get_current_state()) lm.configure() lm.activate() self.assertEquals(State.ACTIVE, lm.get_current_state()) lm.shutdown() self.assertEquals(State.FINALIZED, lm.get_current_state())
def test_simulate_error_in_secondary_state(self): ROSINIT() lm = LifecycleManager(NODE_NAME) lm.set_error_cb(lambda ex: True) lm.set_transition_callback(Transition.CONFIGURE, lambda: lm.raise_error(Exception('Test'))) lm.configure() self.assertEquals(State.UNCONFIGURED, lm.get_current_state()) lm.set_error_cb(lambda ex: False) lm.configure() self.assertEquals(State.FINALIZED, lm.get_current_state())
def test_simulate_error_in_inactive(self): ROSINIT() lm = LifecycleManager(NODE_NAME) lm.set_error_cb(lambda ex: True) lm.configure() self.assertEquals(State.INACTIVE, lm.get_current_state()) lm.raise_error(Exception('Test')) self.assertEquals(State.UNCONFIGURED, lm.get_current_state()) lm.set_error_cb(lambda ex: False) lm.configure() self.assertEquals(State.INACTIVE, lm.get_current_state()) lm.raise_error(Exception('Test')) self.assertEquals(State.FINALIZED, lm.get_current_state())
def test_simulate_failure_during_configuring(self): ROSINIT() lm = LifecycleManager(NODE_NAME) lm.set_transition_callback(Transition.CONFIGURE, return_false) self.assertFalse(lm.configure()) self.assertEquals(State.UNCONFIGURED, lm.get_current_state())
def test_simulate_failure_during_activating(self): ROSINIT() lm = LifecycleManager(NODE_NAME) lm.set_transition_callback(Transition.ACTIVATE, return_false) self.assertTrue(lm.configure()) self.assertEquals(State.INACTIVE, lm.get_current_state()) self.assertFalse(lm.activate()) self.assertEquals(State.INACTIVE, lm.get_current_state())