From 3a04777ab3cdf21b2f5de2272d0b267b6939f701 Mon Sep 17 00:00:00 2001
From: neil_a_wilson <neil_a_wilson@localhost>
Date: Thu, 03 May 2007 22:42:27 +0000
Subject: [PATCH] Update the plugin API test cases to add methods that help ensure the API can remain stable. These include:
---
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/api/plugin/DirectoryServerPluginTestCase.java | 592 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 591 insertions(+), 1 deletions(-)
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/api/plugin/DirectoryServerPluginTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/api/plugin/DirectoryServerPluginTestCase.java
index b128322..4dae005 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/api/plugin/DirectoryServerPluginTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/api/plugin/DirectoryServerPluginTestCase.java
@@ -28,7 +28,12 @@
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.LinkedList;
import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
import org.testng.annotations.Test;
import org.testng.annotations.BeforeClass;
@@ -50,11 +55,596 @@
extends PluginAPITestCase
{
@BeforeClass
- public void initServer() throws Exception
+ public void initServer() throws Exception
{
TestCaseUtils.startServer();
}
+
+
+ /**
+ * Tests to ensure that no new abstract methods have been introduced which
+ * could impact backwards compatibility.
+ *
+ * @throws Exception If an unexpected problem occurs.
+ */
+ @Test()
+ public void testAbstractMethods()
+ throws Exception
+ {
+ LinkedList<LinkedList<String>> expectedAbstractMethods =
+ new LinkedList<LinkedList<String>>();
+
+ LinkedList<String> sigList = new LinkedList<String>();
+ sigList.add("initializePlugin");
+ sigList.add("void");
+ sigList.add("java.util.Set");
+ sigList.add("org.opends.server.admin.std.server.PluginCfg");
+ sigList.add("org.opends.server.config.ConfigException");
+ sigList.add("org.opends.server.types.InitializationException");
+ expectedAbstractMethods.add(sigList);
+
+
+ LinkedList<LinkedList<String>> newAbstractMethods =
+ new LinkedList<LinkedList<String>>();
+ Class pluginClass = DirectoryServerPlugin.class;
+ for (Method m : pluginClass.getMethods())
+ {
+ if (Modifier.isAbstract(m.getModifiers()))
+ {
+ LinkedList<String> foundList = new LinkedList<String>();
+ foundList.add(m.getName());
+ foundList.add(m.getReturnType().getName());
+ for (Class c : m.getParameterTypes())
+ {
+ foundList.add(c.getName());
+ }
+ for (Class c : m.getExceptionTypes())
+ {
+ foundList.add(c.getName());
+ }
+
+ Iterator<LinkedList<String>> iterator =
+ expectedAbstractMethods.iterator();
+ boolean found = false;
+ while (iterator.hasNext())
+ {
+ sigList = iterator.next();
+ if (foundList.equals(sigList))
+ {
+ found = true;
+ iterator.remove();
+ break;
+ }
+ }
+
+ if (! found)
+ {
+ newAbstractMethods.add(foundList);
+ }
+ }
+ }
+
+ if (! newAbstractMethods.isEmpty())
+ {
+ System.err.println("It appears that one or more new abstract methods " +
+ "have been added to the plugin API:");
+ for (LinkedList<String> methodList : newAbstractMethods)
+ {
+ for (String s : methodList)
+ {
+ System.err.print(s + " ");
+ }
+ System.err.println();
+ }
+
+ System.err.println();
+ }
+
+ if (! expectedAbstractMethods.isEmpty())
+ {
+ System.err.println("It appears that one or more abstract methods have " +
+ "been removed from the plugin API:");
+ for (LinkedList<String> methodList : expectedAbstractMethods)
+ {
+ for (String s : methodList)
+ {
+ System.err.print(s + " ");
+ }
+ System.err.println();
+ }
+
+ System.err.println();
+ }
+
+ if ((! newAbstractMethods.isEmpty()) ||
+ (! expectedAbstractMethods.isEmpty()))
+ {
+ fail("It appears that set of abstract methods defined in the plugin " +
+ "API have been altered. This will only be allowed under " +
+ "extremely limited circumstances, as it will impact backward " +
+ "compatibility.");
+ }
+ }
+
+
+
+ /**
+ * Tests to ensure that none of the non-abstract public methods exposed by the
+ * plugin interface as part of the public API have been removed.
+ *
+ * @throws Exception If an unexpected problem occurs.
+ */
+ @Test()
+ public void testNonAbstractPublicAPIMethods()
+ throws Exception
+ {
+ LinkedList<LinkedList<String>> expectedPublicMethods =
+ new LinkedList<LinkedList<String>>();
+
+ LinkedList<String> sigList = new LinkedList<String>();
+ sigList.add("finalizePlugin");
+ sigList.add("void");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doStartup");
+ sigList.add("org.opends.server.api.plugin.StartupPluginResult");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doShutdown");
+ sigList.add("void");
+ sigList.add("java.lang.String");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPostConnect");
+ sigList.add("org.opends.server.api.plugin.PostConnectPluginResult");
+ sigList.add("org.opends.server.api.ClientConnection");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPostDisconnect");
+ sigList.add("org.opends.server.api.plugin.PostDisconnectPluginResult");
+ sigList.add("org.opends.server.api.ClientConnection");
+ sigList.add("org.opends.server.types.DisconnectReason");
+ sigList.add("int");
+ sigList.add("java.lang.String");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doLDIFImport");
+ sigList.add("org.opends.server.api.plugin.LDIFPluginResult");
+ sigList.add("org.opends.server.types.LDIFImportConfig");
+ sigList.add("org.opends.server.types.Entry");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doLDIFExport");
+ sigList.add("org.opends.server.api.plugin.LDIFPluginResult");
+ sigList.add("org.opends.server.types.LDIFExportConfig");
+ sigList.add("org.opends.server.types.Entry");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPreParse");
+ sigList.add("org.opends.server.api.plugin.PreParsePluginResult");
+ sigList.add("org.opends.server.types.operation.PreParseAbandonOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPreParse");
+ sigList.add("org.opends.server.api.plugin.PreParsePluginResult");
+ sigList.add("org.opends.server.types.operation.PreParseModifyOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPreParse");
+ sigList.add("org.opends.server.api.plugin.PreParsePluginResult");
+ sigList.add("org.opends.server.types.operation.PreParseAddOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPreParse");
+ sigList.add("org.opends.server.api.plugin.PreParsePluginResult");
+ sigList.add("org.opends.server.types.operation.PreParseBindOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPreParse");
+ sigList.add("org.opends.server.api.plugin.PreParsePluginResult");
+ sigList.add("org.opends.server.types.operation.PreParseCompareOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPreParse");
+ sigList.add("org.opends.server.api.plugin.PreParsePluginResult");
+ sigList.add("org.opends.server.types.operation.PreParseDeleteOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPreParse");
+ sigList.add("org.opends.server.api.plugin.PreParsePluginResult");
+ sigList.add("org.opends.server.types.operation.PreParseExtendedOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPreParse");
+ sigList.add("org.opends.server.api.plugin.PreParsePluginResult");
+ sigList.add("org.opends.server.types.operation.PreParseUnbindOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPreParse");
+ sigList.add("org.opends.server.api.plugin.PreParsePluginResult");
+ sigList.add("org.opends.server.types.operation.PreParseModifyDNOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPreParse");
+ sigList.add("org.opends.server.api.plugin.PreParsePluginResult");
+ sigList.add("org.opends.server.types.operation.PreParseSearchOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPreOperation");
+ sigList.add("org.opends.server.api.plugin.PreOperationPluginResult");
+ sigList.add("org.opends.server.types.operation." +
+ "PreOperationExtendedOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPreOperation");
+ sigList.add("org.opends.server.api.plugin.PreOperationPluginResult");
+ sigList.add("org.opends.server.types.operation." +
+ "PreOperationDeleteOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPreOperation");
+ sigList.add("org.opends.server.api.plugin.PreOperationPluginResult");
+ sigList.add("org.opends.server.types.operation.PreOperationBindOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPreOperation");
+ sigList.add("org.opends.server.api.plugin.PreOperationPluginResult");
+ sigList.add("org.opends.server.types.operation." +
+ "PreOperationSearchOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPreOperation");
+ sigList.add("org.opends.server.api.plugin.PreOperationPluginResult");
+ sigList.add("org.opends.server.types.operation.PreOperationAddOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPreOperation");
+ sigList.add("org.opends.server.api.plugin.PreOperationPluginResult");
+ sigList.add("org.opends.server.types.operation."+
+ "PreOperationCompareOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPreOperation");
+ sigList.add("org.opends.server.api.plugin.PreOperationPluginResult");
+ sigList.add("org.opends.server.types.operation." +
+ "PreOperationModifyOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPreOperation");
+ sigList.add("org.opends.server.api.plugin.PreOperationPluginResult");
+ sigList.add("org.opends.server.types.operation." +
+ "PreOperationModifyDNOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPostOperation");
+ sigList.add("org.opends.server.api.plugin.PostOperationPluginResult");
+ sigList.add("org.opends.server.types.operation." +
+ "PostOperationCompareOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPostOperation");
+ sigList.add("org.opends.server.api.plugin.PostOperationPluginResult");
+ sigList.add("org.opends.server.types.operation." +
+ "PostOperationModifyDNOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPostOperation");
+ sigList.add("org.opends.server.api.plugin.PostOperationPluginResult");
+ sigList.add("org.opends.server.types.operation." +
+ "PostOperationExtendedOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPostOperation");
+ sigList.add("org.opends.server.api.plugin.PostOperationPluginResult");
+ sigList.add("org.opends.server.types.operation." +
+ "PostOperationBindOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPostOperation");
+ sigList.add("org.opends.server.api.plugin.PostOperationPluginResult");
+ sigList.add("org.opends.server.types.operation." +
+ "PostOperationAbandonOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPostOperation");
+ sigList.add("org.opends.server.api.plugin.PostOperationPluginResult");
+ sigList.add("org.opends.server.types.operation." +
+ "PostOperationUnbindOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPostOperation");
+ sigList.add("org.opends.server.api.plugin.PostOperationPluginResult");
+ sigList.add("org.opends.server.types.operation." +
+ "PostOperationModifyOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPostOperation");
+ sigList.add("org.opends.server.api.plugin.PostOperationPluginResult");
+ sigList.add("org.opends.server.types.operation.PostOperationAddOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPostOperation");
+ sigList.add("org.opends.server.api.plugin.PostOperationPluginResult");
+ sigList.add("org.opends.server.types.operation." +
+ "PostOperationDeleteOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPostOperation");
+ sigList.add("org.opends.server.api.plugin.PostOperationPluginResult");
+ sigList.add("org.opends.server.types.operation." +
+ "PostOperationSearchOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPostResponse");
+ sigList.add("org.opends.server.api.plugin.PostResponsePluginResult");
+ sigList.add("org.opends.server.types.operation." +
+ "PostResponseCompareOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPostResponse");
+ sigList.add("org.opends.server.api.plugin.PostResponsePluginResult");
+ sigList.add("org.opends.server.types.operation." +
+ "PostResponseDeleteOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPostResponse");
+ sigList.add("org.opends.server.api.plugin.PostResponsePluginResult");
+ sigList.add("org.opends.server.types.operation." +
+ "PostResponseSearchOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPostResponse");
+ sigList.add("org.opends.server.api.plugin.PostResponsePluginResult");
+ sigList.add("org.opends.server.types.operation." +
+ "PostResponseExtendedOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPostResponse");
+ sigList.add("org.opends.server.api.plugin.PostResponsePluginResult");
+ sigList.add("org.opends.server.types.operation." +
+ "PostResponseModifyOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPostResponse");
+ sigList.add("org.opends.server.api.plugin.PostResponsePluginResult");
+ sigList.add("org.opends.server.types.operation." +
+ "PostResponseModifyDNOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPostResponse");
+ sigList.add("org.opends.server.api.plugin.PostResponsePluginResult");
+ sigList.add("org.opends.server.types.operation.PostResponseAddOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("doPostResponse");
+ sigList.add("org.opends.server.api.plugin.PostResponsePluginResult");
+ sigList.add("org.opends.server.types.operation.PostResponseBindOperation");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("processSearchEntry");
+ sigList.add("org.opends.server.api.plugin.SearchEntryPluginResult");
+ sigList.add("org.opends.server.types.operation.SearchEntrySearchOperation");
+ sigList.add("org.opends.server.types.SearchResultEntry");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("processSearchReference");
+ sigList.add("org.opends.server.api.plugin.SearchReferencePluginResult");
+ sigList.add("org.opends.server.types.operation." +
+ "SearchReferenceSearchOperation");
+ sigList.add("org.opends.server.types.SearchResultReference");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("processIntermediateResponse");
+ sigList.add("org.opends.server.api.plugin." +
+ "IntermediateResponsePluginResult");
+ sigList.add("org.opends.server.types.IntermediateResponse");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("initializeInternal");
+ sigList.add("void");
+ sigList.add("org.opends.server.types.DN");
+ sigList.add("java.util.Set");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("getPluginEntryDN");
+ sigList.add("org.opends.server.types.DN");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("getPluginTypes");
+ sigList.add("java.util.Set");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("getClass");
+ sigList.add("java.lang.Class");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("equals");
+ sigList.add("boolean");
+ sigList.add("java.lang.Object");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("hashCode");
+ sigList.add("int");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("toString");
+ sigList.add("java.lang.String");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("wait");
+ sigList.add("void");
+ sigList.add("java.lang.InterruptedException");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("wait");
+ sigList.add("void");
+ sigList.add("long");
+ sigList.add("java.lang.InterruptedException");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("wait");
+ sigList.add("void");
+ sigList.add("long");
+ sigList.add("int");
+ sigList.add("java.lang.InterruptedException");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("notify");
+ sigList.add("void");
+ expectedPublicMethods.add(sigList);
+
+ sigList = new LinkedList<String>();
+ sigList.add("notifyAll");
+ sigList.add("void");
+ expectedPublicMethods.add(sigList);
+
+
+ LinkedList<LinkedList<String>> newPublicMethods =
+ new LinkedList<LinkedList<String>>();
+ Class pluginClass = DirectoryServerPlugin.class;
+ for (Method m : pluginClass.getMethods())
+ {
+ if (Modifier.isPublic(m.getModifiers()) &&
+ (! Modifier.isAbstract(m.getModifiers())))
+ {
+ LinkedList<String> foundList = new LinkedList<String>();
+ foundList.add(m.getName());
+ foundList.add(m.getReturnType().getName());
+ for (Class c : m.getParameterTypes())
+ {
+ foundList.add(c.getName());
+ }
+ for (Class c : m.getExceptionTypes())
+ {
+ foundList.add(c.getName());
+ }
+
+ Iterator<LinkedList<String>> iterator =
+ expectedPublicMethods.iterator();
+ boolean found = false;
+ while (iterator.hasNext())
+ {
+ sigList = iterator.next();
+ if (foundList.equals(sigList))
+ {
+ found = true;
+ iterator.remove();
+ break;
+ }
+ }
+
+ if (! found)
+ {
+ newPublicMethods.add(foundList);
+ }
+ }
+ }
+
+ if (! expectedPublicMethods.isEmpty())
+ {
+ System.err.println("It appears that one or more public methods have " +
+ "been removed from the plugin API:");
+ for (LinkedList<String> methodList : expectedPublicMethods)
+ {
+ for (String s : methodList)
+ {
+ System.err.print(s + " ");
+ }
+ System.err.println();
+ }
+
+ System.err.println();
+
+ fail("It appears that set of methods defined in the plugin API has " +
+ "been altered in a manner that could impact backward " +
+ "compatibility. This will only be allowed under extremely " +
+ "limited circumstances.");
+ }
+
+
+ if (! newPublicMethods.isEmpty())
+ {
+ System.err.println("It appears that one or more new public methods " +
+ "have been added to the plugin API:");
+ for (LinkedList<String> methodList : newPublicMethods)
+ {
+ for (String s : methodList)
+ {
+ System.err.print(s + " ");
+ }
+ System.err.println();
+ }
+
+ System.err.println();
+
+ fail("It appears that one or more new public methods have been added " +
+ "to the plugin API. This is not actually an error, but if you " +
+ "intend to make the new method(s) part of the official plugin API " +
+ "then you must add its signature to the expectedPublicMethods " +
+ "list above so that we can ensure that it is not removed or " +
+ "altered in an incompatible way in the future.");
+ }
+ }
+
+
+
/**
* Tests the <CODE>getPluginEntryDN</CODE> method.
*
--
Gitblit v1.10.0