From 85e5ea2b9fb0d035912d74f57be54b31b88884e1 Mon Sep 17 00:00:00 2001
From: neil_a_wilson <neil_a_wilson@localhost>
Date: Tue, 12 Sep 2006 21:33:27 +0000
Subject: [PATCH] Add test cases for a number of classes in the extensions package, including the password storage schemes, some of the simple key/trust manager providers, the random password generator, and the certificate validation policy.
---
opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/PasswordStorageSchemeTestCase.java | 233 ++++++++
opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/RandomPasswordGeneratorTestCase.java | 219 ++++++++
opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/MD5PasswordStorageSchemeTestCase.java | 69 ++
opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/CertificateValidationPolicyTestCase.java | 132 +++++
opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SaltedSHA256PasswordStorageSchemeTestCase.java | 70 ++
opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SaltedSHA384PasswordStorageSchemeTestCase.java | 70 ++
opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/Base64PasswordStorageSchemeTestCase.java | 69 ++
opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/NullTrustManagerProviderTestCase.java | 78 +++
opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/ClearPasswordStorageSchemeTestCase.java | 69 ++
opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/NullKeyManagerProviderTestCase.java | 78 +++
opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SHA1PasswordStorageSchemeTestCase.java | 69 ++
opends/ext/testng/testng.xml | 1
opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SaltedSHA512PasswordStorageSchemeTestCase.java | 70 ++
opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/ExtensionsTestCase.java | 46 +
opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/BlindTrustManagerProviderTestCase.java | 86 +++
opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SaltedMD5PasswordStorageSchemeTestCase.java | 70 ++
opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SaltedSHA1PasswordStorageSchemeTestCase.java | 101 +++
17 files changed, 1,530 insertions(+), 0 deletions(-)
diff --git a/opends/ext/testng/testng.xml b/opends/ext/testng/testng.xml
index 9e9c977..4bb8929 100644
--- a/opends/ext/testng/testng.xml
+++ b/opends/ext/testng/testng.xml
@@ -11,6 +11,7 @@
<package name="org.opends.server.util"/>
<package name="org.opends.server.schema"/>
<package name="org.opends.server.monitors"/>
+ <package name="org.opends.server.extensions"/>
</packages>
</test>
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/Base64PasswordStorageSchemeTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/Base64PasswordStorageSchemeTestCase.java
new file mode 100644
index 0000000..f835d5a
--- /dev/null
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/Base64PasswordStorageSchemeTestCase.java
@@ -0,0 +1,69 @@
+/*
+ * 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.extensions;
+
+
+
+import org.opends.server.api.PasswordStorageScheme;
+
+
+
+/**
+ * A set of test cases for the base64 password storage scheme.
+ */
+public class Base64PasswordStorageSchemeTestCase
+ extends PasswordStorageSchemeTestCase
+{
+ /**
+ * Creates a new instance of this storage scheme test case.
+ */
+ public Base64PasswordStorageSchemeTestCase()
+ {
+ super("cn=Base64,cn=Password Storage Schemes,cn=config");
+ }
+
+
+
+ /**
+ * Retrieves an initialized instance of this password storage scheme.
+ *
+ * @param configEntry The configuration entry for the password storage
+ * scheme, or <CODE>null</CODE> if none is available.
+ *
+ * @return An initialized instance of this password storage scheme.
+ *
+ * @throws Exception If an unexpected problem occurs.
+ */
+ public PasswordStorageScheme getScheme()
+ throws Exception
+ {
+ Base64PasswordStorageScheme scheme = new Base64PasswordStorageScheme();
+ scheme.initializePasswordStorageScheme(configEntry);
+ return scheme;
+ }
+}
+
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/BlindTrustManagerProviderTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/BlindTrustManagerProviderTestCase.java
new file mode 100644
index 0000000..0869ffc
--- /dev/null
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/BlindTrustManagerProviderTestCase.java
@@ -0,0 +1,86 @@
+/*
+ * 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.extensions;
+
+
+
+import java.security.cert.X509Certificate;
+
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import org.opends.server.TestCaseUtils;
+
+import static org.testng.Assert.*;
+
+
+
+/**
+ * A set of test cases for the blind trust manager provider.
+ */
+public class BlindTrustManagerProviderTestCase
+ extends ExtensionsTestCase
+{
+ /**
+ * Ensures that the Directory Server is running.
+ *
+ * @throws Exception If an unexpected problem occurs.
+ */
+ @BeforeClass()
+ public void startServer()
+ throws Exception
+ {
+ TestCaseUtils.startServer();
+ }
+
+
+
+ /**
+ * Tests the blind trust manager provider by creating a new instance,
+ * initializing it, and getting the trust managers and issuers. In this case,
+ * since we know that all certificates will always be trusted then we can also
+ * invoke the checkClientTrusted and checkServerTrusted methods with empty
+ * certificate chains.
+ *
+ * @throws Exception If an unexpected problem occurs.
+ */
+ @Test()
+ public void testBlindTrustManagerProvider()
+ throws Exception
+ {
+ BlindTrustManagerProvider provider = new BlindTrustManagerProvider();
+ provider.initializeTrustManagerProvider(null);
+ assertNotNull(provider.getTrustManagers());
+ assertNotNull(provider.getAcceptedIssuers());
+
+ provider.checkClientTrusted(new X509Certificate[0], "");
+ provider.checkServerTrusted(new X509Certificate[0], "");
+
+ provider.finalizeTrustManagerProvider();
+ }
+}
+
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/CertificateValidationPolicyTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/CertificateValidationPolicyTestCase.java
new file mode 100644
index 0000000..38de43b
--- /dev/null
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/CertificateValidationPolicyTestCase.java
@@ -0,0 +1,132 @@
+/*
+ * 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.extensions;
+
+
+
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import static org.testng.Assert.*;
+
+
+
+/**
+ * A set of test cases for the certificate validation policy enumeration.
+ */
+public class CertificateValidationPolicyTestCase
+ extends ExtensionsTestCase
+{
+ /**
+ * Retrieves the names of the certificate validation policies.
+ *
+ * @return The names of the certificate validation policies.
+ */
+ @DataProvider(name= "policyNames")
+ public Object[][] getPolicyNames()
+ {
+ return new Object[][]
+ {
+ new Object[] { "ALWAYS" },
+ new Object[] { "NEVER" },
+ new Object[] { "IFPRESENT" },
+ };
+ }
+
+
+
+ /**
+ * Tests the <CODE>policyForName</CODE> method with a valid policy name.
+ *
+ * @param name The name for the policy to retrieve.
+ */
+ @Test(dataProvider = "policyNames")
+ public void testPolicyForValidName(String name)
+ {
+ assertNotNull(CertificateValidationPolicy.policyForName(name));
+ }
+
+
+
+ /**
+ * Tests the <CODE>policyForName</CODE> method with an invalid policy name.
+ */
+ @Test()
+ public void testPolicyForInvalidName()
+ {
+ assertNull(CertificateValidationPolicy.policyForName("invalid"));
+ }
+
+
+
+ /**
+ * Tests the <CODE>valueOf</CODE> method with a valid policy name.
+ *
+ * @param name The name for the policy to retrieve.
+ */
+ @Test(dataProvider = "policyNames")
+ public void testValueOfValid(String name)
+ {
+ assertNotNull(CertificateValidationPolicy.valueOf(name));
+ }
+
+
+
+ /**
+ * Tests the <CODE>valueOf</CODE> method with an invalid policy name.
+ */
+ @Test(expectedExceptions = { IllegalArgumentException.class })
+ public void testValueOfInvalid()
+ {
+ CertificateValidationPolicy.valueOf("invalid");
+ }
+
+
+
+ /**
+ * Tests the <CODE>values</CODE> method.
+ */
+ @Test()
+ public void testValues()
+ {
+ assertNotNull(CertificateValidationPolicy.values());
+ }
+
+
+
+ /**
+ * Tests the <CODE>toString</CODE> method.
+ *
+ * @param name The name for the policy to retrieve.
+ */
+ @Test(dataProvider = "policyNames")
+ public void testToString(String name)
+ {
+ CertificateValidationPolicy.policyForName(name).toString();
+ }
+}
+
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/ClearPasswordStorageSchemeTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/ClearPasswordStorageSchemeTestCase.java
new file mode 100644
index 0000000..03e63be
--- /dev/null
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/ClearPasswordStorageSchemeTestCase.java
@@ -0,0 +1,69 @@
+/*
+ * 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.extensions;
+
+
+
+import org.opends.server.api.PasswordStorageScheme;
+
+
+
+/**
+ * A set of test cases for the clear password storage scheme.
+ */
+public class ClearPasswordStorageSchemeTestCase
+ extends PasswordStorageSchemeTestCase
+{
+ /**
+ * Creates a new instance of this storage scheme test case.
+ */
+ public ClearPasswordStorageSchemeTestCase()
+ {
+ super("cn=Clear,cn=Password Storage Schemes,cn=config");
+ }
+
+
+
+ /**
+ * Retrieves an initialized instance of this password storage scheme.
+ *
+ * @param configEntry The configuration entry for the password storage
+ * scheme, or <CODE>null</CODE> if none is available.
+ *
+ * @return An initialized instance of this password storage scheme.
+ *
+ * @throws Exception If an unexpected problem occurs.
+ */
+ public PasswordStorageScheme getScheme()
+ throws Exception
+ {
+ ClearPasswordStorageScheme scheme = new ClearPasswordStorageScheme();
+ scheme.initializePasswordStorageScheme(configEntry);
+ return scheme;
+ }
+}
+
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/ExtensionsTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/ExtensionsTestCase.java
new file mode 100644
index 0000000..9e76a36
--- /dev/null
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/ExtensionsTestCase.java
@@ -0,0 +1,46 @@
+/*
+ * 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.extensions;
+
+
+
+import org.testng.annotations.Test;
+
+import org.opends.server.DirectoryServerTestCase;
+
+
+
+/**
+ * An abstract base class for all extensions test cases.
+ */
+@Test(groups = { "precommit", "extensions" })
+public abstract class ExtensionsTestCase
+ extends DirectoryServerTestCase
+{
+ // No implementation required.
+}
+
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/MD5PasswordStorageSchemeTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/MD5PasswordStorageSchemeTestCase.java
new file mode 100644
index 0000000..9023921
--- /dev/null
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/MD5PasswordStorageSchemeTestCase.java
@@ -0,0 +1,69 @@
+/*
+ * 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.extensions;
+
+
+
+import org.opends.server.api.PasswordStorageScheme;
+
+
+
+/**
+ * A set of test cases for the MD5 password storage scheme.
+ */
+public class MD5PasswordStorageSchemeTestCase
+ extends PasswordStorageSchemeTestCase
+{
+ /**
+ * Creates a new instance of this storage scheme test case.
+ */
+ public MD5PasswordStorageSchemeTestCase()
+ {
+ super("cn=MD5,cn=Password Storage Schemes,cn=config");
+ }
+
+
+
+ /**
+ * Retrieves an initialized instance of this password storage scheme.
+ *
+ * @param configEntry The configuration entry for the password storage
+ * scheme, or <CODE>null</CODE> if none is available.
+ *
+ * @return An initialized instance of this password storage scheme.
+ *
+ * @throws Exception If an unexpected problem occurs.
+ */
+ public PasswordStorageScheme getScheme()
+ throws Exception
+ {
+ MD5PasswordStorageScheme scheme = new MD5PasswordStorageScheme();
+ scheme.initializePasswordStorageScheme(configEntry);
+ return scheme;
+ }
+}
+
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/NullKeyManagerProviderTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/NullKeyManagerProviderTestCase.java
new file mode 100644
index 0000000..3dcf3e0
--- /dev/null
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/NullKeyManagerProviderTestCase.java
@@ -0,0 +1,78 @@
+/*
+ * 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.extensions;
+
+
+
+import java.security.cert.X509Certificate;
+
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import org.opends.server.TestCaseUtils;
+
+import static org.testng.Assert.*;
+
+
+
+/**
+ * A set of test cases for the null key manager provider.
+ */
+public class NullKeyManagerProviderTestCase
+ extends ExtensionsTestCase
+{
+ /**
+ * Ensures that the Directory Server is running.
+ *
+ * @throws Exception If an unexpected problem occurs.
+ */
+ @BeforeClass()
+ public void startServer()
+ throws Exception
+ {
+ TestCaseUtils.startServer();
+ }
+
+
+
+ /**
+ * Tests the null key manager provider by creating a new instance,
+ * initializing it, and getting the key managers.
+ *
+ * @throws Exception If an unexpected problem occurs.
+ */
+ @Test()
+ public void testNullKeyManagerProvider()
+ throws Exception
+ {
+ NullKeyManagerProvider provider = new NullKeyManagerProvider();
+ provider.initializeKeyManagerProvider(null);
+ assertNotNull(provider.getKeyManagers());
+ provider.finalizeKeyManagerProvider();
+ }
+}
+
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/NullTrustManagerProviderTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/NullTrustManagerProviderTestCase.java
new file mode 100644
index 0000000..a32a1ff
--- /dev/null
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/NullTrustManagerProviderTestCase.java
@@ -0,0 +1,78 @@
+/*
+ * 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.extensions;
+
+
+
+import java.security.cert.X509Certificate;
+
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import org.opends.server.TestCaseUtils;
+
+import static org.testng.Assert.*;
+
+
+
+/**
+ * A set of test cases for the null trust manager provider.
+ */
+public class NullTrustManagerProviderTestCase
+ extends ExtensionsTestCase
+{
+ /**
+ * Ensures that the Directory Server is running.
+ *
+ * @throws Exception If an unexpected problem occurs.
+ */
+ @BeforeClass()
+ public void startServer()
+ throws Exception
+ {
+ TestCaseUtils.startServer();
+ }
+
+
+
+ /**
+ * Tests the null trust manager provider by creating a new instance,
+ * initializing it, and getting the trust managers.
+ *
+ * @throws Exception If an unexpected problem occurs.
+ */
+ @Test()
+ public void testNullTrustManagerProvider()
+ throws Exception
+ {
+ NullTrustManagerProvider provider = new NullTrustManagerProvider();
+ provider.initializeTrustManagerProvider(null);
+ assertNotNull(provider.getTrustManagers());
+ provider.finalizeTrustManagerProvider();
+ }
+}
+
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/PasswordStorageSchemeTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/PasswordStorageSchemeTestCase.java
new file mode 100644
index 0000000..2607442
--- /dev/null
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/PasswordStorageSchemeTestCase.java
@@ -0,0 +1,233 @@
+/*
+ * 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.extensions;
+
+
+
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import org.opends.server.TestCaseUtils;
+import org.opends.server.api.PasswordStorageScheme;
+import org.opends.server.config.ConfigEntry;
+import org.opends.server.core.DirectoryException;
+import org.opends.server.core.DirectoryServer;
+import org.opends.server.protocols.asn1.ASN1OctetString;
+import org.opends.server.schema.AuthPasswordSyntax;
+import org.opends.server.schema.UserPasswordSyntax;
+import org.opends.server.types.ByteString;
+import org.opends.server.types.DN;
+
+import static org.testng.Assert.*;
+
+
+
+/**
+ * A set of generic test cases for password storage schemes.
+ */
+public abstract class PasswordStorageSchemeTestCase
+ extends ExtensionsTestCase
+{
+ // The configuration entry for this password storage scheme.
+ protected ConfigEntry configEntry;
+
+ // The string representation of the DN of the configuration entry for this
+ // password storage scheme.
+ private String configDNString;
+
+
+
+ /**
+ * Creates a new instance of this password storage scheme test case with the
+ * provided information.
+ *
+ * @param configDNString The string representation of the DN of the
+ * configuration entry, or <CODE>null</CODE> if there
+ * is none.
+ */
+ protected PasswordStorageSchemeTestCase(String configDNString)
+ {
+ super();
+
+ this.configDNString = configDNString;
+ this.configEntry = null;
+ }
+
+
+
+ /**
+ * Ensures that the Directory Server is started before running any of these
+ * tests.
+ */
+ @BeforeClass()
+ public void startServer()
+ throws Exception
+ {
+ TestCaseUtils.startServer();
+
+ if (configDNString != null)
+ {
+ configEntry = DirectoryServer.getConfigEntry(DN.decode(configDNString));
+ }
+ }
+
+
+
+ /**
+ * Retrieves a set of passwords that may be used to test the password storage
+ * scheme.
+ *
+ * @return A set of passwords that may be used to test the password storage
+ * scheme.
+ */
+ @DataProvider(name = "testPasswords")
+ public Object[][] getTestPasswords()
+ {
+ return new Object[][]
+ {
+ new Object[] { new ASN1OctetString() },
+ new Object[] { new ASN1OctetString("") },
+ new Object[] { new ASN1OctetString("\u0000") },
+ new Object[] { new ASN1OctetString("\t") },
+ new Object[] { new ASN1OctetString("\n") },
+ new Object[] { new ASN1OctetString("\r\n") },
+ new Object[] { new ASN1OctetString(" ") },
+ new Object[] { new ASN1OctetString("Test1\tTest2\tTest3") },
+ new Object[] { new ASN1OctetString("Test1\nTest2\nTest3") },
+ new Object[] { new ASN1OctetString("Test1\r\nTest2\r\nTest3") },
+ new Object[] { new ASN1OctetString("a") },
+ new Object[] { new ASN1OctetString("ab") },
+ new Object[] { new ASN1OctetString("abc") },
+ new Object[] { new ASN1OctetString("abcd") },
+ new Object[] { new ASN1OctetString("abcde") },
+ new Object[] { new ASN1OctetString("abcdef") },
+ new Object[] { new ASN1OctetString("abcdefg") },
+ new Object[] { new ASN1OctetString("abcdefgh") },
+ new Object[] { new ASN1OctetString("The Quick Brown Fox Jumps Over " +
+ "The Lazy Dog") },
+ new Object[] { new ASN1OctetString("\u00BFD\u00F3nde est\u00E1 el " +
+ "ba\u00F1o?") }
+ };
+ }
+
+
+
+ /**
+ * Creates an instance of the password storage scheme, uses it to encode the
+ * provided password, and ensures that the encoded value is correct.
+ *
+ * @param plaintext The plain-text version of the password to encode.
+ *
+ * @throws Exception If an unexpected problem occurs.
+ */
+ @Test(dataProvider = "testPasswords")
+ public void testStorageScheme(ByteString plaintext)
+ throws Exception
+ {
+ PasswordStorageScheme scheme = getScheme();
+ assertNotNull(scheme);
+ assertNotNull(scheme.getStorageSchemeName());
+
+ ByteString encodedPassword = scheme.encodePassword(plaintext);
+ assertNotNull(encodedPassword);
+ assertTrue(scheme.passwordMatches(plaintext, encodedPassword));
+
+ ByteString schemeEncodedPassword =
+ scheme.encodePasswordWithScheme(plaintext);
+ String[] pwComponents = UserPasswordSyntax.decodeUserPassword(
+ schemeEncodedPassword.stringValue());
+ assertNotNull(pwComponents);
+
+
+ if (scheme.supportsAuthPasswordSyntax())
+ {
+ assertNotNull(scheme.getAuthPasswordSchemeName());
+ ByteString encodedAuthPassword = scheme.encodeAuthPassword(plaintext);
+ StringBuilder[] authPWComponents =
+ AuthPasswordSyntax.decodeAuthPassword(
+ encodedAuthPassword.stringValue());
+ assertTrue(scheme.authPasswordMatches(plaintext,
+ authPWComponents[1].toString(),
+ authPWComponents[2].toString()));
+ }
+ else
+ {
+ try
+ {
+ scheme.encodeAuthPassword(plaintext);
+ throw new Exception("Expected encodedAuthPassword to fail for scheme " +
+ scheme.getStorageSchemeName() +
+ " because it doesn't support auth passwords.");
+ }
+ catch (DirectoryException de)
+ {
+ // This was expected.
+ }
+
+ assertFalse(scheme.authPasswordMatches(plaintext, "foo", "bar"));
+ }
+
+
+ if (scheme.isReversible())
+ {
+ assertEquals(plaintext, scheme.getPlaintextValue(encodedPassword));
+ }
+ else
+ {
+ try
+ {
+ scheme.getPlaintextValue(encodedPassword);
+ throw new Exception("Expected getPlaintextValue to fail for scheme " +
+ scheme.getStorageSchemeName() +
+ " because it is not reversible.");
+ }
+ catch (DirectoryException de)
+ {
+ // This was expected.
+ }
+ }
+
+ scheme.isStorageSchemeSecure();
+ }
+
+
+
+ /**
+ * Retrieves an initialized instance of this password storage scheme.
+ *
+ * @param configEntry The configuration entry for the password storage
+ * scheme, or <CODE>null</CODE> if none is available.
+ *
+ * @return An initialized instance of this password storage scheme.
+ *
+ * @throws Exception If an unexpected problem occurs.
+ */
+ public abstract PasswordStorageScheme getScheme()
+ throws Exception;
+}
+
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/RandomPasswordGeneratorTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/RandomPasswordGeneratorTestCase.java
new file mode 100644
index 0000000..f6ef415
--- /dev/null
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/RandomPasswordGeneratorTestCase.java
@@ -0,0 +1,219 @@
+/*
+ * 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.extensions;
+
+
+
+import java.io.ByteArrayInputStream;
+import java.util.ArrayList;
+
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import org.opends.server.TestCaseUtils;
+import org.opends.server.config.ConfigEntry;
+import org.opends.server.config.ConfigException;
+import org.opends.server.core.DirectoryServer;
+import org.opends.server.core.InitializationException;
+import org.opends.server.types.DN;
+import org.opends.server.types.LDIFImportConfig;
+import org.opends.server.util.LDIFReader;
+
+import static org.testng.Assert.*;
+
+
+
+/**
+ * A set of test cases for the random password generator.
+ */
+public class RandomPasswordGeneratorTestCase
+ extends ExtensionsTestCase
+{
+ /**
+ * Ensures that the Directory Server is running.
+ *
+ * @throws Exception If an unexpected problem occurs.
+ */
+ @BeforeClass()
+ public void startServer()
+ throws Exception
+ {
+ TestCaseUtils.startServer();
+ }
+
+
+
+ /**
+ * Tests the password generator with the default configuration.
+ *
+ * @throws Exception If an unexpected problem occurs.
+ */
+ @Test()
+ public void testDefaultConfiguration()
+ throws Exception
+ {
+ DN dn = DN.decode("cn=Random Password Generator,cn=Password Generators," +
+ "cn=config");
+ ConfigEntry configEntry = DirectoryServer.getConfigEntry(dn);
+ assertNotNull(configEntry);
+
+ RandomPasswordGenerator generator = new RandomPasswordGenerator();
+ generator.initializePasswordGenerator(configEntry);
+ assertNotNull(generator.generatePassword(null));
+ generator.finalizePasswordGenerator();
+ }
+
+
+
+ /**
+ * Retrieves a set of LDIF representations for invalid configuration entries.
+ *
+ * @return A set of LDIF representations for invalid configuration entries.
+ *
+ * @throws Exception If an unexpected problem occurs.
+ */
+ @DataProvider(name = "invalidConfigEntries")
+ public Object[][] getInvalidConfigEntries()
+ throws Exception
+ {
+ String[] entryStrings =
+ {
+ "dn: cn=Random Password Generator,cn=Password Generators,cn=config\n" +
+ "objectClass: top\n" +
+ "objectClass: ds-cfg-password-generator\n" +
+ "cn: Random Password Generator\n" +
+ "ds-cfg-password-generator-class: " +
+ "org.opends.server.extensions.RandomPasswordGenerator\n" +
+ "ds-cfg-password-generator-enabled: true\n",
+
+ "dn: cn=Random Password Generator,cn=Password Generators,cn=config\n" +
+ "objectClass: top\n" +
+ "objectClass: ds-cfg-password-generator\n" +
+ "objectClass: ds-cfg-random-password-generator\n" +
+ "cn: Random Password Generator\n" +
+ "ds-cfg-password-generator-class: " +
+ "org.opends.server.extensions.RandomPasswordGenerator\n" +
+ "ds-cfg-password-generator-enabled: true\n" +
+ "ds-cfg-password-character-set:\n",
+
+ "dn: cn=Random Password Generator,cn=Password Generators,cn=config\n" +
+ "objectClass: top\n" +
+ "objectClass: ds-cfg-password-generator\n" +
+ "objectClass: ds-cfg-random-password-generator\n" +
+ "cn: Random Password Generator\n" +
+ "ds-cfg-password-generator-class: " +
+ "org.opends.server.extensions.RandomPasswordGenerator\n" +
+ "ds-cfg-password-generator-enabled: true\n" +
+ "ds-cfg-password-character-set: foo:\n" +
+ "ds-cfg-password-format: foo:8\n",
+
+ "dn: cn=Random Password Generator,cn=Password Generators,cn=config\n" +
+ "objectClass: top\n" +
+ "objectClass: ds-cfg-password-generator\n" +
+ "objectClass: ds-cfg-random-password-generator\n" +
+ "cn: Random Password Generator\n" +
+ "ds-cfg-password-generator-class: " +
+ "org.opends.server.extensions.RandomPasswordGenerator\n" +
+ "ds-cfg-password-generator-enabled: true\n" +
+ "ds-cfg-password-character-set: foo:abcd\n" +
+ "ds-cfg-password-character-set: foo:efgh\n" +
+ "ds-cfg-password-format: foo:8\n",
+
+ "dn: cn=Random Password Generator,cn=Password Generators,cn=config\n" +
+ "objectClass: top\n" +
+ "objectClass: ds-cfg-password-generator\n" +
+ "objectClass: ds-cfg-random-password-generator\n" +
+ "cn: Random Password Generator\n" +
+ "ds-cfg-password-generator-class: " +
+ "org.opends.server.extensions.RandomPasswordGenerator\n" +
+ "ds-cfg-password-generator-enabled: true\n" +
+ "ds-cfg-password-character-set: foo:abcd\n",
+
+ "dn: cn=Random Password Generator,cn=Password Generators,cn=config\n" +
+ "objectClass: top\n" +
+ "objectClass: ds-cfg-password-generator\n" +
+ "objectClass: ds-cfg-random-password-generator\n" +
+ "cn: Random Password Generator\n" +
+ "ds-cfg-password-generator-class: " +
+ "org.opends.server.extensions.RandomPasswordGenerator\n" +
+ "ds-cfg-password-generator-enabled: true\n" +
+ "ds-cfg-password-character-set: foo:abcd\n" +
+ "ds-cfg-password-format: bar:8\n",
+
+ "dn: cn=Random Password Generator,cn=Password Generators,cn=config\n" +
+ "objectClass: top\n" +
+ "objectClass: ds-cfg-password-generator\n" +
+ "objectClass: ds-cfg-random-password-generator\n" +
+ "cn: Random Password Generator\n" +
+ "ds-cfg-password-generator-class: " +
+ "org.opends.server.extensions.RandomPasswordGenerator\n" +
+ "ds-cfg-password-generator-enabled: true\n" +
+ "ds-cfg-password-character-set: foo:abcd\n" +
+ "ds-cfg-password-format: foo:abcd\n",
+ };
+
+
+ Object[][] entryObjects = new Object[entryStrings.length][1];
+ for (int i=0; i < entryStrings.length; i++)
+ {
+ entryObjects[i] = new Object[] { entryStrings[i] };
+ }
+ return entryObjects;
+ }
+
+
+
+ /**
+ * Tests with an invalid configuration entry.
+ *
+ * @param ldifString The LDIF representation of the configuration entry.
+ *
+ * @throws Exception If an unexpected problem occurs.
+ */
+ @Test(dataProvider = "invalidConfigEntries",
+ expectedExceptions = { ConfigException.class,
+ InitializationException.class })
+ public void testInvalidConfigurations(String ldifString)
+ throws Exception
+ {
+ ByteArrayInputStream bais =
+ new ByteArrayInputStream(ldifString.getBytes("UTF-8"));
+ LDIFImportConfig importConfig = new LDIFImportConfig(bais);
+ importConfig.setValidateSchema(false);
+ LDIFReader reader = new LDIFReader(new LDIFImportConfig(bais));
+
+ String parentDNStr = "cn=Password Generators,cn=config";
+ ConfigEntry parentEntry =
+ DirectoryServer.getConfigEntry(DN.decode(parentDNStr));
+ ConfigEntry configEntry = new ConfigEntry(reader.readEntry(), parentEntry);
+
+ RandomPasswordGenerator generator = new RandomPasswordGenerator();
+ generator.initializePasswordGenerator(configEntry);
+ }
+}
+
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SHA1PasswordStorageSchemeTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SHA1PasswordStorageSchemeTestCase.java
new file mode 100644
index 0000000..7a373a7
--- /dev/null
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SHA1PasswordStorageSchemeTestCase.java
@@ -0,0 +1,69 @@
+/*
+ * 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.extensions;
+
+
+
+import org.opends.server.api.PasswordStorageScheme;
+
+
+
+/**
+ * A set of test cases for the SHA-1 password storage scheme.
+ */
+public class SHA1PasswordStorageSchemeTestCase
+ extends PasswordStorageSchemeTestCase
+{
+ /**
+ * Creates a new instance of this storage scheme test case.
+ */
+ public SHA1PasswordStorageSchemeTestCase()
+ {
+ super("cn=SHA-1,cn=Password Storage Schemes,cn=config");
+ }
+
+
+
+ /**
+ * Retrieves an initialized instance of this password storage scheme.
+ *
+ * @param configEntry The configuration entry for the password storage
+ * scheme, or <CODE>null</CODE> if none is available.
+ *
+ * @return An initialized instance of this password storage scheme.
+ *
+ * @throws Exception If an unexpected problem occurs.
+ */
+ public PasswordStorageScheme getScheme()
+ throws Exception
+ {
+ SHA1PasswordStorageScheme scheme = new SHA1PasswordStorageScheme();
+ scheme.initializePasswordStorageScheme(configEntry);
+ return scheme;
+ }
+}
+
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SaltedMD5PasswordStorageSchemeTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SaltedMD5PasswordStorageSchemeTestCase.java
new file mode 100644
index 0000000..0d8509d
--- /dev/null
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SaltedMD5PasswordStorageSchemeTestCase.java
@@ -0,0 +1,70 @@
+/*
+ * 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.extensions;
+
+
+
+import org.opends.server.api.PasswordStorageScheme;
+
+
+
+/**
+ * A set of test cases for the salted MD5 password storage scheme.
+ */
+public class SaltedMD5PasswordStorageSchemeTestCase
+ extends PasswordStorageSchemeTestCase
+{
+ /**
+ * Creates a new instance of this storage scheme test case.
+ */
+ public SaltedMD5PasswordStorageSchemeTestCase()
+ {
+ super("cn=Salted MD5,cn=Password Storage Schemes,cn=config");
+ }
+
+
+
+ /**
+ * Retrieves an initialized instance of this password storage scheme.
+ *
+ * @param configEntry The configuration entry for the password storage
+ * scheme, or <CODE>null</CODE> if none is available.
+ *
+ * @return An initialized instance of this password storage scheme.
+ *
+ * @throws Exception If an unexpected problem occurs.
+ */
+ public PasswordStorageScheme getScheme()
+ throws Exception
+ {
+ SaltedMD5PasswordStorageScheme scheme =
+ new SaltedMD5PasswordStorageScheme();
+ scheme.initializePasswordStorageScheme(configEntry);
+ return scheme;
+ }
+}
+
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SaltedSHA1PasswordStorageSchemeTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SaltedSHA1PasswordStorageSchemeTestCase.java
new file mode 100644
index 0000000..442c538
--- /dev/null
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SaltedSHA1PasswordStorageSchemeTestCase.java
@@ -0,0 +1,101 @@
+/*
+ * 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.extensions;
+
+
+
+import org.testng.annotations.Test;
+
+import org.opends.server.api.PasswordStorageScheme;
+import org.opends.server.protocols.asn1.ASN1OctetString;
+import org.opends.server.schema.UserPasswordSyntax;
+import org.opends.server.types.ByteString;
+
+import static org.testng.Assert.*;
+
+
+
+/**
+ * A set of test cases for the salted SHA-1 password storage scheme.
+ */
+public class SaltedSHA1PasswordStorageSchemeTestCase
+ extends PasswordStorageSchemeTestCase
+{
+ /**
+ * Creates a new instance of this storage scheme test case.
+ */
+ public SaltedSHA1PasswordStorageSchemeTestCase()
+ {
+ super("cn=Salted SHA-1,cn=Password Storage Schemes,cn=config");
+ }
+
+
+
+ /**
+ * Retrieves an initialized instance of this password storage scheme.
+ *
+ * @param configEntry The configuration entry for the password storage
+ * scheme, or <CODE>null</CODE> if none is available.
+ *
+ * @return An initialized instance of this password storage scheme.
+ *
+ * @throws Exception If an unexpected problem occurs.
+ */
+ public PasswordStorageScheme getScheme()
+ throws Exception
+ {
+ SaltedSHA1PasswordStorageScheme scheme =
+ new SaltedSHA1PasswordStorageScheme();
+ scheme.initializePasswordStorageScheme(configEntry);
+ return scheme;
+ }
+
+
+
+ /**
+ * Tests the <CODE>encodeOffline</CODE> method.
+ *
+ * @param plaintext The plaintext password to use for the test.
+ *
+ * @throws Exception If an unexpected problem occurs.
+ */
+ @Test(dataProvider = "testPasswords")
+ public void testEncodeOffline(ByteString plaintext)
+ throws Exception
+ {
+ SaltedSHA1PasswordStorageScheme scheme =
+ new SaltedSHA1PasswordStorageScheme();
+ scheme.initializePasswordStorageScheme(configEntry);
+
+ String passwordString = scheme.encodeOffline(plaintext.value());
+ String[] pwComps = UserPasswordSyntax.decodeUserPassword(passwordString);
+ ASN1OctetString encodedPassword = new ASN1OctetString(pwComps[1]);
+
+ assertTrue(scheme.passwordMatches(plaintext, encodedPassword));
+ }
+}
+
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SaltedSHA256PasswordStorageSchemeTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SaltedSHA256PasswordStorageSchemeTestCase.java
new file mode 100644
index 0000000..70c45d2
--- /dev/null
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SaltedSHA256PasswordStorageSchemeTestCase.java
@@ -0,0 +1,70 @@
+/*
+ * 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.extensions;
+
+
+
+import org.opends.server.api.PasswordStorageScheme;
+
+
+
+/**
+ * A set of test cases for the salted SHA-256 password storage scheme.
+ */
+public class SaltedSHA256PasswordStorageSchemeTestCase
+ extends PasswordStorageSchemeTestCase
+{
+ /**
+ * Creates a new instance of this storage scheme test case.
+ */
+ public SaltedSHA256PasswordStorageSchemeTestCase()
+ {
+ super("cn=Salted SHA-256,cn=Password Storage Schemes,cn=config");
+ }
+
+
+
+ /**
+ * Retrieves an initialized instance of this password storage scheme.
+ *
+ * @param configEntry The configuration entry for the password storage
+ * scheme, or <CODE>null</CODE> if none is available.
+ *
+ * @return An initialized instance of this password storage scheme.
+ *
+ * @throws Exception If an unexpected problem occurs.
+ */
+ public PasswordStorageScheme getScheme()
+ throws Exception
+ {
+ SaltedSHA256PasswordStorageScheme scheme =
+ new SaltedSHA256PasswordStorageScheme();
+ scheme.initializePasswordStorageScheme(configEntry);
+ return scheme;
+ }
+}
+
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SaltedSHA384PasswordStorageSchemeTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SaltedSHA384PasswordStorageSchemeTestCase.java
new file mode 100644
index 0000000..f168983
--- /dev/null
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SaltedSHA384PasswordStorageSchemeTestCase.java
@@ -0,0 +1,70 @@
+/*
+ * 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.extensions;
+
+
+
+import org.opends.server.api.PasswordStorageScheme;
+
+
+
+/**
+ * A set of test cases for the salted SHA-384 password storage scheme.
+ */
+public class SaltedSHA384PasswordStorageSchemeTestCase
+ extends PasswordStorageSchemeTestCase
+{
+ /**
+ * Creates a new instance of this storage scheme test case.
+ */
+ public SaltedSHA384PasswordStorageSchemeTestCase()
+ {
+ super("cn=Salted SHA-384,cn=Password Storage Schemes,cn=config");
+ }
+
+
+
+ /**
+ * Retrieves an initialized instance of this password storage scheme.
+ *
+ * @param configEntry The configuration entry for the password storage
+ * scheme, or <CODE>null</CODE> if none is available.
+ *
+ * @return An initialized instance of this password storage scheme.
+ *
+ * @throws Exception If an unexpected problem occurs.
+ */
+ public PasswordStorageScheme getScheme()
+ throws Exception
+ {
+ SaltedSHA384PasswordStorageScheme scheme =
+ new SaltedSHA384PasswordStorageScheme();
+ scheme.initializePasswordStorageScheme(configEntry);
+ return scheme;
+ }
+}
+
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SaltedSHA512PasswordStorageSchemeTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SaltedSHA512PasswordStorageSchemeTestCase.java
new file mode 100644
index 0000000..2093d4c
--- /dev/null
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SaltedSHA512PasswordStorageSchemeTestCase.java
@@ -0,0 +1,70 @@
+/*
+ * 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.extensions;
+
+
+
+import org.opends.server.api.PasswordStorageScheme;
+
+
+
+/**
+ * A set of test cases for the salted SHA-512 password storage scheme.
+ */
+public class SaltedSHA512PasswordStorageSchemeTestCase
+ extends PasswordStorageSchemeTestCase
+{
+ /**
+ * Creates a new instance of this storage scheme test case.
+ */
+ public SaltedSHA512PasswordStorageSchemeTestCase()
+ {
+ super("cn=Salted SHA-512,cn=Password Storage Schemes,cn=config");
+ }
+
+
+
+ /**
+ * Retrieves an initialized instance of this password storage scheme.
+ *
+ * @param configEntry The configuration entry for the password storage
+ * scheme, or <CODE>null</CODE> if none is available.
+ *
+ * @return An initialized instance of this password storage scheme.
+ *
+ * @throws Exception If an unexpected problem occurs.
+ */
+ public PasswordStorageScheme getScheme()
+ throws Exception
+ {
+ SaltedSHA512PasswordStorageScheme scheme =
+ new SaltedSHA512PasswordStorageScheme();
+ scheme.initializePasswordStorageScheme(configEntry);
+ return scheme;
+ }
+}
+
--
Gitblit v1.10.0