Repository: cayenne
Updated Branches:
  refs/heads/master ff1c1af4c -> 865ee2bf5


Proper shutdown of DefaultEventManager and CayenneRuntime in tests to prevent 
thread leakage.


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/860c80f8
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/860c80f8
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/860c80f8

Branch: refs/heads/master
Commit: 860c80f8542560ee1665fd0ce65d2d0dfba34704
Parents: fecb67f
Author: Nikita Timofeev <stari...@gmail.com>
Authored: Fri Dec 2 12:35:24 2016 +0300
Committer: Nikita Timofeev <stari...@gmail.com>
Committed: Fri Dec 2 12:35:24 2016 +0300

----------------------------------------------------------------------
 .../access/DataContextSharedCacheEmpiricIT.java | 13 +++++++++-
 .../org/apache/cayenne/access/DataDomainIT.java | 25 ++++++++++++--------
 .../apache/cayenne/access/DataRowStoreIT.java   | 24 +++++++++++++++----
 .../rop/server/ROPServletTest.java              | 20 ++++++++++++----
 .../cayenne/event/DefaultEventManagerTest.java  |  6 +++++
 .../apache/cayenne/event/EventBridgeTest.java   | 25 ++++++++++++++++----
 6 files changed, 89 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/860c80f8/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextSharedCacheEmpiricIT.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextSharedCacheEmpiricIT.java
 
b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextSharedCacheEmpiricIT.java
index 91c1ed1..dec040c 100644
--- 
a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextSharedCacheEmpiricIT.java
+++ 
b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextSharedCacheEmpiricIT.java
@@ -32,6 +32,7 @@ import org.apache.cayenne.testdo.testmap.Artist;
 import org.apache.cayenne.unit.di.server.CayenneProjects;
 import org.apache.cayenne.unit.di.server.ServerCase;
 import org.apache.cayenne.unit.di.server.UseServerRuntime;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -59,12 +60,15 @@ public class DataContextSharedCacheEmpiricIT extends 
ServerCase {
     private DataContext c1;
     private DataContext c2;
 
+    private DefaultEventManager eventManager;
+
     @Before
     public void setUp() throws Exception {
+        eventManager = new DefaultEventManager();
         DataRowStore cache = new DataRowStore(
                 "cacheTest",
                 Collections.EMPTY_MAP,
-                new DefaultEventManager());
+                eventManager);
 
         c1 = new DataContext(runtime.getDataDomain(), 
                 objectStoreFactory.createObjectStore(cache));
@@ -77,6 +81,13 @@ public class DataContextSharedCacheEmpiricIT extends 
ServerCase {
         tArtist.insert(1, "version1");
     }
 
+    @After
+    public void tearDown() {
+        if(eventManager != null) {
+            eventManager.shutdown();
+        }
+    }
+
     @Test
     public void testSelectSelectCommitRefresh() throws Exception {
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/860c80f8/cayenne-server/src/test/java/org/apache/cayenne/access/DataDomainIT.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/access/DataDomainIT.java 
b/cayenne-server/src/test/java/org/apache/cayenne/access/DataDomainIT.java
index 479ca3f..29991ab 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/DataDomainIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DataDomainIT.java
@@ -221,16 +221,21 @@ public class DataDomainIT extends ServerCase {
 
         final boolean[] cacheShutdown = new boolean[1];
 
-        DataRowStore cache = new DataRowStore("Y", Collections.EMPTY_MAP, new 
DefaultEventManager()) {
-
-            @Override
-            public void shutdown() {
-                cacheShutdown[0] = true;
-            }
-        };
-
-        domain.setSharedSnapshotCache(cache);
-        domain.shutdown();
+        DefaultEventManager eventManager = new DefaultEventManager();
+        try {
+            DataRowStore cache = new DataRowStore("Y", Collections.EMPTY_MAP, 
eventManager) {
+
+                @Override
+                public void shutdown() {
+                    cacheShutdown[0] = true;
+                }
+            };
+
+            domain.setSharedSnapshotCache(cache);
+            domain.shutdown();
+        } finally {
+            eventManager.shutdown();
+        }
 
         assertTrue(cacheShutdown[0]);
     }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/860c80f8/cayenne-server/src/test/java/org/apache/cayenne/access/DataRowStoreIT.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/access/DataRowStoreIT.java 
b/cayenne-server/src/test/java/org/apache/cayenne/access/DataRowStoreIT.java
index 6a15123..f45babf 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/DataRowStoreIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DataRowStoreIT.java
@@ -26,6 +26,8 @@ import org.apache.cayenne.testdo.testmap.Artist;
 import org.apache.cayenne.unit.di.server.CayenneProjects;
 import org.apache.cayenne.unit.di.server.ServerCase;
 import org.apache.cayenne.unit.di.server.UseServerRuntime;
+import org.junit.After;
+import org.junit.Before;
 import org.junit.Test;
 
 import java.util.Collections;
@@ -40,12 +42,26 @@ import static org.junit.Assert.assertTrue;
 @UseServerRuntime(CayenneProjects.TESTMAP_PROJECT)
 public class DataRowStoreIT extends ServerCase {
 
+    private DefaultEventManager eventManager;
+
+    @After
+    public void cleanEventManager() {
+        if(eventManager != null) {
+            eventManager.shutdown();
+        }
+    }
+
+    @Before
+    public void createEventManager() {
+        eventManager = new DefaultEventManager();
+    }
+
     @Test
     public void testDefaultConstructor() {
         DataRowStore cache = new DataRowStore(
                 "cacheXYZ",
                 Collections.EMPTY_MAP,
-                new DefaultEventManager());
+                eventManager);
         assertEquals("cacheXYZ", cache.getName());
         assertNotNull(cache.getSnapshotEventSubject());
         
assertTrue(cache.getSnapshotEventSubject().getSubjectName().contains("cacheXYZ"));
@@ -63,7 +79,7 @@ public class DataRowStoreIT extends ServerCase {
         DataRowStore cache = new DataRowStore(
                 "cacheXYZ",
                 props,
-                new DefaultEventManager());
+                eventManager);
         assertEquals("cacheXYZ", cache.getName());
         assertEquals(!DataRowStore.REMOTE_NOTIFICATION_DEFAULT, cache
                 .isNotifyingRemoteListeners());
@@ -74,7 +90,7 @@ public class DataRowStoreIT extends ServerCase {
         DataRowStore cache = new DataRowStore(
                 "cacheXYZ",
                 Collections.EMPTY_MAP,
-                new DefaultEventManager());
+                eventManager);
 
         assertEquals(DataRowStore.REMOTE_NOTIFICATION_DEFAULT, cache
                 .isNotifyingRemoteListeners());
@@ -95,7 +111,7 @@ public class DataRowStoreIT extends ServerCase {
         DataRowStore cache = new DataRowStore(
                 "cacheXYZ",
                 props,
-                new DefaultEventManager());
+                eventManager);
         assertEquals(2, cache.maximumSize());
         assertEquals(0, cache.size());
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/860c80f8/cayenne-server/src/test/java/org/apache/cayenne/configuration/rop/server/ROPServletTest.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/configuration/rop/server/ROPServletTest.java
 
b/cayenne-server/src/test/java/org/apache/cayenne/configuration/rop/server/ROPServletTest.java
index 569d703..8495e99 100644
--- 
a/cayenne-server/src/test/java/org/apache/cayenne/configuration/rop/server/ROPServletTest.java
+++ 
b/cayenne-server/src/test/java/org/apache/cayenne/configuration/rop/server/ROPServletTest.java
@@ -39,6 +39,7 @@ import org.apache.cayenne.configuration.web.WebUtil;
 import org.apache.cayenne.di.Key;
 import org.apache.cayenne.di.Module;
 import org.apache.cayenne.rop.ROPServlet;
+import org.junit.After;
 import org.junit.Test;
 
 import com.mockrunner.mock.web.MockServletConfig;
@@ -46,6 +47,15 @@ import com.mockrunner.mock.web.MockServletContext;
 
 public class ROPServletTest {
 
+       private CayenneRuntime runtime;
+
+       @After
+       public void shutdownRuntime() {
+               if(runtime != null) {
+                       runtime.shutdown();
+               }
+       }
+
        @Test
        public void testInitWithServletName() throws Exception {
 
@@ -60,7 +70,7 @@ public class ROPServletTest {
                assertNull(WebUtil.getCayenneRuntime(context));
                servlet.init(config);
 
-               CayenneRuntime runtime = WebUtil.getCayenneRuntime(context);
+               runtime = WebUtil.getCayenneRuntime(context);
                assertNotNull(runtime);
 
                List<?> locations = runtime.getInjector().getInstance(
@@ -82,7 +92,7 @@ public class ROPServletTest {
                ROPServlet servlet = new ROPServlet();
                servlet.init(config);
 
-               CayenneRuntime runtime = WebUtil.getCayenneRuntime(context);
+               runtime = WebUtil.getCayenneRuntime(context);
                assertNotNull(runtime);
                List<?> locations = runtime.getInjector().getInstance(
                                Key.get(List.class, 
Constants.SERVER_PROJECT_LOCATIONS_LIST));
@@ -104,7 +114,7 @@ public class ROPServletTest {
                ROPServlet servlet = new ROPServlet();
                servlet.init(config);
 
-               CayenneRuntime runtime = WebUtil.getCayenneRuntime(context);
+               runtime = WebUtil.getCayenneRuntime(context);
                assertNotNull(runtime);
 
                List<?> locations = runtime.getInjector().getInstance(
@@ -135,7 +145,7 @@ public class ROPServletTest {
                ROPServlet servlet = new ROPServlet();
                servlet.init(config);
 
-               CayenneRuntime runtime = WebUtil.getCayenneRuntime(context);
+               runtime = WebUtil.getCayenneRuntime(context);
                assertNotNull(runtime);
 
                Collection<Module> modules = ((ModuleCollection) 
runtime.getModule()).getModules();
@@ -165,7 +175,7 @@ public class ROPServletTest {
                ROPServlet servlet = new ROPServlet();
 
                servlet.init(config);
-               CayenneRuntime runtime = WebUtil.getCayenneRuntime(context);
+               runtime = WebUtil.getCayenneRuntime(context);
                Collection<Module> modules = ((ModuleCollection) 
runtime.getModule()).getModules();
                assertEquals(3, modules.size());
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/860c80f8/cayenne-server/src/test/java/org/apache/cayenne/event/DefaultEventManagerTest.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/event/DefaultEventManagerTest.java
 
b/cayenne-server/src/test/java/org/apache/cayenne/event/DefaultEventManagerTest.java
index 93f8a3f..b30493d 100644
--- 
a/cayenne-server/src/test/java/org/apache/cayenne/event/DefaultEventManagerTest.java
+++ 
b/cayenne-server/src/test/java/org/apache/cayenne/event/DefaultEventManagerTest.java
@@ -20,6 +20,7 @@
 package org.apache.cayenne.event;
 
 import org.apache.cayenne.test.parallel.ParallelTestContainer;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -46,6 +47,11 @@ public class DefaultEventManagerTest implements 
EventListener {
         numberOfReceivedEventsForClass = 0;
     }
 
+    @After
+    public void tearDown() {
+        ((DefaultEventManager)eventManager).shutdown();
+    }
+
     @Test
     public void testSubjectListenerWouldRegisterListener() {
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/860c80f8/cayenne-server/src/test/java/org/apache/cayenne/event/EventBridgeTest.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/event/EventBridgeTest.java 
b/cayenne-server/src/test/java/org/apache/cayenne/event/EventBridgeTest.java
index dd76077..cc97eb1 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/event/EventBridgeTest.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/event/EventBridgeTest.java
@@ -21,9 +21,12 @@ package org.apache.cayenne.event;
 
 import org.apache.cayenne.access.event.SnapshotEvent;
 import org.apache.cayenne.test.parallel.ParallelTestContainer;
+import org.junit.After;
 import org.junit.Test;
 
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
@@ -34,6 +37,16 @@ import static org.junit.Assert.assertTrue;
  */
 public class EventBridgeTest {
 
+    private List<DefaultEventManager> managersToClean = new ArrayList<>();
+
+    @After
+    public void cleanEventManagers() {
+        for(DefaultEventManager manager : managersToClean) {
+            manager.shutdown();
+        }
+        managersToClean.clear();
+    }
+
     @Test
     public void testConstructor() throws Exception {
         EventSubject local = EventSubject
@@ -54,7 +67,8 @@ public class EventBridgeTest {
         String external = "externalSubject";
         TestBridge bridge = new TestBridge(local, external);
 
-        EventManager manager = new DefaultEventManager();
+        DefaultEventManager manager = new DefaultEventManager();
+        managersToClean.add(manager);
         bridge.startup(manager, EventBridge.RECEIVE_LOCAL_EXTERNAL);
 
         assertSame(manager, bridge.eventManager);
@@ -62,7 +76,8 @@ public class EventBridgeTest {
         assertEquals(0, bridge.shutdownCalls);
 
         // try startup again
-        EventManager newManager = new DefaultEventManager();
+        DefaultEventManager newManager = new DefaultEventManager();
+        managersToClean.add(newManager);
         bridge.startup(newManager, EventBridge.RECEIVE_LOCAL_EXTERNAL);
 
         assertSame(newManager, bridge.eventManager);
@@ -77,7 +92,8 @@ public class EventBridgeTest {
         String external = "externalSubject";
         TestBridge bridge = new TestBridge(local, external);
 
-        EventManager manager = new DefaultEventManager();
+        DefaultEventManager manager = new DefaultEventManager();
+        managersToClean.add(manager);
         bridge.startup(manager, EventBridge.RECEIVE_LOCAL_EXTERNAL);
         bridge.shutdown();
 
@@ -95,7 +111,8 @@ public class EventBridgeTest {
         String external = "externalSubject";
         final TestBridge bridge = new TestBridge(local, external);
 
-        EventManager manager = new DefaultEventManager(2);
+        DefaultEventManager manager = new DefaultEventManager(2);
+        managersToClean.add(manager);
         bridge.startup(manager, EventBridge.RECEIVE_LOCAL_EXTERNAL);
 
         final SnapshotEvent eventWithNoSubject = new SnapshotEvent(

Reply via email to