Skip to content

Commit 9797226

Browse files
committed
preparing embedded driver
1 parent ee18152 commit 9797226

4 files changed

Lines changed: 190 additions & 2 deletions

File tree

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
2+
repositories {
3+
mavenLocal()
4+
mavenCentral()
5+
maven( url ="https://jcenter.bintray.com")
6+
}
7+
8+
9+
plugins {
10+
`java-library`
11+
// id("io.spring.dependency-management") version "1.0.6.RELEASE"
12+
}
13+
14+
configurations {
15+
implementation {
16+
resolutionStrategy.failOnVersionConflict()
17+
}
18+
}
19+
20+
java {
21+
sourceCompatibility = JavaVersion.VERSION_11
22+
targetCompatibility = JavaVersion.VERSION_11
23+
}
24+
25+
26+
//dependencyManagement {
27+
// imports {
28+
// // mavenBom("io.micronaut:micronaut-bom:1.3.4")
29+
// }
30+
//}
31+
32+
val EVOMASTER_VERSION = "1.6.2-SNAPSHOT"
33+
34+
dependencies{
35+
implementation("org.evomaster:evomaster-client-java-controller:$EVOMASTER_VERSION")
36+
implementation("org.evomaster:evomaster-client-java-dependencies:$EVOMASTER_VERSION")
37+
38+
api(project(":cs:rest:reservations-api"))
39+
40+
//Gradle api() is not importing transitive dependencies???
41+
implementation("org.springframework.boot:spring-boot-starter-web:2.7.0")
42+
implementation("org.mongodb:mongodb-driver-sync:4.4.2")
43+
}
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
package em.embedded.reservationsapi;
2+
3+
import com.mongodb.client.MongoClient;
4+
import com.mongodb.client.MongoClients;
5+
import org.evomaster.client.java.controller.EmbeddedSutController;
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.springframework.boot.SpringApplication;
13+
import org.springframework.context.ConfigurableApplicationContext;
14+
import org.testcontainers.containers.GenericContainer;
15+
import sk.cyrilgavala.reservationsApi.ReservationsApi;
16+
17+
import java.util.List;
18+
import java.util.Map;
19+
20+
21+
/**
22+
* Class used to start/stop the SUT. This will be controller by the EvoMaster process
23+
*/
24+
public class EmbeddedEvoMasterController extends EmbeddedSutController {
25+
26+
public static void main(String[] args) {
27+
28+
int port = 40100;
29+
if (args.length > 0) {
30+
port = Integer.parseInt(args[0]);
31+
}
32+
33+
EmbeddedEvoMasterController controller = new EmbeddedEvoMasterController(port);
34+
InstrumentedSutStarter starter = new InstrumentedSutStarter(controller);
35+
36+
starter.start();
37+
}
38+
39+
40+
private ConfigurableApplicationContext ctx;
41+
42+
private static final int MONGODB_PORT = 27017;
43+
44+
//https://www.mongodb.com/docs/drivers/java/sync/current/compatibility/
45+
private static final String MONGODB_VERSION = "4.4";
46+
47+
private static final String MONGODB_DATABASE_NAME = "Reservations";
48+
49+
private static final GenericContainer mongodbContainer = new GenericContainer("mongo:" + MONGODB_VERSION)
50+
.withExposedPorts(MONGODB_PORT);
51+
52+
private String mongoDbUrl;
53+
54+
private MongoClient mongoClient;
55+
56+
public EmbeddedEvoMasterController() {
57+
this(0);
58+
}
59+
60+
public EmbeddedEvoMasterController(int port) {
61+
setControllerPort(port);
62+
}
63+
64+
65+
@Override
66+
public String startSut() {
67+
68+
mongodbContainer.start();
69+
mongoDbUrl = "mongodb://" + mongodbContainer.getContainerIpAddress() + ":" + mongodbContainer.getMappedPort(MONGODB_PORT) + "/" + MONGODB_DATABASE_NAME;
70+
mongoClient = MongoClients.create(mongoDbUrl);
71+
72+
73+
74+
ctx = SpringApplication.run(ReservationsApi.class,
75+
new String[]{"--server.port=0",
76+
"--databaseUrl="+mongoDbUrl,
77+
"--spring.data.mongodb.uri="+mongoDbUrl,
78+
"--spring.cache.type=NONE"
79+
});
80+
81+
return "http://localhost:" + getSutPort();
82+
}
83+
84+
protected int getSutPort() {
85+
return (Integer) ((Map) ctx.getEnvironment()
86+
.getPropertySources().get("server.ports").getSource())
87+
.get("local.server.port");
88+
}
89+
90+
91+
@Override
92+
public boolean isSutRunning() {
93+
return ctx != null && ctx.isRunning();
94+
}
95+
96+
@Override
97+
public void stopSut() {
98+
ctx.stop();
99+
ctx.close();
100+
101+
mongodbContainer.stop();
102+
}
103+
104+
@Override
105+
public String getPackagePrefixesToCover() {
106+
return "sk.cyrilgavala.reservationsApi.";
107+
}
108+
109+
@Override
110+
public void resetStateOfSUT() {
111+
mongoClient.getDatabase(MONGODB_DATABASE_NAME).drop();
112+
}
113+
114+
@Override
115+
public List<DbSpecification> getDbSpecifications() {
116+
return null;
117+
}
118+
119+
120+
@Override
121+
public List<AuthenticationDto> getInfoForAuthentication() {
122+
return null;
123+
}
124+
125+
126+
127+
128+
@Override
129+
public ProblemInfo getProblemInfo() {
130+
return new RestProblem(
131+
"http://localhost:" + getSutPort() + "/v3/api-docs",
132+
null
133+
);
134+
}
135+
136+
@Override
137+
public SutInfoDto.OutputFormat getPreferredOutputFormat() {
138+
return SutInfoDto.OutputFormat.JAVA_JUNIT_4;
139+
}
140+
141+
142+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8-bin.zip
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists

jdk_11_gradle/settings.gradle.kts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,7 @@ rootProject.name = "emb_jdk_11_gradle"
22

33
include("cs:graphql:patio-api")
44
include("em:embedded:graphql:patio-api")
5-
include("em:external:graphql:patio-api")
5+
include("em:external:graphql:patio-api")
6+
7+
include("cs:rest:reservations-api")
8+
include("em:embedded:rest:reservations-api")

0 commit comments

Comments
 (0)