/* * ProActive Parallel Suite(TM): * The Open Source library for parallel and distributed * Workflows & Scheduling, Orchestration, Cloud Automation * and Big Data Analysis on Enterprise Grids & Clouds. * * Copyright (c) 2007 - 2017 ActiveEon * Contact: contact@activeeon.com * * This library is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License * as published by the Free Software Foundation: version 3 of * the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * If needed, contact us to obtain a release under GPL Version 2 or 3 * or a different license than the AGPL. */ package org.ow2.proactive_grid_cloud_portal.scheduler; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.List; import org.ow2.proactive.scheduler.common.Page; import org.ow2.proactive.scheduler.common.job.JobId; import org.ow2.proactive.scheduler.common.job.JobInfo; import org.ow2.proactive.scheduler.common.job.JobState; import org.ow2.proactive.scheduler.common.job.JobStatus; import org.ow2.proactive.scheduler.common.task.TaskId; import org.ow2.proactive.scheduler.common.task.TaskInfo; import org.ow2.proactive.scheduler.common.task.TaskState; import org.ow2.proactive.scheduler.common.task.TaskStatesPage; import org.ow2.proactive_grid_cloud_portal.scheduler.dto.JobInfoData; import org.ow2.proactive_grid_cloud_portal.scheduler.dto.RestPage; import org.ow2.proactive_grid_cloud_portal.scheduler.dto.TaskIdData; import org.ow2.proactive_grid_cloud_portal.scheduler.dto.TaskInfoData; import org.ow2.proactive_grid_cloud_portal.scheduler.dto.TaskStateData; import org.ow2.proactive_grid_cloud_portal.scheduler.dto.UserJobData; /** * Set of utilitary functions for testing purpose * */ public class RestTestUtils { /** * ################################################################################ * * Mocked entities * * ################################################################################ */ protected static Page<JobInfo> newMockedJobInfoPage(String jobStr, String taskTag, int nbJobs, int nbTasks, int nbTotalJobs) { List<JobInfo> lJobInfo = new ArrayList<JobInfo>(nbJobs); for (int jobIter = 0; jobIter < nbJobs; jobIter++) { lJobInfo.add(RestTestUtils.newMockedJob(String.valueOf(jobIter), taskTag, nbTasks).getJobInfo()); } return new Page<JobInfo>(lJobInfo, nbTotalJobs); } protected static JobInfo newMockedJobInfo(String jobStr, String taskTag, int nbTasks) { JobInfo jobInfo = RestTestUtils.newMockedJob(jobStr, taskTag, nbTasks).getJobInfo(); return jobInfo; } protected static JobState newMockedJob(final String jobIdStr, final String tag, final int nbTasks) { JobState mockedJob = mock(JobState.class); JobId mockedJobId = mock(JobId.class); JobInfo mockedJobInfo = mock(JobInfo.class); List<TaskState> dumbList = new ArrayList<TaskState>(nbTasks); for (int i = 0; i < nbTasks; i++) { dumbList.add(newTaskState(jobIdStr, null, i, nbTasks)); } when(mockedJobId.value()).thenReturn(jobIdStr); when(mockedJobInfo.getJobId()).thenReturn(mockedJobId); when(mockedJobInfo.getStatus()).thenReturn(JobStatus.PENDING); when(mockedJob.getId()).thenReturn(mockedJobId); when(mockedJob.getTasksPaginated(0, 50)).thenReturn(new TaskStatesPage(dumbList, nbTasks)); when(mockedJob.getTaskByTagPaginated("", 0, 50)).thenReturn(new TaskStatesPage(dumbList, nbTasks)); when(mockedJob.getJobInfo()).thenReturn(mockedJobInfo); return mockedJob; } protected static Page<TaskId> newMockedTaskIdPage(String jobIdStr, int nbTasks, String tag) { List<TaskId> lTaskId = new ArrayList<TaskId>(nbTasks); for (int i = 0; i < nbTasks; i++) { TaskId mockedTaskId = mock(TaskId.class); when(mockedTaskId.getReadableName()).thenReturn(generateReadableName(jobIdStr, i, nbTasks)); when(mockedTaskId.getTag()).thenReturn(tag); lTaskId.add(mockedTaskId); } return new Page<TaskId>(lTaskId, nbTasks); } protected static Page<TaskState> newMockedTaskStatePage(String jobIdStr, String tag, int nbTasks, int totalNumberOfTasks) { List<TaskState> lTasks = new ArrayList<TaskState>(nbTasks); for (int i = 0; i < nbTasks; i++) { lTasks.add(newTaskState(jobIdStr, tag, i, nbTasks)); } return new Page<TaskState>(lTasks, totalNumberOfTasks); } protected static Page<TaskState> newMockedTaskStatePage(ArrayList<String> jobIds, String tag, int nbTasks, int totalNumberOfTasks) { List<TaskState> lTasks = new ArrayList<TaskState>(nbTasks); for (int i = 0; i < nbTasks; i++) { lTasks.add(newTaskState(jobIds.get(i), tag, i, nbTasks)); } return new Page<TaskState>(lTasks, totalNumberOfTasks); } protected static TaskState newTaskState(String jobIdStr, String tag, long cnt, int nbTasks) { TaskId mockedTaskId = mock(TaskId.class); TaskState mockedState = mock(TaskState.class); when(mockedTaskId.getReadableName()).thenReturn(generateReadableName(jobIdStr, cnt, nbTasks)); when(mockedTaskId.longValue()).thenReturn(cnt); when(mockedState.getTag()).thenReturn(tag); when(mockedState.getId()).thenReturn(mockedTaskId); when(mockedState.getName()).thenReturn(generateReadableName(jobIdStr, cnt, nbTasks)); return mockedState; } protected static TaskStateData newMockedTaskStateData(String jobIdStr, String tag, long cnt, int nbTasks) { TaskStateData mockedTaskStateData = mock(TaskStateData.class); TaskInfoData mockedTaskInfoData = mock(TaskInfoData.class); TaskIdData mockedTaskIdData = mock(TaskIdData.class); when(mockedTaskIdData.getReadableName()).thenReturn(generateReadableName(jobIdStr, cnt, nbTasks)); when(mockedTaskIdData.getId()).thenReturn(cnt); when(mockedTaskInfoData.getTaskId()).thenReturn(mockedTaskIdData); when(mockedTaskStateData.getTaskInfo()).thenReturn(mockedTaskInfoData); when(mockedTaskStateData.getTag()).thenReturn(tag); return mockedTaskStateData; } /** * ################################################################################ * * Assertions * * ################################################################################ */ protected static void assertTasks(final int nbTasks, String jobIdStr, RestPage<String> page) { assertEquals("Number of tasks is incorrect", nbTasks, page.getSize()); for (int i = 0; i < nbTasks; i++) { assertEquals("Task readable name is incorrect", generateReadableName(jobIdStr, i, nbTasks), page.getList().get(i)); } } protected static void assertTaskStates(Page<TaskState> expected, RestPage<TaskStateData> actual) { assertEquals("Number of tasks in page is incorrect", expected.getList().size(), actual.getList().size()); assertEquals("Total number of tasks is incorrect", expected.getSize(), actual.getSize()); for (int i = 0; i < expected.getList().size(); i++) { TaskState tExpected = expected.getList().get(i); TaskStateData tActual = actual.getList().get(i); assertEquals("readableName incorrect", tExpected.getId().getReadableName(), tActual.getName()); assertEquals("tag incorrect", tExpected.getTag(), tActual.getTag()); } } protected static void assertJobInfoPage(Page<JobInfo> expected, RestPage<String> actual) { assertEquals("Returned number of jobs is incorrect", expected.getList().size(), actual.getList().size()); assertEquals("Total number of jobs is incorrect", expected.getSize(), actual.getSize()); for (int i = 0; i < expected.getList().size(); i++) { assertJobInfo(expected.getList().get(i), actual.getList().get(i)); } } protected static void assertJobsInfoPage(Page<JobInfo> expected, RestPage<UserJobData> actual) { assertEquals("Returned number of jobs is incorrect", expected.getList().size(), actual.getList().size()); assertEquals("Total number of jobs is incorrect", expected.getSize(), actual.getSize()); for (int i = 0; i < expected.getList().size(); i++) { assertJobInfo(expected.getList().get(i), actual.getList().get(i)); } } protected static void assertJobInfo(JobInfo expectedJobInfo, String actualIdValue) { assertEquals("JobId value incorrect", expectedJobInfo.getJobId().value(), actualIdValue); } protected static void assertJobInfo(JobInfo expectedJobInfo, UserJobData actualJobData) { assertEquals("JobId value incorrect", expectedJobInfo.getJobId().value(), actualJobData.getJobid()); } protected static void assertJobInfo(JobInfo expectedJobInfo, JobInfoData actualJobInfoData) { assertEquals("JobId value incorrect", expectedJobInfo.getJobId().value(), String.valueOf(actualJobInfoData.getJobId().getId())); } /** * ################################################################################ * * Misc * * ################################################################################ */ protected static String generateReadableName(final String jobIdStr, final long i, final int nbTasks) { return "JOB-" + jobIdStr + "-TASK-" + (i + 1) + "/" + nbTasks; } }