dain 2004/04/11 22:23:56
Modified: modules/core/src/test/org/openejb/entity
BasicCMPEntityContainerTest.java MockHome.java
MockLocalHome.java MockRemote.java
Log:
Added tests that work through the remote interface and fixed related bugs
Revision Changes Path
1.5 +103 -6
openejb/modules/core/src/test/org/openejb/entity/BasicCMPEntityContainerTest.java
Index: BasicCMPEntityContainerTest.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/test/org/openejb/entity/BasicCMPEntityContainerTest.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- BasicCMPEntityContainerTest.java 11 Apr 2004 16:58:04 -0000 1.4
+++ BasicCMPEntityContainerTest.java 12 Apr 2004 02:23:56 -0000 1.5
@@ -52,6 +52,8 @@
import java.sql.ResultSet;
import java.util.Collections;
import java.util.HashSet;
+import java.rmi.NoSuchObjectException;
+import java.rmi.RemoteException;
import javax.management.ObjectName;
import javax.sql.DataSource;
import javax.ejb.NoSuchObjectLocalException;
@@ -75,6 +77,7 @@
import org.openejb.transaction.TransactionPolicy;
import org.tranql.ejb.CMPField;
import org.tranql.ejb.EJB;
+import org.tranql.ejb.NotLoadedException;
/**
* @version $Revision$ $Date$
@@ -107,6 +110,25 @@
assertEquals(value, local.getValue());
}
+ public void testRemoteInvoke() throws Exception {
+ MockHome home = (MockHome) kernel.getAttribute(CONTAINER_NAME, "EJBHome");
+ assertEquals(2, home.intMethod(1));
+
+ Integer pk = new Integer(33);
+ String value = "Thirty-Three";
+ int number = 44;
+
+ MockRemote remote = home.create(pk, value);
+ assertEquals(1 + number + pk.intValue(), remote.intMethod(number));
+ assertEquals(pk, remote.getPrimaryKey());
+ assertEquals(value, remote.getValue());
+
+ remote = home.findByPrimaryKey(pk);
+ assertEquals(1 + number + pk.intValue(), remote.intMethod(number));
+ assertEquals(pk, remote.getPrimaryKey());
+ assertEquals(value, remote.getValue());
+ }
+
public void testFields() throws Exception {
MockLocalHome home = (MockLocalHome) kernel.getAttribute(CONTAINER_NAME,
"EJBLocalHome");
MockLocal local = home.findByPrimaryKey(new Integer(1));
@@ -125,7 +147,7 @@
assertEquals("World", local.getValue());
}
- public void testLifeCycle() throws Exception {
+ public void testLocalLifeCycle() throws Exception {
Connection c = ds.getConnection();
Statement s = c.createStatement();
ResultSet rs;
@@ -173,14 +195,15 @@
try {
local.getValue();
- fail("Expected NoSuchObjectLocalException, but no exception was
thrown");
+ // we don't have a load query so this is not an ObjectNotFoundException
+ fail("Expected NotLoadedException, but no exception was thrown");
} catch(AssertionFailedError e) {
throw e;
- } catch(NoSuchObjectLocalException e) {
+ } catch(NotLoadedException e) {
// expected
} catch(Throwable e) {
e.printStackTrace();
- fail("Expected NoSuchObjectLocalException, but got " +
e.getClass().getName());
+ fail("Expected NotLoadedException, but got " + e.getClass().getName());
}
try {
@@ -199,6 +222,80 @@
c.close();
}
+ public void testRemoteLifeCycle() throws Exception {
+ Connection c = ds.getConnection();
+ Statement s = c.createStatement();
+ ResultSet rs;
+
+ // check that it is not there
+ rs = s.executeQuery("SELECT ID FROM MOCK WHERE ID=2");
+ assertFalse(rs.next());
+ rs.close();
+
+ // add new
+ MockHome home = (MockHome) kernel.getAttribute(CONTAINER_NAME, "EJBHome");
+ MockRemote remote = home.create(new Integer(2), "Hello");
+ rs = s.executeQuery("SELECT VALUE FROM MOCK WHERE ID=2");
+ assertTrue(rs.next());
+ assertEquals("Hello", rs.getString(1));
+ rs.close();
+
+ // find it
+ remote = home.findByPrimaryKey(new Integer(2));
+ assertEquals("Hello", remote.getValue());
+
+ // check that it is actually in the database
+ rs = s.executeQuery("SELECT ID FROM MOCK WHERE ID=2");
+ assertTrue(rs.next());
+ rs.close();
+
+ // remove it
+ remote.remove();
+
+ // verify it is really gone
+ rs = s.executeQuery("SELECT ID FROM MOCK WHERE ID=2");
+ assertFalse(rs.next());
+
+ try {
+ remote.intMethod(33);
+ // todo this does not throw an exception because we are not verifying
that the row exists in ejbLoad and intMethod does not access any persistent data
+// fail("Expected NoSuchObjectException, but no exception was thrown");
+ } catch(AssertionFailedError e) {
+ throw e;
+ } catch(NoSuchObjectException e) {
+ // expected
+ } catch(Throwable e) {
+ fail("Expected NoSuchObjectException, but got " +
e.getClass().getName());
+ }
+
+ try {
+ remote.getValue();
+ fail("Expected RemoteException, but no exception was thrown");
+ } catch(AssertionFailedError e) {
+ throw e;
+ } catch(RemoteException e) {
+ // expected
+ } catch(Throwable e) {
+ e.printStackTrace();
+ fail("Expected RemoteException, but got " + e.getClass().getName());
+ }
+
+ try {
+ remote = home.findByPrimaryKey(new Integer(2));
+ fail("Expected ObjectNotFoundException, but no exception was thrown");
+ } catch(AssertionFailedError e) {
+ throw e;
+ } catch(ObjectNotFoundException e) {
+ // expected
+ } catch(Throwable e) {
+ fail("Expected ObjectNotFoundException, but got " +
e.getClass().getName());
+ }
+
+ rs.close();
+ s.close();
+ c.close();
+ }
+
public void testSelect() throws Exception {
// Connection c = initDatabase();
// MockLocalHome home = (MockLocalHome) mbServer.invoke(CONTAINER_NAME,
"getEJBLocalHome", null, null);
@@ -293,8 +390,8 @@
builder.setComponentContext(new ReadOnlyContext());
EJB ejb = new EJB("MockEJB", "MOCK");
- ejb.addCMPField(new CMPField("id", Integer.class, true));
ejb.addCMPField(new CMPField("value", String.class, false));
+ ejb.addCMPField(new CMPField("id", Integer.class, true));
builder.setEJB(ejb);
builder.setDataSource(ds);
container = builder.createConfiguration();
1.3 +12 -2 openejb/modules/core/src/test/org/openejb/entity/MockHome.java
Index: MockHome.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/test/org/openejb/entity/MockHome.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- MockHome.java 11 Apr 2004 17:12:17 -0000 1.2
+++ MockHome.java 12 Apr 2004 02:23:56 -0000 1.3
@@ -48,8 +48,10 @@
package org.openejb.entity;
import java.rmi.RemoteException;
+import java.util.Collection;
import javax.ejb.EJBHome;
import javax.ejb.FinderException;
+import javax.ejb.CreateException;
/**
*
@@ -57,7 +59,15 @@
* @version $Revision$ $Date$
*/
public interface MockHome extends EJBHome {
- MockRemote findByPrimaryKey(Integer i) throws FinderException, RemoteException;
+ MockRemote create(Integer i, String value) throws CreateException,
RemoteException;
+
+ MockRemote findByPrimaryKey(Integer o) throws FinderException, RemoteException;
int intMethod(int i) throws RemoteException;
+
+ String singleSelect(Integer i) throws FinderException, RemoteException;
+
+ Collection multiSelect(Integer i) throws FinderException, RemoteException;
+
+ Collection multiObject(Integer i) throws FinderException, RemoteException;
}
1.3 +1 -3
openejb/modules/core/src/test/org/openejb/entity/MockLocalHome.java
Index: MockLocalHome.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/test/org/openejb/entity/MockLocalHome.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- MockLocalHome.java 11 Apr 2004 16:58:04 -0000 1.2
+++ MockLocalHome.java 12 Apr 2004 02:23:56 -0000 1.3
@@ -53,8 +53,6 @@
import javax.ejb.FinderException;
/**
- *
- *
* @version $Revision$ $Date$
*/
public interface MockLocalHome extends EJBLocalHome {
1.2 +7 -1 openejb/modules/core/src/test/org/openejb/entity/MockRemote.java
Index: MockRemote.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/test/org/openejb/entity/MockRemote.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- MockRemote.java 13 Mar 2004 17:09:28 -0000 1.1
+++ MockRemote.java 12 Apr 2004 02:23:56 -0000 1.2
@@ -57,4 +57,10 @@
*/
public interface MockRemote extends EJBObject {
int intMethod(int i) throws RemoteException;
+
+ int getIntField() throws RemoteException;
+
+ String getValue() throws RemoteException;
+
+ void setValue(String value) throws RemoteException;
}