You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2010/06/15 14:34:18 UTC
svn commit: r954853 - in
/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src:
main/java/org/apache/cayenne/configuration/
test/java/org/apache/cayenne/access/
test/java/org/apache/cayenne/unit/di/server/
Author: aadamchik
Date: Tue Jun 15 12:34:17 2010
New Revision: 954853
URL: http://svn.apache.org/viewvc?rev=954853&view=rev
Log:
DI-enabled unit tests
* switching to direct runtime injection and correct scoping of ServerRuntime within each unit test
instead of caching and cleaning it up. We'll have a much cleaner test setup now
Added:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerRuntimeProvider.java
- copied, changed from r954852, cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/CachingServerRuntimeFactory.java
Removed:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/CachingServerRuntimeFactory.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerRuntimeFactory.java
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/CayenneRuntime.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLDeleteTest.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/FlavoredDBHelperProvider.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCase.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataChannelQueryBlocker.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataContextProvider.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataNodeProvider.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseLifecycleManager.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseSelfTest.java
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/CayenneRuntime.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/CayenneRuntime.java?rev=954853&r1=954852&r2=954853&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/CayenneRuntime.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/CayenneRuntime.java Tue Jun 15 12:34:17 2010
@@ -22,6 +22,7 @@ import java.util.Collection;
import org.apache.cayenne.DataChannel;
import org.apache.cayenne.ObjectContext;
+import org.apache.cayenne.di.BeforeScopeEnd;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
import org.apache.cayenne.di.Module;
@@ -125,6 +126,9 @@ public abstract class CayenneRuntime {
* Shuts down the DI injector of this runtime, giving all services that need to
* release some resources a chance to do that.
*/
+ // the following annotation is for environments that manage CayenneRuntimes within
+ // another DI registry (e.g. unit tests)
+ @BeforeScopeEnd
public void shutdown() {
injector.shutdown();
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLDeleteTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLDeleteTest.java?rev=954853&r1=954852&r2=954853&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLDeleteTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLDeleteTest.java Tue Jun 15 12:34:17 2010
@@ -23,13 +23,13 @@ import java.util.List;
import org.apache.cayenne.Cayenne;
import org.apache.cayenne.ObjectContext;
import org.apache.cayenne.QueryResponse;
+import org.apache.cayenne.configuration.server.ServerRuntime;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.query.EJBQLQuery;
import org.apache.cayenne.test.jdbc.DBHelper;
import org.apache.cayenne.test.jdbc.TableHelper;
import org.apache.cayenne.testdo.testmap.Painting;
import org.apache.cayenne.unit.di.server.ServerCase;
-import org.apache.cayenne.unit.di.server.ServerRuntimeFactory;
import org.apache.cayenne.unit.di.server.UseServerRuntime;
@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
@@ -42,7 +42,7 @@ public class DataContextEJBQLDeleteTest
protected DBHelper dbHelper;
@Inject
- protected ServerRuntimeFactory runtimeFactory;
+ protected ServerRuntime runtime;
protected TableHelper tPainting;
@@ -119,7 +119,7 @@ public class DataContextEJBQLDeleteTest
assertEquals(1, count.length);
assertEquals(1, count[0]);
- ObjectContext freshContext = runtimeFactory.get(TESTMAP_PROJECT).getContext();
+ ObjectContext freshContext = runtime.getContext();
assertNotNull(Cayenne.objectForPK(freshContext, Painting.class, 33001));
assertNull(Cayenne.objectForPK(freshContext, Painting.class, 33002));
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/FlavoredDBHelperProvider.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/FlavoredDBHelperProvider.java?rev=954853&r1=954852&r2=954853&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/FlavoredDBHelperProvider.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/FlavoredDBHelperProvider.java Tue Jun 15 12:34:17 2010
@@ -22,6 +22,7 @@ import javax.sql.DataSource;
import org.apache.cayenne.ConfigurationException;
import org.apache.cayenne.DataChannel;
+import org.apache.cayenne.configuration.server.ServerRuntime;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.di.Provider;
@@ -34,19 +35,15 @@ public class FlavoredDBHelperProvider im
protected DataSource dataSource;
@Inject
- protected ServerRuntimeFactory runtimeFactory;
+ // injecting provider to make this provider independent from scoping of ServerRuntime
+ protected Provider<ServerRuntime> serverRuntimeProvider;
@Inject
protected DbAdapter adapter;
- @Inject
- protected ServerCaseProperties properties;
-
public DBHelper get() throws ConfigurationException {
-
- DataChannel channel = runtimeFactory
- .get(properties.getConfigurationLocation())
- .getChannel();
+
+ DataChannel channel = serverRuntimeProvider.get().getChannel();
DataMap firstMap = channel.getEntityResolver().getDataMaps().iterator().next();
return new FlavoredDBHelper(dataSource, adapter.getQuotingStrategy(firstMap
.isQuotingSQLIdentifiers()));
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCase.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCase.java?rev=954853&r1=954852&r2=954853&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCase.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCase.java Tue Jun 15 12:34:17 2010
@@ -22,6 +22,7 @@ import javax.sql.DataSource;
import org.apache.cayenne.ObjectContext;
import org.apache.cayenne.access.DataNode;
+import org.apache.cayenne.configuration.server.ServerRuntime;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.di.Binder;
import org.apache.cayenne.di.DIBootstrap;
@@ -65,8 +66,7 @@ public class ServerCase extends DICase {
// singleton objects
binder.bind(UnitTestLifecycleManager.class).toInstance(
new ServerCaseLifecycleManager(testScope));
- binder.bind(ServerRuntimeFactory.class).toInstance(
- new CachingServerRuntimeFactory(resources, testScope));
+
binder.bind(DataSource.class).toProviderInstance(
new CayenneResourcesDataSourceProvider(resources));
binder.bind(DbAdapter.class).toProviderInstance(
@@ -82,6 +82,8 @@ public class ServerCase extends DICase {
.bind(ServerCaseProperties.class)
.to(ServerCaseProperties.class)
.in(testScope);
+ binder.bind(ServerRuntime.class).toProviderInstance(
+ new ServerRuntimeProvider(resources)).in(testScope);
binder.bind(ObjectContext.class).toProvider(
ServerCaseDataContextProvider.class).in(testScope);
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataChannelQueryBlocker.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataChannelQueryBlocker.java?rev=954853&r1=954852&r2=954853&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataChannelQueryBlocker.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataChannelQueryBlocker.java Tue Jun 15 12:34:17 2010
@@ -19,21 +19,22 @@
package org.apache.cayenne.unit.di.server;
import org.apache.cayenne.access.UnitTestDomain;
+import org.apache.cayenne.configuration.server.ServerRuntime;
import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.di.Provider;
import org.apache.cayenne.unit.di.UnitTestClosure;
public class ServerCaseDataChannelQueryBlocker implements DataChannelQueryBlocker {
@Inject
- protected ServerRuntimeFactory runtimeFactory;
-
- @Inject
- protected ServerCaseProperties properties;
+ // injecting provider to make this provider independent from scoping of ServerRuntime
+ protected Provider<ServerRuntime> serverRuntimeProvider;
public void runWithQueriesBlocked(UnitTestClosure closure) {
- UnitTestDomain channel = (UnitTestDomain) runtimeFactory.get(
- properties.getConfigurationLocation()).getChannel();
+ UnitTestDomain channel = (UnitTestDomain) serverRuntimeProvider
+ .get()
+ .getChannel();
channel.setBlockingQueries(true);
try {
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataContextProvider.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataContextProvider.java?rev=954853&r1=954852&r2=954853&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataContextProvider.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataContextProvider.java Tue Jun 15 12:34:17 2010
@@ -20,18 +20,17 @@ package org.apache.cayenne.unit.di.serve
import org.apache.cayenne.ConfigurationException;
import org.apache.cayenne.ObjectContext;
+import org.apache.cayenne.configuration.server.ServerRuntime;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.di.Provider;
public class ServerCaseDataContextProvider implements Provider<ObjectContext> {
@Inject
- protected ServerRuntimeFactory runtimeFactory;
-
- @Inject
- protected ServerCaseProperties properties;
+ // injecting provider to make this provider independent from scoping of ServerRuntime
+ protected Provider<ServerRuntime> serverRuntimeProvider;
public ObjectContext get() throws ConfigurationException {
- return runtimeFactory.get(properties.getConfigurationLocation()).getContext();
+ return serverRuntimeProvider.get().getContext();
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataNodeProvider.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataNodeProvider.java?rev=954853&r1=954852&r2=954853&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataNodeProvider.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataNodeProvider.java Tue Jun 15 12:34:17 2010
@@ -21,20 +21,18 @@ package org.apache.cayenne.unit.di.serve
import org.apache.cayenne.ConfigurationException;
import org.apache.cayenne.access.DataDomain;
import org.apache.cayenne.access.DataNode;
+import org.apache.cayenne.configuration.server.ServerRuntime;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.di.Provider;
public class ServerCaseDataNodeProvider implements Provider<DataNode> {
@Inject
- protected ServerRuntimeFactory runtimeFactory;
-
- @Inject
- protected ServerCaseProperties properties;
+ // injecting provider to make this provider independent from scoping of ServerRuntime
+ protected Provider<ServerRuntime> serverRuntimeProvider;
public DataNode get() throws ConfigurationException {
- DataDomain channel = (DataDomain) runtimeFactory.get(
- properties.getConfigurationLocation()).getChannel();
+ DataDomain channel = (DataDomain) serverRuntimeProvider.get().getChannel();
return channel.getDataNodes().iterator().next();
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseLifecycleManager.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseLifecycleManager.java?rev=954853&r1=954852&r2=954853&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseLifecycleManager.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseLifecycleManager.java Tue Jun 15 12:34:17 2010
@@ -20,7 +20,6 @@ package org.apache.cayenne.unit.di.serve
import junit.framework.TestCase;
-import org.apache.cayenne.access.DataDomain;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.di.Provider;
import org.apache.cayenne.di.spi.DefaultScope;
@@ -31,9 +30,6 @@ public class ServerCaseLifecycleManager
@Inject
protected Provider<ServerCaseProperties> propertiesProvider;
- @Inject
- protected ServerRuntimeFactory runtimeFactory;
-
public ServerCaseLifecycleManager(DefaultScope scope) {
super(scope);
}
@@ -48,15 +44,6 @@ public class ServerCaseLifecycleManager
String location = runtimeName != null ? runtimeName.value() : null;
propertiesProvider.get().setConfigurationLocation(location);
- // clear shared caches
- if (location != null) {
- DataDomain channel = (DataDomain) runtimeFactory.get(location).getChannel();
- channel.getEventManager().removeAllListeners(
- channel.getSharedSnapshotCache().getSnapshotEventSubject());
- channel.getSharedSnapshotCache().clear();
- channel.getQueryCache().clear();
- }
-
super.setUp(testCase);
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseSelfTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseSelfTest.java?rev=954853&r1=954852&r2=954853&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseSelfTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseSelfTest.java Tue Jun 15 12:34:17 2010
@@ -18,13 +18,18 @@
****************************************************************/
package org.apache.cayenne.unit.di.server;
+import org.apache.cayenne.configuration.server.ServerRuntime;
import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.di.Provider;
@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
public class ServerCaseSelfTest extends ServerCase {
@Inject
- protected ServerRuntimeFactory runtimeFactory;
+ protected ServerRuntime runtime;
+
+ @Inject
+ protected Provider<ServerRuntime> runtimeProvider;
@Inject
protected ServerCaseProperties properties;
@@ -34,13 +39,14 @@ public class ServerCaseSelfTest extends
assertNotNull(properties);
assertEquals(ServerCase.TESTMAP_PROJECT, properties.getConfigurationLocation());
- ServerRuntimeFactory localFactory = this.runtimeFactory;
- assertNotNull(localFactory);
+ ServerRuntime local = this.runtime;
+ assertNotNull(local);
+ assertSame(local, runtimeProvider.get());
tearDown();
setUp();
- assertSame(localFactory, this.runtimeFactory);
+ assertNotSame(local, this.runtime);
}
}
Copied: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerRuntimeProvider.java (from r954852, cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/CachingServerRuntimeFactory.java)
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerRuntimeProvider.java?p2=cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerRuntimeProvider.java&p1=cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/CachingServerRuntimeFactory.java&r1=954852&r2=954853&rev=954853&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/CachingServerRuntimeFactory.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerRuntimeProvider.java Tue Jun 15 12:34:17 2010
@@ -18,48 +18,37 @@
****************************************************************/
package org.apache.cayenne.unit.di.server;
-import java.util.HashMap;
-import java.util.Map;
-
import javax.sql.DataSource;
+import org.apache.cayenne.ConfigurationException;
import org.apache.cayenne.access.DataDomain;
import org.apache.cayenne.configuration.server.ServerRuntime;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.di.Binder;
+import org.apache.cayenne.di.Inject;
import org.apache.cayenne.di.Module;
-import org.apache.cayenne.di.spi.DefaultScope;
+import org.apache.cayenne.di.Provider;
import org.apache.cayenne.unit.CayenneResources;
-public class CachingServerRuntimeFactory implements ServerRuntimeFactory {
+public class ServerRuntimeProvider implements Provider<ServerRuntime> {
+
+ @Inject
+ protected ServerCaseProperties properties;
protected CayenneResources resources;
- protected DefaultScope testScope;
- protected Map<String, ServerRuntime> cache;
- public CachingServerRuntimeFactory(CayenneResources resources, DefaultScope testScope) {
+ public ServerRuntimeProvider(CayenneResources resources) {
this.resources = resources;
- this.testScope = testScope;
- this.cache = new HashMap<String, ServerRuntime>();
}
- public ServerRuntime get(String configurationLocation) {
+ public ServerRuntime get() throws ConfigurationException {
+ String configurationLocation = properties.getConfigurationLocation();
if (configurationLocation == null) {
- throw new NullPointerException("Null 'configurationLocation'");
+ throw new NullPointerException(
+ "Null 'configurationLocation', method is called out of scope");
}
- ServerRuntime runtime = cache.get(configurationLocation);
-
- if (runtime == null) {
- runtime = create(configurationLocation);
- cache.put(configurationLocation, runtime);
- }
-
- return runtime;
- }
-
- protected ServerRuntime create(String configurationLocation) {
return new ServerRuntime(configurationLocation, new ServerExtraModule());
}