From 8adb7af006bb6bf8a71f86bb520671de381c8e3e Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Wed, 13 Feb 2013 09:49:16 +0000
Subject: [PATCH] Minor API cleanup to make it easier to use.

---
 opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/TestCaseUtils.java |   84 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 84 insertions(+), 0 deletions(-)

diff --git a/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/TestCaseUtils.java b/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/TestCaseUtils.java
index a07a24f..33b34f5 100644
--- a/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/TestCaseUtils.java
+++ b/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/TestCaseUtils.java
@@ -22,16 +22,28 @@
  *
  *
  *      Copyright 2009-2010 Sun Microsystems, Inc.
+ *      Portions copyright 2012 ForgeRock AS.
  */
 
 package org.forgerock.opendj.ldap;
 
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.net.InetSocketAddress;
 import java.net.ServerSocket;
 import java.net.SocketAddress;
+import java.util.List;
+
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+
+import com.forgerock.opendj.util.CompletedFutureResult;
 
 /**
  * This class defines some utility functions which can be used by test cases.
@@ -118,4 +130,76 @@
     public static SocketAddress getServerSocketAddress() {
         return LDAPServer.getInstance().getSocketAddress();
     }
+
+    /**
+     * Creates a mock connection factory which will return the provided
+     * connections in order.
+     *
+     * @param first
+     *            The first connection to return.
+     * @param remaining
+     *            The remaining connections to return.
+     * @return The connection factory.
+     */
+    @SuppressWarnings("unchecked")
+    public static ConnectionFactory mockConnectionFactory(final Connection first,
+            final Connection... remaining) {
+        final ConnectionFactory factory = mock(ConnectionFactory.class);
+        try {
+            when(factory.getConnection()).thenReturn(first, remaining);
+        } catch (ErrorResultException ignored) {
+            // Cannot happen.
+        }
+        when(factory.getConnectionAsync(any(ResultHandler.class))).thenAnswer(
+                new Answer<FutureResult<Connection>>() {
+                    @Override
+                    public FutureResult<Connection> answer(final InvocationOnMock invocation)
+                            throws Throwable {
+                        final Connection connection = factory.getConnection();
+                        // Execute handler and return future.
+                        final ResultHandler<? super Connection> handler =
+                                (ResultHandler<? super Connection>) invocation.getArguments()[0];
+                        if (handler != null) {
+                            handler.handleResult(connection);
+                        }
+                        return new CompletedFutureResult<Connection>(connection);
+                    }
+                });
+        return factory;
+    }
+
+    /**
+     * Creates a mock connection which will store connection event listeners in
+     * the provided list.
+     *
+     * @param listeners
+     *            The list which should be used for storing event listeners.
+     * @return The mock connection.
+     */
+    public static Connection mockConnection(final List<ConnectionEventListener> listeners) {
+        final Connection mockConnection = mock(Connection.class);
+
+        // Handle listener registration / deregistration in mock connection.
+        doAnswer(new Answer<Void>() {
+            @Override
+            public Void answer(final InvocationOnMock invocation) throws Throwable {
+                final ConnectionEventListener listener =
+                        (ConnectionEventListener) invocation.getArguments()[0];
+                listeners.add(listener);
+                return null;
+            }
+        }).when(mockConnection).addConnectionEventListener(any(ConnectionEventListener.class));
+
+        doAnswer(new Answer<Void>() {
+            @Override
+            public Void answer(final InvocationOnMock invocation) throws Throwable {
+                final ConnectionEventListener listener =
+                        (ConnectionEventListener) invocation.getArguments()[0];
+                listeners.remove(listener);
+                return null;
+            }
+        }).when(mockConnection).removeConnectionEventListener(any(ConnectionEventListener.class));
+
+        return mockConnection;
+    }
 }

--
Gitblit v1.10.0