def test_method_callable(self, mock):
        tm = TaskManager(skills=self.skill_generator())
        tm.ongoingTasks = [Skill()]

        tm.execute_mission()

        self.assertTrue(mock.called)
    def test_refuse_mission_because_robot_is_busy(self):
        tm = TaskManager(skills=[self.skill_generator()])

        response = tm.assign_mission_service_handler(goals=[
            self.test_goal_generator(),
            self.test_goal_generator(),
            self.test_goal_generator()
        ])
        acceptedResponse = MSGConstructor.ActionAcceptedRefusedConstructor(
            accepted='True', reasonOfRefusal='None')

        self.assertEquals(response, acceptedResponse)
        self.assertEquals(len(tm.ongoingTasks), 3)

        response = tm.assign_mission_service_handler(goals=[
            self.test_goal_generator(),
            self.test_goal_generator(),
            self.test_goal_generator()
        ])
        refusedResponse = MSGConstructor.ActionAcceptedRefusedConstructor(
            accepted='False',
            reasonOfRefusal=
            "Robot is currently busy with 3 tasks: ['example-skill', 'example-skill', 'example-skill']"
        )

        self.assertEquals(response, refusedResponse)
        self.assertEquals(len(tm.ongoingTasks), 3)
    def test_refused_because_empty_goals(self):
        tm = TaskManager(skills=[self.skill_generator()])

        response = tm.assign_mission_service_handler(goals=[])
        refusedResponse = MSGConstructor.ActionAcceptedRefusedConstructor(
            accepted='False', reasonOfRefusal='Empty goals!')

        self.assertEquals(response, refusedResponse)
        self.assertEquals(len(tm.ongoingTasks), 0)
    def test_refused_because_different_robotId(self):
        tm = TaskManager(skills=[self.skill_generator()])

        response = tm.assign_mission_service_handler(
            robotId='differentRobotId')
        refusedResponse = MSGConstructor.ActionAcceptedRefusedConstructor(
            accepted='False', reasonOfRefusal='Different robotId!')

        self.assertEquals(response, refusedResponse)
        self.assertEquals(len(tm.ongoingTasks), 0)
    def test_accepted_simple_mission(self):
        tm = TaskManager(skills=[self.skill_generator()])

        response = tm.assign_mission_service_handler(
            goals=[self.test_goal_generator()])
        acceptedResponse = MSGConstructor.ActionAcceptedRefusedConstructor(
            accepted='True', reasonOfRefusal='None')

        self.assertEquals(response, acceptedResponse)
        self.assertEquals(len(tm.ongoingTasks), 1)
Exemple #6
0
    def test_multiple_generic_skills(self):
        skills = ROSInterface.get_ROS_param(self.skillsParamName)
        task1 = GenericSkill(skillName = 'example-skill', skillType = 'GenericSkill', skillClass = 'GenericSkill', allowedSkillPropertiesKeys = ['exampleSkillProperty0', 'exampleSkillProperty0'], skillProperties = {'exampleSkillProperty0': 'exampleSkillValue0', 'exampleSkillProperty1': 'exampleSkillValue1'})

        tm = TaskManager(robotId = 'testRobotId', skills = skills)
        tm.ongoingTasks = [task1, task1, task1]

        result = tm.execute_mission('fakeMissionId')

        self.assertEquals(tm.missions[0]['statusCode'], 11)
        self.assertEquals(tm.missions[0]['taskId'], 'example-skill')
Exemple #7
0
    def test_generic_skill_execution_timeout_while_waiting_for_action_response(self):
        skills = ROSInterface.get_ROS_param(self.skillsParamName)
        task1 = GenericSkill(skillName = 'example-skill', skillType = 'GenericSkill', skillClass = 'GenericSkill', allowedSkillPropertiesKeys = ['exampleSkillProperty0', 'exampleSkillProperty0'], skillProperties = {'exampleSkillProperty0': 'exampleSkillValue0', 'exampleSkillProperty1': 'exampleSkillValue1'})

        tm = TaskManager(robotId = 'testRobotId', skills = skills, waitForActionClientTimeOut = 0.5)
        tm.ongoingTasks = [task1]

        result = tm.execute_mission('fakeMissionId')

        self.assertEquals(tm.missions[0]['statusCode'], 12)
        self.assertEquals(tm.missions[0]['taskId'], 'example-skill')
        self.assertEquals(tm.missions[0]['statusDescription'], 'Mission Failed! Task example-skill Failed: Skill Action Client Error: Timed out (0.5s) while waiting for GenericSkill Action Server result')
Exemple #8
0
    def test_wait_skill_execution_timeout_while_waiting_for_server(self):
        skills = ROSInterface.get_ROS_param(self.skillsParamName)
        task1 = GenericSkill(skillName = 'crob-wait', skillType = 'WaitSkill', skillClass = 'GenericSkill', allowedSkillPropertiesKeys = ['waitTime'], skillProperties = {'waitTime': 5})

        tm = TaskManager(robotId = 'testRobotId', skills = skills, waitForServerTimeOut = 2)
        tm.ongoingTasks = [task1]

        result = tm.execute_mission('fakeMissionId')

        self.assertEquals(tm.missions[0]['statusCode'], 12)
        self.assertEquals(tm.missions[0]['taskId'], 'crob-wait')
        self.assertEquals(tm.missions[0]['statusDescription'], 'Mission Failed! Task crob-wait Failed: Skill Action Client Error: Timed out (2s) while trying to find Action Server WaitSkill')
    def test_refused_bad_syntax_goal(self):
        tm = TaskManager(skills=[self.skill_generator()])

        response = tm.assign_mission_service_handler(
            goals=['example-skill;exampleSkillProperty0'])
        refusedResponse = MSGConstructor.ActionAcceptedRefusedConstructor(
            accepted='False',
            reasonOfRefusal=
            'Badly formatted goal (example-skill;exampleSkillProperty0): need more than 1 value to unpack'
        )

        self.assertEquals(response, refusedResponse)
        self.assertEquals(len(tm.ongoingTasks), 0)
Exemple #10
0
    def test_mix_between_correct_and_incorrect_skills(self):
        skills = ROSInterface.get_ROS_param(self.skillsParamName)
        task1 = GenericSkill(skillName = 'example-skill', skillType = 'GenericSkill', skillClass = 'GenericSkill', allowedSkillPropertiesKeys = ['exampleSkillProperty0', 'exampleSkillProperty0'], skillProperties = {'exampleSkillProperty0': 'exampleSkillValue0', 'exampleSkillProperty1': 'exampleSkillValue1'})
        task2 = GenericSkill(skillName = 'crob-wait', skillType = 'WaitSkill', skillClass = 'GenericSkill', allowedSkillPropertiesKeys = ['waitTime'], skillProperties = {'waitTime': 5})

        tm = TaskManager(robotId = 'testRobotId', skills = skills, waitForServerTimeOut = 2)
        tm.ongoingTasks = [task1, task2, task1]

        result = tm.execute_mission('fakeMissionId')

        self.assertEquals(tm.missions[0]['statusCode'], 12)
        self.assertEquals(tm.missions[0]['taskId'], 'crob-wait')
        self.assertEquals(tm.missions[0]['statusDescription'], 'Mission Failed! Task crob-wait Failed: Skill Action Client Error: Timed out (2s) while trying to find Action Server WaitSkill')
    def test_execute_mission_called_for_simple_mission(self, mock):
        tm = TaskManager(skills=[self.skill_generator()])

        response = tm.assign_mission_service_handler(goals=[
            self.test_goal_generator(),
            self.test_goal_generator(),
            self.test_goal_generator()
        ],
                                                     executeMission=True)
        self.assertTrue(mock.called)

        acceptedResponse = MSGConstructor.ActionAcceptedRefusedConstructor(
            accepted='True', reasonOfRefusal='None')

        self.assertEquals(response, acceptedResponse)
        self.assertEquals(len(tm.ongoingTasks), 3)
    def test_correct_task_action_client_called(self, mock):
        tm = TaskManager(skills=[self.skill_generator()])
        task1 = GenericSkill(skillName='example-skill',
                             skillType='GenericSkill',
                             skillClass='GenericSkill',
                             allowedSkillPropertiesKeys=[
                                 'exampleSkillProperty0',
                                 'exampleSkillProperty0'
                             ],
                             skillProperties={
                                 'exampleSkillProperty0': 'exampleSkillValue0',
                                 'exampleSkillProperty1': 'exampleSkillValue1'
                             })
        tm.ongoingTasks = [task1]

        tm.execute_mission('fakeMissionId')

        self.assertTrue(mock.called)
    def test_accepted_complex_mission(self):
        tm = TaskManager(skills=[
            self.skill_generator(),
            self.skill_generator(
                skillName='drive',
                skillType='DriveSkill',
                skillClass='DriveSkill',
                skillProperties=['toObjectId', 'toObjectType'])
        ])

        response = tm.assign_mission_service_handler(goals=[
            self.test_goal_generator(),
            'drive;toObjectId=testToObjectId;toObjectType=testToObjectType'
        ])
        acceptedResponse = MSGConstructor.ActionAcceptedRefusedConstructor(
            accepted='True', reasonOfRefusal='None')

        self.assertEquals(response, acceptedResponse)
        self.assertEquals(len(tm.ongoingTasks), 2)
    def test_create_object_with_robotId(self):
        tm = TaskManager(robotId='testRobotId')

        self.assertEquals(tm.robotId, 'testRobotId')
    def test_create_object_with_skills(self):
        tm = TaskManager(skills=[self.skill_generator()])

        self.assertEquals(tm.skills, [self.skill_generator()])
Exemple #16
0
    def test_taskStatusTopic_existance(self):
        tm = TaskManager(robotId = 'testRobotId', taskStatusTopic = '/stamina_msgs/TaskStatus')

        rospy.Subscriber('/stamina_msgs/TaskStatus', TaskStatus, self.testStatusTopicCallback)
Exemple #17
0
    def test_provideTaskStatus_service_parser_existance(self):
        tm = TaskManager(robotId = 'testRobotId', provideTaskStatusServiceName = 'stamina_msgs/testRobotId/ProvideTaskStatus')

        rospy.wait_for_service('stamina_msgs/testRobotId/ProvideTaskStatus', timeout=10)
Exemple #18
0
    def test_assignMission_service_parser_existance(self):
        tm = TaskManager(robotId = 'testRobotId', assignMissionServiceName = 'stamina_msgs/testRobotId/AssignMission')

        rospy.wait_for_service('stamina_msgs/testRobotId/AssignMission', timeout=10)
            '~cancel_mission_service_name')

        ## Topics
        taskStatusTopic = '~TaskStatus'

    except KeyError as e:
        rospy.logerr('[TaskManager] Error: %s', str(e))
        rospy.logdebug(traceback.format_exc())

        quit()

    try:
        tm = TaskManager(
            robotId=robotId,
            skills=skills,
            assignMissionServiceName=assignMissionServiceName,
            cancelMissionServiceName=cancelMissionServiceName,
            provideTaskStatusServiceName=provideTaskStatusServiceName,
            taskStatusTopic=taskStatusTopic,
            waitForServerTimeOut=waitForServerTimeOut,
            waitForActionClientTimeOut=waitForActionClientTimeOut,
            missionQueueSize=missionQueueSize)

        rospy.spin()

    except Exception as e:
        rospy.logerr('[TaskManager] Error: %s', str(e))
        rospy.logdebug(traceback.format_exc())

        quit()
 def test_create_empty_object(self):
     tm = TaskManager()
    def test_create_object_with_waitForActionClientTimeOut(self):
        tm = TaskManager(waitForActionClientTimeOut=100)

        self.assertEquals(tm.waitForActionClientTimeOut, 100)
    def test_create_object_with_waitForServerTimeOut(self):
        tm = TaskManager(waitForServerTimeOut=10)

        self.assertEquals(tm.waitForServerTimeOut, 10)