Exemple #1
0
    def test_stress(self):
        ''' Stress test the server, lots of raises and clears '''
        ab_a = AlarmBroadcaster("alarm_a")
        al_a = AlarmListener("alarm_a")
        ab_b = AlarmBroadcaster("alarm_b")
        al_b = AlarmListener("alarm_b")
        al_c = AlarmListener("alarm_c")
        ab_c = AlarmBroadcaster("alarm_c")

        actions = [ab_a.raise_alarm, ab_b.raise_alarm, ab_c.raise_alarm,
                   ab_a.clear_alarm, ab_b.clear_alarm, ab_c.clear_alarm]

        for i in range(100):
            random.choice(actions)()
            rospy.sleep(0.01)

        # Clear them all as a find state
        ab_a.clear_alarm()
        ab_b.raise_alarm()
        ab_c.raise_alarm()

        # Make sure all alarms are correct
        self.assertTrue(al_a.is_cleared())
        self.assertFalse(al_b.is_cleared())
        self.assertFalse(al_c.is_cleared())

        # Set everyhing cleared
        ab_b.clear_alarm()
        ab_c.clear_alarm()

        # Make sure of that
        self.assertTrue(al_b.is_cleared())
        self.assertTrue(al_c.is_cleared())
Exemple #2
0
    def test_broadcaster_and_listener(self):
        ''' Simple broadcaster and listener tests, with arguments '''
        ab_a = AlarmBroadcaster("alarm_a")
        al_a = AlarmListener("alarm_a")

        al_b = AlarmListener("alarm_b")
        ab_b = AlarmBroadcaster("alarm_b")

        al_c = AlarmListener("alarm_c")
        ab_c = AlarmBroadcaster("alarm_c")

        # Make sure all the alarm start off clear
        self.assertFalse(al_a.is_raised())
        self.assertFalse(al_b.is_raised())
        self.assertFalse(al_b.is_raised())
        # Same as above
        self.assertTrue(al_a.is_cleared())
        self.assertTrue(al_b.is_cleared())
        self.assertTrue(al_c.is_cleared())

        # Some args to pass in
        _severity = 3
        _blank_params = ''
        _full_params = {'test': 1, 'test2': 2}
        _problem_desc = "This is a test"

        # Raise them all, with some arguments
        ab_a.raise_alarm(severity=_severity)
        ab_b.raise_alarm(severity=_severity, parameters=_blank_params)
        ab_c.raise_alarm(problem_description=_problem_desc, parameters=_full_params)

        # Make sure all the alarm start off clear
        self.assertTrue(al_a.is_raised())
        self.assertTrue(al_b.is_raised())
        self.assertTrue(al_c.is_raised())

        # Make sure alarm values are correct
        self.assertEqual(al_a.get_alarm().severity, _severity)
        self.assertEqual(al_b.get_alarm().severity, _severity)
        self.assertEqual(al_b.get_alarm().parameters, _blank_params)
        self.assertEqual(al_c.get_alarm().problem_description, _problem_desc)
        self.assertEqual(al_c.get_alarm().parameters, _full_params)

        # Now clear the alarms, some again with arguments
        ab_a.clear_alarm()
        ab_b.clear_alarm(parameters=_full_params)
        ab_c.clear_alarm(parameters=_blank_params)

        # Make sure all alarms are cleared
        self.assertTrue(al_a.is_cleared())
        self.assertTrue(al_b.is_cleared())
        self.assertTrue(al_c.is_cleared())

        # Make sure arugments were passed correctly
        self.assertEqual(al_b.get_alarm().parameters, _full_params)
        self.assertEqual(al_c.get_alarm().parameters, _blank_params)
#!/usr/bin/env python
import rospy
from ros_alarms import AlarmListener, AlarmBroadcaster

if __name__ == "__main__":
    rospy.init_node("broadcaster_listener_test")

    ab = AlarmBroadcaster("test_alarm")
    al = AlarmListener("test_alarm")

    print "Inited"
    assert al.is_cleared()

    ab.raise_alarm()
    assert al.is_raised()

    rospy.sleep(0.5)
    ab.clear_alarm()
    assert al.is_cleared()

    rospy.sleep(0.5)
    ab.raise_alarm(parameters={
        "int": 4,
        "list": [1, 2, 3],
        "str": "stringing"
    })

    print "All checks passed"
Exemple #4
0
class killtest(unittest.TestCase):

    def __init__(self, *args):
        self._current_alarm_state = None
        rospy.Subscriber("/diagnostics", DiagnosticArray, self.callback)
        super(killtest, self).__init__(*args)
        self.AlarmListener = AlarmListener('hw-kill')
        self.AlarmBroadcaster = AlarmBroadcaster('kill')
        self.AlarmBroadcaster.clear_alarm()

    def callback(self, msg):
        self._current_alarm_state = msg

    def test_AA_initial_state(self):  # test the initial state of kill signal
        self.AlarmBroadcaster.clear_alarm()
        rospy.sleep(0.1)
        self.assertEqual(self.AlarmListener.is_cleared(), True,
                         msg='current state of kill signal is raised')

    def test_AB_computer(self):
        self.assertEqual(self.AlarmListener.is_cleared(), True,
                         msg='current state of kill signal is raised')

        self.AlarmBroadcaster.raise_alarm()  # raise the computer alarm
        rospy.sleep(0.2)
        self.assertEqual(
            self.AlarmListener.is_raised(),
            True,
            msg='COMPUTER raise not worked')

        self.AlarmBroadcaster.clear_alarm()  # clear the computer alarm
        rospy.sleep(0.2)
        self.assertEqual(
            self.AlarmListener.is_cleared(),
            True,
            msg='COMPUTER shutdown not worked')

    def test_AC_button_front_port(self):
        self.assertEqual(self.AlarmListener.is_cleared(), True,
                         msg='current state of kill signal is raised')

        # call the service of button
        rospy.wait_for_service('/kill_board_driver/BUTTON_FRONT_PORT')
        try:
            bfp = rospy.ServiceProxy(
                '/kill_board_driver/BUTTON_FRONT_PORT', SetBool)

        except rospy.ServiceException as e:
            print "Service call failed: %s" % e

        bfp(True)  # set the button value to true
        rospy.sleep(0.2)
        self.assertEqual(self.AlarmListener.is_raised(), True,
                         msg='BUTTON_FRONT_PORT raise not worked')

        bfp(False)  # shut down the button
        # when we shut down the button, we also need to clear the computer
        # alarm
        self.AlarmBroadcaster.clear_alarm()
        rospy.sleep(0.2)
        self.assertEqual(
            self.AlarmListener.is_cleared(),
            True,
            msg='BUTTON_FRONT_PORT shutdown not worked. State = {}'.format(
                self._current_alarm_state))

    def test_AD_button_aft_port(self):
        self.assertEqual(self.AlarmListener.is_cleared(), True,
                         msg='current state of kill signal is raised')
        rospy.wait_for_service('/kill_board_driver/BUTTON_AFT_PORT')
        try:
            bap = rospy.ServiceProxy(
                '/kill_board_driver/BUTTON_AFT_PORT', SetBool)

        except rospy.ServiceException as e:
            print "Service call failed: %s" % e

        bap(True)
        rospy.sleep(0.2)
        self.assertEqual(self.AlarmListener.is_raised(), True,
                         msg='BUTTTON_AFT_PORT raise not worked')

        bap(False)
        self.AlarmBroadcaster.clear_alarm()
        rospy.sleep(0.2)
        self.assertEqual(
            self.AlarmListener.is_cleared(),
            True,
            msg='BUTTTON_AFT_PORT shutdown not worked. State = {}'.format(
                self._current_alarm_state))

    def test_AE_button_front_starboard(self):
        self.assertEqual(self.AlarmListener.is_cleared(), True,
                         msg='current state of kill signal is raised')
        rospy.wait_for_service('/kill_board_driver/BUTTON_FRONT_STARBOARD')
        try:
            bfs = rospy.ServiceProxy(
                '/kill_board_driver/BUTTON_FRONT_STARBOARD', SetBool)

        except rospy.ServiceException as e:
            print "Service call failed: %s" % e

        bfs(True)
        rospy.sleep(0.2)
        self.assertEqual(self.AlarmListener.is_raised(), True,
                         msg='BUTTON_FRONT_STARBOARD raise not worked')

        bfs(False)
        self.AlarmBroadcaster.clear_alarm()
        rospy.sleep(0.2)
        self.assertEqual(
            self.AlarmListener.is_cleared(),
            True,
            msg='BUTTON_FRONT_STARBOARD shutdown not worked. State = {}'.format(
                self._current_alarm_state))

    def test_AF_button_aft_starboard(self):
        self.assertEqual(self.AlarmListener.is_cleared(), True,
                         msg='current state of kill signal is raised')
        rospy.wait_for_service('/kill_board_driver/BUTTON_AFT_STARBOARD')
        try:
            bas = rospy.ServiceProxy(
                '/kill_board_driver/BUTTON_AFT_STARBOARD', SetBool)

        except rospy.ServiceException as e:
            print "Service call failed: %s" % e

        bas(True)
        rospy.sleep(0.2)
        self.assertEqual(self.AlarmListener.is_raised(), True,
                         msg='BUTTON_AFT_STARBOARD raise not worked')

        bas(False)
        self.AlarmBroadcaster.clear_alarm()
        rospy.sleep(0.2)
        self.assertEqual(
            self.AlarmListener.is_cleared(),
            True,
            msg='BUTTON_AFT_STARBOARD shutdown not worked. State = {}'.format(
                self._current_alarm_state))

    def test_AG_remote(self):
        self.assertEqual(self.AlarmListener.is_cleared(), True,
                         msg='current state of kill signal is raised')
        # publishing msg to network
        pub = rospy.Publisher('/network', Header, queue_size=10)
        rate = rospy.Rate(10)
        t_end = rospy.Time.now() + rospy.Duration(3)
        while rospy.Time.now() < t_end:
            hello_header = Header()
            hello_header.stamp = rospy.Time.now()
            rospy.loginfo(hello_header)
            pub.publish(hello_header)
            rate.sleep()

        self.assertEqual(
            self.AlarmListener.is_cleared(),
            True,
            msg='REMOTE shutdown not worked. State = {}'.format(
                self._current_alarm_state))

        # stop sending the msg, the remote alarm will raise when stop recieving
        # the msg for 8 secs
        rospy.sleep(8.2)

        self.assertEqual(
            self.AlarmListener.is_raised(),
            True,
            msg='REMOTE raised not worked. State = {}'.format(
                self._current_alarm_state))
Exemple #5
0
class killtest(unittest.TestCase):
    def __init__(self, *args):
        self._current_alarm_state = None
        rospy.Subscriber("/diagnostics", DiagnosticArray, self.callback)
        super(killtest, self).__init__(*args)
        self.AlarmListener = AlarmListener('hw-kill')
        self.AlarmBroadcaster = AlarmBroadcaster('kill')
        self.AlarmBroadcaster.clear_alarm()

    def callback(self, msg):
        self._current_alarm_state = msg

    def test_AA_initial_state(self):  # test the initial state of kill signal
        self.AlarmBroadcaster.clear_alarm()
        rospy.sleep(0.1)
        self.assertEqual(self.AlarmListener.is_cleared(),
                         True,
                         msg='current state of kill signal is raised')

    def test_AB_computer(self):
        self.assertEqual(self.AlarmListener.is_cleared(),
                         True,
                         msg='current state of kill signal is raised')

        self.AlarmBroadcaster.raise_alarm()  # raise the computer alarm
        rospy.sleep(0.2)
        self.assertEqual(self.AlarmListener.is_raised(),
                         True,
                         msg='COMPUTER raise not worked')

        self.AlarmBroadcaster.clear_alarm()  # clear the computer alarm
        rospy.sleep(0.2)
        self.assertEqual(self.AlarmListener.is_cleared(),
                         True,
                         msg='COMPUTER shutdown not worked')

    def test_AC_button_front_port(self):
        self.assertEqual(self.AlarmListener.is_cleared(),
                         True,
                         msg='current state of kill signal is raised')

        # call the service of button
        rospy.wait_for_service('/kill_board_interface/BUTTON_FRONT_PORT')
        try:
            bfp = rospy.ServiceProxy('/kill_board_interface/BUTTON_FRONT_PORT',
                                     SetBool)

        except rospy.ServiceException as e:
            print "Service call failed: %s" % e

        bfp(True)  # set the button value to true
        rospy.sleep(0.2)
        self.assertEqual(self.AlarmListener.is_raised(),
                         True,
                         msg='BUTTON_FRONT_PORT raise not worked')

        bfp(False)  # shut down the button
        # when we shut down the button, we also need to clear the computer
        # alarm
        self.AlarmBroadcaster.clear_alarm()
        rospy.sleep(0.2)
        self.assertEqual(
            self.AlarmListener.is_cleared(),
            True,
            msg='BUTTON_FRONT_PORT shutdown not worked. State = {}'.format(
                self._current_alarm_state))

    def test_AD_button_aft_port(self):
        self.assertEqual(self.AlarmListener.is_cleared(),
                         True,
                         msg='current state of kill signal is raised')
        rospy.wait_for_service('/kill_board_interface/BUTTON_AFT_PORT')
        try:
            bap = rospy.ServiceProxy('/kill_board_interface/BUTTON_AFT_PORT',
                                     SetBool)

        except rospy.ServiceException as e:
            print "Service call failed: %s" % e

        bap(True)
        rospy.sleep(0.2)
        self.assertEqual(self.AlarmListener.is_raised(),
                         True,
                         msg='BUTTTON_AFT_PORT raise not worked')

        bap(False)
        self.AlarmBroadcaster.clear_alarm()
        rospy.sleep(0.2)
        self.assertEqual(
            self.AlarmListener.is_cleared(),
            True,
            msg='BUTTTON_AFT_PORT shutdown not worked. State = {}'.format(
                self._current_alarm_state))

    def test_AE_button_front_starboard(self):
        self.assertEqual(self.AlarmListener.is_cleared(),
                         True,
                         msg='current state of kill signal is raised')
        rospy.wait_for_service('/kill_board_interface/BUTTON_FRONT_STARBOARD')
        try:
            bfs = rospy.ServiceProxy(
                '/kill_board_interface/BUTTON_FRONT_STARBOARD', SetBool)

        except rospy.ServiceException as e:
            print "Service call failed: %s" % e

        bfs(True)
        rospy.sleep(0.2)
        self.assertEqual(self.AlarmListener.is_raised(),
                         True,
                         msg='BUTTON_FRONT_STARBOARD raise not worked')

        bfs(False)
        self.AlarmBroadcaster.clear_alarm()
        rospy.sleep(0.2)
        self.assertEqual(
            self.AlarmListener.is_cleared(),
            True,
            msg='BUTTON_FRONT_STARBOARD shutdown not worked. State = {}'.
            format(self._current_alarm_state))

    def test_AF_button_aft_starboard(self):
        self.assertEqual(self.AlarmListener.is_cleared(),
                         True,
                         msg='current state of kill signal is raised')
        rospy.wait_for_service('/kill_board_interface/BUTTON_AFT_STARBOARD')
        try:
            bas = rospy.ServiceProxy(
                '/kill_board_interface/BUTTON_AFT_STARBOARD', SetBool)

        except rospy.ServiceException as e:
            print "Service call failed: %s" % e

        bas(True)
        rospy.sleep(0.2)
        self.assertEqual(self.AlarmListener.is_raised(),
                         True,
                         msg='BUTTON_AFT_STARBOARD raise not worked')

        bas(False)
        self.AlarmBroadcaster.clear_alarm()
        rospy.sleep(0.2)
        self.assertEqual(
            self.AlarmListener.is_cleared(),
            True,
            msg='BUTTON_AFT_STARBOARD shutdown not worked. State = {}'.format(
                self._current_alarm_state))

    def test_AG_remote(self):
        self.assertEqual(self.AlarmListener.is_cleared(),
                         True,
                         msg='current state of kill signal is raised')
        # publishing msg to network
        pub = rospy.Publisher('/network', Header, queue_size=10)
        rate = rospy.Rate(10)
        t_end = rospy.Time.now() + rospy.Duration(3)
        while rospy.Time.now() < t_end:
            hello_header = Header()
            hello_header.stamp = rospy.Time.now()
            rospy.loginfo(hello_header)
            pub.publish(hello_header)
            rate.sleep()

        self.assertEqual(self.AlarmListener.is_cleared(),
                         True,
                         msg='REMOTE shutdown not worked. State = {}'.format(
                             self._current_alarm_state))

        # stop sending the msg, the remote alarm will raise when stop recieving
        # the msg for 8 secs
        rospy.sleep(8.2)

        self.assertEqual(self.AlarmListener.is_raised(),
                         True,
                         msg='REMOTE raised not worked. State = {}'.format(
                             self._current_alarm_state))