/*
* Copyright 2004-2015 the Seasar Foundation and the Others.
*
* 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.seasar.extension.jdbc.gen.internal.version;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.seasar.extension.jdbc.gen.internal.sql.SqlUnitExecutorImpl;
import org.seasar.extension.jdbc.gen.sql.SqlExecutionContext;
import org.seasar.extension.jdbc.gen.version.Migrater;
import org.seasar.extension.jdbc.gen.version.SchemaInfoTable;
import org.seasar.framework.mock.sql.MockDataSource;
import org.seasar.framework.util.ResourceUtil;
import static org.junit.Assert.*;
/**
* @author taedium
*
*/
public class MigraterImplTest {
private SqlUnitExecutorImpl sqlUnitExecutor;
private DdlVersionDirectoryTreeImpl directory;
private File baseDir;
/**
*
*/
@Before
public void setUp() {
sqlUnitExecutor = new SqlUnitExecutorImpl(new MockDataSource(), null,
false);
String path = getClass().getPackage().getName().replace('.', '/')
+ "/migrate";
baseDir = ResourceUtil.getResourceAsFile(path);
File versionFile = new File(baseDir, "ddl-version.txt");
directory = new DdlVersionDirectoryTreeImpl(baseDir, versionFile,
"v000", null);
}
/**
*
*/
@Test
public void testMigrate_latestVersion() {
SchemaInfoTable schemaInfoTable = new SchemaInfoTable() {
public int getVersionNo() {
return 9;
}
public void setVersionNo(int versionNo) {
}
};
MigraterImpl migrater = new MigraterImpl(sqlUnitExecutor,
schemaInfoTable, directory, "latest", "ut");
final List<File> dropFileList = new ArrayList<File>();
final List<File> createFileList = new ArrayList<File>();
migrater.migrate(new Migrater.Callback() {
public void drop(SqlExecutionContext sqlExecutionContext, File file) {
dropFileList.add(file);
}
public void create(SqlExecutionContext sqlExecutionContext,
File file) {
createFileList.add(file);
}
});
assertEquals(3, dropFileList.size());
File v009 = new File(baseDir, "v009");
File drop = new File(v009, "drop");
assertEquals(new File(drop, "aaa.sql"), dropFileList.get(0));
assertEquals(new File(drop, "bbb.sql"), dropFileList.get(1));
assertEquals(new File(drop, "ccc.sql"), dropFileList.get(2));
assertEquals(1, createFileList.size());
File v011 = new File(baseDir, "v011");
File create = new File(v011, "create");
assertEquals(new File(create, "aaa.sql"), createFileList.get(0));
}
/**
*
*/
@Test
public void testMigrate_specificVersion() {
SchemaInfoTable schemaInfoTable = new SchemaInfoTable() {
public int getVersionNo() {
return 9;
}
public void setVersionNo(int versionNo) {
}
};
MigraterImpl migrater = new MigraterImpl(sqlUnitExecutor,
schemaInfoTable, directory, "11", "ut");
final List<File> dropFileList = new ArrayList<File>();
final List<File> createFileList = new ArrayList<File>();
migrater.migrate(new Migrater.Callback() {
public void drop(SqlExecutionContext sqlExecutionContext, File file) {
dropFileList.add(file);
}
public void create(SqlExecutionContext sqlExecutionContext,
File file) {
createFileList.add(file);
}
});
assertEquals(3, dropFileList.size());
File v009 = new File(baseDir, "v009");
File drop = new File(v009, "drop");
assertEquals(new File(drop, "aaa.sql"), dropFileList.get(0));
assertEquals(new File(drop, "bbb.sql"), dropFileList.get(1));
assertEquals(new File(drop, "ccc.sql"), dropFileList.get(2));
assertEquals(1, createFileList.size());
File v011 = new File(baseDir, "v011");
File create = new File(v011, "create");
assertEquals(new File(create, "aaa.sql"), createFileList.get(0));
}
/**
*
*/
@Test
public void testMigrate_nextVersion() {
SchemaInfoTable schemaInfoTable = new SchemaInfoTable() {
public int getVersionNo() {
return 9;
}
public void setVersionNo(int versionNo) {
}
};
MigraterImpl migrater = new MigraterImpl(sqlUnitExecutor,
schemaInfoTable, directory, "next", "ut");
final List<File> dropFileList = new ArrayList<File>();
final List<File> createFileList = new ArrayList<File>();
migrater.migrate(new Migrater.Callback() {
public void drop(SqlExecutionContext sqlExecutionContext, File file) {
dropFileList.add(file);
}
public void create(SqlExecutionContext sqlExecutionContext,
File file) {
createFileList.add(file);
}
});
assertEquals(3, dropFileList.size());
File v009 = new File(baseDir, "v009");
File drop = new File(v009, "drop");
assertEquals(new File(drop, "aaa.sql"), dropFileList.get(0));
assertEquals(new File(drop, "bbb.sql"), dropFileList.get(1));
assertEquals(new File(drop, "ccc.sql"), dropFileList.get(2));
assertEquals(1, createFileList.size());
File v010 = new File(baseDir, "v010");
File create = new File(v010, "create");
assertEquals(new File(create, "aaa.sql"), createFileList.get(0));
}
/**
*
*/
@Test
public void testMigrate_nextVersion_GE_LatestVersion() {
SchemaInfoTable schemaInfoTable = new SchemaInfoTable() {
public int getVersionNo() {
return 11;
}
public void setVersionNo(int versionNo) {
}
};
MigraterImpl migrater = new MigraterImpl(sqlUnitExecutor,
schemaInfoTable, directory, "next", "ut");
final List<File> dropFileList = new ArrayList<File>();
final List<File> createFileList = new ArrayList<File>();
migrater.migrate(new Migrater.Callback() {
public void drop(SqlExecutionContext sqlExecutionContext, File file) {
dropFileList.add(file);
}
public void create(SqlExecutionContext sqlExecutionContext,
File file) {
createFileList.add(file);
}
});
assertEquals(3, dropFileList.size());
File v011 = new File(baseDir, "v011");
File drop = new File(v011, "drop");
assertEquals(new File(drop, "aaa.sql"), dropFileList.get(0));
assertEquals(new File(drop, "bbb.sql"), dropFileList.get(1));
assertEquals(new File(drop, "ccc.sql"), dropFileList.get(2));
assertEquals(1, createFileList.size());
File create = new File(v011, "create");
assertEquals(new File(create, "aaa.sql"), createFileList.get(0));
}
/**
*
*/
@Test
public void testMigrate_previousVersion() {
SchemaInfoTable schemaInfoTable = new SchemaInfoTable() {
public int getVersionNo() {
return 9;
}
public void setVersionNo(int versionNo) {
}
};
MigraterImpl migrater = new MigraterImpl(sqlUnitExecutor,
schemaInfoTable, directory, "previous", "ut");
final List<File> dropFileList = new ArrayList<File>();
final List<File> createFileList = new ArrayList<File>();
migrater.migrate(new Migrater.Callback() {
public void drop(SqlExecutionContext sqlExecutionContext, File file) {
dropFileList.add(file);
}
public void create(SqlExecutionContext sqlExecutionContext,
File file) {
createFileList.add(file);
}
});
assertEquals(3, dropFileList.size());
File v009 = new File(baseDir, "v009");
File drop = new File(v009, "drop");
assertEquals(new File(drop, "aaa.sql"), dropFileList.get(0));
assertEquals(new File(drop, "bbb.sql"), dropFileList.get(1));
assertEquals(new File(drop, "ccc.sql"), dropFileList.get(2));
assertEquals(1, createFileList.size());
File v008 = new File(baseDir, "v008");
File create = new File(v008, "create");
assertEquals(new File(create, "aaa.sql"), createFileList.get(0));
}
/**
*
*/
@Test
public void testMigrate_previousVersion_LE_zero() {
SchemaInfoTable schemaInfoTable = new SchemaInfoTable() {
public int getVersionNo() {
return 0;
}
public void setVersionNo(int versionNo) {
}
};
MigraterImpl migrater = new MigraterImpl(sqlUnitExecutor,
schemaInfoTable, directory, "previous", "ut");
final List<File> dropFileList = new ArrayList<File>();
final List<File> createFileList = new ArrayList<File>();
migrater.migrate(new Migrater.Callback() {
public void drop(SqlExecutionContext sqlExecutionContext, File file) {
dropFileList.add(file);
}
public void create(SqlExecutionContext sqlExecutionContext,
File file) {
createFileList.add(file);
}
});
assertEquals(3, dropFileList.size());
File v000 = new File(baseDir, "v000");
File drop = new File(v000, "drop");
assertEquals(new File(drop, "aaa.sql"), dropFileList.get(0));
assertEquals(new File(drop, "bbb.sql"), dropFileList.get(1));
assertEquals(new File(drop, "ccc.sql"), dropFileList.get(2));
assertEquals(0, createFileList.size());
}
}