KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > springframework > orm > ibatis > support > LobTypeHandlerTests


1 /*
2  * Copyright 2002-2005 the original author or authors.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16
17 package org.springframework.orm.ibatis.support;
18
19 import java.io.ByteArrayInputStream JavaDoc;
20 import java.io.ByteArrayOutputStream JavaDoc;
21 import java.io.ObjectOutputStream JavaDoc;
22 import java.sql.PreparedStatement JavaDoc;
23 import java.sql.ResultSet JavaDoc;
24 import java.sql.SQLException JavaDoc;
25 import java.util.Arrays JavaDoc;
26 import java.util.List JavaDoc;
27
28 import javax.sql.DataSource JavaDoc;
29
30 import junit.framework.TestCase;
31 import org.easymock.ArgumentsMatcher;
32 import org.easymock.MockControl;
33
34 import org.springframework.jdbc.datasource.DataSourceUtils;
35 import org.springframework.jdbc.datasource.DriverManagerDataSource;
36 import org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy;
37 import org.springframework.jdbc.support.lob.LobCreator;
38 import org.springframework.jdbc.support.lob.LobHandler;
39 import org.springframework.transaction.support.TransactionSynchronization;
40 import org.springframework.transaction.support.TransactionSynchronizationManager;
41
42 /**
43  * @author Juergen Hoeller
44  * @since 27.02.2005
45  */

46 public class LobTypeHandlerTests extends TestCase {
47
48     private MockControl rsControl = MockControl.createControl(ResultSet JavaDoc.class);
49     private ResultSet JavaDoc rs = (ResultSet JavaDoc) rsControl.getMock();
50     private MockControl psControl = MockControl.createControl(PreparedStatement JavaDoc.class);
51     private PreparedStatement JavaDoc ps = (PreparedStatement JavaDoc) psControl.getMock();
52
53     private MockControl lobHandlerControl = MockControl.createControl(LobHandler.class);
54     private LobHandler lobHandler = (LobHandler) lobHandlerControl.getMock();
55     private MockControl lobCreatorControl = MockControl.createControl(LobCreator.class);
56     private LobCreator lobCreator = (LobCreator) lobCreatorControl.getMock();
57
58     protected void setUp() throws SQLException JavaDoc {
59         rs.findColumn("column");
60         rsControl.setReturnValue(1);
61
62         lobHandler.getLobCreator();
63         lobHandlerControl.setReturnValue(lobCreator);
64         lobCreator.close();
65         lobCreatorControl.setVoidCallable(1);
66
67         rsControl.replay();
68         psControl.replay();
69     }
70
71     public void testClobStringTypeHandler() throws Exception JavaDoc {
72         lobHandler.getClobAsString(rs, 1);
73         lobHandlerControl.setReturnValue("content", 2);
74         lobCreator.setClobAsString(ps, 1, "content");
75         lobCreatorControl.setVoidCallable(1);
76
77         lobHandlerControl.replay();
78         lobCreatorControl.replay();
79
80         ClobStringTypeHandler type = new ClobStringTypeHandler(lobHandler);
81         assertEquals("content", type.valueOf("content"));
82         assertEquals("content", type.getResult(rs, "column"));
83         assertEquals("content", type.getResult(rs, 1));
84
85         TransactionSynchronizationManager.initSynchronization();
86         try {
87             type.setParameter(ps, 1, "content", null);
88             List JavaDoc synchs = TransactionSynchronizationManager.getSynchronizations();
89             assertEquals(1, synchs.size());
90             assertTrue(synchs.get(0).getClass().getName().endsWith("LobCreatorSynchronization"));
91             ((TransactionSynchronization) synchs.get(0)).beforeCompletion();
92             ((TransactionSynchronization) synchs.get(0)).afterCompletion(TransactionSynchronization.STATUS_COMMITTED);
93         }
94         finally {
95             TransactionSynchronizationManager.clearSynchronization();
96         }
97     }
98
99     public void testClobStringTypeWithSynchronizedConnection() throws Exception JavaDoc {
100         DataSource JavaDoc dsTarget = new DriverManagerDataSource();
101         DataSource JavaDoc ds = new LazyConnectionDataSourceProxy(dsTarget);
102
103         lobHandler.getClobAsString(rs, 1);
104         lobHandlerControl.setReturnValue("content", 2);
105         lobCreator.setClobAsString(ps, 1, "content");
106         lobCreatorControl.setVoidCallable(1);
107
108         lobHandlerControl.replay();
109         lobCreatorControl.replay();
110
111         ClobStringTypeHandler type = new ClobStringTypeHandler(lobHandler);
112         assertEquals("content", type.valueOf("content"));
113         assertEquals("content", type.getResult(rs, "column"));
114         assertEquals("content", type.getResult(rs, 1));
115
116         TransactionSynchronizationManager.initSynchronization();
117         try {
118             DataSourceUtils.getConnection(ds);
119             type.setParameter(ps, 1, "content", null);
120             List JavaDoc synchs = TransactionSynchronizationManager.getSynchronizations();
121             assertEquals(2, synchs.size());
122             assertTrue(synchs.get(0).getClass().getName().endsWith("LobCreatorSynchronization"));
123             ((TransactionSynchronization) synchs.get(0)).beforeCompletion();
124             ((TransactionSynchronization) synchs.get(0)).afterCompletion(TransactionSynchronization.STATUS_COMMITTED);
125             ((TransactionSynchronization) synchs.get(1)).beforeCompletion();
126             ((TransactionSynchronization) synchs.get(1)).afterCompletion(TransactionSynchronization.STATUS_COMMITTED);
127         }
128         finally {
129             TransactionSynchronizationManager.clearSynchronization();
130         }
131     }
132
133     public void testBlobByteArrayType() throws Exception JavaDoc {
134         byte[] content = "content".getBytes();
135         lobHandler.getBlobAsBytes(rs, 1);
136         lobHandlerControl.setReturnValue(content, 2);
137         lobCreator.setBlobAsBytes(ps, 1, content);
138         lobCreatorControl.setVoidCallable(1);
139
140         lobHandlerControl.replay();
141         lobCreatorControl.replay();
142
143         BlobByteArrayTypeHandler type = new BlobByteArrayTypeHandler(lobHandler);
144         assertTrue(Arrays.equals(content, (byte[]) type.valueOf("content")));
145         assertEquals(content, type.getResult(rs, "column"));
146         assertEquals(content, type.getResult(rs, 1));
147
148         TransactionSynchronizationManager.initSynchronization();
149         try {
150             type.setParameter(ps, 1, content, null);
151             List JavaDoc synchs = TransactionSynchronizationManager.getSynchronizations();
152             assertEquals(1, synchs.size());
153             ((TransactionSynchronization) synchs.get(0)).beforeCompletion();
154             ((TransactionSynchronization) synchs.get(0)).afterCompletion(TransactionSynchronization.STATUS_COMMITTED);
155         }
156         finally {
157             TransactionSynchronizationManager.clearSynchronization();
158         }
159     }
160
161     public void testBlobSerializableType() throws Exception JavaDoc {
162         ByteArrayOutputStream JavaDoc baos = new ByteArrayOutputStream JavaDoc();
163         ObjectOutputStream JavaDoc oos = new ObjectOutputStream JavaDoc(baos);
164         oos.writeObject("content");
165         oos.close();
166
167         lobHandler.getBlobAsBinaryStream(rs, 1);
168         lobHandlerControl.setReturnValue(new ByteArrayInputStream JavaDoc(baos.toByteArray()), 1);
169         lobHandler.getBlobAsBinaryStream(rs, 1);
170         lobHandlerControl.setReturnValue(new ByteArrayInputStream JavaDoc(baos.toByteArray()), 1);
171         lobCreator.setBlobAsBytes(ps, 1, baos.toByteArray());
172         lobCreatorControl.setMatcher(new ArgumentsMatcher() {
173             public boolean matches(Object JavaDoc[] o1, Object JavaDoc[] o2) {
174                 return Arrays.equals((byte[]) o1[2], (byte[]) o2[2]);
175             }
176             public String JavaDoc toString(Object JavaDoc[] objects) {
177                 return null;
178             }
179         });
180
181         lobHandlerControl.replay();
182         lobCreatorControl.replay();
183
184         BlobSerializableTypeHandler type = new BlobSerializableTypeHandler(lobHandler);
185         assertEquals("content", type.valueOf("content"));
186         assertEquals("content", type.getResult(rs, "column"));
187         assertEquals("content", type.getResult(rs, 1));
188
189         TransactionSynchronizationManager.initSynchronization();
190         try {
191             type.setParameter(ps, 1, "content", null);
192             List JavaDoc synchs = TransactionSynchronizationManager.getSynchronizations();
193             assertEquals(1, synchs.size());
194             ((TransactionSynchronization) synchs.get(0)).beforeCompletion();
195             ((TransactionSynchronization) synchs.get(0)).afterCompletion(TransactionSynchronization.STATUS_COMMITTED);
196         }
197         finally {
198             TransactionSynchronizationManager.clearSynchronization();
199         }
200     }
201
202     public void testBlobSerializableTypeWithNull() throws Exception JavaDoc {
203         lobHandler.getBlobAsBinaryStream(rs, 1);
204         lobHandlerControl.setReturnValue(null, 2);
205         lobCreator.setBlobAsBytes(ps, 1, null);
206
207         lobHandlerControl.replay();
208         lobCreatorControl.replay();
209
210         BlobSerializableTypeHandler type = new BlobSerializableTypeHandler(lobHandler);
211         assertEquals(null, type.valueOf(null));
212         assertEquals(null, type.getResult(rs, "column"));
213         assertEquals(null, type.getResult(rs, 1));
214
215         TransactionSynchronizationManager.initSynchronization();
216         try {
217             type.setParameter(ps, 1, null, null);
218             List JavaDoc synchs = TransactionSynchronizationManager.getSynchronizations();
219             assertEquals(1, synchs.size());
220             ((TransactionSynchronization) synchs.get(0)).beforeCompletion();
221         }
222         finally {
223             TransactionSynchronizationManager.clearSynchronization();
224         }
225     }
226
227     protected void tearDown() {
228         try {
229             rsControl.verify();
230             psControl.verify();
231             lobHandlerControl.verify();
232             lobCreatorControl.verify();
233         }
234         catch (IllegalStateException JavaDoc ex) {
235             // ignore: test method didn't call replay
236
}
237         assertTrue(TransactionSynchronizationManager.getResourceMap().isEmpty());
238         assertFalse(TransactionSynchronizationManager.isSynchronizationActive());
239     }
240
241 }
242
Popular Tags