|
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