KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sleepycat > je > log > FileReaderBufferingTest


1 /*-
2  * See the file LICENSE for redistribution information.
3  *
4  * Copyright (c) 2002,2006 Oracle. All rights reserved.
5  *
6  * $Id: FileReaderBufferingTest.java,v 1.11 2006/10/30 21:14:46 bostic Exp $
7  */

8
9 package com.sleepycat.je.log;
10
11 import java.io.File JavaDoc;
12 import java.io.IOException JavaDoc;
13 import java.util.ArrayList JavaDoc;
14 import java.util.Arrays JavaDoc;
15 import java.util.Iterator JavaDoc;
16
17 import junit.framework.TestCase;
18
19 import com.sleepycat.je.DatabaseException;
20 import com.sleepycat.je.DbInternal;
21 import com.sleepycat.je.Environment;
22 import com.sleepycat.je.EnvironmentConfig;
23 import com.sleepycat.je.config.EnvironmentParams;
24 import com.sleepycat.je.dbi.EnvironmentImpl;
25 import com.sleepycat.je.util.TestUtils;
26 import com.sleepycat.je.utilint.DbLsn;
27 import com.sleepycat.je.utilint.Tracer;
28
29 /**
30  * Check our ability to adjust the file reader buffer size.
31  */

32 public class FileReaderBufferingTest extends TestCase {
33
34     private File JavaDoc envHome;
35     private Environment env;
36     private EnvironmentImpl envImpl;
37     private ArrayList JavaDoc expectedLsns;
38     private ArrayList JavaDoc expectedVals;
39
40     public FileReaderBufferingTest() {
41         super();
42         envHome = new File JavaDoc(System.getProperty(TestUtils.DEST_DIR));
43     }
44
45     public void setUp()
46         throws IOException JavaDoc, DatabaseException {
47
48         TestUtils.removeLogFiles("Setup", envHome, false);
49     }
50     
51     public void tearDown()
52         throws IOException JavaDoc, DatabaseException {
53
54         TestUtils.removeFiles("TearDown", envHome, FileManager.JE_SUFFIX);
55     }
56
57     /**
58      * Should overflow once and then grow.
59      */

60     public void testBasic()
61         throws Exception JavaDoc {
62         readLog(1050, // starting size of object in entry
63
0, // object growth increment
64
100, // starting read buffer size
65
"3000", // max read buffer size
66
0); // expected number of overflows.
67
}
68
69     /**
70      * Should overflow once and then grow.
71      */

72     public void testCantGrow()
73         throws Exception JavaDoc {
74         readLog(2000, // starting size of object in entry
75
0, // object growth increment
76
100, // starting read buffer size
77
"1000", // max read buffer size
78
11); // expected number of overflows. This comes out to
79
// an odd number because one of the entires hits it
80
// in just the right place so as to overflow twice.
81
}
82
83     /**
84      * Should overflow, grow, and then reach the max.
85      */

86     public void testReachMax()
87         throws Exception JavaDoc {
88         readLog(1000, // size of object in entry
89
1000, // object growth increment
90
100, // starting read buffer size
91
"3500", // max read buffer size
92
8); // expected number of overflows.
93
}
94     /**
95      *
96      */

97     private void readLog(int entrySize,
98                          int entrySizeIncrement,
99                          int readBufferSize,
100                          String JavaDoc bufferMaxSize,
101                          int expectedOverflows)
102         throws Exception JavaDoc {
103
104         try {
105         
106             EnvironmentConfig envConfig = TestUtils.initEnvConfig();
107             envConfig.setAllowCreate(true);
108             envConfig.setConfigParam(
109                      EnvironmentParams.LOG_ITERATOR_MAX_SIZE.getName(),
110                                      bufferMaxSize);
111             env = new Environment(envHome, envConfig);
112
113             envImpl = DbInternal.envGetEnvironmentImpl(env);
114
115             /* Make a log file */
116             createLogFile(10, entrySize, entrySizeIncrement);
117             SearchFileReader reader =
118                 new SearchFileReader(envImpl,
119                                      readBufferSize,
120                                      true,
121                                      DbLsn.longToLsn
122                      ((Long JavaDoc) expectedLsns.get(0)),
123                                      DbLsn.NULL_LSN,
124                                      LogEntryType.LOG_TRACE);
125
126             Iterator JavaDoc lsnIter = expectedLsns.iterator();
127             Iterator JavaDoc valIter = expectedVals.iterator();
128             while (reader.readNextEntry()) {
129                 Tracer rec = (Tracer)reader.getLastObject();
130                 assertTrue(lsnIter.hasNext());
131                 assertEquals(reader.getLastLsn(),
132                  DbLsn.longToLsn((Long JavaDoc) lsnIter.next()));
133                 assertEquals((String JavaDoc) valIter.next(), rec.getMessage());
134             }
135             assertEquals(10, reader.getNumRead());
136             assertEquals(expectedOverflows, reader.getNRepeatIteratorReads());
137
138         } catch (Exception JavaDoc e) {
139             e.printStackTrace();
140             throw e;
141         } finally {
142             env.close();
143         }
144     }
145
146     /**
147      * Write a logfile of entries, put the entries that we expect to
148      * read into a list for later verification.
149      * @return end of file LSN.
150      */

151     private void createLogFile(int numItems, int size, int sizeIncrement)
152         throws IOException JavaDoc, DatabaseException {
153
154         LogManager logManager = envImpl.getLogManager();
155         expectedLsns = new ArrayList JavaDoc();
156         expectedVals = new ArrayList JavaDoc();
157
158         for (int i = 0; i < numItems; i++) {
159             /* Add a debug record just to be filler. */
160             int recordSize = size + (i * sizeIncrement);
161             byte [] filler = new byte[recordSize];
162             Arrays.fill(filler, (byte)i);
163             String JavaDoc val = new String JavaDoc(filler);
164
165             Tracer rec = new Tracer(val);
166             long lsn = logManager.log(rec);
167             expectedLsns.add(new Long JavaDoc(lsn));
168             expectedVals.add(val);
169         }
170
171         logManager.flush();
172         envImpl.getFileManager().clear();
173     }
174 }
175
Popular Tags