/
TestSetupUtil.java
167 lines (126 loc) · 6.04 KB
/
TestSetupUtil.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
package org.jumpmind.symmetric.test;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.jumpmind.db.DbTestUtils;
import org.jumpmind.db.model.Database;
import org.jumpmind.db.platform.AbstractJdbcDatabasePlatform;
import org.jumpmind.db.platform.IDatabasePlatform;
import org.jumpmind.db.platform.IDdlBuilder;
import org.jumpmind.db.sql.SqlScript;
import org.jumpmind.properties.EnvironmentSpecificProperties;
import org.jumpmind.symmetric.ClientSymmetricEngine;
import org.jumpmind.symmetric.ISymmetricEngine;
import org.jumpmind.symmetric.TestConstants;
import org.jumpmind.symmetric.common.ParameterConstants;
import org.jumpmind.symmetric.db.ISymmetricDialect;
import org.jumpmind.symmetric.service.impl.ParameterService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
abstract public class TestSetupUtil {
private static final Logger logger = LoggerFactory.getLogger(TestSetupUtil.class);
static private ISymmetricEngine engine;
public static ISymmetricEngine prepareForServiceTests() {
if (engine == null) {
engine = prepareRoot("/test-services-setup.sql");
engine.start();
}
return engine;
}
protected static ISymmetricEngine prepareRoot() {
return prepareRoot(null);
}
protected static ISymmetricEngine prepareRoot(String sql) {
removeEmbededdedDatabases();
EnvironmentSpecificProperties properties = new EnvironmentSpecificProperties(new URL[] {
getResource(DbTestUtils.DB_TEST_PROPERTIES),
getResource("/symmetric-test.properties") }, "test.root", new String[] { "root" });
if (StringUtils.isNotBlank(sql)) {
properties.setProperty(ParameterConstants.AUTO_CONFIGURE_REG_SVR_SQL_SCRIPT, sql);
}
ISymmetricEngine engine = new ClientSymmetricEngine(properties);
dropAndCreateDatabaseTables(properties.getProperty("test.root"), engine);
return engine;
}
public static IDatabasePlatform dropDatabaseTables(String databaseType, ISymmetricEngine engine) {
engine.stop();
ISymmetricDialect dialect = engine.getSymmetricDialect();
final AbstractJdbcDatabasePlatform platform = (AbstractJdbcDatabasePlatform) dialect
.getPlatform();
dialect.cleanupTriggers();
IDdlBuilder builder = platform.getDdlBuilder();
platform.resetDataSource();
String fileName = TestConstants.TEST_DROP_SEQ_SCRIPT + databaseType + "-pre.sql";
URL url = getResource(fileName);
if (url != null) {
new SqlScript(url, dialect.getPlatform().getSqlTemplate(), false).execute(true);
}
Database db2drop = platform.readDatabase(platform.getDefaultCatalog(),
platform.getDefaultSchema(), new String[] { "TABLE" });
String sql = builder.dropTables(db2drop);
platform.resetDataSource();
SqlScript dropScript = new SqlScript(sql, platform.getSqlTemplate(), false);
dropScript.execute(true);
new SqlScript(getResource(TestConstants.TEST_DROP_ALL_SCRIPT), platform.getSqlTemplate(),
false).execute(true);
((ParameterService) engine.getParameterService()).setDatabaseHasBeenInitialized(false);
fileName = TestConstants.TEST_DROP_SEQ_SCRIPT + databaseType + ".sql";
url = getResource(fileName);
if (url != null) {
new SqlScript(url, dialect.getPlatform().getSqlTemplate(), false).execute(true);
}
dialect.purgeRecycleBin();
return platform;
}
// TODO this is the new version that uses uninstall, but i haven't gotten it to work
public static IDatabasePlatform dropDatabaseTables2(String databaseType, ISymmetricEngine engine) {
ISymmetricDialect dialect = engine.getSymmetricDialect();
AbstractJdbcDatabasePlatform platform = (AbstractJdbcDatabasePlatform) dialect
.getPlatform();
engine.uninstall();
platform.resetDataSource();
IDdlBuilder builder = platform.getDdlBuilder();
Database db2drop = platform.readDatabase(platform.getDefaultCatalog(),
platform.getDefaultSchema(), new String[] { "TABLE" });
platform.resetDataSource();
String sql = builder.dropTables(db2drop);
SqlScript dropScript = new SqlScript(sql, platform.getSqlTemplate(), false);
dropScript.execute(true);
platform.resetDataSource();
dialect.purgeRecycleBin();
platform.resetCachedTableModel();
return platform;
}
public static void dropAndCreateDatabaseTables(String databaseType, ISymmetricEngine engine) {
IDatabasePlatform platform = dropDatabaseTables(databaseType, engine);
Database testDb = platform.readDatabaseFromXml("/test-schema.xml", true);
platform.createDatabase(testDb, false, true);
}
protected static void removeEmbededdedDatabases() {
File clientDbDir = new File("target/clientdbs");
if (clientDbDir.exists()) {
try {
logger.info("Removing client database files and creating directory.");
FileUtils.deleteDirectory(clientDbDir);
clientDbDir.mkdir();
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
}
File rootDbDir = new File("target/rootdbs");
if (rootDbDir.exists()) {
try {
logger.info("Removing root database files and creating directory.");
FileUtils.deleteDirectory(rootDbDir);
rootDbDir.mkdir();
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
}
}
protected static URL getResource(String resource) {
return TestSetupUtil.class.getResource(resource);
}
}