blob: b7fcf05f4c899bdd1a0079c1e08049fbdf1a16d2 [file] [log] [blame]
/*
* TestCheckConsistency.java
*
* Created on October 9, 2006, 6:23 PM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
/*
* 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.openjpa.persistence.kernel;
import org.apache.openjpa.persistence.kernel.common.apps.RuntimeTest1;
import org.apache.openjpa.persistence.JPAFacadeHelper;
import org.apache.openjpa.persistence.OpenJPAEntityManager;
public class TestCheckConsistency extends BaseKernelTest {
private Object _oid = null;
/**
* Creates a new instance of TestCheckConsistency
*/
public TestCheckConsistency(String name) {
super(name);
}
public void setUp() {
deleteAll(RuntimeTest1.class);
RuntimeTest1 pc = new RuntimeTest1();
pc.setIntField(1);
pc.setIntField1(1);
_oid = persist(pc);
}
public void testConsistentDatastoreTransaction() {
OpenJPAEntityManager pm = getPM();
pm.setOptimistic(false);
pm.validateChanges(); // no-op outside trans
startTx(pm);
RuntimeTest1 pc = (RuntimeTest1) pm.find(RuntimeTest1.class, _oid);
pc.setIntField1(100);
RuntimeTest1 npc = new RuntimeTest1();
npc.setIntField(2);
npc.setIntField1(2);
pm.persist(npc);
pm.validateChanges();
assertEquals(100, pc.getIntField1());
assertTrue(pm.isPersistent(npc));
pc.setIntField1(200);
npc.setIntField1(300);
endTx(pm);
assertEquals(200, pc.getIntField1());
assertTrue(pm.isPersistent(npc));
assertEquals(300, npc.getIntField1());
endEm(pm);
}
public void testConsistentDatastoreTransactionWithRollback() {
OpenJPAEntityManager pm = getPM();
pm.setOptimistic(false);
pm.validateChanges(); // no-op outside trans
startTx(pm);
RuntimeTest1 pc = (RuntimeTest1) pm.find(RuntimeTest1.class, _oid);
pc.setIntField1(100);
RuntimeTest1 npc = new RuntimeTest1();
pm.persist(npc);
Object noid = pm.getObjectId(npc);
pm.validateChanges();
assertEquals(100, pc.getIntField1());
assertTrue(pm.isPersistent(npc));
pc.setIntField1(200);
npc.setIntField1(300);
rollbackTx(pm);
assertEquals(1, pc.getIntField1());
assertFalse(pm.isPersistent(npc));
assertEquals(0, npc.getIntField1());
endEm(pm);
pm = getPM();
try {
RuntimeTest1 temp =
(RuntimeTest1) pm.find(RuntimeTest1.class, noid);
fail("Object should not exist." + temp.getIntField() + "::" +
temp.getIntField1());
} catch (Exception jonfe) {
}
endEm(pm);
}
//FIXME jthomas
/*
public void testInconsistentDatastoreTransaction() {
OpenJPAEntityManager pm = getPM();
FetchPlan fetch = (FetchPlan) pm.getFetchPlan();
pm.setOptimistic(false);
pm.setRetainState(false);
pm.validateChanges(); // no-op outside trans
pm.begin();
*/
//FIXME jthomas
/*
fetch.setReadLockLevel(pm.LOCK_NONE);
fetch.setWriteLockLevel(pm.LOCK_NONE);
*/
/*
RuntimeTest1 pc = (RuntimeTest1) pm.find(RuntimeTest1.class,_oid);
pc.setIntField(100);
OpenJPAEntityManager pm2 = getPM();
pm2.begin();
RuntimeTest1 copy = (RuntimeTest1) pm2.find(RuntimeTest1.class,_oid);
copy.setIntField(-1);
pm2.commit();
pm2.close();
RuntimeTest1 npc = new RuntimeTest1();
pm.persist(npc);
try {
pm.validateChanges();
fail("Didn't find inconsistency.");
} catch (Exception jove) {
//FIXME
/*
Throwable[] t = jove.getNestedExceptions();
assertEquals(1, t.length);
assertEquals(pc, (((JDOException) t[0]).getFailedObject()));
*/
// }
/* assertTrue(pm.getRollbackOnly());
pm.rollback();
assertEquals(-1, pc.getIntField());
assertFalse(pm.isPersistent(npc));
endEm(pm,());
}
*/
public void testConsistentOptimisticTransaction() {
OpenJPAEntityManager pm = getPM();
pm.setOptimistic(true);
pm.validateChanges(); // no-op outside trans
startTx(pm);
boolean hasConn = hasConnection(pm);
RuntimeTest1 pc = (RuntimeTest1) pm.find(RuntimeTest1.class, _oid);
pc.setIntField1(100);
RuntimeTest1 npc = new RuntimeTest1();
npc.setIntField(2);
npc.setIntField1(2);
pm.persist(npc);
pm.validateChanges();
if (!hasConn)
assertFalse(hasConnection(pm));
assertEquals(100, pc.getIntField1());
assertTrue(pm.isPersistent(npc));
pc.setIntField1(200);
npc.setIntField1(300);
endTx(pm);
assertEquals(200, pc.getIntField1());
assertTrue(pm.isPersistent(npc));
assertEquals(300, npc.getIntField1());
endEm(pm);
}
private boolean hasConnection(OpenJPAEntityManager pm) {
return JPAFacadeHelper.toBroker(pm).hasConnection();
}
public void testConsistentOptimisticTransactionWithRollback() {
OpenJPAEntityManager pm = getPM();
pm.setOptimistic(true);
pm.validateChanges(); // no-op outside trans
startTx(pm);
boolean hasConn = hasConnection(pm);
RuntimeTest1 pc = (RuntimeTest1) pm.find(RuntimeTest1.class, _oid);
pc.setIntField1(100);
RuntimeTest1 npc = new RuntimeTest1();
pm.persist(npc);
Object noid = pm.getObjectId(npc);
pm.validateChanges();
if (!hasConn)
assertFalse(hasConnection(pm));
assertEquals(100, pc.getIntField1());
assertTrue(pm.isPersistent(npc));
pc.setIntField1(200);
npc.setIntField1(300);
rollbackTx(pm);
assertEquals(1, pc.getIntField1());
assertFalse(pm.isPersistent(npc));
assertEquals(0, npc.getIntField1());
endEm(pm);
pm = getPM();
try {
RuntimeTest1 temp =
(RuntimeTest1) pm.find(RuntimeTest1.class, noid);
fail("Object should not exist." + temp.getIntField() + "::" +
temp.getIntField1());
} catch (Exception jonfe) {
}
}
//FIXME
/*
public void testInconsistentOptimisticTransactionWithoutRefresh() {
OpenJPAEntityManager pm = getPM();
pm.setRetainState(false);
pm.setOptimistic(true);
pm.validateChanges(); // no-op outside trans
pm.begin();
RuntimeTest1 pc = (RuntimeTest1) pm.find(RuntimeTest1.class,_oid);
pc.setIntField(100);
OpenJPAEntityManager pm2 = getPM();
pm2.begin();
RuntimeTest1 copy = (RuntimeTest1) pm2.find(RuntimeTest1.class,_oid);
copy.setIntField(-1);
pm2.commit();
pm2.close();
RuntimeTest1 npc = new RuntimeTest1();
pm.persist(npc);
Object noid = pm.getObjectId(npc);
try {
pm.validateChanges();
fail("Didn't find inconsistency.");
} catch (Exception jove) {
//FIXME jthomas
/*
Throwable[] t = jove.getNestedExceptions();
assertEquals(1, t.length);
assertEquals(pc, (((JDOException) t[0]).getFailedObject()));
*/
// }
/* assertFalse(pm.getRollbackOnly());
try {
pm.commit();
fail("Committed inconsistent transaction.");
} catch (Exception je) {
}
assertEquals(-1, pc.getIntField());
assertFalse(pm.isPersistent(npc));
endEm(pm,());
pm = getPM();
try {
pm.find(RuntimeTest1.class,noid);
fail("Object should not exist.");
} catch (Exception jonfe) {
}
endEm(pm,());
}
*/
//FIXME
/*
public void testInconsistentOptimisticTransactionWithRefresh() {
OpenJPAEntityManager pm = getPM();
pm.setOptimistic(true);
pm.validateChanges(); // no-op outside trans
pm.begin();
RuntimeTest1 pc = pm.find(RuntimeTest1.class,_oid);
pc.setIntField(100);
OpenJPAEntityManager pm2 = getPM();
pm2.begin();
RuntimeTest1 copy = pm2.find(RuntimeTest1.class,_oid);
copy.setIntField(-1);
pm2.commit();
pm2.close();
RuntimeTest1 npc = new RuntimeTest1();
pm.persist(npc);
try {
pm.validateChanges();
fail("Didn't find inconsistency.");
} catch (Exception jove) {
//FIXME jthomas
/*
Throwable[] t = jove.getNestedExceptions();
assertEquals(1, t.length);
assertEquals(pc, (((JDOException) t[0]).getFailedObject()));
*/
// }
/* assertFalse(pm.getRollbackOnly());
pm.refresh(pc);
assertEquals(-1, pc.getIntField());
assertTrue(pm.isPersistent(npc));
pc.setIntField(200);
npc.setIntField(300);
pm.commit();
assertEquals(200, pc.getIntField());
assertTrue(pm.isPersistent(npc));
assertEquals(300, npc.getIntField());
endEm(pm,());
}
*/
//FIXME
/*
public void testInconsistentOptimisticTransactionWithRollback() {
OpenJPAEntityManager pm = getPM();
pm.setRetainState(false);
pm.setOptimistic(true);
pm.validateChanges(); // no-op outside trans
pm.begin();
RuntimeTest1 pc = (RuntimeTest1) pm.find(RuntimeTest1.class,_oid);
pc.setIntField(100);
OpenJPAEntityManager pm2 = getPM();
pm2.begin();
RuntimeTest1 copy = (RuntimeTest1) pm2.find(RuntimeTest1.class,_oid);
copy.setIntField(-1);
pm2.commit();
pm2.close();
RuntimeTest1 npc = new RuntimeTest1();
pm.persist(npc);
Object noid = pm.getObjectId(npc);
try {
pm.validateChanges();
fail("Didn't find inconsistency.");
} catch (Exception jove) {
//FIXME jthomas
/*
Throwable[] t = jove.getNestedExceptions();
assertEquals(1, t.length);
assertEquals(pc, (((JDOException) t[0]).getFailedObject()));
*/
// }
/* assertFalse(pm.getRollbackOnly());
pm.rollback();
assertEquals(-1, pc.getIntField());
assertFalse(pm.isPersistent(npc));
endEm(pm,());
pm = getPM();
try {
pm.find(RuntimeTest1.class,_oid);
fail("Object should not exist.");
} catch (Exception jonfe) {
}
endEm(pm,());
}
*/
}