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 2011/05/22 21:13:02 UTC
svn commit: r1126179 - in
/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test:
java/org/apache/cayenne/access/ java/org/apache/cayenne/unit/
java/org/apache/cayenne/unit/di/server/ resources/
Author: aadamchik
Date: Sun May 22 19:13:02 2011
New Revision: 1126179
URL: http://svn.apache.org/viewvc?rev=1126179&view=rev
Log:
unit test refactoring
porting multi -node case to di
changing DataSource mapping strategy
Added:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataSourceFactory.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseSharedDataSourceProvider.java
- copied, changed from r1126136, cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/CayenneResourcesDataSourceProvider.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/cayenne-multinode.xml
Removed:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/CayenneCase.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/MultiNodeCase.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/CayenneResourcesDataSourceProvider.java
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextCrossDBTest.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/CayenneResources.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/ServerCaseDataDomainProvider.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseModule.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerRuntimeProvider.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/cayenne-default.xml
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextCrossDBTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextCrossDBTest.java?rev=1126179&r1=1126178&r2=1126179&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextCrossDBTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextCrossDBTest.java Sun May 22 19:13:02 2011
@@ -19,26 +19,24 @@
package org.apache.cayenne.access;
+import org.apache.cayenne.di.Inject;
import org.apache.cayenne.testdo.db1.CrossdbM1E1;
import org.apache.cayenne.testdo.db2.CrossdbM2E1;
import org.apache.cayenne.testdo.db2.CrossdbM2E2;
-import org.apache.cayenne.unit.MultiNodeCase;
+import org.apache.cayenne.unit.di.server.ServerCase;
+import org.apache.cayenne.unit.di.server.UseServerRuntime;
-public class DataContextCrossDBTest extends MultiNodeCase {
+@UseServerRuntime(ServerCase.MULTINODE_PROJECT)
+public class DataContextCrossDBTest extends ServerCase {
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- deleteTestData();
- }
+ @Inject
+ private DataContext context;
public void testMultiDBUpdate() {
// for now testing that no exceptions are thrown... wouldn't hurt to check the
// data as well???
- DataContext context = createDataContext();
-
// insert
CrossdbM1E1 o1 = context.newObject(CrossdbM1E1.class);
o1.setName("o1");
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/CayenneResources.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/CayenneResources.java?rev=1126179&r1=1126178&r2=1126179&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/CayenneResources.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/CayenneResources.java Sun May 22 19:13:02 2011
@@ -191,8 +191,7 @@ public class CayenneResources implements
* Returns DB-specific testing adapter.
*/
public AccessStackAdapter getAccessStackAdapter(String adapterClassName) {
- AccessStackAdapter stackAdapter = (AccessStackAdapter) adapterMap
- .get(adapterClassName);
+ AccessStackAdapter stackAdapter = adapterMap.get(adapterClassName);
if (stackAdapter == null) {
throw new RuntimeException("No AccessStackAdapter for DbAdapter class: "
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=1126179&r1=1126178&r2=1126179&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 Sun May 22 19:13:02 2011
@@ -37,6 +37,7 @@ public class ServerCase extends DICase {
public static final String RELATIONSHIPS_PROJECT = "cayenne-relationships.xml";
public static final String TESTMAP_PROJECT = "cayenne-testmap.xml";
public static final String DEFAULT_PROJECT = "cayenne-default.xml";
+ public static final String MULTINODE_PROJECT = "cayenne-multinode.xml";
private static final Injector injector;
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataDomainProvider.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataDomainProvider.java?rev=1126179&r1=1126178&r2=1126179&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataDomainProvider.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataDomainProvider.java Sun May 22 19:13:02 2011
@@ -18,8 +18,6 @@
****************************************************************/
package org.apache.cayenne.unit.di.server;
-import javax.sql.DataSource;
-
import org.apache.cayenne.access.DataDomain;
import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.access.UnitTestDomain;
@@ -32,10 +30,10 @@ import org.apache.cayenne.map.DataMap;
class ServerCaseDataDomainProvider extends DataDomainProvider {
@Inject
- protected DataSource dataSource;
+ private ServerCaseDataSourceFactory dataSourceFactory;
@Inject
- protected DbAdapter adapter;
+ private DbAdapter adapter;
@Override
protected DataDomain createDataDomain(String name) {
@@ -47,12 +45,13 @@ class ServerCaseDataDomainProvider exten
DataDomain domain = super.createAndInitDataDomain();
- // add nodes dynamically
- // TODO: andrus, 06/14/2010 should probably map them in XML to avoid this mess...
+ // add nodes and DataSources dynamically...
for (DataMap dataMap : domain.getDataMaps()) {
DataNode node = new DataNode(dataMap.getName());
- node.setDataSource(dataSource);
+
+ // shared or dedicated DataSources can be mapped per DataMap
+ node.setDataSource(dataSourceFactory.getDataSource(dataMap.getName()));
node.setAdapter(adapter);
node.addDataMap(dataMap);
node.setSchemaUpdateStrategy(new SkipSchemaUpdateStrategy());
@@ -70,15 +69,6 @@ class ServerCaseDataDomainProvider exten
// getAdapter(node).tweakProcedure(proc);
// }
- // use shared data source in all cases but the multi-node...
- // if (MultiNodeCase.NODE1.equals(node.getName())
- // || MultiNodeCase.NODE2.equals(node.getName())) {
- // node.setDataSource(resources.createDataSource());
- // }
- // else {
- // node.setDataSource(resources.getDataSource());
- // }
-
domain.addNode(node);
}
Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataSourceFactory.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataSourceFactory.java?rev=1126179&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataSourceFactory.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataSourceFactory.java Sun May 22 19:13:02 2011
@@ -0,0 +1,99 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
+package org.apache.cayenne.unit.di.server;
+
+import java.sql.SQLException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import javax.sql.DataSource;
+
+import org.apache.cayenne.conn.DataSourceInfo;
+import org.apache.cayenne.conn.PoolDataSource;
+import org.apache.cayenne.conn.PoolManager;
+
+public class ServerCaseDataSourceFactory {
+
+ private DataSource sharedDataSource;
+ private DataSourceInfo dataSourceInfo;
+ private Map<String, DataSource> dataSources;
+ private Set<String> mapsWithDedicatedDataSource;
+
+ ServerCaseDataSourceFactory(DataSourceInfo dataSourceInfo,
+ String... mapsWithDedicatedDataSource) {
+
+ if (mapsWithDedicatedDataSource == null) {
+ mapsWithDedicatedDataSource = new String[0];
+ }
+
+ this.dataSourceInfo = dataSourceInfo;
+ this.dataSources = new HashMap<String, DataSource>();
+ this.mapsWithDedicatedDataSource = new HashSet<String>(Arrays
+ .asList(mapsWithDedicatedDataSource));
+
+ this.sharedDataSource = createDataSource();
+ }
+
+ public DataSource getSharedDataSource() {
+ return sharedDataSource;
+ }
+
+ public DataSource getDataSource(String dataMapName) {
+ DataSource ds = dataSources.get(dataMapName);
+ if (ds == null) {
+
+ ds = mapsWithDedicatedDataSource.contains(dataMapName)
+ ? createDataSource()
+ : sharedDataSource;
+
+ dataSources.put(dataMapName, ds);
+ }
+
+ return ds;
+ }
+
+ private DataSource createDataSource() {
+ try {
+ PoolDataSource poolDS = new PoolDataSource(
+ dataSourceInfo.getJdbcDriver(),
+ dataSourceInfo.getDataSourceUrl());
+ return new PoolManager(
+ poolDS,
+ 1,
+ 1,
+ dataSourceInfo.getUserName(),
+ dataSourceInfo.getPassword()) {
+
+ @Override
+ public void shutdown() throws SQLException {
+ // noop - make sure we are not shutdown by the test scope, but at the
+ // same time PoolManager methods are exposed (so we can't wrap
+ // PoolManager)
+ }
+ };
+ }
+ catch (Exception ex) {
+ throw new RuntimeException("Can not create shared data source.", ex);
+ }
+ }
+
+}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseModule.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseModule.java?rev=1126179&r1=1126178&r2=1126179&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseModule.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseModule.java Sun May 22 19:13:02 2011
@@ -52,6 +52,11 @@ public class ServerCaseModule implements
public void configure(Binder binder) {
+ ServerCaseDataSourceFactory dataSourceFactory = new ServerCaseDataSourceFactory(
+ resources.getConnectionInfo(),
+ "map-db1",
+ "map-db2");
+
// these are the objects injectable in unit tests that subclass from
// ServerCase. Note that ServerRuntimeProvider creates ServerRuntime
// instances complete with their own DI injectors, independent from the
@@ -66,7 +71,7 @@ public class ServerCaseModule implements
binder.bind(DataSourceInfo.class).toInstance(resources.getConnectionInfo());
binder.bind(DataSource.class).toProviderInstance(
- new CayenneResourcesDataSourceProvider(resources));
+ new ServerCaseSharedDataSourceProvider(dataSourceFactory));
binder.bind(DbAdapter.class).toProviderInstance(
new CayenneResourcesDbAdapterProvider(resources));
binder.bind(AccessStackAdapter.class).toProviderInstance(
@@ -86,7 +91,7 @@ public class ServerCaseModule implements
binder.bind(ServerCaseProperties.class).to(ServerCaseProperties.class).in(
testScope);
binder.bind(ServerRuntime.class).toProviderInstance(
- new ServerRuntimeProvider(resources)).in(testScope);
+ new ServerRuntimeProvider(resources, dataSourceFactory)).in(testScope);
binder
.bind(ObjectContext.class)
.toProvider(ServerCaseObjectContextProvider.class)
Copied: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseSharedDataSourceProvider.java (from r1126136, cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/CayenneResourcesDataSourceProvider.java)
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseSharedDataSourceProvider.java?p2=cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseSharedDataSourceProvider.java&p1=cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/CayenneResourcesDataSourceProvider.java&r1=1126136&r2=1126179&rev=1126179&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/CayenneResourcesDataSourceProvider.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseSharedDataSourceProvider.java Sun May 22 19:13:02 2011
@@ -22,18 +22,17 @@ import javax.sql.DataSource;
import org.apache.cayenne.ConfigurationException;
import org.apache.cayenne.di.Provider;
-import org.apache.cayenne.unit.CayenneResources;
-public class CayenneResourcesDataSourceProvider implements Provider<DataSource> {
+public class ServerCaseSharedDataSourceProvider implements Provider<DataSource> {
- protected CayenneResources resources;
+ protected ServerCaseDataSourceFactory dataSourceFactory;
- public CayenneResourcesDataSourceProvider(CayenneResources resources) {
- this.resources = resources;
+ public ServerCaseSharedDataSourceProvider(
+ ServerCaseDataSourceFactory dataSourceFactory) {
+ this.dataSourceFactory = dataSourceFactory;
}
public DataSource get() throws ConfigurationException {
- return resources.getDataSource();
+ return dataSourceFactory.getSharedDataSource();
}
-
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerRuntimeProvider.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?rev=1126179&r1=1126178&r2=1126179&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerRuntimeProvider.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerRuntimeProvider.java Sun May 22 19:13:02 2011
@@ -18,8 +18,6 @@
****************************************************************/
package org.apache.cayenne.unit.di.server;
-import javax.sql.DataSource;
-
import org.apache.cayenne.ConfigurationException;
import org.apache.cayenne.access.DataDomain;
import org.apache.cayenne.configuration.server.ServerRuntime;
@@ -35,10 +33,13 @@ public class ServerRuntimeProvider imple
@Inject
protected ServerCaseProperties properties;
- protected CayenneResources resources;
+ private CayenneResources resources;
+ private ServerCaseDataSourceFactory dataSourceFactory;
- public ServerRuntimeProvider(CayenneResources resources) {
+ public ServerRuntimeProvider(CayenneResources resources,
+ ServerCaseDataSourceFactory dataSourceFactory) {
this.resources = resources;
+ this.dataSourceFactory = dataSourceFactory;
}
public ServerRuntime get() throws ConfigurationException {
@@ -62,8 +63,9 @@ public class ServerRuntimeProvider imple
binder.bind(DbAdapter.class).toProviderInstance(
new CayenneResourcesDbAdapterProvider(resources));
binder.bind(DataDomain.class).toProvider(ServerCaseDataDomainProvider.class);
- binder.bind(DataSource.class).toProviderInstance(
- new CayenneResourcesDataSourceProvider(resources));
+
+ // map DataSources for all test DataNode names
+ binder.bind(ServerCaseDataSourceFactory.class).toInstance(dataSourceFactory);
}
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/cayenne-default.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/cayenne-default.xml?rev=1126179&r1=1126178&r2=1126179&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/cayenne-default.xml (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/cayenne-default.xml Sun May 22 19:13:02 2011
@@ -2,8 +2,6 @@
<domain project-version="6">
<map name="embeddable"/>
<map name="generic"/>
- <map name="map-db1"/>
- <map name="map-db2"/>
<map name="qualified"/>
<map name="sus-map"/>
</domain>
Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/cayenne-multinode.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/cayenne-multinode.xml?rev=1126179&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/cayenne-multinode.xml (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/cayenne-multinode.xml Sun May 22 19:13:02 2011
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<domain project-version="6">
+ <map name="map-db1"/>
+ <map name="map-db2"/>
+</domain>
+