C:\devel\mocks\src\com\ociweb\jnb\ex3\TestTransactionManagerImpl.java

1    package com.ociweb.jnb.ex3; 
2     
3    import junit.framework.TestCase; 
4     
5    import java.sql.Connection; 
6    import java.sql.SQLException; 
7    import java.util.Properties; 
8     
9    public class TestTransactionManagerImpl extends TestCase { 
10       private TransactionManagerImpl manager; 
11       private MockPropertiesManager mockPropertiesManager; 
12       private MockConnection mockConnection; 
13       private MockConnectionFactory mockConnectionFactory; 
14       public static final String DB_DRIVER = "TestDBDriver"; 
15       public static final String DB_URL = "URL"; 
16       public static final String USERNAME = "Mario"; 
17       public static final String PASSWORD = "secret"; 
18    
19       public void setUp() { 
20           mockConnection = new MockConnection(); 
21           mockConnectionFactory = new MockConnectionFactory(); 
22           mockConnectionFactory.createConnectionReturn = mockConnection; 
23           Properties props = new Properties(); 
24           props.setProperty("DB_DRIVER", DB_DRIVER); 
25           props.setProperty("DB_URL", DB_URL); 
26           props.setProperty("USERNAME", USERNAME); 
27           props.setProperty("PASSWORD", PASSWORD); 
28           mockPropertiesManager = new MockPropertiesManager(); 
29           mockPropertiesManager.loadPropertiesReturn = props; 
30           GlobalPropertiesManager.set(mockPropertiesManager); 
31       } 
32    
33       public TestTransactionManagerImpl(String name) { 
34           super(name); 
35       } 
36    
37       public void testTransactionManagerInitialization() { 
38           manager = new TransactionManagerImpl(mockConnectionFactory); 
39    
40           //Test that properties were loaded and used correctly 
41           assertTrue(mockPropertiesManager.loadPropertiesCalled); 
42           assertEquals("TransactionManager.properties", mockPropertiesManager.loadPropertiesPropertiesFileName); 
43           assertEquals(DB_DRIVER, mockConnectionFactory.createConnectionDatabaseDriver); 
44           assertEquals(DB_URL, mockConnectionFactory.createConnectionDatabaseURL); 
45           assertEquals(USERNAME, mockConnectionFactory.createConnectionUsername); 
46           assertEquals(PASSWORD, mockConnectionFactory.createConnectionPassword); 
47    
48           assertTrue(mockConnectionFactory.createConnectionCalled); 
49           assertTrue(mockConnection.setAutoCommitCalled); 
50           assertEquals(false, mockConnection.setAutoCommitAutoCommit); 
51       } 
52    
53       public void testCommitSuccess() throws Exception { 
54           manager = new TransactionManagerImpl(mockConnectionFactory); 
55           manager.commit(); 
56           assertTrue(mockConnection.commitCalled); 
57       } 
58    
59       public void testCommitFailure() throws  Exception { 
60           mockConnection.commitException = new SQLException("Could not commit!"); 
61           manager = new TransactionManagerImpl(mockConnectionFactory); 
62           try { 
63               manager.commit(); 
64               fail("The TransactionManager should wrap an SQLException in a TransactionException"); 
65           } catch (TransactionException e) { 
66               assertTrue(mockConnection.commitCalled); 
67               assertTrue(e.getCause() instanceof SQLException); 
68               assertEquals("Could not commit!", e.getCause().getMessage()); 
69           } 
70       } 
71    
72       public void testRollbackSuccess() throws  Exception { 
73           manager = new TransactionManagerImpl(mockConnectionFactory); 
74           manager.rollback(); 
75           assertTrue(mockConnection.rollbackCalled); 
76       } 
77    
78       public void testRollbackFailure() throws  Exception { 
79           mockConnection.rollbackException = new SQLException("SQL Failure!"); 
80           manager = new TransactionManagerImpl(mockConnectionFactory); 
81           try { 
82               manager.rollback(); 
83               fail("The TransactionManager should wrap an SQLException in a TransactionException"); 
84           } catch (TransactionException e) { 
85               assertTrue(mockConnection.rollbackCalled); 
86               assertTrue(e.getCause() instanceof SQLException); 
87               assertEquals("SQL Failure!", e.getCause().getMessage()); 
88           } 
89       } 
90    
91       public void testConnectionProxy() throws  Exception { 
92           manager = new TransactionManagerImpl(mockConnectionFactory); 
93           Connection proxy = manager.getConnection(); 
94           assertFalse("The connection commit has not been called yet", mockConnection.commitCalled); 
95           proxy.commit(); 
96           assertFalse("The connection commit has still not been called", mockConnection.commitCalled); 
97           assertFalse("The connection rollback has not been called yet", mockConnection.rollbackCalled); 
98           proxy.rollback(); 
99           assertFalse("The connection rollback has still not been called", mockConnection.rollbackCalled); 
100          assertFalse("The connection close has not been called", mockConnection.closeCalled); 
101          proxy.close(); 
102          assertTrue("The proxy caused the real connection.close() method to be called", mockConnection.closeCalled); 
103      } 
104  } 
105