001: package com.mockrunner.test.ejb;
002:
003: import java.util.Properties;
004:
005: import javax.naming.Context;
006: import javax.naming.InitialContext;
007: import javax.naming.NameNotFoundException;
008:
009: import junit.framework.TestCase;
010:
011: import org.mockejb.jndi.MockContextFactory;
012:
013: import com.mockrunner.ejb.Configuration;
014: import com.mockrunner.mock.ejb.EJBMockObjectFactory;
015: import com.mockrunner.mock.ejb.MockUserTransaction;
016: import com.mockrunner.test.ejb.TestJNDI.NullContext;
017:
018: public class EJBMockObjectFactoryTest extends TestCase {
019: private Properties savedProperties;
020: private Context context;
021:
022: protected void setUp() throws Exception {
023: super .setUp();
024: savedProperties = new Properties();
025: TestJNDI.saveProperties(savedProperties);
026: MockContextFactory.setAsInitial();
027: context = new InitialContext();
028: }
029:
030: protected void tearDown() throws Exception {
031: super .tearDown();
032: MockContextFactory.revertSetAsInitial();
033: TestJNDI.restoreProperties(savedProperties);
034: }
035:
036: public void testInitMockContextFactory() throws Exception {
037: EJBMockObjectFactory factory = new EJBMockObjectFactory();
038: System.getProperties().remove(Context.INITIAL_CONTEXT_FACTORY);
039: factory.initMockContextFactory();
040: assertEquals(MockContextFactory.class.getName(), System
041: .getProperty(Context.INITIAL_CONTEXT_FACTORY));
042: assertEquals("org.mockejb.jndi", System
043: .getProperty(Context.URL_PKG_PREFIXES));
044: System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "test");
045: factory.initMockContextFactory();
046: assertEquals(MockContextFactory.class.getName(), System
047: .getProperty(Context.INITIAL_CONTEXT_FACTORY));
048: assertEquals("org.mockejb.jndi", System
049: .getProperty(Context.URL_PKG_PREFIXES));
050: System.setProperty(Context.URL_PKG_PREFIXES, "test");
051: factory.initMockContextFactory();
052: assertEquals(MockContextFactory.class.getName(), System
053: .getProperty(Context.INITIAL_CONTEXT_FACTORY));
054: assertEquals("test", System
055: .getProperty(Context.URL_PKG_PREFIXES));
056: }
057:
058: public void testResetMockContextFactory() throws Exception {
059: EJBMockObjectFactory factory = new EJBMockObjectFactory();
060: System.getProperties().remove(Context.INITIAL_CONTEXT_FACTORY);
061: factory.resetMockContextFactory();
062: assertNull(System.getProperty(Context.INITIAL_CONTEXT_FACTORY));
063: System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "test");
064: factory.resetMockContextFactory();
065: assertEquals("test", System
066: .getProperty(Context.INITIAL_CONTEXT_FACTORY));
067: System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
068: MockContextFactory.class.getName());
069: factory.resetMockContextFactory();
070: assertNull(System.getProperty(Context.INITIAL_CONTEXT_FACTORY));
071: }
072:
073: public void testInitializeUserTransaction() throws Exception {
074: EJBMockObjectFactory factory = new EJBMockObjectFactory();
075: MockUserTransaction transaction = factory
076: .getMockUserTransaction();
077: assertNotNull(transaction);
078: assertSame(context.lookup("javax.transaction.UserTransaction"),
079: transaction);
080: assertSame(context.lookup("java:comp/UserTransaction"),
081: transaction);
082: assertNotNull(factory.getMockContainer());
083: transaction.rollback();
084: factory = new EJBMockObjectFactory();
085: assertSame(context.lookup("javax.transaction.UserTransaction"),
086: transaction);
087: assertSame(context.lookup("java:comp/UserTransaction"),
088: transaction);
089: assertFalse(transaction.wasRollbackCalled());
090: }
091:
092: public void testOverrideCreate() {
093: EJBMockObjectFactory factory = new TestEJBMockObjectFactory();
094: assertNotSame(factory.getMockUserTransaction().getClass(),
095: MockUserTransaction.class);
096: }
097:
098: public void testSetConfiguration() throws Exception {
099: EJBMockObjectFactory factory = new EJBMockObjectFactory();
100: MockUserTransaction transaction = factory
101: .getMockUserTransaction();
102: assertSame(context.lookup("javax.transaction.UserTransaction"),
103: transaction);
104: assertSame(context.lookup("java:comp/UserTransaction"),
105: transaction);
106: TestJNDI.unbind(context);
107: Configuration configuration = new Configuration("myJNDIName");
108: factory = new EJBMockObjectFactory(configuration);
109: transaction = factory.getMockUserTransaction();
110: assertSame(context.lookup("myJNDIName"), transaction);
111: assertSame(context.lookup("javax.transaction.UserTransaction"),
112: transaction);
113: assertSame(context.lookup("java:comp/UserTransaction"),
114: transaction);
115: TestJNDI.unbind(context);
116: configuration.setBindMockUserTransactionToJNDI(false);
117: factory = new EJBMockObjectFactory(configuration);
118: transaction = factory.getMockUserTransaction();
119: assertNotNull(transaction);
120: try {
121: context.lookup("myJNDIName");
122: fail();
123: } catch (NameNotFoundException exc) {
124: //should throw exception
125: }
126: try {
127: context.lookup("javax.transaction.UserTransaction");
128: fail();
129: } catch (NameNotFoundException exc) {
130: //should throw exception
131: }
132: try {
133: context.lookup("java:comp/UserTransaction");
134: fail();
135: } catch (NameNotFoundException exc) {
136: //should throw exception
137: }
138: NullContext testContext = new NullContext();
139: factory = new EJBMockObjectFactory(configuration);
140: assertSame(factory.getContext(), configuration.getContext());
141: configuration.setContext(testContext);
142: factory = new EJBMockObjectFactory(configuration);
143: assertSame(configuration.getContext(), factory.getContext());
144: assertSame(testContext, factory.getContext());
145: }
146:
147: public static class TestEJBMockObjectFactory extends
148: EJBMockObjectFactory {
149: public MockUserTransaction createMockUserTransaction() {
150: return new MockUserTransaction() {
151: };
152: }
153: }
154: }
|