/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2002-2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotools.data.postgis.synch; import java.io.IOException; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.geotools.data.jdbc.JDBCUtils; import org.geotools.data.postgis.VersionedPostgisDataStore; public class SupportTableOnlineTest extends AbstractSynchronizedPostgisDataTestCase { public SupportTableOnlineTest(String name) { super(name); } public void testTableCreation() throws IOException, SQLException { buildDataStore(); // now the tables should be there Connection conn = null; ResultSet tables = null; try { boolean changeSets = false; boolean tablesChanged = false; boolean versionedTables = false; conn = pool.getConnection(); DatabaseMetaData meta = conn.getMetaData(); String[] tableType = { "TABLE" }; tables = meta.getTables(null, f.schema, "%", tableType); while (tables.next()) { String tableName = tables.getString(3); if (tableName.equals(VersionedPostgisDataStore.TBL_CHANGESETS)) changeSets = true; if (tableName.equals(VersionedPostgisDataStore.TBL_TABLESCHANGED)) tablesChanged = true; if (tableName.equals(VersionedPostgisDataStore.TBL_VERSIONEDTABLES)) versionedTables = true; } tables.close(); assertTrue(changeSets); assertTrue(tablesChanged); assertTrue(versionedTables); } finally { JDBCUtils.close(tables); JDBCUtils.close(conn, null, null); } } public void testPreexistentTables() throws IOException, SQLException { // first call should create them, second one should not fail buildDataStore(); buildDataStore(); } public void testTablesInTheWay() throws IOException, SQLException { Connection conn = null; Statement st = null; try { conn = pool.getConnection(); st = conn.createStatement(); st.execute("CREATE TABLE " + VersionedPostgisDataStore.TBL_CHANGESETS + "(ID SERIAL, STUFF VARCHAR(20))"); try { buildDataStore(); fail("Should have failed because of the pre-existing but alone version support table"); } catch (IOException e) { // ok } SqlTestUtils.dropTable(pool, VersionedPostgisDataStore.TBL_CHANGESETS, true); st.execute("CREATE TABLE " + VersionedPostgisDataStore.TBL_TABLESCHANGED + "(ID SERIAL, STUFF VARCHAR(20))"); try { buildDataStore(); fail("Should have failed because of the pre-existing but alone version support table"); } catch (IOException e) { // ok } SqlTestUtils.dropTable(pool, VersionedPostgisDataStore.TBL_TABLESCHANGED, false); st.execute("CREATE TABLE " + VersionedPostgisDataStore.TBL_VERSIONEDTABLES + "(ID SERIAL, STUFF VARCHAR(20))"); try { buildDataStore(); fail("Should have failed because of the pre-existing but alone version support table"); } catch (IOException e) { // ok } SqlTestUtils.dropTable(pool, VersionedPostgisDataStore.TBL_VERSIONEDTABLES, true); } finally { JDBCUtils.close(st); JDBCUtils.close(conn, null, null); } } }