You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jdo-commits@db.apache.org by cl...@apache.org on 2006/03/09 01:56:45 UTC
svn commit: r384391 - in /db/jdo/trunk/tck20/src: conf/
java/org/apache/jdo/tck/api/persistencemanager/detach/
java/org/apache/jdo/tck/pc/shoppingcart/
Author: clr
Date: Wed Mar 8 16:56:41 2006
New Revision: 384391
URL: http://svn.apache.org/viewcvs?rev=384391&view=rev
Log:
JDO-272 Added tests for detach behavior
Added:
db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachAllOnCommit.java
db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachAttach.java
db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachAttachDirty.java
db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachCopy.java
db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachSerialize.java
Modified:
db/jdo/trunk/tck20/src/conf/configurations.list
db/jdo/trunk/tck20/src/conf/detach.conf
db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachTest.java
db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/SetDetachAllOnCommit.java
db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/pc/shoppingcart/Cart.java
db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/pc/shoppingcart/CartEntry.java
db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/pc/shoppingcart/Product.java
Modified: db/jdo/trunk/tck20/src/conf/configurations.list
URL: http://svn.apache.org/viewcvs/db/jdo/trunk/tck20/src/conf/configurations.list?rev=384391&r1=384390&r2=384391&view=diff
==============================================================================
--- db/jdo/trunk/tck20/src/conf/configurations.list (original)
+++ db/jdo/trunk/tck20/src/conf/configurations.list Wed Mar 8 16:56:41 2006
@@ -3,6 +3,7 @@
jdohelper.conf \
pm.conf \
pmf.conf \
+ detach.conf \
enhancement.conf \
extents.conf \
fetchplan.conf \
Modified: db/jdo/trunk/tck20/src/conf/detach.conf
URL: http://svn.apache.org/viewcvs/db/jdo/trunk/tck20/src/conf/detach.conf?rev=384391&r1=384390&r2=384391&view=diff
==============================================================================
--- db/jdo/trunk/tck20/src/conf/detach.conf (original)
+++ db/jdo/trunk/tck20/src/conf/detach.conf Wed Mar 8 16:56:41 2006
@@ -4,6 +4,10 @@
jdo.tck.mapping = 8
jdo.tck.classes = \
org.apache.jdo.tck.api.jdohelper.IsDetached \
- org.apache.jdo.tck.api.persistencemanager.detach.SetDetachAllOnCommit \
- org.apache.jdo.tck.api.persistencemanager.detach.GetDetachAllOnCommit
+ org.apache.jdo.tck.api.persistencemanager.detach.DetachAllOnCommit \
+ org.apache.jdo.tck.api.persistencemanager.detach.DetachAttach \
+ org.apache.jdo.tck.api.persistencemanager.detach.DetachAttachDirty \
+ org.apache.jdo.tck.api.persistencemanager.detach.DetachCopy \
+ org.apache.jdo.tck.api.persistencemanager.detach.DetachSerialize \
+ org.apache.jdo.tck.api.persistencemanager.detach.SetDetachAllOnCommit
jdo.tck.requiredOptions =
Added: db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachAllOnCommit.java
URL: http://svn.apache.org/viewcvs/db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachAllOnCommit.java?rev=384391&view=auto
==============================================================================
--- db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachAllOnCommit.java (added)
+++ db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachAllOnCommit.java Wed Mar 8 16:56:41 2006
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed 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.jdo.tck.api.persistencemanager.detach;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+import java.util.Collection;
+import java.util.HashSet;
+
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+
+import org.apache.jdo.tck.pc.shoppingcart.Cart;
+
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+/**
+ * <B>Title:</B> Test DetachAllOnCommit
+ * <BR>
+ * <B>Keywords:</B> DetachAllOnCommit detach
+ * <BR>
+ * <B>Assertion IDs:</B>
+ * <BR>
+ * <B>Assertion Description: </B>
+With this flag set to true, during beforeCompletion
+all cached instances are prepared
+for detachment according to the fetch plan
+in effect at commit. Loading fields and unload-
+ing fields required by the fetch plan
+is done after calling the userÕs beforeCompletion
+callback. During afterCompletion, before calling
+the userÕs afterCompletion callback, all detachable
+persistent instances in the cache transition
+to detached; non-detachable persistent instances
+transition to transient; and detachable instances can be serialized
+as detached instances. Transient transactional instances
+are unaffected by this flag.
+ */
+public class DetachAllOnCommit extends DetachTest {
+
+ private static final String ASSERTION_FAILED =
+ "Assertion A12.6.8 (DetachAllOnCommit) failed: ";
+
+ /**
+ * The <code>main</code> is called when the class
+ * is directly executed from the command line.
+ * @param args The arguments passed to the program.
+ */
+ public static void main(String[] args) {
+ BatchTestRunner.run(DetachAllOnCommit.class);
+ }
+
+ /** */
+ public void testDetachAllOnCommit() {
+ getPM().currentTransaction().begin();
+ setCartFetchGroups();
+ pm.retrieveAll(cartClosure);
+ pm.setDetachAllOnCommit(true);
+ pm.currentTransaction().commit();
+ checkCartValues(ASSERTION_FAILED +
+ "after commit with DetachAllOnCommit," + NL, cart1);
+ failOnError();
+ }
+
+}
Added: db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachAttach.java
URL: http://svn.apache.org/viewcvs/db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachAttach.java?rev=384391&view=auto
==============================================================================
--- db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachAttach.java (added)
+++ db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachAttach.java Wed Mar 8 16:56:41 2006
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed 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.jdo.tck.api.persistencemanager.detach;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+import java.util.Collection;
+import java.util.HashSet;
+
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+
+import org.apache.jdo.tck.pc.shoppingcart.Cart;
+
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+/**
+ * <B>Title:</B> Test DetachAttach
+ * <BR>
+ * <B>Keywords:</B> makePersistent detach
+ * <BR>
+ * <B>Assertion IDs:</B>
+ * <BR>
+ * <B>Assertion Description: </B>
+For a detached instance, they locate or create a persistent
+instance with the same JDO identity as the detached instance
+ */
+public class DetachAttach extends DetachTest {
+
+ private static final String ASSERTION_FAILED =
+ "Assertion A12.6.8 (DetachAttach) failed: ";
+
+ /**
+ * The <code>main</code> is called when the class
+ * is directly executed from the command line.
+ * @param args The arguments passed to the program.
+ */
+ public static void main(String[] args) {
+ BatchTestRunner.run(DetachAttach.class);
+ }
+
+ /** */
+ public void testAttachClean() {
+ Cart detachedCart = createDetachedInstance(ASSERTION_FAILED);
+ pm.currentTransaction().begin();
+ Cart attachedCart = (Cart)pm.makePersistent(detachedCart);
+ checkCartValues(ASSERTION_FAILED +
+ "after attach," + NL, attachedCart);
+ pm.currentTransaction().commit();
+ failOnError();
+ }
+
+}
Added: db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachAttachDirty.java
URL: http://svn.apache.org/viewcvs/db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachAttachDirty.java?rev=384391&view=auto
==============================================================================
--- db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachAttachDirty.java (added)
+++ db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachAttachDirty.java Wed Mar 8 16:56:41 2006
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed 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.jdo.tck.api.persistencemanager.detach;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+import java.util.Collection;
+import java.util.HashSet;
+
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+
+import org.apache.jdo.tck.pc.shoppingcart.Cart;
+
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+/**
+ * <B>Title:</B> Test DetachAttach
+ * <BR>
+ * <B>Keywords:</B> makePersistent detach dirty
+ * <BR>
+ * <B>Assertion IDs:</B>
+ * <BR>
+ * <B>Assertion Description: </B>
+For a detached instance, they locate or create a persistent
+instance with the same JDO identity as the detached instance,
+and merge the persistent
+state of the detached instance into the persistent instance.
+ */
+public class DetachAttachDirty extends DetachTest {
+
+ private static final String ASSERTION_FAILED =
+ "Assertion A12.6.8 (DetachAttachDirty) failed: ";
+
+ /**
+ * The <code>main</code> is called when the class
+ * is directly executed from the command line.
+ * @param args The arguments passed to the program.
+ */
+ public static void main(String[] args) {
+ BatchTestRunner.run(DetachAttach.class);
+ }
+
+ /** */
+ public void testAttachDirty() {
+ Cart detachedCart = createDetachedInstance(ASSERTION_FAILED);
+ pm.currentTransaction().begin();
+ cartEntry1.setQuantity(500);
+ goldenCartEntry.setQuantity(500);
+ Cart attachedCart = (Cart)pm.makePersistent(detachedCart);
+ checkCartValues(ASSERTION_FAILED +
+ "after attach," + NL, attachedCart, true);
+ pm.currentTransaction().commit();
+ pm.currentTransaction().begin();
+ Cart persistentCart = (Cart)pm.getObjectById(cart1oid);
+ checkCartValues(ASSERTION_FAILED +
+ "after attach, commit, begin, getObjectById," + NL,
+ persistentCart, true);
+ pm.currentTransaction().commit();
+ failOnError();
+ }
+}
Added: db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachCopy.java
URL: http://svn.apache.org/viewcvs/db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachCopy.java?rev=384391&view=auto
==============================================================================
--- db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachCopy.java (added)
+++ db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachCopy.java Wed Mar 8 16:56:41 2006
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed 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.jdo.tck.api.persistencemanager.detach;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+import java.util.Collection;
+import java.util.HashSet;
+
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+
+import org.apache.jdo.tck.pc.shoppingcart.Cart;
+
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+/**
+ * <B>Title:</B> Test DetachCopy
+ * <BR>
+ * <B>Keywords:</B> detachCopy detach
+ * <BR>
+ * <B>Assertion IDs:</B>
+ * <BR>
+ * <B>Assertion Description: </B>
+For each instance in the parameter Collection, a
+corresponding detached copy is returned. Each field in the
+persistent instance is handled based on its type and whether the
+field is contained in the fetch group for the persistence-capable
+class. If there are duplicates in the parameter Collection,
+the corresponding detached copy is used for each such duplicate.
+ */
+public class DetachCopy extends DetachTest {
+
+ private static final String ASSERTION_FAILED =
+ "Assertion A12.6.8 (DetachCopy) failed: ";
+
+ /**
+ * The <code>main</code> is called when the class
+ * is directly executed from the command line.
+ * @param args The arguments passed to the program.
+ */
+ public static void main(String[] args) {
+ BatchTestRunner.run(DetachCopy.class);
+ }
+
+ /** */
+ public void testDetachCopy() {
+ getPM().currentTransaction().begin();
+ setCartFetchGroups();
+ //pm.retrieveAll(cartClosure);
+ Cart cartDetached = (Cart)pm.detachCopy(cart1);
+ checkCartValues(ASSERTION_FAILED +
+ "after detachCopy," + NL, cartDetached);
+ pm.currentTransaction().commit();
+ failOnError();
+ }
+
+ /** */
+ public void testDetachCopyAllCollection() {
+ getPM().currentTransaction().begin();
+ setCartFetchGroups();
+ //pm.retrieveAll(cartClosure);
+ Collection instances = new HashSet();
+ instances.add(cart1);
+ Collection detached = pm.detachCopyAll(instances);
+ Cart cartDetached = (Cart)detached.iterator().next();
+ checkCartValues(ASSERTION_FAILED +
+ "after detachCopyAll(Collection)," + NL, cartDetached);
+ pm.currentTransaction().commit();
+ failOnError();
+ }
+
+ /** */
+ public void testDetachCopyAllArray() {
+ getPM().currentTransaction().begin();
+ setCartFetchGroups();
+ //pm.retrieveAll(cartClosure);
+ Object[] instances = new Object[]{cart1};
+ Object[] detached = pm.detachCopyAll(instances);
+ Cart cartDetached = (Cart)detached[0];
+ checkCartValues(ASSERTION_FAILED +
+ "after detachCopyAll(Object[])," + NL, cartDetached);
+ pm.currentTransaction().commit();
+ failOnError();
+ }
+
+}
Added: db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachSerialize.java
URL: http://svn.apache.org/viewcvs/db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachSerialize.java?rev=384391&view=auto
==============================================================================
--- db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachSerialize.java (added)
+++ db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachSerialize.java Wed Mar 8 16:56:41 2006
@@ -0,0 +1,108 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed 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.jdo.tck.api.persistencemanager.detach;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+
+import org.apache.jdo.tck.pc.shoppingcart.Cart;
+
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+/**
+ * <B>Title:</B> Test DetachSerialize
+ * <BR>
+ * <B>Keywords:</B> serialize detach
+ * <BR>
+ * <B>Assertion IDs:</B>
+ * <BR>
+ * <B>Assertion Description: </B>
+The JDO 1.0 specification requires that serialized instances
+be made ready for serialization
+by instantiating all serializable persistent fields
+before calling writeObject. For binary-
+compatible implementations, this is done by the enhancer
+adding a call to the StateManager prior to invoking the user's
+writeObject method.
+The behavior is the same in
+JDO 2.0, with the additional requirement that restored
+detachable serialized instances are
+treated as detached instances.
+ */
+public class DetachSerialize extends DetachTest {
+
+ private static final String ASSERTION_FAILED =
+ "Assertion A12.6.8 (DetachSerialize) failed: ";
+
+ /**
+ * The <code>main</code> is called when the class
+ * is directly executed from the command line.
+ * @param args The arguments passed to the program.
+ */
+ public static void main(String[] args) {
+ BatchTestRunner.run(DetachSerialize.class);
+ }
+
+ /** */
+ public void testDetachSerialize() {
+ getPM().currentTransaction().begin();
+ setCartFetchGroups();
+ //pm.retrieveAll(cartClosure);
+ Cart cartDetached = (Cart)detachClosure(cart1);
+ checkCartValues(ASSERTION_FAILED + "after deserializing cart," + NL,
+ cartDetached);
+ pm.currentTransaction().commit();
+ failOnError();
+ }
+
+ /** Detach the parameter instance.
+ */
+ protected Object detachClosure(Object pc) {
+ byte[] cartStream = serialize(pc);
+ return deserialize(cartStream);
+ }
+ /** */
+
+ private byte[] serialize(Object root) {
+ try {
+ ByteArrayOutputStream baos =
+ new ByteArrayOutputStream();
+ ObjectOutputStream oos = new ObjectOutputStream(baos);
+ oos.writeObject(root);
+ return baos.toByteArray();
+ } catch (Exception ex) {
+ fail(ASSERTION_FAILED + "serializing cart:" + ex.toString());
+ return null; // will not be reached
+ }
+ }
+
+ private Object deserialize(byte[] stream) {
+ try {
+ ByteArrayInputStream bais =
+ new ByteArrayInputStream(stream);
+ ObjectInputStream ois = new ObjectInputStream(bais);
+ return ois.readObject();
+ } catch (Exception ex) {
+ fail(ASSERTION_FAILED + "deserializing cart:" + ex.toString());
+ return null; // will not be reached
+ }
+ }
+}
Modified: db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachTest.java
URL: http://svn.apache.org/viewcvs/db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachTest.java?rev=384391&r1=384390&r2=384391&view=diff
==============================================================================
--- db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachTest.java (original)
+++ db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/DetachTest.java Wed Mar 8 16:56:41 2006
@@ -16,6 +16,11 @@
package org.apache.jdo.tck.api.persistencemanager.detach;
+import java.util.Iterator;
+
+import javax.jdo.FetchPlan;
+import javax.jdo.JDOHelper;
+
import org.apache.jdo.tck.JDO_Test;
import org.apache.jdo.tck.pc.shoppingcart.CartEntry;
import org.apache.jdo.tck.pc.shoppingcart.Cart;
@@ -27,16 +32,147 @@
/**
*
*/
-public class DetachTest extends JDO_Test {
+public abstract class DetachTest extends JDO_Test {
+ protected Cart cart1;
+ protected CartEntry cartEntry1;
+ protected Product product1;
+
+ protected Object cart1oid;
+
+ protected Cart goldenCart;
+ protected CartEntry goldenCartEntry;
+
+ protected Object[] cartClosure;
+
+ protected final static String CART_ENTRIES = "Cart.entries";
+ protected final static String CARTENTRY_CART = "CartEntry.cart";
+ protected final static String CARTENTRY_PRODUCT = "CartEntry.product";
+ protected final static String[] CART_FETCH_GROUPS = new String[]
+ {FetchPlan.DEFAULT, CART_ENTRIES, CARTENTRY_CART, CARTENTRY_PRODUCT};
+
/** Creates a new instance of DetachTest */
public DetachTest() {
}
+ /** */
protected void localSetUp() {
addTearDownClass(CartEntry.class);
addTearDownClass(Cart.class);
addTearDownClass(Product.class);
addTearDownClass(Undetachable.class);
+
+ Product goldenProduct = new Product("PRODUCT1", "Product 1");
+ goldenCart = new Cart("142857");
+ goldenCartEntry =
+ goldenCart.newCartEntry(goldenProduct, 100);
+
+ product1 = new Product("PRODUCT1", "Product 1");
+ cart1 = new Cart("142857");
+ cartEntry1 = new CartEntry(
+ cart1, goldenCartEntry.getId(), product1, 100);
+ cartClosure = new Object[]
+ {cart1, cartEntry1, product1};
+
+ getPM().currentTransaction().begin();
+ pm.makePersistent(cart1);
+ cart1oid = pm.getObjectId(cart1);
+ pm.currentTransaction().commit();
+ }
+
+ /** */
+ protected void setCartFetchGroups() {
+ FetchPlan fp = getPM().getFetchPlan();
+ fp.setGroups(CART_FETCH_GROUPS);
+ fp.setMaxFetchDepth(2);
+ }
+
+ /** */
+ protected void checkState(String location, Object obj,
+ boolean persistent) {
+ if(persistent) {
+ if (JDOHelper.isPersistent(obj))
+ return;
+ } else if (JDOHelper.isDetached(obj))
+ return;
+ appendMessage(location +
+ " should be " +
+ (persistent?"persistent":"detached") +
+ " but is not. The object state is: " +
+ states[currentState(obj)] + " " + getStateOfInstance(obj));
+ }
+
+ /** */
+ protected void reportDifference(String location,
+ long expected, long actual) {
+ appendMessage(location + NL +
+ "expected: " + expected + NL +
+ "actual: " + actual);
+ }
+
+ /** */
+ protected void reportDifference(String location,
+ Object expected, Object actual) {
+ appendMessage(location + NL +
+ "expected: " + expected + NL +
+ "actual: " + actual);
+ }
+
+ /** */
+ protected void checkCartValues(String location, Cart cart) {
+ checkCartValues(location, cart, false);
+ }
+
+ /** */
+ protected void checkCartValues(String location, Cart cart,
+ boolean persistent) {
+ checkState(location + "Cart instance", cart, persistent);
+ if (!goldenCart.getCustomerId().equals(cart.getCustomerId()))
+ reportDifference(location +
+ " differences in cart.customerId",
+ goldenCart.getCustomerId(), cart.getCustomerId());
+ Iterator goldenCartEntries = goldenCart.getEntries();
+ Iterator cartEntries = cart.getEntries();
+ while (cartEntries.hasNext()) {
+ CartEntry goldenCartEntry = (CartEntry)goldenCartEntries.next();
+ CartEntry cartEntry = (CartEntry)cartEntries.next();
+ checkState(location + "CartEntry instance", cartEntry,
+ persistent);
+ if (cartEntry.getCart() != cart) {
+ reportDifference(location +
+ " incorrect value for cartEntry.cart",
+ cart, cartEntry.getCart());
+ }
+ if (goldenCartEntry.getId() != cartEntry.getId())
+ reportDifference(location +
+ " differences in cartEntry.id",
+ goldenCartEntry.getId(), cartEntry.getId());
+ if (goldenCartEntry.getQuantity() != cartEntry.getQuantity())
+ reportDifference(location +
+ " differences in cartEntry.quantity",
+ goldenCartEntry.getQuantity(), cartEntry.getQuantity());
+ Product goldenProduct = goldenCartEntry.getProduct();
+ Product product = cartEntry.getProduct();
+ checkState(location + "Product instance", product,
+ persistent);
+ if (!goldenProduct.getDescription()
+ .equals(product.getDescription()))
+ reportDifference(location +
+ " differences in product.description",
+ goldenProduct.getDescription(), product.getDescription());
+ }
+ }
+
+ /** */
+ protected Cart createDetachedInstance(String ASSERTION_FAILED) {
+ getPM().currentTransaction().begin();
+ setCartFetchGroups();
+ pm.retrieveAll(cartClosure);
+ pm.setDetachAllOnCommit(true);
+ pm.currentTransaction().commit();
+ checkCartValues(ASSERTION_FAILED +
+ "after commit with DetachAllOnCommit,", cart1);
+ failOnError();
+ return cart1;
}
}
Modified: db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/SetDetachAllOnCommit.java
URL: http://svn.apache.org/viewcvs/db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/SetDetachAllOnCommit.java?rev=384391&r1=384390&r2=384391&view=diff
==============================================================================
--- db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/SetDetachAllOnCommit.java (original)
+++ db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/detach/SetDetachAllOnCommit.java Wed Mar 8 16:56:41 2006
@@ -23,14 +23,16 @@
/**
* <B>Title:</B> Test SetDetachAllOnCommit
* <BR>
- * <B>Keywords:</B> KEYWORDS
+ * <B>Keywords:</B> DetachAllOnCommit commit detach
* <BR>
- * <B>Assertion IDs:</B> A12.6.8-1
+ * <B>Assertion IDs:</B> A12.6.8-1, A12.6.8-2
* <BR>
* <B>Assertion Description: </B>
* We define a new property called DetachAllOnCommit
* PersistenceManager.setDetachAllOnCommit(boolean detachAllOnCommit)
* sets the DetachAllOnCommit property
+ * PersistenceManager.getDetachAllOnCommit()
+ * The value of the DetachAllOnCommit flag is returned.
*/
public class SetDetachAllOnCommit extends DetachTest {
Modified: db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/pc/shoppingcart/Cart.java
URL: http://svn.apache.org/viewcvs/db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/pc/shoppingcart/Cart.java?rev=384391&r1=384390&r2=384391&view=diff
==============================================================================
--- db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/pc/shoppingcart/Cart.java (original)
+++ db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/pc/shoppingcart/Cart.java Wed Mar 8 16:56:41 2006
@@ -72,6 +72,10 @@
entries.add(ce);
}
+ public Iterator getEntries() {
+ return entries.iterator();
+ }
+
public String getCustomerId() {
return customerId;
}
Modified: db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/pc/shoppingcart/CartEntry.java
URL: http://svn.apache.org/viewcvs/db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/pc/shoppingcart/CartEntry.java?rev=384391&r1=384390&r2=384391&view=diff
==============================================================================
--- db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/pc/shoppingcart/CartEntry.java (original)
+++ db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/pc/shoppingcart/CartEntry.java Wed Mar 8 16:56:41 2006
@@ -44,10 +44,10 @@
this(cart, id, product, 1);
}
public CartEntry(Cart cart, long id, Product product, int quantity) {
- setCart(cart);
setId(id);
setProduct(product);
setQuantity(quantity);
+ cart.addCartEntry(this);
}
public long getId() {
Modified: db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/pc/shoppingcart/Product.java
URL: http://svn.apache.org/viewcvs/db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/pc/shoppingcart/Product.java?rev=384391&r1=384390&r2=384391&view=diff
==============================================================================
--- db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/pc/shoppingcart/Product.java (original)
+++ db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/pc/shoppingcart/Product.java Wed Mar 8 16:56:41 2006
@@ -34,6 +34,13 @@
setSku(sku);
}
+ /** Constructor with sku and description
+ */
+ public Product(String sku, String description) {
+ this(sku);
+ setDescription(description);
+ }
+
public String getDescription() {
return description;
}