/*
* Copyright 2008-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.batch.support;
import org.junit.Test;
import org.springframework.jdbc.support.MetaDataAccessException;
import javax.sql.DataSource;
import static org.junit.Assert.assertEquals;
import static org.springframework.batch.support.DatabaseType.DB2;
import static org.springframework.batch.support.DatabaseType.DB2VSE;
import static org.springframework.batch.support.DatabaseType.DB2ZOS;
import static org.springframework.batch.support.DatabaseType.DB2AS400;
import static org.springframework.batch.support.DatabaseType.DERBY;
import static org.springframework.batch.support.DatabaseType.HSQL;
import static org.springframework.batch.support.DatabaseType.MYSQL;
import static org.springframework.batch.support.DatabaseType.ORACLE;
import static org.springframework.batch.support.DatabaseType.POSTGRES;
import static org.springframework.batch.support.DatabaseType.SQLITE;
import static org.springframework.batch.support.DatabaseType.SQLSERVER;
import static org.springframework.batch.support.DatabaseType.SYBASE;
import static org.springframework.batch.support.DatabaseType.fromProductName;
/**
*
* @author Lucas Ward
* @author Will Schipp
*
*/
public class DatabaseTypeTests {
@Test
public void testFromProductName() {
assertEquals(DERBY, fromProductName("Apache Derby"));
assertEquals(DB2, fromProductName("DB2"));
assertEquals(DB2VSE, fromProductName("DB2VSE"));
assertEquals(DB2ZOS, fromProductName("DB2ZOS"));
assertEquals(DB2AS400, fromProductName("DB2AS400"));
assertEquals(HSQL, fromProductName("HSQL Database Engine"));
assertEquals(SQLSERVER, fromProductName("Microsoft SQL Server"));
assertEquals(MYSQL, fromProductName("MySQL"));
assertEquals(ORACLE, fromProductName("Oracle"));
assertEquals(POSTGRES, fromProductName("PostgreSQL"));
assertEquals(SYBASE, fromProductName("Sybase"));
assertEquals(SQLITE, fromProductName("SQLite"));
}
@Test(expected = IllegalArgumentException.class)
public void testInvalidProductName() {
fromProductName("bad product name");
}
@Test
public void testFromMetaDataForDerby() throws Exception {
DataSource ds = DatabaseTypeTestUtils.getMockDataSource("Apache Derby");
assertEquals(DERBY, DatabaseType.fromMetaData(ds));
}
@Test
public void testFromMetaDataForDB2() throws Exception {
DataSource oldDs = DatabaseTypeTestUtils.getMockDataSource("DB2/Linux", "SQL0901");
assertEquals(DB2, DatabaseType.fromMetaData(oldDs));
DataSource newDs = DatabaseTypeTestUtils.getMockDataSource("DB2/NT", "SQL0901");
assertEquals(DB2, DatabaseType.fromMetaData(newDs));
}
@Test
public void testFromMetaDataForDB2VSE() throws Exception {
DataSource ds = DatabaseTypeTestUtils.getMockDataSource("DB2 for DB2 for z/OS VUE", "ARI08015");
assertEquals(DB2VSE, DatabaseType.fromMetaData(ds));
}
@Test
public void testFromMetaDataForDB2ZOS() throws Exception {
DataSource oldDs = DatabaseTypeTestUtils.getMockDataSource("DB2", "DSN08015");
assertEquals(DB2ZOS, DatabaseType.fromMetaData(oldDs));
DataSource newDs = DatabaseTypeTestUtils.getMockDataSource("DB2 for DB2 UDB for z/OS", "DSN08015");
assertEquals(DB2ZOS, DatabaseType.fromMetaData(newDs));
}
@Test
public void testFromMetaDataForDB2AS400() throws Exception {
DataSource toolboxDs = DatabaseTypeTestUtils.getMockDataSource("DB2 UDB for AS/400", "07.01.0000 V7R1m0");
assertEquals(DB2AS400, DatabaseType.fromMetaData(toolboxDs));
DataSource nativeDs = DatabaseTypeTestUtils.getMockDataSource("DB2 UDB for AS/400", "V7R1M0");
assertEquals(DB2AS400, DatabaseType.fromMetaData(nativeDs));
DataSource prdidDs = DatabaseTypeTestUtils.getMockDataSource("DB2 UDB for AS/400", "QSQ07010");
assertEquals(DB2AS400, DatabaseType.fromMetaData(prdidDs));
}
@Test
public void testFromMetaDataForHsql() throws Exception {
DataSource ds = DatabaseTypeTestUtils.getMockDataSource("HSQL Database Engine");
assertEquals(HSQL, DatabaseType.fromMetaData(ds));
}
@Test
public void testFromMetaDataForSqlServer() throws Exception {
DataSource ds = DatabaseTypeTestUtils.getMockDataSource("Microsoft SQL Server");
assertEquals(SQLSERVER, DatabaseType.fromMetaData(ds));
}
@Test
public void testFromMetaDataForMySql() throws Exception {
DataSource ds = DatabaseTypeTestUtils.getMockDataSource("MySQL");
assertEquals(MYSQL, DatabaseType.fromMetaData(ds));
}
@Test
public void testFromMetaDataForOracle() throws Exception {
DataSource ds = DatabaseTypeTestUtils.getMockDataSource("Oracle");
assertEquals(ORACLE, DatabaseType.fromMetaData(ds));
}
@Test
public void testFromMetaDataForPostgres() throws Exception {
DataSource ds = DatabaseTypeTestUtils.getMockDataSource("PostgreSQL");
assertEquals(POSTGRES, DatabaseType.fromMetaData(ds));
}
@Test
public void testFromMetaDataForSybase() throws Exception {
DataSource ds = DatabaseTypeTestUtils.getMockDataSource("Adaptive Server Enterprise");
assertEquals(SYBASE, DatabaseType.fromMetaData(ds));
}
@Test(expected=MetaDataAccessException.class)
public void testBadMetaData() throws Exception {
DataSource ds = DatabaseTypeTestUtils.getMockDataSource(new MetaDataAccessException("Bad!"));
assertEquals(SYBASE, DatabaseType.fromMetaData(ds));
}
}