From 3daecdda1fac1cffac6c5378772a54b522195bd4 Mon Sep 17 00:00:00 2001
From: Robert Munteanu <rombert@apache.org>
Date: Wed, 26 Aug 2015 18:19:41 +0300
Subject: [PATCH] OAK-3301 - AbstractRepositoryUpgrade leaks Repository
 instances

---
 .../oak/upgrade/AbstractRepositoryUpgradeTest.java       | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/AbstractRepositoryUpgradeTest.java b/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/AbstractRepositoryUpgradeTest.java
index 94411f6..a860848 100644
--- a/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/AbstractRepositoryUpgradeTest.java
+++ b/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/AbstractRepositoryUpgradeTest.java
@@ -31,6 +31,7 @@ import javax.jcr.SimpleCredentials;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
+import org.apache.jackrabbit.api.JackrabbitRepository;
 import org.apache.jackrabbit.api.JackrabbitSession;
 import org.apache.jackrabbit.core.RepositoryImpl;
 import org.apache.jackrabbit.core.config.RepositoryConfig;
@@ -39,6 +40,7 @@ import org.apache.jackrabbit.oak.jcr.Jcr;
 import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 import org.apache.jackrabbit.oak.stats.Clock;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.BeforeClass;
 
@@ -52,6 +54,8 @@ public abstract class AbstractRepositoryUpgradeTest {
     protected static NodeStore targetNodeStore;
 
     private static File testDirectory;
+    
+    private JackrabbitRepository targetRepository;
 
     @BeforeClass
     public static void init() throws InterruptedException {
@@ -90,6 +94,13 @@ public abstract class AbstractRepositoryUpgradeTest {
             targetNodeStore = target;
         }
     }
+    
+    @After
+    public synchronized void shutdownTargetRepository() {
+        if ( targetRepository != null ) {
+            targetRepository.shutdown();
+        }
+    }
 
     protected synchronized NodeStore getTargetNodeStore() {
         if (targetNodeStore == null) {
@@ -127,7 +138,10 @@ public abstract class AbstractRepositoryUpgradeTest {
     }
 
     public Repository getTargetRepository(){
-        return new Jcr(new Oak(targetNodeStore)).createRepository();
+        if ( targetRepository == null ) {
+            targetRepository = (JackrabbitRepository) new Jcr(new Oak(targetNodeStore)).createRepository();
+        }
+        return targetRepository;
     }
 
     public JackrabbitSession createAdminSession()throws RepositoryException{
-- 
2.5.0

