/*
* Copyright 2010 Research Studios Austria Forschungsgesellschaft mBH
*
* This file is part of easyrec.
*
* easyrec is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* easyrec 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with easyrec. If not, see <http://www.gnu.org/licenses/>.
*/
package org.easyrec.utils.spring.store.dao;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.BadSqlGrammarException;
import org.springframework.jdbc.UncategorizedSQLException;
import org.unitils.UnitilsJUnit4TestClassRunner;
import org.unitils.spring.annotation.SpringApplicationContext;
import org.unitils.spring.annotation.SpringBeanByName;
import static org.junit.Assert.*;
/**
* Tests for the {@link org.easyrec.utils.spring.store.dao.DBRootDAO} class.
* <p/>
* <p><b>Company: </b>
* SAT, Research Studios Austria</p>
* <p/>
* <p><b>Copyright: </b>
* (c) 2007</p>
* <p/>
* <p><b>last modified:</b><br/>
* $Author: pmarschik $<br/>
* $Date: 2011-02-11 11:30:46 +0100 (Fr, 11 Feb 2011) $<br/>
* $Revision: 17662 $</p>
*
* @author Roman Cerny
*/
@RunWith(UnitilsJUnit4TestClassRunner.class)
@SpringApplicationContext({
"spring/easyrecDataSource.xml", "spring/utils/DBRootDAO.xml"})
public class DBRootDAOTest {
@SpringBeanByName
private DBRootDAO rootDAO;
private static final String DB_NAME = "12345xyz";
// test methods
public void testExistsDatabaseNonExisting() {
assertFalse(rootDAO.existsDatabase(DB_NAME));
}
@Test
public void testExistsDatabaseExisting() {
try {
rootDAO.createDatabase(DB_NAME);
assertTrue(rootDAO.existsDatabase(DB_NAME));
} finally {
rootDAO.deleteDatabase(DB_NAME);
assertFalse(rootDAO.existsDatabase(DB_NAME));
}
}
@Test
public void testCreateDatabaseNullDBName() {
try {
rootDAO.createDatabase(null);
fail();
} catch (IllegalArgumentException iae) {
assertEquals(iae.getMessage(), "passed param 'databaseName' must not be null or empty");
}
}
@Test
public void testCreateDatabaseEmptyDBName() {
try {
rootDAO.createDatabase("");
fail();
} catch (IllegalArgumentException iae) {
assertEquals(iae.getMessage(), "passed param 'databaseName' must not be null or empty");
}
}
@Test
public void testCreateDatabaseForbiddenDBName() {
try {
rootDAO.createDatabase("create");
fail();
} catch (BadSqlGrammarException bsge) {
}
}
@Test
public void testCreateDatabaseNonExistingNoOverwrite() {
try {
assertFalse(rootDAO.existsDatabase(DB_NAME));
rootDAO.createDatabase(DB_NAME);
assertTrue(rootDAO.existsDatabase(DB_NAME));
} finally {
rootDAO.deleteDatabase(DB_NAME);
assertFalse(rootDAO.existsDatabase(DB_NAME));
}
}
@Test
public void testCreateDatabaseNonExistingOverwrite() {
try {
assertFalse(rootDAO.existsDatabase(DB_NAME));
rootDAO.createDatabase(DB_NAME, true);
assertTrue(rootDAO.existsDatabase(DB_NAME));
} finally {
rootDAO.deleteDatabase(DB_NAME);
assertFalse(rootDAO.existsDatabase(DB_NAME));
}
}
@Test
public void testCreateDatabaseExistingNoOverwrite() {
try {
assertFalse(rootDAO.existsDatabase(DB_NAME));
rootDAO.createDatabase(DB_NAME);
assertTrue(rootDAO.existsDatabase(DB_NAME));
rootDAO.createDatabase(DB_NAME);
fail();
} catch (IllegalArgumentException iae) {
} finally {
rootDAO.deleteDatabase(DB_NAME);
assertFalse(rootDAO.existsDatabase(DB_NAME));
}
}
@Test
public void testCreateDatabaseExistingOverwrite() {
try {
assertFalse(rootDAO.existsDatabase(DB_NAME));
rootDAO.createDatabase(DB_NAME, true);
assertTrue(rootDAO.existsDatabase(DB_NAME));
rootDAO.createDatabase(DB_NAME, true);
assertTrue(rootDAO.existsDatabase(DB_NAME));
} finally {
rootDAO.deleteDatabase(DB_NAME);
assertFalse(rootDAO.existsDatabase(DB_NAME));
}
}
@Test
public void testCreateDatabaseExistingNoOverwriteNoCheck() {
try {
assertFalse(rootDAO.existsDatabase(DB_NAME));
rootDAO.createDatabase(DB_NAME);
assertTrue(rootDAO.existsDatabase(DB_NAME));
rootDAO.createDatabase(DB_NAME, false, false);
fail();
} catch (UncategorizedSQLException use) {
} finally {
rootDAO.deleteDatabase(DB_NAME);
}
}
@Test
public void testCreateDatabaseExistingOverwriteNoCheck() {
try {
assertFalse(rootDAO.existsDatabase(DB_NAME));
rootDAO.createDatabase(DB_NAME);
assertTrue(rootDAO.existsDatabase(DB_NAME));
rootDAO.createDatabase(DB_NAME, true, false);
fail();
} catch (UncategorizedSQLException use) {
} finally {
rootDAO.deleteDatabase(DB_NAME);
assertFalse(rootDAO.existsDatabase(DB_NAME));
}
}
@Test
public void testDeleteDatabaseNonExistingCheck() {
try {
assertFalse(rootDAO.existsDatabase(DB_NAME));
rootDAO.deleteDatabase(DB_NAME);
fail();
} catch (IllegalArgumentException iae) {
assertEquals(iae.getMessage(), "the database '" + DB_NAME + "' does not exist, it can not be deleted");
}
}
@Test
public void testDeleteDatabaseNonExistingNoCheck() {
try {
assertFalse(rootDAO.existsDatabase(DB_NAME));
rootDAO.deleteDatabase(DB_NAME, false);
fail();
} catch (DataAccessException dae) {
}
}
@Test
public void testDeleteDatabaseExisting() {
assertFalse(rootDAO.existsDatabase(DB_NAME));
rootDAO.createDatabase(DB_NAME);
assertTrue(rootDAO.existsDatabase(DB_NAME));
rootDAO.deleteDatabase(DB_NAME);
assertFalse(rootDAO.existsDatabase(DB_NAME));
}
}