Skip to content

Commit 717c12a

Browse files
committed
working on embedded driver
1 parent 01e95a2 commit 717c12a

File tree

2 files changed

+150
-2
lines changed

2 files changed

+150
-2
lines changed

jdk_17_gradle/em/rest/bibliothek/build.gradle.kts renamed to jdk_17_gradle/em/embedded/rest/bibliothek/build.gradle.kts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ dependencies{
3131
api(project(":cs:rest:bibliothek"))
3232

3333
//Gradle api() is not importing transitive dependencies???
34-
// implementation("org.springframework.boot:spring-boot-starter-web:2.7.0")
35-
// implementation("org.mongodb:mongodb-driver-sync:4.4.2")
34+
implementation("org.springframework.boot:spring-boot-starter-web:3.1.1")
35+
implementation("org.mongodb:mongodb-driver-sync:4.9.1")
36+
37+
implementation("org.springframework.boot:spring-boot-starter-data-mongodb:3.1.1")
38+
implementation("org.springframework.boot:spring-boot-starter-validation:3.1.1")
3639
}
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
package em.embedded.bibliothek;
2+
3+
import com.mongodb.client.MongoClient;
4+
import com.mongodb.client.MongoClients;
5+
import io.papermc.bibliothek.BibliothekApplication;
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.AuthenticationDto;
9+
import org.evomaster.client.java.controller.api.dto.SutInfoDto;
10+
import org.evomaster.client.java.controller.internal.db.DbSpecification;
11+
import org.evomaster.client.java.controller.problem.ProblemInfo;
12+
import org.evomaster.client.java.controller.problem.RestProblem;
13+
import org.springframework.boot.SpringApplication;
14+
import org.springframework.context.ConfigurableApplicationContext;
15+
import org.testcontainers.containers.GenericContainer;
16+
17+
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+
//https://www.mongodb.com/docs/drivers/java/sync/current/compatibility/
46+
47+
private static final String MONGODB_VERSION = "6.1";
48+
49+
private static final String MONGODB_DATABASE_NAME = "Reservations";
50+
51+
private static final GenericContainer mongodbContainer = new GenericContainer("mongo:" + MONGODB_VERSION)
52+
.withExposedPorts(MONGODB_PORT);
53+
54+
private String mongoDbUrl;
55+
56+
private MongoClient mongoClient;
57+
58+
public EmbeddedEvoMasterController() {
59+
this(0);
60+
}
61+
62+
public EmbeddedEvoMasterController(int port) {
63+
setControllerPort(port);
64+
}
65+
66+
67+
@Override
68+
public String startSut() {
69+
70+
mongodbContainer.start();
71+
mongoDbUrl = "mongodb://" + mongodbContainer.getContainerIpAddress() + ":" + mongodbContainer.getMappedPort(MONGODB_PORT) + "/" + MONGODB_DATABASE_NAME;
72+
mongoClient = MongoClients.create(mongoDbUrl);
73+
74+
75+
76+
ctx = SpringApplication.run(BibliothekApplication.class,
77+
new String[]{"--server.port=0",
78+
"--databaseUrl="+mongoDbUrl,
79+
"--spring.data.mongodb.uri="+mongoDbUrl,
80+
"--spring.cache.type=NONE"
81+
});
82+
83+
return "http://localhost:" + getSutPort();
84+
}
85+
86+
protected int getSutPort() {
87+
return (Integer) ((Map) ctx.getEnvironment()
88+
.getPropertySources().get("server.ports").getSource())
89+
.get("local.server.port");
90+
}
91+
92+
93+
@Override
94+
public boolean isSutRunning() {
95+
return ctx != null && ctx.isRunning();
96+
}
97+
98+
@Override
99+
public void stopSut() {
100+
ctx.stop();
101+
ctx.close();
102+
103+
mongodbContainer.stop();
104+
}
105+
106+
@Override
107+
public String getPackagePrefixesToCover() {
108+
return "io.papermc.bibliothek.";
109+
}
110+
111+
@Override
112+
public void resetStateOfSUT() {
113+
mongoClient.getDatabase(MONGODB_DATABASE_NAME).drop();
114+
}
115+
116+
@Override
117+
public List<DbSpecification> getDbSpecifications() {
118+
return null;
119+
}
120+
121+
122+
@Override
123+
public List<AuthenticationDto> getInfoForAuthentication() {
124+
//TODO might need to setup JWT headers here
125+
return null;
126+
}
127+
128+
129+
130+
131+
@Override
132+
public ProblemInfo getProblemInfo() {
133+
return new RestProblem(
134+
"http://localhost:" + getSutPort() + "/v3/api-docs",
135+
null
136+
);
137+
}
138+
139+
@Override
140+
public SutInfoDto.OutputFormat getPreferredOutputFormat() {
141+
return SutInfoDto.OutputFormat.JAVA_JUNIT_4;
142+
}
143+
144+
145+
}

0 commit comments

Comments
 (0)