View Javadoc

1   /*
2    *  Licensed to the Apache Software Foundation (ASF) under one
3    *  or more contributor license agreements.  See the NOTICE file
4    *  distributed with this work for additional information
5    *  regarding copyright ownership.  The ASF licenses this file
6    *  to you under the Apache License, Version 2.0 (the
7    *  "License"); you may not use this file except in compliance
8    *  with the License.  You may obtain a copy of the License at
9    *
10   *    http://www.apache.org/licenses/LICENSE-2.0
11   *
12   *  Unless required by applicable law or agreed to in writing,
13   *  software distributed under the License is distributed on an
14   *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   *  KIND, either express or implied.  See the License for the
16   *  specific language governing permissions and limitations
17   *  under the License.
18   *
19   */
20  package org.apache.directory.mavibot.btree.managed;
21  
22  
23  import static org.junit.Assert.assertEquals;
24  
25  import java.io.File;
26  import java.io.IOException;
27  import java.lang.reflect.InvocationTargetException;
28  import java.lang.reflect.Method;
29  import java.util.UUID;
30  
31  import org.apache.directory.mavibot.btree.serializer.LongSerializer;
32  import org.apache.directory.mavibot.btree.serializer.StringSerializer;
33  import org.junit.After;
34  import org.junit.Before;
35  import org.junit.Rule;
36  import org.junit.Test;
37  import org.junit.rules.TemporaryFolder;
38  
39  
40  /**
41   * Test some of the RecordManager prvate methods
42   * 
43   * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
44   */
45  public class RecordManagerPrivateMethodTest
46  {
47  
48      private BTree<Long, String> btree = null;
49  
50      private RecordManager recordManager = null;
51  
52      @Rule
53      public TemporaryFolder tempFolder = new TemporaryFolder();
54  
55      private File dataDir = null;
56  
57  
58      @Before
59      public void createRecordManager() throws Exception
60      {
61          dataDir = tempFolder.newFolder( UUID.randomUUID().toString() );
62  
63          // Now, try to reload the file back
64          recordManager = new RecordManager( dataDir.getAbsolutePath(), 32 );
65  
66          // Create a new BTree
67          btree = recordManager.addBTree( "test", new LongSerializer(), new StringSerializer(), false );
68      }
69  
70  
71      @After
72      public void closeBTree() throws IOException
73      {
74          recordManager.close();
75      }
76  
77  
78      /**
79       * Test the getFreePageIOs method
80       */
81      @Test
82      public void testGetFreePageIos() throws IOException, NoSuchMethodException, InvocationTargetException,
83          IllegalAccessException
84      {
85          Method getFreePageIOsMethod = RecordManager.class.getDeclaredMethod( "getFreePageIOs", int.class );
86          getFreePageIOsMethod.setAccessible( true );
87  
88          PageIO[] pages = ( PageIO[] ) getFreePageIOsMethod.invoke( recordManager, 0 );
89  
90          assertEquals( 0, pages.length );
91  
92          for ( int i = 1; i < 20; i++ )
93          {
94              pages = ( PageIO[] ) getFreePageIOsMethod.invoke( recordManager, i );
95              assertEquals( 1, pages.length );
96          }
97  
98          for ( int i = 21; i < 44; i++ )
99          {
100             pages = ( PageIO[] ) getFreePageIOsMethod.invoke( recordManager, i );
101             assertEquals( 2, pages.length );
102         }
103 
104         for ( int i = 45; i < 68; i++ )
105         {
106             pages = ( PageIO[] ) getFreePageIOsMethod.invoke( recordManager, i );
107             assertEquals( 3, pages.length );
108         }
109 
110         btree.close();
111     }
112 
113 
114     /**
115      * Test the ComputeNbPages method
116      */
117     @Test
118     public void testComputeNbPages() throws IOException, SecurityException, NoSuchMethodException,
119         IllegalArgumentException, IllegalAccessException, InvocationTargetException
120     {
121         Method computeNbPagesMethod = RecordManager.class.getDeclaredMethod( "computeNbPages", int.class );
122         computeNbPagesMethod.setAccessible( true );
123 
124         assertEquals( 0, ( ( Integer ) computeNbPagesMethod.invoke( recordManager, 0 ) ).intValue() );
125 
126         for ( int i = 1; i < 21; i++ )
127         {
128             assertEquals( 1, ( ( Integer ) computeNbPagesMethod.invoke( recordManager, i ) ).intValue() );
129         }
130 
131         for ( int i = 21; i < 45; i++ )
132         {
133             assertEquals( 2, ( ( Integer ) computeNbPagesMethod.invoke( recordManager, i ) ).intValue() );
134         }
135 
136         for ( int i = 45; i < 68; i++ )
137         {
138             assertEquals( 3, ( ( Integer ) computeNbPagesMethod.invoke( recordManager, i ) ).intValue() );
139         }
140 
141         btree.close();
142     }
143 }