Skip to content

Commit 4750872

Browse files
committed
external driver
1 parent 65eb727 commit 4750872

4 files changed

Lines changed: 291 additions & 0 deletions

File tree

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,10 @@
127127
</goals>
128128
</execution>
129129
</executions>
130+
<configuration>
131+
<finalName>session-service</finalName>
132+
<classifier>sut</classifier>
133+
</configuration>
130134
</plugin>
131135
<plugin>
132136
<groupId>org.apache.maven.plugins</groupId>

jdk_8_maven/em/external/rest/pom.xml

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

3132
</project>
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
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-session-service</artifactId>
8+
<packaging>jar</packaging>
9+
10+
<parent>
11+
<groupId>org.evomaster</groupId>
12+
<artifactId>evomaster-benchmark-em-external-rest</artifactId>
13+
<version>2.0.1-SNAPSHOT</version>
14+
</parent>
15+
16+
17+
<dependencies>
18+
19+
<dependency>
20+
<groupId>org.testcontainers</groupId>
21+
<artifactId>testcontainers</artifactId>
22+
<scope>compile</scope>
23+
</dependency>
24+
<dependency>
25+
<groupId>junit</groupId>
26+
<artifactId>junit</artifactId>
27+
<scope>compile</scope>
28+
<version>4.11</version>
29+
</dependency>
30+
<dependency>
31+
<groupId>org.mongodb</groupId>
32+
<artifactId>mongodb-driver-sync</artifactId>
33+
<version>3.8.2</version>
34+
<scope>compile</scope>
35+
</dependency>
36+
37+
</dependencies>
38+
39+
40+
<build>
41+
<plugins>
42+
<plugin>
43+
<groupId>org.apache.maven.plugins</groupId>
44+
<artifactId>maven-shade-plugin</artifactId>
45+
<executions>
46+
<execution>
47+
<phase>package</phase>
48+
<goals>
49+
<goal>shade</goal>
50+
</goals>
51+
<configuration>
52+
<finalName>session-service-evomaster-runner</finalName>
53+
<transformers>
54+
<transformer
55+
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
56+
<manifestEntries>
57+
<Main-Class>em.external.br.com.codenation.hospital.ExternalEvoMasterController
58+
</Main-Class>
59+
<Premain-Class>org.evomaster.client.java.instrumentation.InstrumentingAgent
60+
</Premain-Class>
61+
<Agent-Class>org.evomaster.client.java.instrumentation.InstrumentingAgent
62+
</Agent-Class>
63+
<Can-Redefine-Classes>true</Can-Redefine-Classes>
64+
<Can-Retransform-Classes>true</Can-Retransform-Classes>
65+
</manifestEntries>
66+
</transformer>
67+
</transformers>
68+
</configuration>
69+
</execution>
70+
</executions>
71+
</plugin>
72+
</plugins>
73+
</build>
74+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,212 @@
1+
package em.external.rg.cbioportal.session_service;
2+
3+
4+
import com.mongodb.client.MongoClient;
5+
import com.mongodb.client.MongoClients;
6+
import org.evomaster.client.java.controller.ExternalSutController;
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.testcontainers.containers.GenericContainer;
14+
15+
import java.sql.Connection;
16+
import java.util.Collections;
17+
import java.util.List;
18+
19+
public class ExternalEvoMasterController extends ExternalSutController {
20+
21+
private static final int DEFAULT_CONTROLLER_PORT = 40100;
22+
23+
private static final int DEFAULT_SUT_PORT = 12345;
24+
25+
private static final int DEFAULT_DB_PORT = 27017;
26+
private static final int MONGODB_PORT = 27017;
27+
28+
private static final String MONGODB_VERSION = "6.0";
29+
30+
private static final String MONGODB_DATABASE_NAME = "session";
31+
32+
public static void main(String[] args) {
33+
34+
int controllerPort = DEFAULT_CONTROLLER_PORT;
35+
if (args.length > 0) {
36+
controllerPort = Integer.parseInt(args[0]);
37+
}
38+
int sutPort = DEFAULT_SUT_PORT;
39+
if (args.length > 1) {
40+
sutPort = Integer.parseInt(args[1]);
41+
}
42+
String jarLocation = "cs/rest/original/session-service/target";
43+
if (args.length > 2) {
44+
jarLocation = args[2];
45+
}
46+
if (!jarLocation.endsWith(".jar")) {
47+
jarLocation += "/session-service-sut.jar";
48+
}
49+
50+
int timeoutSeconds = 120;
51+
if (args.length > 3) {
52+
timeoutSeconds = Integer.parseInt(args[3]);
53+
}
54+
55+
String command = "java";
56+
if (args.length > 4) {
57+
command = args[4];
58+
}
59+
60+
ExternalEvoMasterController controller =
61+
new ExternalEvoMasterController(controllerPort, jarLocation, sutPort, timeoutSeconds, command);
62+
InstrumentedSutStarter starter = new InstrumentedSutStarter(controller);
63+
64+
starter.start();
65+
}
66+
67+
68+
private final int timeoutSeconds;
69+
70+
private final int sutPort;
71+
72+
73+
private String jarLocation;
74+
private Connection sqlConnection;
75+
private List<DbSpecification> dbSpecification;
76+
77+
private MongoClient mongoClient;
78+
79+
private final GenericContainer<?> mongodb;
80+
81+
public ExternalEvoMasterController() {
82+
this(DEFAULT_CONTROLLER_PORT, "../target/session-service-sut.jar", DEFAULT_SUT_PORT, 120, "java");
83+
}
84+
85+
public ExternalEvoMasterController(String jarLocation) {
86+
this();
87+
this.jarLocation = jarLocation;
88+
}
89+
90+
public ExternalEvoMasterController(int controllerPort, String jarLocation, int sutPort, int timeoutSeconds, String command) {
91+
this.sutPort = sutPort;
92+
this.jarLocation = jarLocation;
93+
this.timeoutSeconds = timeoutSeconds;
94+
setControllerPort(controllerPort);
95+
this.mongodb = new GenericContainer<>("mongo:" + MONGODB_VERSION)
96+
.withTmpFs(Collections.singletonMap("/data/db", "rw"))
97+
.withExposedPorts(DEFAULT_DB_PORT);
98+
setJavaCommand(command);
99+
}
100+
101+
@Override
102+
public String[] getInputParameters() {
103+
return new String[]{
104+
"--server.port=" + sutPort,
105+
"--spring.data.mongodb.uri=mongodb://" + mongodb.getContainerIpAddress() + ":" + mongodb.getMappedPort(DEFAULT_DB_PORT) + "/" + MONGODB_DATABASE_NAME,
106+
"--spring.cache.type=NONE"
107+
};
108+
}
109+
110+
111+
private String dbUrl() {
112+
return null;
113+
}
114+
115+
@Override
116+
public String[] getJVMParameters() {
117+
return new String[]{
118+
};
119+
}
120+
121+
122+
@Override
123+
public String getBaseURL() {
124+
return "http://localhost:" + sutPort;
125+
}
126+
127+
@Override
128+
public String getPathToExecutableJar() {
129+
return jarLocation;
130+
}
131+
132+
@Override
133+
public String getLogMessageOfInitializedServer() {
134+
return "Started SessionService in ";
135+
}
136+
137+
@Override
138+
public long getMaxAwaitForInitializationInSeconds() {
139+
return timeoutSeconds;
140+
}
141+
142+
@Override
143+
public void preStart() {
144+
145+
mongodb.start();
146+
147+
try {
148+
mongoClient = MongoClients.create("mongodb://" + mongodb.getContainerIpAddress() + ":" + mongodb.getMappedPort(DEFAULT_DB_PORT));
149+
} catch (Exception e) {
150+
System.out.println("ERROR: " + e.getMessage());
151+
throw new RuntimeException(e);
152+
}
153+
154+
}
155+
156+
@Override
157+
public void postStart() {
158+
159+
}
160+
161+
@Override
162+
public void preStop() {
163+
164+
}
165+
166+
@Override
167+
public void postStop() {
168+
mongodb.stop();
169+
}
170+
171+
@Override
172+
public String getPackagePrefixesToCover() {
173+
return "org.cbioportal.session_service.";
174+
}
175+
176+
177+
public void resetStateOfSUT() {
178+
mongoClient.getDatabase(MONGODB_DATABASE_NAME).drop();
179+
}
180+
181+
182+
@Override
183+
public ProblemInfo getProblemInfo() {
184+
return new RestProblem(
185+
getBaseURL() + "/v2/api-docs",
186+
null
187+
);
188+
}
189+
190+
@Override
191+
public SutInfoDto.OutputFormat getPreferredOutputFormat() {
192+
return SutInfoDto.OutputFormat.JAVA_JUNIT_4;
193+
}
194+
195+
@Override
196+
public List<AuthenticationDto> getInfoForAuthentication() {
197+
return null;
198+
}
199+
200+
201+
@Override
202+
public List<DbSpecification> getDbSpecifications() {
203+
return dbSpecification;
204+
}
205+
206+
@Override
207+
public Object getMongoConnection() {
208+
return mongoClient;
209+
}
210+
211+
212+
}

0 commit comments

Comments
 (0)