示例#1
0
class DelegationBehaviourTest(unittest.TestCase):
    """
    Tests for the DelegationBehaviour
    """
    def setUp(self):
        rospy.init_node("TestNode")
        self.manager = Manager(prefix="test_manager")
        self.uut = TestDelegationBehaviour(name="test_behaviour",
                                           planner_prefix="test_manager")
        self.sensor = TopicSensor(name="test_sensor",
                                  topic="/sensor_topic",
                                  message_type=Bool,
                                  initial_value=False)
        self.test_condition = Condition(self.sensor, BooleanActivator())
        self.effect = Effect(sensor_name="test_sensor", indicator=1.0)
        self.client = self.uut.delegation_client

    def tearDown(self):
        self.manager.unregister()
        self.uut.unregister()

    def test_start(self):
        """
        Tests start implementation
        """

        self.uut.add_effect(self.effect)
        self.uut.add_condition_for_delegation(self.test_condition)
        self.uut.start()

        self.assertEqual("test_behaviourGoal", self.client.goal_name)
        self.assertEqual([self.test_condition], self.client.conditions)

    def test_do_step(self):
        """
        Tests do_step implementation
        """

        self.uut.do_step()
        self.assertTrue(self.client.step_done)

    def test_stop(self):
        """
        Tests stop implementation
        """

        self.uut.stop()
        self.assertTrue(self.client.terminated)

    def test_success_func(self):
        """
        Tests success function utility
        """

        self.uut.add_effect(self.effect)
        self.uut.add_condition_for_delegation(self.test_condition)
        self.uut.start()

        self.client.success_func()
        self.assertTrue(self.client.terminated)
示例#2
0
class DecompositionGoalTest(unittest.TestCase):
    """
    Unit tests for the DecompositionGoal
    """
    def setUp(self):
        rospy.init_node("TestNode")
        sensor = TopicSensor(name="test_sensor",
                             topic="sensor_topic",
                             message_type=Bool,
                             initial_value=False)
        self.conditions = [Condition(sensor, BooleanActivator())]
        self.manager_name = "Test_manager"
        self.manager = Manager(prefix=self.manager_name)
        self.goal_name = "test_goal"
        self.satisfaction_threshold = 1.0

    def tearDown(self):
        self.manager.unregister()

    def test_check_alive(self):
        """
        Tests the check_if_alive function
        """

        uut = DecompositionGoal(
            name=self.goal_name,
            planner_prefix=self.manager_name,
            conditions=self.conditions,
            satisfaction_threshold=self.satisfaction_threshold)
        self.assertTrue(uut.check_if_alive())
        self.manager.unregister()
        self.assertFalse(uut.check_if_alive())
        uut.unregister()
示例#3
0
class ActivationAlgorithmTestSuite(unittest.TestCase):

    def setUp(self):
        self._rospy_patcher = patch('rospy.Time.now')
        self._rospy_patcher.start()
        self._rospy_patcher.return_value = Time(0, 0)

        DynamicReconfigureServer = collections.namedtuple('DynamicReconfigureServer', 'ns')

        Manager.dynamic_reconfigure_server = DynamicReconfigureServer(ns="UNUSED")
        self.manager = Manager(activationThreshold=7, createLogFiles=False, max_parallel_behaviours=1)

    def tearDown(self):

        self.manager.unregister()
        self._rospy_patcher.stop()

    def test_factory(self):

        algo = ActivationAlgorithmFactory.create_algorithm("default", self.manager)

        self.assertNotEqual(algo, None, 'Algorithm is none')

        self.assertTrue(isinstance(algo, BaseActivationAlgorithm), "Not the correct algorithm")

    def test_goal_priority(self):
        """
        Testing priority dependent goal activation calculation
        """

        algo = BaseActivationAlgorithm(self.manager, extensive_logging=True)
        algo._apply_goal_priority_weights = True

        class BehaviourMock(object):

            def __init__(self, name, priority):
                self.priority = priority
                self.name =name

            def __str__(self):
                return self.name

        b1 = BehaviourMock("A", 1)
        b2 = BehaviourMock("B", 2)

        self.manager._operational_goals.append(b1)
        self.manager._operational_goals.append(b2)
        algo.step_preparation()
        self.assertEqual(algo._goal_priority_weights[b1], 1)
        self.assertEqual(algo._goal_priority_weights[b2], 2)

        # now test normalisation
        b1.priority = 2
        b2.priority = 4
        algo.step_preparation()
        self.assertEqual(algo._goal_priority_weights[b1], 1)
        self.assertEqual(algo._goal_priority_weights[b2], 2)

        b3 = BehaviourMock("C", 3)
        self.manager._operational_goals.append(b3)
        algo.step_preparation()
        self.assertEqual(algo._goal_priority_weights[b3], 1.5)
示例#4
0
class DelegationGoalTest(unittest.TestCase):
    """
    Unit tests for the DelegationGoal
    """
    def setUp(self):
        rospy.init_node("TestNode")
        sensor = TopicSensor(name="test_sensor",
                             topic="sensor_topic",
                             message_type=Bool,
                             initial_value=False)
        self.conditions = [Condition(sensor, BooleanActivator())]
        self.manager_name = "Test_manager"
        self.manager = Manager(prefix=self.manager_name)
        self.goal_name = "test_goal"
        self.satisfaction_threshold = 1.0
        self.mockedDM = MockedDelegationCommunicator(
            manager_name=self.manager_name, name=self.manager_name)
        self.goal_repr = " ".join(
            [x.getPreconditionPDDL(1.0).statement for x in self.conditions])

    def tearDown(self):
        self.mockedDM.__del__()
        self.manager.unregister()

    def test_start_auction(self):
        """
        Tests start auction
        """

        test_goal = DelegationGoal(name=self.goal_name,
                                   conditions=self.conditions)
        self.assertFalse(test_goal.contractor_found)
        self.assertFalse(test_goal.auction_running)
        test_goal.start_auction()
        rospy.sleep(2)
        self.assertTrue(test_goal.auction_running)
        self.assertFalse(test_goal.contractor_found)
        self.assertTrue(self.mockedDM.got_cfp)
        self.assertEqual(self.mockedDM.CFP_last.name, "/TestNode")
        self.assertEqual(self.mockedDM.CFP_last.goal_representation,
                         self.goal_repr)
        test_goal.unregister()

    def test_start_contractor(self):
        """
        Tests start_with_contractor
        """

        test_goal = DelegationGoal(name=self.goal_name,
                                   conditions=self.conditions)
        self.assertFalse(test_goal.contractor_found)
        test_goal.start_with_contractor(planner_prefix=self.manager_name)
        self.assertTrue(test_goal.contractor_found)
        self.assertEqual(self.manager.goals[0].name, self.goal_name)
        test_goal.unregister()

    def test_finish_auction(self):
        """
        Tests finish auction
        """

        test_goal = DelegationGoal(name=self.goal_name,
                                   conditions=self.conditions)
        test_goal.start_auction()
        self.mockedDM.send_propose(3.0, "/TestNode", test_goal.delegation_id)
        self.mockedDM.set_precom_response(acceptance=True,
                                          still_bidding=True,
                                          cost=3.0)
        self.assertTrue(test_goal.finish_auction())
        self.assertTrue(test_goal.contractor_found)
        self.assertEqual(self.manager.goals[0].name, self.goal_name)
        test_goal.unregister()
示例#5
0
class DelegableBehaviourTest(unittest.TestCase):
    """
    Tests for the DelegableBehaviour
    """
    def setUp(self):
        rospy.init_node("TestNode")
        self.manager = Manager(prefix="test_manager")
        self.uut = TestDelegableBehaviour(name="test_behaviour",
                                          planner_prefix="test_manager",
                                          work_cost=5)
        self.sensor = TopicSensor(name="test_sensor",
                                  topic="/sensor_topic",
                                  message_type=Bool,
                                  initial_value=False)
        self.test_condition = Condition(self.sensor, BooleanActivator())
        self.effect = Effect(sensor_name="test_sensor", indicator=1.0)
        self.client = self.uut.delegation_client

    def tearDown(self):
        self.manager.unregister()
        self.uut.unregister()

    # ------ Not working myself ------

    def test_start(self):
        """
        Tests start implementation (Not working myself)
        """

        self.assertFalse(self.uut.currently_doing_work_locally)
        self.uut.add_effect(self.effect)
        self.uut.add_condition_for_delegation(self.test_condition)
        self.uut.start()

        self.assertEqual("test_behaviourGoal", self.client.goal_name)
        self.assertEqual([self.test_condition], self.client.conditions)
        self.assertFalse(self.uut.currently_doing_work_locally)
        self.assertIsNone(self.uut.last_work)

    def test_do_step(self):
        """
        Tests do_step implementation (Not working myself)
        """

        self.assertFalse(self.uut.currently_doing_work_locally)
        self.uut.do_step()
        self.assertIsNone(self.uut.last_work)
        self.assertTrue(self.client.step_done)

    def test_stop(self):
        """
        Tests stop implementation (Not working myself)
        """

        self.assertFalse(self.uut.currently_doing_work_locally)
        self.uut.stop()
        self.assertIsNone(self.uut.last_work)
        self.assertTrue(self.client.terminated)

    def test_success_func(self):
        """
        Tests success function utility
        """

        self.assertFalse(self.uut.currently_doing_work_locally)
        self.uut.add_effect(self.effect)
        self.uut.add_condition_for_delegation(self.test_condition)
        self.uut.start()
        self.assertIsNone(self.uut.last_work)

        self.client.success_func()
        self.assertTrue(self.client.terminated)

    # ------ Working myself (locally) ------

    def test_start_work_func(self):
        """
        Tests start work function utility
        """

        self.assertFalse(self.uut.currently_doing_work_locally)
        self.uut.add_effect(self.effect)
        self.uut.add_condition_for_delegation(self.test_condition)
        self.uut.start()
        self.assertIsNone(self.uut.last_work)
        self.assertFalse(self.uut.currently_doing_work_locally)

        self.client.start_work_func()
        self.assertTrue(self.uut.currently_doing_work_locally)
        self.assertEqual(self.uut.last_work, "start")

    def test_start_locally(self):
        """
        Tests start implementation (Working myself)
        """

        self.assertFalse(self.uut.currently_doing_work_locally)
        self.uut.add_effect(self.effect)
        self.uut.add_condition_for_delegation(self.test_condition)
        self.client.toggle_manager_active()
        self.uut.start()

        self.assertTrue(self.uut.currently_doing_work_locally)
        self.assertEqual(self.uut.last_work, "start")

    def test_do_step_locally(self):
        """
        Tests do_step implementation (Working myself)
        """

        self.assertFalse(self.uut.currently_doing_work_locally)
        self.uut.add_effect(self.effect)
        self.uut.add_condition_for_delegation(self.test_condition)
        self.uut.start()
        self.client.start_work_func()
        self.uut.do_step()
        self.assertTrue(self.uut.currently_doing_work_locally)
        self.assertEqual(self.uut.last_work, "do_step")

    def test_stop_locally(self):
        """
        Tests stop implementation (Working myself)
        """

        self.assertFalse(self.uut.currently_doing_work_locally)
        self.uut.add_effect(self.effect)
        self.uut.add_condition_for_delegation(self.test_condition)
        self.uut.start()
        self.client.start_work_func()
        self.assertTrue(self.uut.currently_doing_work_locally)
        self.uut.stop()
        self.assertFalse(self.uut.currently_doing_work_locally)
        self.assertEqual(self.uut.last_work, "stop")