From 21cf19d0b49b67163ed8efc653a49f6c51bfb470 Mon Sep 17 00:00:00 2001
From: coulbeck <coulbeck@localhost>
Date: Thu, 14 Sep 2006 20:41:34 +0000
Subject: [PATCH] Add some unit test cases for backup tasks.
---
opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/TasksTestCase.java | 127 +++++++++++++++++++++
opends/ext/testng/testng.xml | 1
opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/TestBackupTaskArguments.java | 178 +++++++++++++++++++++++++++++
3 files changed, 306 insertions(+), 0 deletions(-)
diff --git a/opends/ext/testng/testng.xml b/opends/ext/testng/testng.xml
index 4bb8929..d0f06bb 100644
--- a/opends/ext/testng/testng.xml
+++ b/opends/ext/testng/testng.xml
@@ -12,6 +12,7 @@
<package name="org.opends.server.schema"/>
<package name="org.opends.server.monitors"/>
<package name="org.opends.server.extensions"/>
+ <package name="org.opends.server.tasks"/>
</packages>
</test>
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/TasksTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/TasksTestCase.java
new file mode 100644
index 0000000..27abda1
--- /dev/null
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/TasksTestCase.java
@@ -0,0 +1,127 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Portions Copyright 2006 Sun Microsystems, Inc.
+ */
+
+
+package org.opends.server.tasks;
+
+import org.testng.annotations.Test;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import org.opends.server.DirectoryServerTestCase;
+import org.opends.server.schema.DirectoryStringSyntax;
+import static org.opends.server.config.ConfigConstants.
+ ATTR_TASK_COMPLETION_TIME;
+import static org.opends.server.config.ConfigConstants.ATTR_TASK_STATE;
+import static org.opends.server.config.ConfigConstants.ATTR_TASK_LOG_MESSAGES;
+import org.opends.server.core.AddOperation;
+import org.opends.server.core.DirectoryServer;
+import org.opends.server.protocols.internal.InternalClientConnection;
+import org.opends.server.protocols.internal.InternalSearchOperation;
+import org.opends.server.backends.task.TaskState;
+import org.opends.server.types.*;
+
+import java.util.ArrayList;
+
+/**
+ * A base class for all tasks test cases.
+ */
+@Test(groups = { "precommit", "tasks" })
+public class TasksTestCase extends DirectoryServerTestCase {
+
+ /**
+ * Add a task definition and check that it completes with the expected state.
+ * @param taskEntry The task entry.
+ * @param expectedState The expected completion state of the task.
+ * @throws Exception If the test fails.
+ */
+ protected void testTask(Entry taskEntry, TaskState expectedState)
+ throws Exception
+ {
+ InternalClientConnection connection =
+ InternalClientConnection.getRootConnection();
+
+ // Add the task.
+ AddOperation addOperation =
+ connection.processAdd(taskEntry.getDN(),
+ taskEntry.getObjectClasses(),
+ taskEntry.getUserAttributes(),
+ taskEntry.getOperationalAttributes());
+ assertEquals(addOperation.getResultCode(), ResultCode.SUCCESS,
+ "Add of the task definition was not successful");
+
+ // Wait until the task completes.
+ AttributeType completionTimeType = DirectoryServer.getAttributeType(
+ ATTR_TASK_COMPLETION_TIME.toLowerCase());
+ SearchFilter filter =
+ SearchFilter.createFilterFromString("(objectclass=*)");
+ Entry resultEntry;
+ String completionTime;
+ int countdown = 10; // Do not wait forever.
+ do
+ {
+ countdown--;
+ Thread.sleep(1000);
+
+ InternalSearchOperation searchOperation =
+ connection.processSearch(taskEntry.getDN(),
+ SearchScope.BASE_OBJECT,
+ filter);
+ resultEntry = searchOperation.getSearchEntries().getFirst();
+ completionTime =
+ resultEntry.getAttributeValue(completionTimeType,
+ DirectoryStringSyntax.DECODER);
+
+ } while (completionTime == null && countdown > 0);
+
+ assertNotNull(completionTime,
+ "The task did not complete");
+
+ // Check that the task state is as expected.
+ AttributeType taskStateType =
+ DirectoryServer.getAttributeType(ATTR_TASK_STATE.toLowerCase());
+ String stateString =
+ resultEntry.getAttributeValue(taskStateType,
+ DirectoryStringSyntax.DECODER);
+ TaskState taskState = TaskState.fromString(stateString);
+ assertEquals(taskState, expectedState,
+ "The task completed in an unexpected state");
+
+ // Check that the task contains some log messages.
+ AttributeType logMessagesType = DirectoryServer.getAttributeType(
+ ATTR_TASK_LOG_MESSAGES.toLowerCase());
+ ArrayList<String> logMessages = new ArrayList<String>();
+ resultEntry.getAttributeValues(logMessagesType,
+ DirectoryStringSyntax.DECODER,
+ logMessages);
+ if (logMessages.size() == 0)
+ {
+ // NYI see issue 647.
+// fail("No log messages were written to the task entry");
+ }
+ }
+
+}
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/TestBackupTaskArguments.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/TestBackupTaskArguments.java
new file mode 100644
index 0000000..7219074
--- /dev/null
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/TestBackupTaskArguments.java
@@ -0,0 +1,178 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Portions Copyright 2006 Sun Microsystems, Inc.
+ */
+
+
+package org.opends.server.tasks;
+
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import org.testng.annotations.BeforeClass;
+import org.opends.server.backends.task.TaskState;
+import org.opends.server.types.*;
+import org.opends.server.TestCaseUtils;
+
+import java.util.UUID;
+
+/**
+ * Tests various valid and invalid combinations of arguments to the backup task.
+ */
+public class TestBackupTaskArguments extends TasksTestCase
+{
+ @BeforeClass
+ public final void setUp() throws Exception {
+ TestCaseUtils.startServer();
+ }
+
+
+ /**
+ * Backup tasks test data provider.
+ *
+ * @return The array of tasks test data. The first column is a task entry
+ * and the second column is the expected completed task state.
+ */
+ @DataProvider(name = "backups")
+ public Object[][] createData() throws Exception
+ {
+ return new Object[][] {
+ {
+ // A valid backup task.
+ TestCaseUtils.makeEntry(
+ "dn: ds-task-id=" + UUID.randomUUID() +
+ ",cn=Scheduled Tasks,cn=Tasks",
+ "objectclass: top",
+ "objectclass: ds-task",
+ "objectclass: ds-task-backup",
+ "ds-task-class-name: org.opends.server.tasks.BackupTask",
+ "ds-backup-directory-path: bak",
+ "ds-task-backup-all: TRUE"
+ ),
+ TaskState.COMPLETED_SUCCESSFULLY
+ },
+ {
+ // Incompatible settings of backup-directory-path and
+ // incremental-base-id.
+ TestCaseUtils.makeEntry(
+ "dn: ds-task-id=" + UUID.randomUUID() +
+ ",cn=Scheduled Tasks,cn=Tasks",
+ "objectclass: top",
+ "objectclass: ds-task",
+ "objectclass: ds-task-backup",
+ "ds-task-class-name: org.opends.server.tasks.BackupTask",
+ "ds-backup-directory-path: bak",
+ "ds-task-backup-incremental: TRUE",
+ "ds-task-backup-incremental-base-id: monday",
+ "ds-task-backup-all: TRUE"),
+ TaskState.COMPLETED_WITH_ERRORS
+ },
+ {
+ // Incompatible settings for backend-id and backup-all.
+ TestCaseUtils.makeEntry(
+ "dn: ds-task-id=" + UUID.randomUUID() +
+ ",cn=Scheduled Tasks,cn=Tasks",
+ "objectclass: top",
+ "objectclass: ds-task",
+ "objectclass: ds-task-backup",
+ "ds-task-class-name: org.opends.server.tasks.BackupTask",
+ "ds-backup-directory-path: bak",
+ "ds-task-backup-backend-id: example",
+ "ds-task-backup-all: TRUE"),
+ TaskState.STOPPED_BY_ERROR
+ },
+ {
+ // Neither of backend-id or backup-all specified.
+ TestCaseUtils.makeEntry(
+ "dn: ds-task-id=" + UUID.randomUUID() +
+ ",cn=Scheduled Tasks,cn=Tasks",
+ "objectclass: top",
+ "objectclass: ds-task",
+ "objectclass: ds-task-backup",
+ "ds-task-class-name: org.opends.server.tasks.BackupTask",
+ "ds-backup-directory-path: bak"),
+ TaskState.STOPPED_BY_ERROR
+ },
+ {
+ // Incompatible settings for incremental and incremental-base-id.
+ TestCaseUtils.makeEntry(
+ "dn: ds-task-id=" + UUID.randomUUID() +
+ ",cn=Scheduled Tasks,cn=Tasks",
+ "objectclass: top",
+ "objectclass: ds-task",
+ "objectclass: ds-task-backup",
+ "ds-task-class-name: org.opends.server.tasks.BackupTask",
+ "ds-backup-directory-path: bak",
+ "ds-task-backup-all: TRUE",
+ "ds-task-backup-incremental-base-id: monday",
+ "ds-task-backup-incremental: FALSE"),
+ TaskState.STOPPED_BY_ERROR
+ },
+ {
+ // Incompatible settings for hash and sign-hash.
+ TestCaseUtils.makeEntry(
+ "dn: ds-task-id=" + UUID.randomUUID() +
+ ",cn=Scheduled Tasks,cn=Tasks",
+ "objectclass: top",
+ "objectclass: ds-task",
+ "objectclass: ds-task-backup",
+ "ds-task-class-name: org.opends.server.tasks.BackupTask",
+ "ds-backup-directory-path: bak",
+ "ds-task-backup-all: TRUE",
+ "ds-task-backup-hash: FALSE",
+ "ds-task-backup-sign-hash: TRUE"
+ ),
+ TaskState.STOPPED_BY_ERROR
+ },
+ {
+ // Specified backend does not support backup.
+ TestCaseUtils.makeEntry(
+ "dn: ds-task-id=" + UUID.randomUUID() +
+ ",cn=Scheduled Tasks,cn=Tasks",
+ "objectclass: top",
+ "objectclass: ds-task",
+ "objectclass: ds-task-backup",
+ "ds-task-class-name: org.opends.server.tasks.BackupTask",
+ "ds-backup-directory-path: bak",
+ "ds-task-backup-backend-id: monitor"),
+ TaskState.STOPPED_BY_ERROR
+ },
+ };
+ }
+
+
+
+ /**
+ * Test that various backup task definitions complete with the expected state.
+ * @param taskEntry The task entry.
+ * @param expectedState The expected completion state of the task.
+ */
+ @Test(dataProvider = "backups")
+ public void testBackups(Entry taskEntry, TaskState expectedState)
+ throws Exception
+ {
+ testTask(taskEntry, expectedState);
+ }
+
+}
--
Gitblit v1.10.0