Skip to content

Commit 2a32aad

Browse files
authored
Merge pull request #69 from EMResearch/fix-smart-dbclean
Fix smart dbclean
2 parents 10d7269 + ee0b70b commit 2a32aad

File tree

12 files changed

+210
-58
lines changed

12 files changed

+210
-58
lines changed

jdk_11_gradle/em/embedded/graphql/patio-api/src/main/java/em/embedded/patio/EmbeddedEvoMasterController.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.evomaster.client.java.controller.api.dto.SutInfoDto;
1010
import org.evomaster.client.java.controller.api.dto.database.schema.DatabaseType;
1111
import org.evomaster.client.java.controller.db.DbCleaner;
12+
import org.evomaster.client.java.controller.db.SqlScriptRunner;
1213
import org.evomaster.client.java.controller.db.SqlScriptRunnerCached;
1314
import org.evomaster.client.java.controller.internal.SutController;
1415
import org.evomaster.client.java.controller.internal.db.DbSpecification;
@@ -17,6 +18,8 @@
1718
import org.testcontainers.containers.GenericContainer;
1819
import patio.Application;
1920

21+
import java.io.InputStream;
22+
import java.io.InputStreamReader;
2023
import java.sql.Connection;
2124
import java.sql.DriverManager;
2225
import java.sql.SQLException;
@@ -43,6 +46,9 @@ public static void main(String[] args){
4346
private Connection sqlConnection;
4447
private List<DbSpecification> dbSpecification;
4548

49+
private final String INIT_DB_SCRIPT_PATH = "/initDB.sql";
50+
51+
4652
private final int portApp = 8080; //Hardcoded. will need fixing
4753
// TODO maybe report at https://github.com/micronaut-projects/micronaut-core/issues
4854

@@ -62,6 +68,7 @@ public EmbeddedEvoMasterController() {
6268

6369
public EmbeddedEvoMasterController(int port) {
6470
setControllerPort(port);
71+
6572
}
6673

6774

@@ -94,9 +101,13 @@ public String startSut() {
94101
throw new RuntimeException(e);
95102
}
96103

104+
/*
105+
ensure the data is empty
106+
*/
107+
DbCleaner.clearDatabase_Postgres(sqlConnection, "public", List.of("flyway_schema_history"));
108+
97109
dbSpecification = Arrays.asList(new DbSpecification(DatabaseType.POSTGRES,sqlConnection)
98-
.withSchemas("public").withDisabledSmartClean());
99-
// initSqlOnResourcePath = "/initDb.sql";
110+
.withSchemas("public").withInitSqlOnResourcePath(INIT_DB_SCRIPT_PATH));
100111

101112
return "http://localhost:" + getSutPort();
102113
}
@@ -128,8 +139,8 @@ public String getPackagePrefixesToCover() {
128139

129140
@Override
130141
public void resetStateOfSUT() {
131-
DbCleaner.clearDatabase_Postgres(sqlConnection, "public", List.of("flyway_schema_history"));
132-
SqlScriptRunnerCached.runScriptFromResourceFile(sqlConnection,"/initDB.sql");
142+
// DbCleaner.clearDatabase_Postgres(sqlConnection, "public", List.of("flyway_schema_history"));
143+
// SqlScriptRunnerCached.runScriptFromResourceFile(sqlConnection,"/initDB.sql");
133144
}
134145

135146
@Override

jdk_11_gradle/em/external/graphql/patio-api/src/main/java/em/external/patio/ExternalEvoMasterController.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,15 @@
77
import org.evomaster.client.java.controller.api.dto.SutInfoDto;
88
import org.evomaster.client.java.controller.api.dto.database.schema.DatabaseType;
99
import org.evomaster.client.java.controller.db.DbCleaner;
10+
import org.evomaster.client.java.controller.db.SqlScriptRunner;
1011
import org.evomaster.client.java.controller.db.SqlScriptRunnerCached;
1112
import org.evomaster.client.java.controller.internal.db.DbSpecification;
1213
import org.evomaster.client.java.controller.problem.GraphQlProblem;
1314
import org.evomaster.client.java.controller.problem.ProblemInfo;
1415
import org.testcontainers.containers.GenericContainer;
1516

17+
import java.io.InputStream;
18+
import java.io.InputStreamReader;
1619
import java.sql.Connection;
1720
import java.sql.DriverManager;
1821
import java.sql.SQLException;
@@ -65,6 +68,8 @@ public static void main(String[] args) {
6568
private Connection sqlConnection;
6669
private List<DbSpecification> dbSpecification;
6770

71+
private final String INIT_DB_SCRIPT_PATH = "/initDB.sql";
72+
6873
private static final GenericContainer postgres = new GenericContainer("postgres:9")
6974
.withEnv("POSTGRES_HOST_AUTH_METHOD","trust")
7075
.withEnv("POSTGRES_DB", "patio")
@@ -95,6 +100,7 @@ public ExternalEvoMasterController(
95100
this.timeoutSeconds = timeoutSeconds;
96101
setControllerPort(controllerPort);
97102
setJavaCommand(command);
103+
98104
}
99105

100106

@@ -152,9 +158,14 @@ public void postStart() {
152158

153159
try {
154160
sqlConnection = DriverManager.getConnection(dbUrl(), "patio", "patio");
161+
162+
/*
163+
ensure the data is empty
164+
*/
165+
DbCleaner.clearDatabase_Postgres(sqlConnection, "public", List.of("flyway_schema_history"));
166+
155167
dbSpecification = Arrays.asList(new DbSpecification(DatabaseType.POSTGRES,sqlConnection)
156-
.withSchemas("public").withDisabledSmartClean());
157-
// initSqlOnResourcePath = "/initDb.sql";
168+
.withSchemas("public").withInitSqlOnResourcePath(INIT_DB_SCRIPT_PATH));
158169

159170
} catch (Exception e) {
160171
throw new RuntimeException(e);
@@ -163,8 +174,8 @@ public void postStart() {
163174

164175
@Override
165176
public void resetStateOfSUT() {
166-
DbCleaner.clearDatabase_Postgres(sqlConnection, "public", List.of("flyway_schema_history"));
167-
SqlScriptRunnerCached.runScriptFromResourceFile(sqlConnection,"/initDB.sql");
177+
// DbCleaner.clearDatabase_Postgres(sqlConnection, "public", List.of("flyway_schema_history"));
178+
// SqlScriptRunnerCached.runScriptFromResourceFile(sqlConnection,"/initDB.sql");
168179
}
169180

170181
@Override

jdk_11_maven/em/embedded/rest/market/src/main/java/em/embedded/market/EmbeddedEvoMasterController.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
import org.springframework.context.ConfigurableApplicationContext;
1818
import org.springframework.jdbc.core.JdbcTemplate;
1919

20+
import java.io.InputStream;
21+
import java.io.InputStreamReader;
2022
import java.sql.Connection;
2123
import java.sql.SQLException;
2224
import java.util.Arrays;
@@ -47,6 +49,9 @@ public static void main(String[] args) {
4749
private Connection sqlConnection;
4850
private List<DbSpecification> dbSpecification;
4951

52+
private String INIT_DB_SCRIPT_PATH = "/data.sql";
53+
54+
private String initSQLScript;
5055

5156
public EmbeddedEvoMasterController() {
5257
this(40100);
@@ -77,9 +82,11 @@ public String startSut() {
7782
throw new RuntimeException(e);
7883
}
7984

85+
SqlScriptRunnerCached.runScriptFromResourceFile(sqlConnection,"/schema.sql");
86+
DbCleaner.clearDatabase_H2(sqlConnection);
87+
8088
dbSpecification = Arrays.asList(new DbSpecification(DatabaseType.H2,sqlConnection)
81-
//.withInitSqlOnResourcePath("/data.sql"));
82-
.withDisabledSmartClean());
89+
.withInitSqlOnResourcePath(INIT_DB_SCRIPT_PATH));
8390

8491
return "http://localhost:" + getSutPort();
8592
}
@@ -108,8 +115,8 @@ public String getPackagePrefixesToCover() {
108115

109116
@Override
110117
public void resetStateOfSUT() {
111-
DbCleaner.clearDatabase_H2(sqlConnection, null);
112-
SqlScriptRunnerCached.runScriptFromResourceFile(sqlConnection,"/data.sql");
118+
// DbCleaner.clearDatabase_H2(sqlConnection, null);
119+
// SqlScriptRunnerCached.runScriptFromResourceFile(sqlConnection,"/data.sql");
113120
}
114121

115122
@Override

jdk_11_maven/em/external/rest/ind1/src/main/java/em/external/org/ind1/ExternalEvoMasterController.java

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,15 @@
66
import org.evomaster.client.java.controller.api.dto.SutInfoDto;
77
import org.evomaster.client.java.controller.api.dto.database.schema.DatabaseType;
88
import org.evomaster.client.java.controller.db.DbCleaner;
9+
import org.evomaster.client.java.controller.db.SqlScriptRunner;
910
import org.evomaster.client.java.controller.db.SqlScriptRunnerCached;
1011
import org.evomaster.client.java.controller.internal.db.DbSpecification;
1112
import org.evomaster.client.java.controller.problem.ProblemInfo;
1213
import org.evomaster.client.java.controller.problem.RestProblem;
1314
import org.testcontainers.containers.GenericContainer;
1415

16+
import java.io.InputStream;
17+
import java.io.InputStreamReader;
1518
import java.sql.Connection;
1619
import java.sql.DriverManager;
1720
import java.sql.SQLException;
@@ -74,6 +77,10 @@ public static void main(String[] args) {
7477
private Connection sqlConnection;
7578
private List<DbSpecification> dbSpecification;
7679

80+
private String INIT_DB_SCRIPT_PATH = "/init_db.sql";
81+
82+
private String initSQLScript;
83+
7784
private static final GenericContainer postgres = new GenericContainer("postgres:9")
7885
.withExposedPorts(5432)
7986
.withEnv("POSTGRES_HOST_AUTH_METHOD","trust")
@@ -105,6 +112,12 @@ public ExternalEvoMasterController(
105112
this.packagesToInstrument = packagesToInstrument;
106113
setControllerPort(controllerPort);
107114
setJavaCommand(command);
115+
116+
try (InputStream in = getClass().getResourceAsStream(INIT_DB_SCRIPT_PATH)) {
117+
initSQLScript = String.join(System.lineSeparator(), (new SqlScriptRunner()).readCommands(new InputStreamReader(in)));
118+
} catch (Exception e) {
119+
throw new RuntimeException(e);
120+
}
108121
}
109122

110123

@@ -174,19 +187,27 @@ public void postStart() {
174187

175188
try {
176189
sqlConnection = DriverManager.getConnection(dbUrl(), "postgres", "");
190+
191+
/*
192+
ensure the data in db is empty
193+
*/
194+
DbCleaner.clearDatabase_Postgres(sqlConnection,
195+
"subscriptions",
196+
Arrays.asList("flyway_schema_history"));
197+
177198
dbSpecification = Arrays.asList(new DbSpecification(DatabaseType.POSTGRES,sqlConnection)
178-
.withSchemas("subscriptions").withDisabledSmartClean());
199+
.withSchemas("subscriptions").withInitSqlScript(initSQLScript));
179200
} catch (Exception e) {
180201
throw new RuntimeException(e);
181202
}
182203
}
183204

184205
@Override
185206
public void resetStateOfSUT() {
186-
DbCleaner.clearDatabase_Postgres(sqlConnection,
187-
"subscriptions",
188-
Arrays.asList("flyway_schema_history"));
189-
SqlScriptRunnerCached.runScriptFromResourceFile(sqlConnection,"/init_db.sql");
207+
// DbCleaner.clearDatabase_Postgres(sqlConnection,
208+
// "subscriptions",
209+
// Arrays.asList("flyway_schema_history"));
210+
// SqlScriptRunnerCached.runScriptFromResourceFile(sqlConnection,"/init_db.sql");
190211
}
191212

192213
@Override

jdk_11_maven/em/external/rest/market/src/main/java/em/external/market/ExternalEvoMasterController.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,15 @@
77
import org.evomaster.client.java.controller.api.dto.SutInfoDto;
88
import org.evomaster.client.java.controller.api.dto.database.schema.DatabaseType;
99
import org.evomaster.client.java.controller.db.DbCleaner;
10+
import org.evomaster.client.java.controller.db.SqlScriptRunner;
1011
import org.evomaster.client.java.controller.db.SqlScriptRunnerCached;
1112
import org.evomaster.client.java.controller.internal.db.DbSpecification;
1213
import org.evomaster.client.java.controller.problem.ProblemInfo;
1314
import org.evomaster.client.java.controller.problem.RestProblem;
1415
import org.h2.tools.Server;
1516

17+
import java.io.InputStream;
18+
import java.io.InputStreamReader;
1619
import java.sql.Connection;
1720
import java.sql.DriverManager;
1821
import java.sql.SQLException;
@@ -65,6 +68,8 @@ public static void main(String[] args) {
6568
private List<DbSpecification> dbSpecification;
6669
private Server h2;
6770

71+
private String INIT_DB_SCRIPT_PATH = "/data.sql";
72+
6873
public ExternalEvoMasterController() {
6974
this(40100, "../core/target", 12345, 120, "java");
7075
}
@@ -145,19 +150,21 @@ public void postStart() {
145150
try {
146151
Class.forName("org.h2.Driver");
147152
sqlConnection = DriverManager.getConnection(dbUrl(), "sa", "");
153+
154+
SqlScriptRunnerCached.runScriptFromResourceFile(sqlConnection,"/schema.sql");
155+
DbCleaner.clearDatabase_H2(sqlConnection);
156+
148157
dbSpecification = Arrays.asList(new DbSpecification(DatabaseType.H2,sqlConnection)
149-
.withDisabledSmartClean());
158+
.withInitSqlOnResourcePath(INIT_DB_SCRIPT_PATH));
150159
} catch (Exception e) {
151160
throw new RuntimeException(e);
152161
}
153-
154-
SqlScriptRunnerCached.runScriptFromResourceFile(sqlConnection,"/schema.sql");
155162
}
156163

157164
@Override
158165
public void resetStateOfSUT() {
159-
DbCleaner.clearDatabase_H2(sqlConnection);
160-
SqlScriptRunnerCached.runScriptFromResourceFile(sqlConnection,"/data.sql");
166+
// DbCleaner.clearDatabase_H2(sqlConnection);
167+
// SqlScriptRunnerCached.runScriptFromResourceFile(sqlConnection,"/data.sql");
161168
}
162169

163170
@Override
@@ -219,4 +226,4 @@ public List<AuthenticationDto> getInfoForAuthentication() {
219226
public List<DbSpecification> getDbSpecifications() {
220227
return dbSpecification;
221228
}
222-
}
229+
}

jdk_8_maven/em/embedded/graphql/petclinic-graphql/src/main/java/em/embedded/org/springframework/samples/petclinic/EmbeddedEvoMasterController.java

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import org.evomaster.client.java.controller.api.dto.SutInfoDto;
77
import org.evomaster.client.java.controller.api.dto.database.schema.DatabaseType;
88
import org.evomaster.client.java.controller.db.DbCleaner;
9+
import org.evomaster.client.java.controller.db.SqlScriptRunner;
910
import org.evomaster.client.java.controller.db.SqlScriptRunnerCached;
1011
import org.evomaster.client.java.controller.internal.SutController;
1112
import org.evomaster.client.java.controller.internal.db.DbSpecification;
@@ -17,6 +18,8 @@
1718
import org.springframework.samples.petclinic.PetClinicApplication;
1819
import org.testcontainers.containers.GenericContainer;
1920

21+
import java.io.InputStream;
22+
import java.io.InputStreamReader;
2023
import java.sql.Connection;
2124
import java.sql.SQLException;
2225
import java.util.Arrays;
@@ -41,8 +44,12 @@ public static void main(String[] args){
4144

4245
private ConfigurableApplicationContext ctx;
4346
private Connection sqlConnection;
47+
private String INIT_DB_SCRIPT_PATH = "/db/postgresql/populateDB.sql";
48+
4449
private List<DbSpecification> dbSpecification;
4550

51+
private String initSQLScript;
52+
4653
private static final GenericContainer postgres = new GenericContainer("postgres:9")
4754
.withExposedPorts(5432)
4855
.withEnv("POSTGRES_HOST_AUTH_METHOD","trust")
@@ -90,12 +97,26 @@ public String startSut() {
9097
throw new RuntimeException(e);
9198
}
9299

100+
// create tables
101+
SqlScriptRunnerCached.runScriptFromResourceFile(sqlConnection,"/db/postgresql/initDB.sql");
93102

103+
/*
104+
ensure the data is empty
105+
*/
106+
DbCleaner.clearDatabase_Postgres(sqlConnection,"public", null);
94107

95108
dbSpecification = Arrays.asList(new DbSpecification(DatabaseType.POSTGRES,sqlConnection)
96-
.withSchemas("public").withDisabledSmartClean());
109+
.withSchemas("public")
110+
/*
111+
evomaster not support to parse `on conflict` for postgresql yet
112+
then cannot execute the sql script to initialize data in db
113+
114+
see https://www.postgresql.org/docs/current/sql-insert.html#:~:text=ON%20CONFLICT%20DO%20NOTHING%20simply,insertion%20as%20its%20alternative%20action.
115+
*/
116+
.withInitSqlOnResourcePath(INIT_DB_SCRIPT_PATH)
117+
);
118+
97119

98-
SqlScriptRunnerCached.runScriptFromResourceFile(sqlConnection,"/db/postgresql/initDB.sql");
99120

100121
return "http://localhost:" + getSutPort();
101122
}
@@ -125,8 +146,8 @@ public String getPackagePrefixesToCover() {
125146

126147
@Override
127148
public void resetStateOfSUT() {
128-
DbCleaner.clearDatabase_Postgres(sqlConnection,"public", null);
129-
SqlScriptRunnerCached.runScriptFromResourceFile(sqlConnection,"/db/postgresql/populateDB.sql");
149+
// DbCleaner.clearDatabase_Postgres(sqlConnection,"public", null);
150+
// SqlScriptRunnerCached.runScriptFromResourceFile(sqlConnection,"/db/postgresql/populateDB.sql");
130151
}
131152

132153
@Override

0 commit comments

Comments
 (0)