| | |
| | | |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | import java.util.GregorianCalendar; |
| | | import java.util.TimeZone; |
| | | |
| | | import java.util.UUID; |
| | | import org.testng.annotations.AfterClass; |
| | | import org.testng.annotations.BeforeClass; |
| | | import org.testng.annotations.Test; |
| | |
| | | import org.opends.server.tasks.TasksTestCase; |
| | | import org.opends.server.types.DN; |
| | | |
| | | import org.opends.server.types.ResultCode; |
| | | import static org.testng.Assert.*; |
| | | |
| | | import static org.opends.server.util.ServerConstants.*; |
| | | import static org.opends.server.util.StaticUtils.*; |
| | | |
| | | |
| | | |
| | |
| | | assertEquals(resultCode, 0); |
| | | assertFalse(DirectoryServer.entryExists(DN.decode(taskDN))); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Tests basic recurring task functionality and parser. |
| | | * @throws Exception If an unexpected problem occurs. |
| | | */ |
| | | @Test() |
| | | public void testRecurringTask() |
| | | throws Exception |
| | | { |
| | | String taskID = "testRecurringTask"; |
| | | String taskDN = "ds-recurring-task-id=" + |
| | | taskID + ",cn=Recurring Tasks,cn=tasks"; |
| | | String taskSchedule = "00 * * * *"; |
| | | |
| | | String[] invalidTaskSchedules = { |
| | | "* * * *", "* * * * * *", "*:*:*:*:*", |
| | | "60 * * * *", "-1 * * * *", "1-60 * * * *", "1,60 * * * *", |
| | | "* 24 * * *", "* -1 * * *", "* 1-24 * * *", "* 1,24 * * *", |
| | | "* * 32 * *", "* * 0 * *", "* * 1-32 * *", "* * 1,32 * *", |
| | | "* * * 13 *", "* * * 0 *", "* * * 1-13 *", "* * * 1,13 *", |
| | | "* * * * 7", "* * * * -1", "* * * * 1-7", "* * * * 1,7", |
| | | "* * 31 2 *" }; |
| | | String[] validTaskSchedules = { |
| | | "* * * * *", |
| | | "59 * * * *", "0 * * * *", "0-59 * * * *", "0,59 * * * *", |
| | | "* 23 * * *", "* 0 * * *", "* 0-23 * * *", "* 0,23 * * *", |
| | | "* * 31 * *", "* * 1 * *", "* * 1-31 * *", "* * 1,31 * *", |
| | | "* * * 12 *", "* * * 1 *", "* * * 1-12 *", "* * * 1,12 *", |
| | | "* * * * 6", "* * * * 0", "* * * * 0-6", "* * * * 0,6" }; |
| | | |
| | | GregorianCalendar calendar = new GregorianCalendar(); |
| | | calendar.setFirstDayOfWeek(GregorianCalendar.SUNDAY); |
| | | calendar.setLenient(false); |
| | | calendar.add(GregorianCalendar.HOUR_OF_DAY, 1); |
| | | calendar.set(GregorianCalendar.MINUTE, 0); |
| | | calendar.set(GregorianCalendar.SECOND, 0); |
| | | |
| | | Date scheduledDate = calendar.getTime(); |
| | | String scheduledTaskID = taskID + " - " + scheduledDate.toString(); |
| | | String scheduledTaskDN = "ds-task-id=" + scheduledTaskID + |
| | | ",cn=Scheduled Tasks,cn=tasks"; |
| | | |
| | | assertTrue(addRecurringTask(taskID, taskSchedule)); |
| | | |
| | | Task scheduledTask = TasksTestCase.getTask(DN.decode(scheduledTaskDN)); |
| | | assertTrue(TaskState.isPending(scheduledTask.getTaskState())); |
| | | |
| | | // Perform a modification to update a non-state attribute. |
| | | int resultCode = TestCaseUtils.applyModifications(true, |
| | | "dn: " + taskDN, |
| | | "changetype: modify", |
| | | "replace: ds-recurring-task-schedule", |
| | | "ds-recurring-task-schedule: * * * * *"); |
| | | assertFalse(resultCode == 0); |
| | | |
| | | // Delete recurring task. |
| | | resultCode = TestCaseUtils.applyModifications(true, |
| | | "dn: " + taskDN, |
| | | "changetype: delete"); |
| | | assertEquals(resultCode, 0); |
| | | assertFalse(DirectoryServer.entryExists(DN.decode(taskDN))); |
| | | |
| | | // Make sure scheduled task got canceled. |
| | | scheduledTask = TasksTestCase.getTask(DN.decode(scheduledTaskDN)); |
| | | assertTrue(TaskState.isCancelled(scheduledTask.getTaskState())); |
| | | |
| | | // Test parser with invalid schedules. |
| | | for (String invalidSchedule : invalidTaskSchedules) { |
| | | assertFalse(addRecurringTask(taskID, invalidSchedule)); |
| | | } |
| | | |
| | | // Test parser with valid schedules. |
| | | for (String validSchedule : validTaskSchedules) { |
| | | taskID = "testRecurringTask" + "-" + UUID.randomUUID(); |
| | | taskDN = "ds-recurring-task-id=" + taskID + |
| | | ",cn=Recurring Tasks,cn=tasks"; |
| | | assertTrue(addRecurringTask(taskID, validSchedule)); |
| | | // Delete recurring task. |
| | | resultCode = TestCaseUtils.applyModifications(true, |
| | | "dn: " + taskDN, |
| | | "changetype: delete"); |
| | | assertEquals(resultCode, 0); |
| | | assertFalse(DirectoryServer.entryExists(DN.decode(taskDN))); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Adds recurring task to the task backend. |
| | | * |
| | | * @param taskID recurring task id. |
| | | * |
| | | * @param taskSchedule recurring task schedule. |
| | | * |
| | | * @throws Exception If an unexpected problem occurs. |
| | | * |
| | | * @return <CODE>true</CODE> if task successfully added to |
| | | * the task backend, <CODE>false</CODE> otherwise. |
| | | */ |
| | | @Test(enabled=false) // This isn't a test method, but TestNG thinks it is. |
| | | private boolean addRecurringTask(String taskID, String taskSchedule) |
| | | throws Exception |
| | | { |
| | | String taskDN = "ds-recurring-task-id=" + |
| | | taskID + ",cn=Recurring Tasks,cn=tasks"; |
| | | |
| | | ResultCode rc = TestCaseUtils.addEntryOperation( |
| | | "dn: " + taskDN, |
| | | "objectClass: top", |
| | | "objectClass: ds-task", |
| | | "objectClass: ds-recurring-task", |
| | | "objectClass: extensibleObject", |
| | | "ds-recurring-task-id: " + taskID, |
| | | "ds-recurring-task-schedule: " + taskSchedule, |
| | | "ds-task-id: " + taskID, |
| | | "ds-task-class-name: org.opends.server.tasks.DummyTask", |
| | | "ds-task-dummy-sleep-time: 0"); |
| | | |
| | | if (rc != ResultCode.SUCCESS) { |
| | | return false; |
| | | } |
| | | return DirectoryServer.entryExists(DN.decode(taskDN)); |
| | | } |
| | | } |