You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by sk...@apache.org on 2016/12/02 11:34:10 UTC

[1/3] cayenne git commit: Proper shutdown of DefaultEventManager and CayenneRuntime in tests to prevent thread leakage.

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 <st...@gmail.com>
Authored: Fri Dec 2 12:35:24 2016 +0300
Committer: Nikita Timofeev <st...@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(


[3/3] cayenne git commit: Merge branch '147'

Posted by sk...@apache.org.
Merge branch '147'


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

Branch: refs/heads/master
Commit: 865ee2bf5c95c772ade0d4dd22e8401061b707ce
Parents: ff1c1af 391409d
Author: Savva Kolbachev <s....@gmail.com>
Authored: Fri Dec 2 14:28:34 2016 +0300
Committer: Savva Kolbachev <s....@gmail.com>
Committed: Fri Dec 2 14:28:34 2016 +0300

----------------------------------------------------------------------
 .../org/apache/cayenne/CayenneContextIT.java    | 13 +++++++-
 .../cayenne/remote/ClientChannelTest.java       | 32 +++++++++++++++-----
 .../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 ++++++++++++---
 8 files changed, 125 insertions(+), 33 deletions(-)
----------------------------------------------------------------------



[2/3] cayenne git commit: Proper shutdown of DefaultEventManager and CayenneRuntime in tests to prevent thread leakage. - more tests in client module fixed

Posted by sk...@apache.org.
Proper shutdown of DefaultEventManager and CayenneRuntime in tests to prevent thread leakage.
 - more tests in client module fixed


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

Branch: refs/heads/master
Commit: 391409dd79562fba018517339556bc918aee36cd
Parents: 860c80f
Author: Nikita Timofeev <st...@gmail.com>
Authored: Fri Dec 2 13:01:02 2016 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Fri Dec 2 13:01:02 2016 +0300

----------------------------------------------------------------------
 .../org/apache/cayenne/CayenneContextIT.java    | 13 +++++++-
 .../cayenne/remote/ClientChannelTest.java       | 32 +++++++++++++++-----
 2 files changed, 36 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/391409dd/cayenne-client/src/test/java/org/apache/cayenne/CayenneContextIT.java
----------------------------------------------------------------------
diff --git a/cayenne-client/src/test/java/org/apache/cayenne/CayenneContextIT.java b/cayenne-client/src/test/java/org/apache/cayenne/CayenneContextIT.java
index e8fdc08..ae607de 100644
--- a/cayenne-client/src/test/java/org/apache/cayenne/CayenneContextIT.java
+++ b/cayenne-client/src/test/java/org/apache/cayenne/CayenneContextIT.java
@@ -39,6 +39,7 @@ import org.apache.cayenne.unit.di.client.ClientCase;
 import org.apache.cayenne.unit.di.server.CayenneProjects;
 import org.apache.cayenne.unit.di.server.UseServerRuntime;
 import org.apache.cayenne.util.GenericResponse;
+import org.junit.After;
 import org.junit.Test;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
@@ -65,6 +66,16 @@ public class CayenneContextIT extends ClientCase {
 	@Inject
 	private ObjectContext serverContext;
 
+	private DefaultEventManager eventManager;
+
+	@After
+	public void cleanUp() {
+		if(eventManager != null) {
+			eventManager.shutdown();
+			eventManager = null;
+		}
+	}
+
 	@Test
 	public void testConstructor() {
 
@@ -121,7 +132,7 @@ public class CayenneContextIT extends ClientCase {
 	public void testCommitChangesNew() {
 		final CompoundDiff diff = new CompoundDiff();
 		final Object newObjectId = new ObjectId("test", "key", "generated");
-		final EventManager eventManager = new DefaultEventManager(0);
+		eventManager = new DefaultEventManager(0);
 
 		// test that ids that are passed back are actually propagated to the
 		// right

http://git-wip-us.apache.org/repos/asf/cayenne/blob/391409dd/cayenne-client/src/test/java/org/apache/cayenne/remote/ClientChannelTest.java
----------------------------------------------------------------------
diff --git a/cayenne-client/src/test/java/org/apache/cayenne/remote/ClientChannelTest.java b/cayenne-client/src/test/java/org/apache/cayenne/remote/ClientChannelTest.java
index 3638ae8..ce022ba 100644
--- a/cayenne-client/src/test/java/org/apache/cayenne/remote/ClientChannelTest.java
+++ b/cayenne-client/src/test/java/org/apache/cayenne/remote/ClientChannelTest.java
@@ -35,10 +35,12 @@ import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.query.SelectQuery;
 import org.apache.cayenne.util.GenericResponse;
+import org.junit.After;
 import org.junit.Test;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -55,6 +57,19 @@ import static org.mockito.Mockito.when;
 
 public class ClientChannelTest {
 
+    private List<DefaultEventManager> managers = new ArrayList<>();
+
+    @After
+    public void cleanUp() {
+        if(managers.size() == 0) {
+            return;
+        }
+        for(DefaultEventManager manager : managers) {
+            manager.shutdown();
+        }
+        managers.clear();
+    }
+
     @Test
     public void testOnQuerySelect() {
 
@@ -221,23 +236,24 @@ public class ClientChannelTest {
         try {
             new ClientChannel(connection, false, new MockEventManager(), false);
             fail("Channel didn't throw on broken EventBridge");
-        }
-        catch (CayenneRuntimeException e) {
+        } catch (CayenneRuntimeException e) {
             // expected
         }
 
         try {
-            new ClientChannel(connection, false, new DefaultEventManager(2), false);
+            DefaultEventManager manager = new DefaultEventManager(2);
+            managers.add(manager);
+            new ClientChannel(connection, false, manager, false);
             fail("Channel didn't throw on broken EventBridge");
-        }
-        catch (CayenneRuntimeException e) {
+        } catch (CayenneRuntimeException e) {
             // expected
         }
 
         try {
-            new ClientChannel(connection, false, new DefaultEventManager(2), true);
-        }
-        catch (CayenneRuntimeException e) {
+            DefaultEventManager manager = new DefaultEventManager(2);
+            managers.add(manager);
+            new ClientChannel(connection, false, manager, true);
+        } catch (CayenneRuntimeException e) {
             fail("Channel threw on broken EventBridge");
         }
     }