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>
+