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(