Skip to content

Commit c6e47b0

Browse files
committed
External controller for gestaohospital
1 parent e33b723 commit c6e47b0

3 files changed

Lines changed: 289 additions & 0 deletions

File tree

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

jdk_8_maven/em/external/rest/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
<module>ocvn</module>
2525
<module>languagetool</module>
2626
<module>restcountries</module>
27+
<module>gestaohospital</module>
2728
</modules>
2829

2930
</project>

0 commit comments

Comments
 (0)