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/02 16:56:25 UTC
svn commit: r1098612 - in
/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test:
java/org/apache/cayenne/access/JointPrefetchTest.java
resources/dml/access.JointPrefetchTest.xml
Author: aadamchik
Date: Mon May 2 14:56:24 2011
New Revision: 1098612
URL: http://svn.apache.org/viewvc?rev=1098612&view=rev
Log:
CAY-1560 CayenneCase tests conversion
patches by Dzmitry Kazimirchyk:
JointPrefetchTest
Removed:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/dml/access.JointPrefetchTest.xml
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/JointPrefetchTest.java
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/JointPrefetchTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/JointPrefetchTest.java?rev=1098612&r1=1098611&r2=1098612&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/JointPrefetchTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/JointPrefetchTest.java Mon May 2 14:56:24 2011
@@ -33,6 +33,8 @@ import org.apache.cayenne.ObjectId;
import org.apache.cayenne.PersistenceState;
import org.apache.cayenne.Persistent;
import org.apache.cayenne.ValueHolder;
+import org.apache.cayenne.configuration.server.ServerRuntime;
+import org.apache.cayenne.di.Inject;
import org.apache.cayenne.exp.Expression;
import org.apache.cayenne.exp.ExpressionFactory;
import org.apache.cayenne.map.ObjAttribute;
@@ -41,24 +43,79 @@ import org.apache.cayenne.query.Prefetch
import org.apache.cayenne.query.SQLTemplate;
import org.apache.cayenne.query.SelectQuery;
import org.apache.cayenne.query.SortOrder;
+import org.apache.cayenne.test.jdbc.DBHelper;
+import org.apache.cayenne.test.jdbc.TableHelper;
import org.apache.cayenne.testdo.testmap.Artist;
import org.apache.cayenne.testdo.testmap.Gallery;
import org.apache.cayenne.testdo.testmap.Painting;
-import org.apache.cayenne.unit.CayenneCase;
+import org.apache.cayenne.unit.di.DataChannelInterceptor;
+import org.apache.cayenne.unit.di.UnitTestClosure;
+import org.apache.cayenne.unit.di.server.ServerCase;
+import org.apache.cayenne.unit.di.server.UseServerRuntime;
/**
* Tests joint prefetch handling by Cayenne access stack.
*/
-public class JointPrefetchTest extends CayenneCase {
+@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
+public class JointPrefetchTest extends ServerCase {
+ @Inject
+ protected DataContext context;
+
+ @Inject
+ protected ServerRuntime runtime;
+
+ @Inject
+ protected DataChannelInterceptor queryInterceptor;
+
+ @Inject
+ protected DBHelper dbHelper;
+
+ protected TableHelper tArtist;
+ protected TableHelper tGallery;
+ protected TableHelper tPainting;
+
@Override
- protected void setUp() throws Exception {
- super.setUp();
- deleteTestData();
+ protected void setUpAfterInjection() throws Exception {
+ dbHelper.deleteAll("PAINTING");
+ dbHelper.deleteAll("ARTIST");
+ dbHelper.deleteAll("GALLERY");
+
+ tArtist = new TableHelper(dbHelper, "ARTIST");
+ tArtist.setColumns("ARTIST_ID", "ARTIST_NAME");
+
+ tGallery = new TableHelper(dbHelper, "GALLERY");
+ tGallery.setColumns("GALLERY_ID", "GALLERY_NAME");
+
+ tPainting = new TableHelper(dbHelper, "PAINTING");
+ tPainting.setColumns("PAINTING_ID", "PAINTING_TITLE", "ARTIST_ID",
+ "ESTIMATED_PRICE", "GALLERY_ID");
}
-
+
+ protected void createJointPrefetchDataSet1() throws Exception {
+ tGallery.insert(33001, "G1");
+ tGallery.insert(33002, "G2");
+ tArtist.insert(33001, "artist1");
+ tArtist.insert(33002, "artist2");
+ tArtist.insert(33003, "artist3");
+ tPainting.insert(33001, "P_artist11", 33001, 1000, 33001);
+ tPainting.insert(33002, "P_artist12", 33001, 2000, 33001);
+ tPainting.insert(33003, "P_artist21", 33002, 3000, 33002);
+ }
+
+ protected void createJointPrefetchDataSet2() throws Exception {
+ tGallery.insert(33001, "G1");
+ tGallery.insert(33002, "G2");
+ tArtist.insert(33001, "artist1");
+ tArtist.insert(33002, "artist2");
+ tArtist.insert(33003, "artist3");
+ tPainting.insert(33001, "P_artist11", 33001, 1000, 33001);
+ tPainting.insert(33002, "P_artist12", 33001, 2000, 33001);
+ tPainting.insert(33003, "P_artist21", 33002, 3000, 33002);
+ }
+
public void testJointPrefetchDataRows() throws Exception {
- createTestData("testJointPrefetch1");
+ createJointPrefetchDataSet1();
// query with to-many joint prefetches
SelectQuery q = new SelectQuery(Painting.class);
@@ -67,41 +124,38 @@ public class JointPrefetchTest extends C
q.addPrefetch(Painting.TO_ARTIST_PROPERTY).setSemantics(
PrefetchTreeNode.JOINT_PREFETCH_SEMANTICS);
- DataContext context = createDataContext();
+ final List<?> rows = context.performQuery(q);
- List rows = context.performQuery(q);
-
- blockQueries();
-
- try {
- assertEquals(3, rows.size());
+ queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() {
+
+ public void execute() {
+ assertEquals(3, rows.size());
+
+ // row should contain columns from both entities minus those duplicated in a
+ // join...
+
+ int rowWidth = context.getEntityResolver().getDbEntity("ARTIST").getAttributes().size()
+ + context.getEntityResolver().getDbEntity("PAINTING").getAttributes().size();
+ Iterator<?> it = rows.iterator();
+ while (it.hasNext()) {
+ DataRow row = (DataRow) it.next();
+ assertEquals("" + row, rowWidth, row.size());
- // row should contain columns from both entities minus those duplicated in a
- // join...
- int rowWidth = getDbEntity("ARTIST").getAttributes().size()
- + getDbEntity("PAINTING").getAttributes().size();
- Iterator it = rows.iterator();
- while (it.hasNext()) {
- DataRow row = (DataRow) it.next();
- assertEquals("" + row, rowWidth, row.size());
-
- // assert columns presence
- assertTrue(row + "", row.containsKey("PAINTING_ID"));
- assertTrue(row + "", row.containsKey("ARTIST_ID"));
- assertTrue(row + "", row.containsKey("GALLERY_ID"));
- assertTrue(row + "", row.containsKey("PAINTING_TITLE"));
- assertTrue(row + "", row.containsKey("ESTIMATED_PRICE"));
- assertTrue(row + "", row.containsKey("toArtist.ARTIST_NAME"));
- assertTrue(row + "", row.containsKey("toArtist.DATE_OF_BIRTH"));
+ // assert columns presence
+ assertTrue(row + "", row.containsKey("PAINTING_ID"));
+ assertTrue(row + "", row.containsKey("ARTIST_ID"));
+ assertTrue(row + "", row.containsKey("GALLERY_ID"));
+ assertTrue(row + "", row.containsKey("PAINTING_TITLE"));
+ assertTrue(row + "", row.containsKey("ESTIMATED_PRICE"));
+ assertTrue(row + "", row.containsKey("toArtist.ARTIST_NAME"));
+ assertTrue(row + "", row.containsKey("toArtist.DATE_OF_BIRTH"));
+ }
}
- }
- finally {
- unblockQueries();
- }
+ });
}
public void testJointPrefetchSQLTemplate() throws Exception {
- createTestData("testJointPrefetch1");
+ createJointPrefetchDataSet1();
// correctly naming columns is the key..
SQLTemplate q = new SQLTemplate(
@@ -124,43 +178,38 @@ public class JointPrefetchTest extends C
prefetch.getSemantics());
q.setFetchingDataRows(false);
- DataContext context = createDataContext();
+ final List<?> objects = context.performQuery(q);
+
+ queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() {
+
+ public void execute() {
+ // without OUTER join we will get fewer objects...
+ assertEquals(2, objects.size());
- List objects = context.performQuery(q);
-
- blockQueries();
-
- try {
-
- // without OUTER join we will get fewer objects...
- assertEquals(2, objects.size());
-
- Iterator it = objects.iterator();
- while (it.hasNext()) {
- Artist a = (Artist) it.next();
- List list = a.getPaintingArray();
-
- assertNotNull(list);
- assertFalse(((ValueHolder) list).isFault());
- assertTrue(list.size() > 0);
-
- Iterator children = list.iterator();
- while (children.hasNext()) {
- Painting p = (Painting) children.next();
- assertEquals(PersistenceState.COMMITTED, p.getPersistenceState());
+ Iterator<?> it = objects.iterator();
+ while (it.hasNext()) {
+ Artist a = (Artist) it.next();
+ List<?> list = a.getPaintingArray();
- // make sure properties are not null..
- assertNotNull(p.getPaintingTitle());
+ assertNotNull(list);
+ assertFalse(((ValueHolder) list).isFault());
+ assertTrue(list.size() > 0);
+
+ Iterator<?> children = list.iterator();
+ while (children.hasNext()) {
+ Painting p = (Painting) children.next();
+ assertEquals(PersistenceState.COMMITTED, p.getPersistenceState());
+
+ // make sure properties are not null..
+ assertNotNull(p.getPaintingTitle());
+ }
}
}
- }
- finally {
- unblockQueries();
- }
+ });
}
public void testJointPrefetchToOne() throws Exception {
- createTestData("testJointPrefetch1");
+ createJointPrefetchDataSet1();
// query with to-many joint prefetches
SelectQuery q = new SelectQuery(Painting.class);
@@ -168,26 +217,22 @@ public class JointPrefetchTest extends C
q.addPrefetch(Painting.TO_ARTIST_PROPERTY).setSemantics(
PrefetchTreeNode.JOINT_PREFETCH_SEMANTICS);
- DataContext context = createDataContext();
-
- List objects = context.performQuery(q);
-
- blockQueries();
-
- try {
- assertEquals(3, objects.size());
+ final List<?> objects = context.performQuery(q);
+
+ queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() {
+
+ public void execute() {
+ assertEquals(3, objects.size());
- Iterator it = objects.iterator();
- while (it.hasNext()) {
- Painting p = (Painting) it.next();
- Artist target = p.getToArtist();
- assertNotNull(target);
- assertEquals(PersistenceState.COMMITTED, target.getPersistenceState());
+ Iterator<?> it = objects.iterator();
+ while (it.hasNext()) {
+ Painting p = (Painting) it.next();
+ Artist target = p.getToArtist();
+ assertNotNull(target);
+ assertEquals(PersistenceState.COMMITTED, target.getPersistenceState());
+ }
}
- }
- finally {
- unblockQueries();
- }
+ });
}
/**
@@ -205,7 +250,6 @@ public class JointPrefetchTest extends C
Painting.class,
"INSERT INTO PAINTING (PAINTING_ID, PAINTING_TITLE, ARTIST_ID, ESTIMATED_PRICE) "
+ "VALUES (33001, 'p1', 33001, 1000)");
- DataContext context = createDataContext();
context.performNonSelectingQuery(artistSQL);
context.performNonSelectingQuery(paintingSQL);
@@ -215,31 +259,29 @@ public class JointPrefetchTest extends C
q.addPrefetch(Painting.TO_ARTIST_PROPERTY).setSemantics(
PrefetchTreeNode.JOINT_PREFETCH_SEMANTICS);
- ObjEntity artistE = getObjEntity("Artist");
+ ObjEntity artistE = context.getEntityResolver().getObjEntity("Artist");
ObjAttribute dateOfBirth = (ObjAttribute) artistE.getAttribute("dateOfBirth");
assertEquals("java.util.Date", dateOfBirth.getType());
dateOfBirth.setType("java.sql.Date");
try {
- List objects = context.performQuery(q);
-
- blockQueries();
-
- try {
- assertEquals(1, objects.size());
-
- Iterator it = objects.iterator();
- while (it.hasNext()) {
- Painting p = (Painting) it.next();
- Artist a = p.getToArtist();
- assertNotNull(a);
- assertNotNull(a.getDateOfBirth());
- assertTrue(a.getDateOfBirth().getClass().getName(), Date.class
- .isAssignableFrom(a.getDateOfBirth().getClass()));
+ final List<?> objects = context.performQuery(q);
+
+ queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() {
+
+ public void execute() {
+ assertEquals(1, objects.size());
+
+ Iterator<?> it = objects.iterator();
+ while (it.hasNext()) {
+ Painting p = (Painting) it.next();
+ Artist a = p.getToArtist();
+ assertNotNull(a);
+ assertNotNull(a.getDateOfBirth());
+ assertTrue(a.getDateOfBirth().getClass().getName(), Date.class
+ .isAssignableFrom(a.getDateOfBirth().getClass()));
+ }
}
- }
- finally {
- unblockQueries();
- }
+ });
}
finally {
dateOfBirth.setType("java.util.Date");
@@ -247,45 +289,42 @@ public class JointPrefetchTest extends C
}
public void testJointPrefetchToMany() throws Exception {
- createTestData("testJointPrefetch1");
+ createJointPrefetchDataSet1();
// query with to-many joint prefetches
SelectQuery q = new SelectQuery(Artist.class);
q.addPrefetch(Artist.PAINTING_ARRAY_PROPERTY).setSemantics(
PrefetchTreeNode.JOINT_PREFETCH_SEMANTICS);
- DataContext context = createDataContext();
-
- List objects = context.performQuery(q);
+ final List<?> objects = context.performQuery(q);
- blockQueries();
- try {
- assertEquals(3, objects.size());
+ queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() {
+
+ public void execute() {
+ assertEquals(3, objects.size());
- Iterator it = objects.iterator();
- while (it.hasNext()) {
- Artist a = (Artist) it.next();
- List list = a.getPaintingArray();
+ Iterator<?> it = objects.iterator();
+ while (it.hasNext()) {
+ Artist a = (Artist) it.next();
+ List<?> list = a.getPaintingArray();
- assertNotNull(list);
- assertFalse(((ValueHolder) list).isFault());
+ assertNotNull(list);
+ assertFalse(((ValueHolder) list).isFault());
- Iterator children = list.iterator();
- while (children.hasNext()) {
- Painting p = (Painting) children.next();
- assertEquals(PersistenceState.COMMITTED, p.getPersistenceState());
- // make sure properties are not null..
- assertNotNull(p.getPaintingTitle());
+ Iterator<?> children = list.iterator();
+ while (children.hasNext()) {
+ Painting p = (Painting) children.next();
+ assertEquals(PersistenceState.COMMITTED, p.getPersistenceState());
+ // make sure properties are not null..
+ assertNotNull(p.getPaintingTitle());
+ }
}
}
- }
- finally {
- unblockQueries();
- }
+ });
}
public void testJointPrefetchToManyNonConflictingQualifier() throws Exception {
- createTestData("testJointPrefetch1");
+ createJointPrefetchDataSet1();
// query with to-many joint prefetches and qualifier that doesn't match
// prefetch....
@@ -296,42 +335,37 @@ public class JointPrefetchTest extends C
q.addPrefetch(Artist.PAINTING_ARRAY_PROPERTY).setSemantics(
PrefetchTreeNode.JOINT_PREFETCH_SEMANTICS);
- DataContext context = createDataContext();
-
- List objects = context.performQuery(q);
-
- blockQueries();
+ final List<?> objects = context.performQuery(q);
+
+ queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() {
+
+ public void execute() {
+ assertEquals(1, objects.size());
- try {
+ Artist a = (Artist) objects.get(0);
+ List<?> list = a.getPaintingArray();
- assertEquals(1, objects.size());
+ assertNotNull(list);
+ assertFalse(((ValueHolder) list).isFault());
+ assertEquals(2, list.size());
- Artist a = (Artist) objects.get(0);
- List list = a.getPaintingArray();
+ Iterator<?> children = list.iterator();
+ while (children.hasNext()) {
+ Painting p = (Painting) children.next();
+ assertEquals(PersistenceState.COMMITTED, p.getPersistenceState());
+ // make sure properties are not null..
+ assertNotNull(p.getPaintingTitle());
+ }
- assertNotNull(list);
- assertFalse(((ValueHolder) list).isFault());
- assertEquals(2, list.size());
-
- Iterator children = list.iterator();
- while (children.hasNext()) {
- Painting p = (Painting) children.next();
- assertEquals(PersistenceState.COMMITTED, p.getPersistenceState());
- // make sure properties are not null..
- assertNotNull(p.getPaintingTitle());
+ // assert no duplicates
+ Set s = new HashSet(list);
+ assertEquals(s.size(), list.size());
}
-
- // assert no duplicates
- Set s = new HashSet(list);
- assertEquals(s.size(), list.size());
- }
- finally {
- unblockQueries();
- }
+ });
}
public void testJointPrefetchMultiStep() throws Exception {
- createTestData("testJointPrefetch2");
+ createJointPrefetchDataSet2();
// query with to-many joint prefetches
SelectQuery q = new SelectQuery(Artist.class);
@@ -342,7 +376,7 @@ public class JointPrefetchTest extends C
+ Painting.TO_GALLERY_PROPERTY)
.setSemantics(PrefetchTreeNode.JOINT_PREFETCH_SEMANTICS);
- DataContext context = createDataContext();
+ final DataContext context = this.context;
// make sure phantomly prefetched objects are not deallocated
context.getObjectStore().objectMap = new HashMap<Object, Persistent>();
@@ -352,36 +386,34 @@ public class JointPrefetchTest extends C
new ObjectId("Gallery", Gallery.GALLERY_ID_PK_COLUMN, 33001));
assertNull(g1);
- List objects = context.performQuery(q);
-
- blockQueries();
- try {
+ final List<?> objects = context.performQuery(q);
+
+ queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() {
+
+ public void execute() {
+ assertEquals(3, objects.size());
- assertEquals(3, objects.size());
+ Iterator<?> it = objects.iterator();
+ while (it.hasNext()) {
+ Artist a = (Artist) it.next();
+ ValueHolder list = (ValueHolder) a.getPaintingArray();
- Iterator it = objects.iterator();
- while (it.hasNext()) {
- Artist a = (Artist) it.next();
- ValueHolder list = (ValueHolder) a.getPaintingArray();
+ assertNotNull(list);
- assertNotNull(list);
+ // intermediate relationship is not fetched...
+ assertTrue(list.isFault());
+ }
- // intermediate relationship is not fetched...
- assertTrue(list.isFault());
+ // however both galleries must be in memory...
+ DataObject g1 = (DataObject) context.getGraphManager().getNode(
+ new ObjectId("Gallery", Gallery.GALLERY_ID_PK_COLUMN, 33001));
+ assertNotNull(g1);
+ assertEquals(PersistenceState.COMMITTED, g1.getPersistenceState());
+ DataObject g2 = (DataObject) context.getGraphManager().getNode(
+ new ObjectId("Gallery", Gallery.GALLERY_ID_PK_COLUMN, 33002));
+ assertNotNull(g2);
+ assertEquals(PersistenceState.COMMITTED, g2.getPersistenceState());
}
-
- // however both galleries must be in memory...
- g1 = (DataObject) context.getGraphManager().getNode(
- new ObjectId("Gallery", Gallery.GALLERY_ID_PK_COLUMN, 33001));
- assertNotNull(g1);
- assertEquals(PersistenceState.COMMITTED, g1.getPersistenceState());
- DataObject g2 = (DataObject) context.getGraphManager().getNode(
- new ObjectId("Gallery", Gallery.GALLERY_ID_PK_COLUMN, 33002));
- assertNotNull(g2);
- assertEquals(PersistenceState.COMMITTED, g2.getPersistenceState());
- }
- finally {
- unblockQueries();
- }
+ });
}
}