Skip to content

Commit b5c145a

Browse files
committed
embedded driver first draft
1 parent 098f30b commit b5c145a

4 files changed

Lines changed: 187 additions & 1 deletion

File tree

jdk_8_maven/cs/rest/original/session-service/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<url>https://github.com/cBioPortal/session-service/</url>
77
<groupId>org.cbioportal.session_service</groupId>
88
<artifactId>session_service</artifactId>
9-
<version>0.5.0</version>
9+
<version>0.5.0-SNAPSHOT</version>
1010
<packaging>${packaging.type}</packaging>
1111
<!-- inherit defaults from spring boot -->
1212
<parent>

jdk_8_maven/em/embedded/rest/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
<module>restcountries</module>
2626
<module>gestaohospital</module>
2727
<module>genome-nexus</module>
28+
<module>session-service</module>
2829
</modules>
2930

3031
</project>
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
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-rest-session-service</artifactId>
8+
<packaging>jar</packaging>
9+
10+
<parent>
11+
<groupId>org.evomaster</groupId>
12+
<artifactId>evomaster-benchmark-em-embedded-rest</artifactId>
13+
<version>2.0.1-SNAPSHOT</version>
14+
</parent>
15+
16+
17+
<dependencies>
18+
<dependency>
19+
<groupId>org.cbioportal.session_service</groupId>
20+
<artifactId>session_service</artifactId>
21+
<version>0.5.0-SNAPSHOT</version>
22+
</dependency>
23+
<dependency>
24+
<groupId>org.testcontainers</groupId>
25+
<artifactId>testcontainers</artifactId>
26+
<scope>compile</scope>
27+
</dependency>
28+
<dependency>
29+
<groupId>junit</groupId>
30+
<artifactId>junit</artifactId>
31+
<scope>compile</scope>
32+
<version>4.11</version>
33+
</dependency>
34+
</dependencies>
35+
36+
37+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
package em.embedded.org.cbioportal.session_service;
2+
3+
import com.mongodb.client.MongoClient;
4+
import com.mongodb.client.MongoClients;
5+
import org.cbioportal.session_service.SessionService;
6+
import org.evomaster.client.java.controller.EmbeddedSutController;
7+
import org.evomaster.client.java.controller.InstrumentedSutStarter;
8+
import org.evomaster.client.java.controller.api.dto.SutInfoDto;
9+
import org.evomaster.client.java.controller.api.dto.auth.AuthenticationDto;
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.testcontainers.containers.GenericContainer;
16+
17+
import java.util.Collections;
18+
import java.util.List;
19+
import java.util.Map;
20+
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+
41+
private ConfigurableApplicationContext ctx;
42+
43+
private static final int MONGODB_PORT = 27017;
44+
45+
private static final String MONGODB_VERSION = "6.0";
46+
47+
private static final String MONGODB_DATABASE_NAME = "session";
48+
49+
private static final GenericContainer mongodbContainer = new GenericContainer("mongo:" + MONGODB_VERSION)
50+
.withTmpFs(Collections.singletonMap("/data/db", "rw"))
51+
.withExposedPorts(MONGODB_PORT);
52+
53+
private MongoClient mongoClient;
54+
55+
public EmbeddedEvoMasterController() {
56+
this(0);
57+
}
58+
59+
public EmbeddedEvoMasterController(int port) {
60+
setControllerPort(port);
61+
}
62+
63+
64+
@Override
65+
public String startSut() {
66+
67+
mongodbContainer.start();
68+
mongoClient = MongoClients.create("mongodb://" + mongodbContainer.getContainerIpAddress() + ":" + mongodbContainer.getMappedPort(MONGODB_PORT));
69+
70+
ctx = SpringApplication.run(SessionService.class,
71+
new String[]{"--server.port=0",
72+
"--spring.data.mongodb.uri=mongodb://" + mongodbContainer.getContainerIpAddress() + ":" + mongodbContainer.getMappedPort(MONGODB_PORT) + "/" + MONGODB_DATABASE_NAME,
73+
"--spring.cache.type=NONE"
74+
});
75+
76+
return "http://localhost:" + getSutPort();
77+
}
78+
79+
protected int getSutPort() {
80+
return (Integer) ((Map) ctx.getEnvironment()
81+
.getPropertySources().get("server.ports").getSource())
82+
.get("local.server.port");
83+
}
84+
85+
86+
@Override
87+
public boolean isSutRunning() {
88+
return ctx != null && ctx.isRunning();
89+
}
90+
91+
@Override
92+
public void stopSut() {
93+
ctx.stop();
94+
ctx.close();
95+
96+
mongodbContainer.stop();
97+
}
98+
99+
@Override
100+
public String getPackagePrefixesToCover() {
101+
return "org.cbioportal.session_service.";
102+
}
103+
104+
@Override
105+
public void resetStateOfSUT() {
106+
mongoClient.getDatabase(MONGODB_DATABASE_NAME).drop();
107+
}
108+
109+
@Override
110+
public boolean handleLocalAuthenticationSetup(String authenticationInfo) {
111+
return super.handleLocalAuthenticationSetup(authenticationInfo);
112+
}
113+
114+
@Override
115+
public List<DbSpecification> getDbSpecifications() {
116+
return null;
117+
}
118+
119+
@Override
120+
public void resetDatabase(List<String> tablesToClean) {
121+
super.resetDatabase(tablesToClean);
122+
}
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 Object getMongoConnection() {
146+
return mongoClient;
147+
}
148+
}

0 commit comments

Comments
 (0)