Skip to content

Commit d1aad8d

Browse files
committed
external driver
1 parent f5f6172 commit d1aad8d

File tree

3 files changed

+299
-0
lines changed

3 files changed

+299
-0
lines changed

jdk_8_maven/em/external/rest/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
<module>spring-actuator-demo</module>
3535
<module>swagger-petstore</module>
3636
<module>spring-ecommerce</module>
37+
<module>spring-docker-rest</module>
3738
</modules>
3839

3940
</project>
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<artifactId>evomaster-benchmark-em-external-rest-spring-docker-rest</artifactId>
8+
<packaging>jar</packaging>
9+
10+
<parent>
11+
<groupId>org.evomaster</groupId>
12+
<artifactId>evomaster-benchmark-em-external-rest</artifactId>
13+
<version>3.4.1-SNAPSHOT</version>
14+
</parent>
15+
16+
17+
<dependencies>
18+
<dependency>
19+
<groupId>org.testcontainers</groupId>
20+
<artifactId>testcontainers</artifactId>
21+
<scope>compile</scope>
22+
</dependency>
23+
<dependency>
24+
<groupId>junit</groupId>
25+
<artifactId>junit</artifactId>
26+
<version>4.12</version>
27+
<scope>compile</scope>
28+
</dependency>
29+
<dependency>
30+
<groupId>mysql</groupId>
31+
<artifactId>mysql-connector-java</artifactId>
32+
<version>8.0.33</version>
33+
</dependency>
34+
</dependencies>
35+
36+
<build>
37+
<plugins>
38+
<plugin>
39+
<groupId>org.apache.maven.plugins</groupId>
40+
<artifactId>maven-shade-plugin</artifactId>
41+
<executions>
42+
<execution>
43+
<phase>package</phase>
44+
<goals>
45+
<goal>shade</goal>
46+
</goals>
47+
<configuration>
48+
<finalName>spring-docker-rest-evomaster-runner</finalName>
49+
<transformers>
50+
<transformer
51+
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
52+
<manifestEntries>
53+
<Main-Class>em.external.spring.docker.rest.ExternalEvoMasterController
54+
</Main-Class>
55+
<Premain-Class>org.evomaster.client.java.instrumentation.InstrumentingAgent
56+
</Premain-Class>
57+
<Agent-Class>org.evomaster.client.java.instrumentation.InstrumentingAgent
58+
</Agent-Class>
59+
<Can-Redefine-Classes>true</Can-Redefine-Classes>
60+
<Can-Retransform-Classes>true</Can-Retransform-Classes>
61+
</manifestEntries>
62+
</transformer>
63+
</transformers>
64+
</configuration>
65+
</execution>
66+
</executions>
67+
</plugin>
68+
</plugins>
69+
</build>
70+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,228 @@
1+
package em.external.spring.docker.rest;
2+
3+
import org.evomaster.client.java.controller.ExternalSutController;
4+
import org.evomaster.client.java.controller.InstrumentedSutStarter;
5+
import org.evomaster.client.java.controller.api.dto.SutInfoDto;
6+
import org.evomaster.client.java.controller.api.dto.auth.AuthenticationDto;
7+
import org.evomaster.client.java.controller.api.dto.database.schema.DatabaseType;
8+
import org.evomaster.client.java.controller.problem.ProblemInfo;
9+
import org.evomaster.client.java.controller.problem.RestProblem;
10+
import org.evomaster.client.java.sql.DbSpecification;
11+
import org.testcontainers.containers.GenericContainer;
12+
13+
import java.sql.Connection;
14+
import java.sql.DriverManager;
15+
import java.sql.SQLException;
16+
import java.util.Arrays;
17+
import java.util.Collections;
18+
import java.util.HashMap;
19+
import java.util.List;
20+
21+
public class ExternalEvoMasterController extends ExternalSutController {
22+
23+
24+
public static void main(String[] args) {
25+
26+
int controllerPort = 40100;
27+
if (args.length > 0) {
28+
controllerPort = Integer.parseInt(args[0]);
29+
}
30+
int sutPort = 12345;
31+
if (args.length > 1) {
32+
sutPort = Integer.parseInt(args[1]);
33+
}
34+
String jarLocation = "cs/rest/original/spring-docker-rest/target";
35+
if (args.length > 2) {
36+
jarLocation = args[2];
37+
}
38+
if(! jarLocation.endsWith(".jar")) {
39+
jarLocation += "/spring-docker-rest-sut.jar";
40+
}
41+
42+
int timeoutSeconds = 120;
43+
if(args.length > 3){
44+
timeoutSeconds = Integer.parseInt(args[3]);
45+
}
46+
String command = "java";
47+
if(args.length > 4){
48+
command = args[4];
49+
}
50+
51+
52+
ExternalEvoMasterController controller =
53+
new ExternalEvoMasterController(controllerPort, jarLocation,
54+
sutPort, timeoutSeconds, command);
55+
InstrumentedSutStarter starter = new InstrumentedSutStarter(controller);
56+
57+
starter.start();
58+
}
59+
60+
private final int timeoutSeconds;
61+
private final int sutPort;
62+
private String jarLocation;
63+
private Connection sqlConnection;
64+
65+
private List<DbSpecification> dbSpecification;
66+
67+
private String initSQLScript;
68+
69+
private static final GenericContainer mysql = new GenericContainer("mysql:8.0" )
70+
.withEnv(new HashMap<String, String>(){{
71+
put("MYSQL_ROOT_PASSWORD", "root");
72+
put("MYSQL_DATABASE", "docker");
73+
}})
74+
.withExposedPorts(3306)
75+
.withTmpFs(Collections.singletonMap("/var/lib/mysql", "rw"))
76+
;
77+
78+
public ExternalEvoMasterController(){
79+
this(40100, "../core/target", 12345, 120, "java");
80+
}
81+
82+
public ExternalEvoMasterController(String jarLocation) {
83+
this();
84+
this.jarLocation = jarLocation;
85+
}
86+
87+
public ExternalEvoMasterController(
88+
int controllerPort, String jarLocation, int sutPort, int timeoutSeconds, String command
89+
) {
90+
91+
if(jarLocation==null || jarLocation.isEmpty()){
92+
throw new IllegalArgumentException("Missing jar location");
93+
}
94+
95+
96+
this.sutPort = sutPort;
97+
this.jarLocation = jarLocation;
98+
this.timeoutSeconds = timeoutSeconds;
99+
setControllerPort(controllerPort);
100+
setJavaCommand(command);
101+
}
102+
103+
104+
@Override
105+
public String[] getInputParameters() {
106+
return new String[]{
107+
"--server.port=" + sutPort
108+
};
109+
}
110+
111+
private String dbUrl() {
112+
113+
String host = mysql.getContainerIpAddress();
114+
int port = mysql.getMappedPort(3306);
115+
116+
String url = "jdbc:mysql://"+host+":"+port+"/docker?useSSL=false&allowPublicKeyRetrieval=true";
117+
118+
return url;
119+
}
120+
121+
public String[] getJVMParameters() {
122+
String host = mysql.getContainerIpAddress();
123+
int port = mysql.getMappedPort(3306);
124+
125+
return new String[]{
126+
"-DACTIVE_PROFILE=dev",
127+
"-DDB_HOST=" + host,
128+
"-DDB_PORT=" + String.valueOf(port),
129+
"-DDB_NAME=docker",
130+
"-DDB_USER=root",
131+
"-DDB_PASS=root"
132+
};
133+
}
134+
135+
@Override
136+
public String getBaseURL() {
137+
return "http://localhost:" + sutPort;
138+
}
139+
140+
@Override
141+
public String getPathToExecutableJar() {
142+
return jarLocation;
143+
}
144+
145+
@Override
146+
public String getLogMessageOfInitializedServer() {
147+
return "Started RestApiApplication in";
148+
}
149+
150+
@Override
151+
public long getMaxAwaitForInitializationInSeconds() {
152+
return timeoutSeconds;
153+
}
154+
155+
@Override
156+
public void preStart() {
157+
mysql.start();
158+
}
159+
160+
@Override
161+
public void postStart() {
162+
closeDataBaseConnection();
163+
164+
try {
165+
sqlConnection = DriverManager.getConnection(dbUrl(), "root", "root");
166+
167+
dbSpecification = Arrays.asList(new DbSpecification(DatabaseType.MYSQL,sqlConnection));
168+
169+
} catch (Exception e) {
170+
throw new RuntimeException(e);
171+
}
172+
}
173+
174+
@Override
175+
public void resetStateOfSUT() {
176+
177+
}
178+
179+
@Override
180+
public void preStop() {
181+
closeDataBaseConnection();
182+
}
183+
184+
@Override
185+
public void postStop() {
186+
mysql.stop();
187+
}
188+
189+
private void closeDataBaseConnection() {
190+
if (sqlConnection != null) {
191+
try {
192+
sqlConnection.close();
193+
} catch (SQLException e) {
194+
e.printStackTrace();
195+
}
196+
sqlConnection = null;
197+
}
198+
}
199+
200+
@Override
201+
public String getPackagePrefixesToCover() {
202+
return "com.abhishekd.";
203+
}
204+
205+
@Override
206+
public ProblemInfo getProblemInfo() {
207+
return new RestProblem(
208+
getBaseURL() + "/v2/api-docs",
209+
null
210+
);
211+
}
212+
213+
@Override
214+
public SutInfoDto.OutputFormat getPreferredOutputFormat() {
215+
return SutInfoDto.OutputFormat.JAVA_JUNIT_4;
216+
}
217+
218+
219+
@Override
220+
public List<AuthenticationDto> getInfoForAuthentication() {
221+
return null;
222+
}
223+
224+
@Override
225+
public List<DbSpecification> getDbSpecifications() {
226+
return dbSpecification;
227+
}
228+
}

0 commit comments

Comments
 (0)