1   package uba.db.impl.filesystem;
2   
3   import java.io.File;
4   
5   import uba.db.Database;
6   import uba.db.DatabaseImplTest;
7   import uba.db.DatabaseInitializationException;
8   import uba.db.SystemTableSchemas;
9   import uba.db.table.Table;
10  import uba.db.testhelpers.TestUtils;
11  
12  /***
13   * @version $Revision: 1.3 $
14   */
15  public class FileSystemDatabaseTest extends DatabaseImplTest {
16      private File databaseDirectory;
17  
18      /***
19       * @see junit.framework.TestCase#setUp()
20       */
21      protected void setUp() throws Exception {
22          // el orden de llamada al setUp del super es importante, por que se
23          // inicializa el directorio para la base de datos
24          databaseDirectory = TestUtils.tempDirectory();
25  
26          // algunos tests dependen de que los archivos no existan, asi hace un
27          // delete
28          // tambien en el setUp para asegurarse
29          deleteFiles();
30          super.setUp();
31      }
32  
33      /***
34       * @see junit.framework.TestCase#tearDown()
35       */
36      protected void tearDown() throws Exception {
37          super.tearDown();
38          deleteFiles();
39      }
40  
41      private void deleteFiles() {
42          deleteTableFiles(EMPLOYEE_TABLE_NAME.toLowerCase());
43          deleteTableFiles(SystemTableSchemas.TABLES_SCHEMA.tableName());
44      }
45  
46      private void deleteTableFiles(String tableName) {
47          File file = new File(databaseDirectory, tableName
48                  + FileSystemTable.DATA_FILE_SUFFIX);
49          if (file.exists()) {
50              file.delete();
51          }
52          file = new File(databaseDirectory, tableName + FileSystemTable.SCHEMA_FILE_SUFFIX);
53          if (file.exists()) {
54              file.delete();
55          }
56      }
57  
58      /***
59       * @see uba.db.DatabaseImplTest#createDatabase()
60       */
61      protected Database createDatabase() throws DatabaseInitializationException {
62          return new FileSystemDatabase(databaseDirectory);
63      }
64  
65      /***
66       * Test: cuando se crea la base de datos se debe crear un archivo para
67       * mantener las tablas disponibles.
68       */
69      public void testCreateFileForSysTables() {
70          File sysTablesFile = new File(databaseDirectory, SystemTableSchemas.TABLES_SCHEMA
71                  .tableName()
72                  + FileSystemTable.DATA_FILE_SUFFIX);
73          assertTrue(sysTablesFile.exists());
74      }
75  
76      /***
77       * Test: cuando se levanta la base de datos se debe leer el catalogo desde
78       * el file system.
79       */
80      public void testReadExistingCatalogFromFileSystem() throws Exception {
81          database.createTable(employeeSchema);
82  
83          FileSystemDatabase otherDatabase = new FileSystemDatabase(databaseDirectory);
84  
85          assertEquals(1, otherDatabase.userTables().size());
86  
87          Table employeeTable = (Table) otherDatabase.userTables().iterator().next();
88          assertSameSchema(employeeTable, employeeSchema);
89      }
90  }