Skip to content

Commit f5f6172

Browse files
committed
embedded driver
1 parent 9928ea4 commit f5f6172

6 files changed

Lines changed: 215 additions & 4 deletions

File tree

.gitignore

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,4 +371,8 @@ jdk_8_maven/em/external/rest/spring-batch-rest/target
371371

372372
/jdk_8_maven/cs/rest/original/spring-ecommerce/target
373373
/jdk_8_maven/em/embedded/rest/spring-ecommerce/target
374-
/jdk_8_maven/em/external/rest/spring-ecommerce/target
374+
/jdk_8_maven/em/external/rest/spring-ecommerce/target
375+
376+
/jdk_8_maven/cs/rest/original/spring-docker-rest/target/
377+
/jdk_8_maven/em/embedded/rest/spring-docker-rest/target
378+
/jdk_8_maven/em/external/rest/spring-docker-rest/target

jdk_8_maven/cs/rest/original/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
<module>spring-actuator-demo</module>
2828
<module>swagger-petstore</module>
2929
<module>spring-ecommerce</module>
30+
<module>spring-docker-rest</module>
3031
</modules>
3132

3233

jdk_8_maven/cs/rest/original/spring-docker-rest/pom.xml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77
<artifactId>rest-api</artifactId>
88
<version>0.0.1-SNAPSHOT</version>
99
<packaging>jar</packaging>
10-
11-
<name>rest-api</name>
10+
<!-- MODIFIED-->
11+
<name>spring-docker-rest</name>
12+
<!-- MODIFIED-->
1213
<description>Building REST API using Spring Boot</description>
1314

1415
<parent>
@@ -106,7 +107,10 @@
106107
<groupId>org.springframework.boot</groupId>
107108
<artifactId>spring-boot-maven-plugin</artifactId>
108109
<configuration>
109-
<finalName>spring-boot-rest-api-v1</finalName>
110+
<!-- MODIFIED-->
111+
<finalName>spring-docker-rest</finalName>
112+
<classifier>sut</classifier>
113+
<!-- MODIFIED-->
110114
</configuration>
111115
</plugin>
112116
<plugin>

jdk_8_maven/em/embedded/rest/pom.xml

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

3839
</project>
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
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-embedded-spring-docker-rest</artifactId>
8+
<packaging>jar</packaging>
9+
10+
<parent>
11+
<groupId>org.evomaster</groupId>
12+
<artifactId>evomaster-benchmark-em-embedded-rest</artifactId>
13+
<version>3.4.1-SNAPSHOT</version>
14+
</parent>
15+
<dependencyManagement>
16+
<dependencies>
17+
<dependency>
18+
<groupId>org.springframework.boot</groupId>
19+
<artifactId>spring-boot-dependencies</artifactId>
20+
<version>2.0.2.RELEASE</version>
21+
<type>pom</type>
22+
<scope>import</scope>
23+
</dependency>
24+
</dependencies>
25+
</dependencyManagement>
26+
<dependencies>
27+
<dependency>
28+
<groupId>com.abhishekd</groupId>
29+
<artifactId>rest-api</artifactId>
30+
<version>0.0.1-SNAPSHOT</version>
31+
</dependency>
32+
<dependency>
33+
<groupId>org.testcontainers</groupId>
34+
<artifactId>testcontainers</artifactId>
35+
<scope>compile</scope>
36+
</dependency>
37+
<dependency>
38+
<groupId>junit</groupId>
39+
<artifactId>junit</artifactId>
40+
<version>4.12</version>
41+
<scope>compile</scope>
42+
</dependency>
43+
<dependency>
44+
<groupId>io.springfox</groupId>
45+
<artifactId>springfox-bean-validators</artifactId>
46+
<version>2.8.0</version>
47+
</dependency>
48+
49+
</dependencies>
50+
51+
52+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
package em.embedded.spring.docker.rest;
2+
3+
4+
import com.abhishekd.restapi.RestApiApplication;
5+
import org.evomaster.client.java.controller.EmbeddedSutController;
6+
import org.evomaster.client.java.controller.InstrumentedSutStarter;
7+
import org.evomaster.client.java.controller.api.dto.SutInfoDto;
8+
import org.evomaster.client.java.controller.api.dto.auth.AuthenticationDto;
9+
import org.evomaster.client.java.controller.api.dto.database.schema.DatabaseType;
10+
import org.evomaster.client.java.controller.problem.ProblemInfo;
11+
import org.evomaster.client.java.controller.problem.RestProblem;
12+
import org.evomaster.client.java.sql.DbSpecification;
13+
import org.springframework.boot.SpringApplication;
14+
import org.springframework.context.ConfigurableApplicationContext;
15+
import org.springframework.jdbc.core.JdbcTemplate;
16+
import org.testcontainers.containers.GenericContainer;
17+
18+
import java.sql.Connection;
19+
import java.sql.SQLException;
20+
import java.util.*;
21+
22+
/**
23+
* Class used to start/stop the SUT. This will be controller by the EvoMaster process
24+
*/
25+
public class EmbeddedEvoMasterController extends EmbeddedSutController {
26+
27+
public static void main(String[] args) {
28+
29+
int port = 40100;
30+
if (args.length > 0) {
31+
port = Integer.parseInt(args[0]);
32+
}
33+
34+
EmbeddedEvoMasterController controller = new EmbeddedEvoMasterController(port);
35+
InstrumentedSutStarter starter = new InstrumentedSutStarter(controller);
36+
37+
starter.start();
38+
}
39+
40+
private static final GenericContainer mysql = new GenericContainer("mysql:8.0" )
41+
.withEnv(new HashMap<String, String>(){{
42+
put("MYSQL_ROOT_PASSWORD", "root");
43+
put("MYSQL_DATABASE", "docker");
44+
}})
45+
.withExposedPorts(3306)
46+
.withTmpFs(Collections.singletonMap("/var/lib/mysql", "rw"))
47+
;
48+
49+
private ConfigurableApplicationContext ctx;
50+
private Connection sqlConnection;
51+
private List<DbSpecification> dbSpecification;
52+
53+
public EmbeddedEvoMasterController() {
54+
this(40100);
55+
}
56+
57+
public EmbeddedEvoMasterController(int port) {
58+
setControllerPort(port);
59+
}
60+
61+
@Override
62+
public String startSut() {
63+
64+
mysql.start();
65+
66+
String host = mysql.getContainerIpAddress();
67+
int port = mysql.getMappedPort(3306);
68+
System.setProperty("ACTIVE_PROFILE", "dev");
69+
System.setProperty("DB_HOST", host);
70+
System.setProperty("DB_PORT", String.valueOf(port));
71+
System.setProperty("DB_NAME", "docker");
72+
System.setProperty("DB_USER", "root");
73+
System.setProperty("DB_PASS", "root");
74+
75+
ctx = SpringApplication.run(RestApiApplication.class, new String[]{
76+
"--server.port=0"
77+
});
78+
79+
if (sqlConnection != null) {
80+
try {
81+
sqlConnection.close();
82+
} catch (SQLException e) {
83+
throw new RuntimeException(e);
84+
}
85+
}
86+
JdbcTemplate jdbc = ctx.getBean(JdbcTemplate.class);
87+
try {
88+
sqlConnection = jdbc.getDataSource().getConnection();
89+
} catch (SQLException e) {
90+
throw new RuntimeException(e);
91+
}
92+
93+
dbSpecification = Arrays.asList(new DbSpecification(DatabaseType.MYSQL,sqlConnection));
94+
95+
return "http://localhost:" + getSutPort();
96+
}
97+
98+
protected int getSutPort() {
99+
return (Integer) ((Map) ctx.getEnvironment()
100+
.getPropertySources().get("server.ports").getSource())
101+
.get("local.server.port");
102+
}
103+
104+
105+
@Override
106+
public boolean isSutRunning() {
107+
return ctx != null && ctx.isRunning();
108+
}
109+
110+
@Override
111+
public void stopSut() {
112+
ctx.stop();
113+
mysql.stop();
114+
}
115+
116+
@Override
117+
public String getPackagePrefixesToCover() {
118+
return "com.abhishekd.";
119+
}
120+
121+
@Override
122+
public void resetStateOfSUT() {
123+
}
124+
125+
@Override
126+
public List<AuthenticationDto> getInfoForAuthentication() {
127+
return null;
128+
}
129+
130+
131+
@Override
132+
public ProblemInfo getProblemInfo() {
133+
return new RestProblem(
134+
"http://localhost:" + getSutPort() + "/v2/api-docs",
135+
null
136+
);
137+
}
138+
139+
@Override
140+
public SutInfoDto.OutputFormat getPreferredOutputFormat() {
141+
return SutInfoDto.OutputFormat.JAVA_JUNIT_4;
142+
}
143+
144+
@Override
145+
public List<DbSpecification> getDbSpecifications() {
146+
return dbSpecification;
147+
}
148+
149+
}

0 commit comments

Comments
 (0)