You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2008/12/19 14:54:08 UTC

svn commit: r728022 - /jackrabbit/trunk/jackrabbit-jcr-rmi/src/test/java/org/apache/jackrabbit/test/rmi/repository/RepositoryFactoryImplTest.java

Author: jukka
Date: Fri Dec 19 05:54:08 2008
New Revision: 728022

URL: http://svn.apache.org/viewvc?rev=728022&view=rev
Log:
JCR-1834: Create RepositoryFactory implementation

Use a random port for setting up a temporary local RMI registry

Modified:
    jackrabbit/trunk/jackrabbit-jcr-rmi/src/test/java/org/apache/jackrabbit/test/rmi/repository/RepositoryFactoryImplTest.java

Modified: jackrabbit/trunk/jackrabbit-jcr-rmi/src/test/java/org/apache/jackrabbit/test/rmi/repository/RepositoryFactoryImplTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-rmi/src/test/java/org/apache/jackrabbit/test/rmi/repository/RepositoryFactoryImplTest.java?rev=728022&r1=728021&r2=728022&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-rmi/src/test/java/org/apache/jackrabbit/test/rmi/repository/RepositoryFactoryImplTest.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-rmi/src/test/java/org/apache/jackrabbit/test/rmi/repository/RepositoryFactoryImplTest.java Fri Dec 19 05:54:08 2008
@@ -16,33 +16,34 @@
  */
 package org.apache.jackrabbit.test.rmi.repository;
 
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Iterator;
 import java.io.File;
+import java.io.FileOutputStream;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
 import java.rmi.Naming;
 import java.rmi.RemoteException;
 import java.rmi.registry.LocateRegistry;
 import java.rmi.registry.Registry;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Random;
 
-import javax.jcr.Repository;
+import javax.imageio.spi.ServiceRegistry;
 import javax.jcr.Credentials;
-import javax.jcr.SimpleCredentials;
+import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
-import javax.imageio.spi.ServiceRegistry;
+import javax.jcr.SimpleCredentials;
 
-import org.apache.jackrabbit.api.jsr283.RepositoryFactory;
+import junit.framework.TestCase;
+
+import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.api.JackrabbitRepository;
+import org.apache.jackrabbit.api.jsr283.RepositoryFactory;
 import org.apache.jackrabbit.core.RepositoryFactoryImpl;
 import org.apache.jackrabbit.core.RepositoryImpl;
-import org.apache.jackrabbit.rmi.server.RemoteAdapterFactory;
 import org.apache.jackrabbit.rmi.jackrabbit.JackrabbitServerAdapterFactory;
-
-import junit.framework.TestCase;
+import org.apache.jackrabbit.rmi.server.RemoteAdapterFactory;
 
 /**
  * <code>RepositoryFactoryImplTest</code>...
@@ -58,54 +59,59 @@
 
     private static final File REPO_CONF = new File(REPO_HOME, "repository.xml");
 
-    private static final String RMI_URL = "rmi://localhost/repository";
+    /**
+     * Use a random port in the range 10k-60k for the RMI registry we use
+     * in this test. This way it's very unlikely for the test to interfere
+     * with normal runtime services.
+     */
+    private static final int RMI_PORT = new Random().nextInt(50000) + 10000;
+
+    private static final String RMI_URL =
+        "rmi://localhost:" + RMI_PORT + "/repository";
+
+    private Repository repository;
+
+    protected void setUp() throws Exception {
+        super.setUp();
 
-    static {
         REPO_HOME.mkdirs();
         if (!REPO_CONF.exists()) {
+            // get default configuration from jackrabbit-core
+            InputStream in = RepositoryImpl.class.getResourceAsStream("repository.xml");
             try {
-                // get default configuration from jackrabbit-core
-                InputStream in = RepositoryImpl.class.getResourceAsStream("repository.xml");
+                OutputStream out = new FileOutputStream(REPO_CONF);
                 try {
-                    OutputStream out = new FileOutputStream(REPO_CONF);
-                    try {
-                        byte[] buffer = new byte[1024];
-                        int len;
-                        while ((len = in.read(buffer)) != -1) {
-                            out.write(buffer, 0, len);
-                        }
-                    } finally {
-                        out.close();
-                    }
+                    IOUtils.copy(in, out);
                 } finally {
-                    in.close();
+                    out.close();
                 }
-            } catch (IOException e) {
-                throw new RuntimeException(e);
+            } finally {
+                in.close();
             }
         }
 
-        // try to create a registry
+        // Make sure that a local RMI registry is running at the selected port
         try {
-            LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
+            Registry registry = LocateRegistry.getRegistry(RMI_PORT);
+            registry.list();
         } catch (RemoteException e) {
-            // ignore
+            LocateRegistry.createRegistry(RMI_PORT);
         }
-    }
 
-    private Repository repository;
-
-    protected void setUp() throws Exception {
-        super.setUp();
         // get a local repository
         Map params = new HashMap();
         params.put(RepositoryFactoryImpl.REPOSITORY_CONF, REPO_CONF.getAbsolutePath());
         params.put(RepositoryFactoryImpl.REPOSITORY_HOME, REPO_HOME.getAbsolutePath());
         repository = RepositoryManager.getRepository(params);
-        
+
+        // setup remote repository
+        RemoteAdapterFactory raf = new JackrabbitServerAdapterFactory();
+        Naming.bind(RMI_URL, raf.getRemoteRepository(repository));
     }
 
     protected void tearDown() throws Exception {
+        Naming.unbind(RMI_URL);
+
         // shutdown local repository
         if (repository instanceof JackrabbitRepository) {
             ((JackrabbitRepository) repository).shutdown();
@@ -114,10 +120,6 @@
     }
 
     public void testConnect() throws Exception {
-        // setup remote repository
-        RemoteAdapterFactory raf = new JackrabbitServerAdapterFactory();
-        Naming.bind(RMI_URL, raf.getRemoteRepository(repository));
-
         Map params = new HashMap();
         params.put(org.apache.jackrabbit.rmi.repository.RepositoryFactoryImpl.REPOSITORY_RMI_URL, RMI_URL);
         Repository r = RepositoryManager.getRepository(params);