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
23
24 databaseDirectory = TestUtils.tempDirectory();
25
26
27
28
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 }