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;
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.BTree;
32  import org.apache.directory.mavibot.btree.PageIO;
33  import org.apache.directory.mavibot.btree.RecordManager;
34  import org.apache.directory.mavibot.btree.serializer.LongSerializer;
35  import org.apache.directory.mavibot.btree.serializer.StringSerializer;
36  import org.junit.After;
37  import org.junit.Before;
38  import org.junit.Rule;
39  import org.junit.Test;
40  import org.junit.rules.TemporaryFolder;
41  
42  
43  /**
44   * Test some of the RecordManager prvate methods
45   * @author <a href="mailto:labs@labs.apache.org">Mavibot labs Project</a>
46   */
47  public class RecordManagerPrivateMethodTest
48  {
49      
50      private BTree<Long, String> btree = null;
51  
52      private RecordManager recordManager = null;
53  
54      @Rule
55      public TemporaryFolder tempFolder = new TemporaryFolder();
56  
57      private File dataDir = null;
58  
59  
60      @Before
61      public void createRecordManager() throws Exception
62      {
63          dataDir = tempFolder.newFolder( UUID.randomUUID().toString() );
64          
65          // Now, try to reload the file back
66          recordManager = new RecordManager( dataDir.getAbsolutePath(), 32 );
67  
68          // Create a new BTree
69          btree = ( BTree<Long, String> ) recordManager.addBTree( "test", new LongSerializer(), new StringSerializer(), false );
70      }
71  
72  
73      @After
74      public void closeBTree() throws IOException
75      {
76          recordManager.close();
77      }
78      
79      
80      /**
81       * Test the getFreePageIOs method
82       */
83      @Test
84      public void testGetFreePageIos() throws IOException, NoSuchMethodException, InvocationTargetException,
85          IllegalAccessException
86      {
87          Method getFreePageIOsMethod = RecordManager.class.getDeclaredMethod( "getFreePageIOs", int.class );
88          getFreePageIOsMethod.setAccessible( true );
89  
90          PageIO[] pages = (org.apache.directory.mavibot.btree.PageIO[] ) getFreePageIOsMethod.invoke( recordManager, 0 );
91  
92          assertEquals( 0, pages.length );
93  
94          for ( int i = 1; i < 20; i++ )
95          {
96              pages = (org.apache.directory.mavibot.btree.PageIO[] ) getFreePageIOsMethod.invoke( recordManager, i );
97              assertEquals( 1, pages.length );
98          }
99  
100         for ( int i = 21; i < 44; i++ )
101         {
102             pages = (org.apache.directory.mavibot.btree.PageIO[] ) getFreePageIOsMethod.invoke( recordManager, i );
103             assertEquals( 2, pages.length );
104         }
105 
106         for ( int i = 45; i < 68; i++ )
107         {
108             pages = (org.apache.directory.mavibot.btree.PageIO[] ) getFreePageIOsMethod.invoke( recordManager, i );
109             assertEquals( 3, pages.length );
110         }
111         
112         btree.close();
113     }
114 
115 
116     /**
117      * Test the ComputeNbPages method
118      */
119     @Test
120     public void testComputeNbPages() throws IOException, SecurityException, NoSuchMethodException,
121         IllegalArgumentException, IllegalAccessException, InvocationTargetException
122     {
123         Method computeNbPagesMethod = RecordManager.class.getDeclaredMethod( "computeNbPages", int.class );
124         computeNbPagesMethod.setAccessible( true );
125 
126         assertEquals( 0, ( ( Integer ) computeNbPagesMethod.invoke( recordManager, 0 ) ).intValue() );
127 
128         for ( int i = 1; i < 21; i++ )
129         {
130             assertEquals( 1, ( ( Integer ) computeNbPagesMethod.invoke( recordManager, i ) ).intValue() );
131         }
132 
133         for ( int i = 21; i < 45; i++ )
134         {
135             assertEquals( 2, ( ( Integer ) computeNbPagesMethod.invoke( recordManager, i ) ).intValue() );
136         }
137 
138         for ( int i = 45; i < 68; i++ )
139         {
140             assertEquals( 3, ( ( Integer ) computeNbPagesMethod.invoke( recordManager, i ) ).intValue() );
141         }
142         
143         btree.close();
144     }
145 }