Skip to content

Commit f7fe321

Browse files
committed
starting with external driver
1 parent ff6e82d commit f7fe321

File tree

4 files changed

+257
-3
lines changed

4 files changed

+257
-3
lines changed

jdk_17_gradle/cs/rest/bibliothek/build.gradle.kts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ plugins {
22
id("java")
33

44
alias(libs.plugins.indra)
5-
alias(libs.plugins.indra.checkstyle)
5+
//alias(libs.plugins.indra.checkstyle)
66
alias(libs.plugins.spotless)
77
alias(libs.plugins.spring.dependency.management)
88
alias(libs.plugins.spring.boot)
@@ -36,7 +36,7 @@ spotless {
3636

3737
dependencies {
3838
annotationProcessor("org.springframework.boot", "spring-boot-configuration-processor")
39-
checkstyle(libs.stylecheck)
39+
//checkstyle(libs.stylecheck)
4040
implementation(libs.jetbrains.annotations)
4141
implementation(libs.springdoc.openapi.starter.webmvc.ui)
4242
implementation("org.springframework.boot", "spring-boot-starter-data-mongodb")
@@ -49,9 +49,14 @@ dependencies {
4949

5050
tasks {
5151
bootJar {
52+
archiveClassifier.set("sut")
5253
launchScript()
5354
}
5455

56+
jar{
57+
archiveClassifier.set("plain")
58+
}
59+
5560
// From StackOverflow: https://stackoverflow.com/a/53087407
5661
// Licensed under: CC BY-SA 4.0
5762
// Adapted to Kotlin
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import org.gradle.jvm.tasks.Jar
2+
3+
4+
repositories {
5+
mavenLocal()
6+
mavenCentral()
7+
maven( url ="https://jcenter.bintray.com")
8+
}
9+
10+
11+
plugins {
12+
`java-library`
13+
application
14+
}
15+
16+
configurations {
17+
implementation {
18+
resolutionStrategy.failOnVersionConflict()
19+
}
20+
}
21+
22+
java {
23+
sourceCompatibility = JavaVersion.VERSION_17
24+
targetCompatibility = JavaVersion.VERSION_17
25+
}
26+
27+
28+
val EVOMASTER_VERSION = "1.6.2-SNAPSHOT"
29+
30+
dependencies{
31+
implementation("org.evomaster:evomaster-client-java-controller:$EVOMASTER_VERSION")
32+
implementation("org.evomaster:evomaster-client-java-instrumentation:$EVOMASTER_VERSION")
33+
implementation("org.evomaster:evomaster-client-java-dependencies:$EVOMASTER_VERSION")
34+
implementation("org.mongodb:mongodb-driver-sync:4.9.1")
35+
}
36+
37+
38+
39+
val fatJar = task("fatJar", type = Jar::class) {
40+
duplicatesStrategy = DuplicatesStrategy.WARN
41+
archiveBaseName.set("${project.name}-evomaster-runner")
42+
isZip64 = true
43+
manifest {
44+
attributes["Implementation-Title"] = "EM"
45+
attributes["Implementation-Version"] = "1.0"
46+
attributes["Main-Class"] = "em.external.bibliothek.ExternalEvoMasterController"
47+
attributes["Premain-Class"] = "org.evomaster.client.java.instrumentation.InstrumentingAgent"
48+
attributes["Agent-Class"] = "org.evomaster.client.java.instrumentation.InstrumentingAgent"
49+
attributes["Can-Redefine-Classes"] = "true"
50+
attributes["Can-Retransform-Classes"] = "true"
51+
}
52+
from(configurations.runtimeClasspath.get().map{ if (it.isDirectory) it else zipTree(it) })
53+
with(tasks.jar.get() as CopySpec)
54+
}
55+
56+
tasks {
57+
"build" {
58+
dependsOn(fatJar)
59+
}
60+
}
Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
package em.external.bibliothek;
2+
3+
import com.mongodb.client.MongoClient;
4+
import com.mongodb.client.MongoClients;
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.util.List;
15+
16+
public class ExternalEvoMasterController extends ExternalSutController {
17+
18+
19+
public static void main(String[] args) {
20+
21+
int controllerPort = 40100;
22+
if (args.length > 0) {
23+
controllerPort = Integer.parseInt(args[0]);
24+
}
25+
int sutPort = 12345;
26+
if (args.length > 1) {
27+
sutPort = Integer.parseInt(args[1]);
28+
}
29+
String jarLocation = "cs/rest/bibliothek/build/libs";
30+
if (args.length > 2) {
31+
jarLocation = args[2];
32+
}
33+
if(! jarLocation.endsWith(".jar")) {
34+
jarLocation += "/bibliothek-sut.jar";
35+
}
36+
37+
int timeoutSeconds = 120;
38+
if(args.length > 3){
39+
timeoutSeconds = Integer.parseInt(args[3]);
40+
}
41+
String command = "java";
42+
if(args.length > 4){
43+
command = args[4];
44+
}
45+
46+
47+
ExternalEvoMasterController controller =
48+
new ExternalEvoMasterController(controllerPort, jarLocation,
49+
sutPort, timeoutSeconds, command);
50+
InstrumentedSutStarter starter = new InstrumentedSutStarter(controller);
51+
52+
starter.start();
53+
}
54+
55+
private final int timeoutSeconds;
56+
private final int sutPort;
57+
private String jarLocation;
58+
private static final int MONGODB_PORT = 27017;
59+
60+
//https://www.mongodb.com/docs/drivers/java/sync/current/compatibility/
61+
private static final String MONGODB_VERSION = "6.0";
62+
63+
private static final String MONGODB_DATABASE_NAME = "library";
64+
65+
private static final GenericContainer mongodbContainer = new GenericContainer("mongo:" + MONGODB_VERSION)
66+
.withExposedPorts(MONGODB_PORT);
67+
68+
private String mongoDbUrl;
69+
70+
private MongoClient mongoClient;
71+
72+
73+
public ExternalEvoMasterController(){
74+
this(40100, "../core/target", 12345, 120, "java");
75+
}
76+
77+
public ExternalEvoMasterController(String jarLocation) {
78+
this();
79+
this.jarLocation = jarLocation;
80+
}
81+
82+
public ExternalEvoMasterController(
83+
int controllerPort, String jarLocation, int sutPort, int timeoutSeconds, String command
84+
) {
85+
86+
if(jarLocation==null || jarLocation.isEmpty()){
87+
throw new IllegalArgumentException("Missing jar location");
88+
}
89+
90+
91+
this.sutPort = sutPort;
92+
this.jarLocation = jarLocation;
93+
this.timeoutSeconds = timeoutSeconds;
94+
setControllerPort(controllerPort);
95+
setJavaCommand(command);
96+
}
97+
98+
99+
@Override
100+
public String[] getInputParameters() {
101+
return new String[]{
102+
"--server.port=" + sutPort,
103+
"--databaseUrl="+mongoDbUrl,
104+
"--spring.data.mongodb.uri="+mongoDbUrl,
105+
"--app.storagePath=./tmp/bibliothek/" + "p"+sutPort
106+
};
107+
}
108+
109+
public String[] getJVMParameters() {
110+
return new String[]{};
111+
}
112+
113+
@Override
114+
public String getBaseURL() {
115+
return "http://localhost:" + sutPort;
116+
}
117+
118+
@Override
119+
public String getPathToExecutableJar() {
120+
return jarLocation;
121+
}
122+
123+
@Override
124+
public String getLogMessageOfInitializedServer() {
125+
return "Started BibliothekApplication in";
126+
}
127+
128+
@Override
129+
public long getMaxAwaitForInitializationInSeconds() {
130+
return timeoutSeconds;
131+
}
132+
133+
@Override
134+
public void preStart() {
135+
mongodbContainer.start();
136+
mongoDbUrl = "mongodb://" + mongodbContainer.getContainerIpAddress() + ":" + mongodbContainer.getMappedPort(MONGODB_PORT) + "/" + MONGODB_DATABASE_NAME;
137+
mongoClient = MongoClients.create(mongoDbUrl);
138+
}
139+
140+
@Override
141+
public void postStart() {
142+
}
143+
144+
@Override
145+
public void resetStateOfSUT() {
146+
mongoClient.getDatabase(MONGODB_DATABASE_NAME).drop();
147+
}
148+
149+
@Override
150+
public void preStop() {
151+
}
152+
153+
@Override
154+
public void postStop() {
155+
mongodbContainer.stop();
156+
}
157+
158+
159+
160+
@Override
161+
public String getPackagePrefixesToCover() {
162+
return "io.papermc.bibliothek.";
163+
}
164+
165+
@Override
166+
public ProblemInfo getProblemInfo() {
167+
return new RestProblem(
168+
"http://localhost:" + sutPort + "/openapi",
169+
null
170+
);
171+
}
172+
173+
@Override
174+
public SutInfoDto.OutputFormat getPreferredOutputFormat() {
175+
return SutInfoDto.OutputFormat.JAVA_JUNIT_5;
176+
}
177+
178+
179+
180+
@Override
181+
public List<AuthenticationDto> getInfoForAuthentication() {
182+
return null;
183+
}
184+
185+
@Override
186+
public List<DbSpecification> getDbSpecifications() {
187+
return null;
188+
}
189+
}

jdk_17_gradle/settings.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ rootProject.name = "emb_jdk_17_gradle"
22

33
include("cs:rest:bibliothek")
44
include("em:embedded:rest:bibliothek")
5-
//include("em:external:rest:bibliothek")
5+
include("em:external:rest:bibliothek")
66

0 commit comments

Comments
 (0)