1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.mavibot.btree.managed;
21
22
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertNotNull;
25
26 import java.io.File;
27 import java.lang.reflect.Method;
28 import java.nio.ByteBuffer;
29
30 import org.junit.Rule;
31 import org.junit.Test;
32 import org.junit.rules.TemporaryFolder;
33
34
35
36
37
38
39
40 public class ReadTest
41 {
42 @Rule
43 public TemporaryFolder tempFolder = new TemporaryFolder();
44
45
46
47
48
49 @Test
50 public void testReadInt() throws Exception
51 {
52 File tempFile = tempFolder.newFile( "mavibot.db" );
53 String tempFileName = tempFile.getAbsolutePath();
54
55
56 RecordManager recordManager = new RecordManager( tempFileName, 32 );
57 Method storeMethod = RecordManager.class.getDeclaredMethod( "store", long.class, int.class, PageIO[].class );
58 Method readIntMethod = RecordManager.class.getDeclaredMethod( "readInt", PageIO[].class, long.class );
59 storeMethod.setAccessible( true );
60 readIntMethod.setAccessible( true );
61
62
63 PageIO[] pageIos = new PageIO[2];
64 pageIos[0] = new PageIO();
65 pageIos[0].setData( ByteBuffer.allocate( recordManager.getPageSize() ) );
66 pageIos[1] = new PageIO();
67 pageIos[1].setData( ByteBuffer.allocate( recordManager.getPageSize() ) );
68
69
70 storeMethod.invoke( recordManager, 0, 0x12345678, pageIos );
71
72
73 int readValue = ( Integer ) readIntMethod.invoke( recordManager, pageIos, 0 );
74
75 assertEquals( 0x12345678, readValue );
76
77
78 storeMethod.invoke( recordManager, 16, 0x12345678, pageIos );
79
80
81 readValue = ( Integer ) readIntMethod.invoke( recordManager, pageIos, 16 );
82
83 assertEquals( 0x12345678, readValue );
84
85
86
87 storeMethod.invoke( recordManager, 17, 0x12345678, pageIos );
88
89
90 readValue = ( Integer ) readIntMethod.invoke( recordManager, pageIos, 17 );
91
92 assertEquals( 0x12345678, readValue );
93
94
95
96 storeMethod.invoke( recordManager, 18, 0x12345678, pageIos );
97
98
99 readValue = ( Integer ) readIntMethod.invoke( recordManager, pageIos, 18 );
100
101 assertEquals( 0x12345678, readValue );
102
103
104
105 storeMethod.invoke( recordManager, 19, 0x12345678, pageIos );
106
107
108 readValue = ( Integer ) readIntMethod.invoke( recordManager, pageIos, 19 );
109
110 assertEquals( 0x12345678, readValue );
111
112
113 storeMethod.invoke( recordManager, 20, 0x12345678, pageIos );
114
115
116 readValue = ( Integer ) readIntMethod.invoke( recordManager, pageIos, 20 );
117 }
118
119
120
121
122
123 @Test
124 public void testReadLong() throws Exception
125 {
126 File tempFile = tempFolder.newFile( "mavibot.db" );
127 String tempFileName = tempFile.getAbsolutePath();
128
129
130 RecordManager recordManager = new RecordManager( tempFileName, 32 );
131 Method storeMethod = RecordManager.class.getDeclaredMethod( "store", long.class, long.class, PageIO[].class );
132 Method readLongMethod = RecordManager.class.getDeclaredMethod( "readLong", PageIO[].class, long.class );
133 storeMethod.setAccessible( true );
134 readLongMethod.setAccessible( true );
135
136
137 PageIO[] pageIos = new PageIO[2];
138 pageIos[0] = new PageIO();
139 pageIos[0].setData( ByteBuffer.allocate( recordManager.getPageSize() ) );
140 pageIos[1] = new PageIO();
141 pageIos[1].setData( ByteBuffer.allocate( recordManager.getPageSize() ) );
142
143
144 storeMethod.invoke( recordManager, 0, 0x0123456789ABCDEFL, pageIos );
145
146
147 long readValue = ( Long ) readLongMethod.invoke( recordManager, pageIos, 0 );
148
149 assertEquals( 0x0123456789ABCDEFL, readValue );
150
151
152 storeMethod.invoke( recordManager, 12, 0x0123456789ABCDEFL, pageIos );
153
154
155 readValue = ( Long ) readLongMethod.invoke( recordManager, pageIos, 12 );
156
157 assertEquals( 0x0123456789ABCDEFL, readValue );
158
159
160
161 storeMethod.invoke( recordManager, 13, 0x0123456789ABCDEFL, pageIos );
162
163
164 readValue = ( Long ) readLongMethod.invoke( recordManager, pageIos, 13 );
165
166 assertEquals( 0x0123456789ABCDEFL, readValue );
167
168
169
170 storeMethod.invoke( recordManager, 14, 0x0123456789ABCDEFL, pageIos );
171
172
173 readValue = ( Long ) readLongMethod.invoke( recordManager, pageIos, 14 );
174
175 assertEquals( 0x0123456789ABCDEFL, readValue );
176
177
178
179 storeMethod.invoke( recordManager, 15, 0x0123456789ABCDEFL, pageIos );
180
181
182 readValue = ( Long ) readLongMethod.invoke( recordManager, pageIos, 15 );
183
184 assertEquals( 0x0123456789ABCDEFL, readValue );
185
186
187
188 storeMethod.invoke( recordManager, 16, 0x0123456789ABCDEFL, pageIos );
189
190
191 readValue = ( Long ) readLongMethod.invoke( recordManager, pageIos, 16 );
192
193 assertEquals( 0x0123456789ABCDEFL, readValue );
194
195
196
197 storeMethod.invoke( recordManager, 17, 0x0123456789ABCDEFL, pageIos );
198
199
200 readValue = ( Long ) readLongMethod.invoke( recordManager, pageIos, 17 );
201
202 assertEquals( 0x0123456789ABCDEFL, readValue );
203
204
205
206 storeMethod.invoke( recordManager, 18, 0x0123456789ABCDEFL, pageIos );
207
208
209 readValue = ( Long ) readLongMethod.invoke( recordManager, pageIos, 18 );
210
211 assertEquals( 0x0123456789ABCDEFL, readValue );
212
213
214
215 storeMethod.invoke( recordManager, 19, 0x0123456789ABCDEFL, pageIos );
216
217
218 readValue = ( Long ) readLongMethod.invoke( recordManager, pageIos, 19 );
219
220 assertEquals( 0x0123456789ABCDEFL, readValue );
221
222
223 storeMethod.invoke( recordManager, 20, 0x0123456789ABCDEFL, pageIos );
224
225
226 readValue = ( Long ) readLongMethod.invoke( recordManager, pageIos, 20 );
227 }
228
229
230
231
232
233 @Test
234 public void testReadBytes() throws Exception
235 {
236 File tempFile = tempFolder.newFile( "mavibot.db" );
237 String tempFileName = tempFile.getAbsolutePath();
238
239
240 RecordManager recordManager = new RecordManager( tempFileName, 32 );
241 Method storeMethod = RecordManager.class.getDeclaredMethod( "store", long.class, byte[].class, PageIO[].class );
242 Method readBytesMethod = RecordManager.class.getDeclaredMethod( "readBytes", PageIO[].class, long.class );
243 storeMethod.setAccessible( true );
244 readBytesMethod.setAccessible( true );
245
246
247 PageIO[] pageIos = new PageIO[4];
248 pageIos[0] = new PageIO();
249 pageIos[0].setData( ByteBuffer.allocate( recordManager.getPageSize() ) );
250 pageIos[1] = new PageIO();
251 pageIos[1].setData( ByteBuffer.allocate( recordManager.getPageSize() ) );
252 pageIos[2] = new PageIO();
253 pageIos[2].setData( ByteBuffer.allocate( recordManager.getPageSize() ) );
254 pageIos[3] = new PageIO();
255 pageIos[3].setData( ByteBuffer.allocate( recordManager.getPageSize() ) );
256
257
258 byte[] bytes = new byte[]
259 { 0x01, 0x23, 0x45, 0x67 };
260
261
262 storeMethod.invoke( recordManager, 0L, bytes, pageIos );
263
264
265 ByteBuffer readBytes = ( ByteBuffer ) readBytesMethod.invoke( recordManager, pageIos, 0L );
266
267
268 assertNotNull( readBytes );
269 assertEquals( 4, readBytes.limit() );
270
271 assertEquals( 0x01, readBytes.get() );
272 assertEquals( 0x23, readBytes.get() );
273 assertEquals( 0x45, readBytes.get() );
274 assertEquals( 0x67, readBytes.get() );
275
276
277 storeMethod.invoke( recordManager, 12L, bytes, pageIos );
278
279
280 readBytes = ( ByteBuffer ) readBytesMethod.invoke( recordManager, pageIos, 12L );
281
282
283 assertNotNull( readBytes );
284 assertEquals( 4, readBytes.limit() );
285
286 assertEquals( 0x01, readBytes.get() );
287 assertEquals( 0x23, readBytes.get() );
288 assertEquals( 0x45, readBytes.get() );
289 assertEquals( 0x67, readBytes.get() );
290
291
292 bytes = new byte[16];
293
294 for ( int i = 0; i < 16; i++ )
295 {
296 bytes[i] = ( byte ) ( i + 1 );
297 }
298
299 storeMethod.invoke( recordManager, 0L, bytes, pageIos );
300
301
302 readBytes = ( ByteBuffer ) readBytesMethod.invoke( recordManager, pageIos, 0L );
303
304
305 assertNotNull( readBytes );
306 assertEquals( 16, readBytes.limit() );
307
308
309 for ( int i = 0; i < 16; i++ )
310 {
311 assertEquals( i + 1, readBytes.get() );
312 }
313
314
315 storeMethod.invoke( recordManager, 15L, bytes, pageIos );
316
317
318 readBytes = ( ByteBuffer ) readBytesMethod.invoke( recordManager, pageIos, 15L );
319
320
321 assertNotNull( readBytes );
322 assertEquals( 16, readBytes.limit() );
323
324 for ( int i = 0; i < 16; i++ )
325 {
326 assertEquals( i + 1, readBytes.get() );
327 }
328
329
330 bytes = new byte[80];
331
332 for ( int i = 0; i < 80; i++ )
333 {
334 bytes[i] = ( byte ) ( i + 1 );
335 }
336
337 storeMethod.invoke( recordManager, 2L, bytes, pageIos );
338
339
340 readBytes = ( ByteBuffer ) readBytesMethod.invoke( recordManager, pageIos, 2L );
341
342
343 assertNotNull( readBytes );
344 assertEquals( 80, readBytes.limit() );
345
346
347 for ( int i = 0; i < 80; i++ )
348 {
349 assertEquals( i + 1, readBytes.get() );
350 }
351 }
352 }