Skip to content

Commit 67f33d3

Browse files
committed
embedded driver
1 parent c4cb131 commit 67f33d3

File tree

8 files changed

+513
-27
lines changed

8 files changed

+513
-27
lines changed

.gitignore

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,3 +376,18 @@ jdk_8_maven/em/external/rest/spring-batch-rest/target
376376
/jdk_8_maven/cs/rest/original/spring-ecommerce/target
377377
/jdk_8_maven/em/embedded/rest/spring-ecommerce/target
378378
/jdk_8_maven/em/external/rest/spring-ecommerce/target
379+
380+
/jdk_21_maven/cs/rest-gui/microcks/target
381+
/jdk_21_maven/cs/rest-gui/microcks/commons/model/target
382+
/jdk_21_maven/cs/rest-gui/microcks/commons/util/target
383+
/jdk_21_maven/cs/rest-gui/microcks/commons/util-el/target
384+
/jdk_21_maven/cs/rest-gui/microcks/distro/uber/target
385+
/jdk_21_maven/cs/rest-gui/microcks/distro/uber-async-minion/target
386+
/jdk_21_maven/cs/rest-gui/microcks/webapp/target
387+
/jdk_21_maven/cs/rest-gui/microcks/minions/async/target
388+
/jdk_21_maven/cs/rest-gui/microcks/webapp/src/main/webapp/.angular
389+
/jdk_21_maven/cs/rest-gui/microcks/webapp/src/main/webapp/dist
390+
/jdk_21_maven/cs/rest-gui/microcks/webapp/src/main/webapp/node_modules
391+
392+
/jdk_21_maven/em/embedded/rest-gui/microcks/target
393+
/jdk_21_maven/em/external/rest-gui/microcks/target

jdk_21_maven/cs/rest-gui/microcks/pom.xml

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -102,32 +102,34 @@
102102
<goals>deploy</goals>
103103
</configuration>
104104
</plugin>
105-
<plugin>
106-
<groupId>com.diffplug.spotless</groupId>
107-
<artifactId>spotless-maven-plugin</artifactId>
108-
<version>2.39.0</version>
109-
<configuration>
110-
<!-- define Java language-specific format -->
111-
<java>
112-
<toggleOffOn />
113-
<eclipse>
114-
<file>${multi-project.rootdir}/eclipse-formatter.xml</file>
115-
</eclipse>
116-
<indent>
117-
<spaces>true</spaces>
118-
<spacesPerTab>3</spacesPerTab>
119-
</indent>
120-
</java>
121-
</configuration>
122-
<executions>
123-
<execution>
124-
<goals>
125-
<goal>check</goal>
126-
</goals>
127-
<phase>compile</phase>
128-
</execution>
129-
</executions>
130-
</plugin>
105+
<!-- MODIFIED-->
106+
<!-- <plugin>-->
107+
<!-- <groupId>com.diffplug.spotless</groupId>-->
108+
<!-- <artifactId>spotless-maven-plugin</artifactId>-->
109+
<!-- <version>2.39.0</version>-->
110+
<!-- <configuration>-->
111+
<!-- &lt;!&ndash; define Java language-specific format &ndash;&gt;-->
112+
<!-- <java>-->
113+
<!-- <toggleOffOn />-->
114+
<!-- <eclipse>-->
115+
<!-- <file>${multi-project.rootdir}/eclipse-formatter.xml</file>-->
116+
<!-- </eclipse>-->
117+
<!-- <indent>-->
118+
<!-- <spaces>true</spaces>-->
119+
<!-- <spacesPerTab>3</spacesPerTab>-->
120+
<!-- </indent>-->
121+
<!-- </java>-->
122+
<!-- </configuration>-->
123+
<!-- <executions>-->
124+
<!-- <execution>-->
125+
<!-- <goals>-->
126+
<!-- <goal>check</goal>-->
127+
<!-- </goals>-->
128+
<!-- <phase>compile</phase>-->
129+
<!-- </execution>-->
130+
<!-- </executions>-->
131+
<!-- </plugin>-->
132+
<!-- MODIFIED-->
131133
</plugins>
132134
</build>
133135

jdk_21_maven/cs/rest-gui/microcks/webapp/pom.xml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,11 @@
408408
</profile>
409409
<profile>
410410
<id>prod</id>
411+
<!-- MODIFIED-->
412+
<activation>
413+
<activeByDefault>true</activeByDefault>
414+
</activation>
415+
<!-- MODIFIED-->
411416
<build>
412417
<plugins>
413418
<plugin>
@@ -510,7 +515,11 @@
510515
<arguments>
511516
<argument>--spring.profiles.active=prod</argument>
512517
</arguments>
513-
<classifier>exec</classifier>
518+
<!-- MODIFIED-->
519+
<finalName>microcks</finalName>
520+
<classifier>sut</classifier>
521+
<!-- <classifier>exec</classifier>-->
522+
<!-- MODIFIED-->
514523
<excludes>
515524
<!-- Otel agent should be provided at the bootstrap level within the container image -->
516525
<exclude>

jdk_21_maven/cs/rest-gui/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
<modules>
1616
<module>webgoat</module>
17+
<module>microcks</module>
1718
</modules>
1819

1920

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
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+
8+
<artifactId>evomaster-benchmark-jdk21-em-embedded-rest-gui-microcks</artifactId>
9+
<packaging>jar</packaging>
10+
11+
<parent>
12+
<groupId>org.evomaster</groupId>
13+
<artifactId>evomaster-benchmark-jdk21-em-embedded-rest-gui</artifactId>
14+
<version>3.4.1-SNAPSHOT</version>
15+
</parent>
16+
17+
<dependencyManagement>
18+
<dependencies>
19+
<dependency>
20+
<groupId>org.springframework.boot</groupId>
21+
<artifactId>spring-boot-starter-parent</artifactId>
22+
<version>3.3.10</version>
23+
<type>pom</type>
24+
<scope>import</scope>
25+
</dependency>
26+
</dependencies>
27+
</dependencyManagement>
28+
29+
<dependencies>
30+
<dependency>
31+
<groupId>io.github.microcks</groupId>
32+
<artifactId>microcks-app</artifactId>
33+
<version>1.12.2-SNAPSHOT</version>
34+
</dependency>
35+
<dependency>
36+
<groupId>org.mongodb</groupId>
37+
<artifactId>mongodb-driver-sync</artifactId>
38+
<version>5.0.1</version>
39+
</dependency>
40+
<dependency>
41+
<groupId>org.mongodb</groupId>
42+
<artifactId>mongodb-driver-core</artifactId>
43+
<version>5.0.1</version>
44+
</dependency>
45+
<dependency>
46+
<groupId>com.mongodb</groupId>
47+
<artifactId>java-spring-boot-mongodb-starter</artifactId>
48+
<version>1.0.0</version>
49+
</dependency>
50+
<dependency>
51+
<groupId>org.testcontainers</groupId>
52+
<artifactId>testcontainers</artifactId>
53+
<scope>compile</scope>
54+
</dependency>
55+
<dependency>
56+
<groupId>junit</groupId>
57+
<artifactId>junit</artifactId>
58+
<scope>compile</scope>
59+
<version>4.11</version>
60+
</dependency>
61+
</dependencies>
62+
63+
64+
</project>
Lines changed: 218 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,218 @@
1+
package em.embedded.microcks;
2+
3+
import com.mongodb.client.MongoClient;
4+
import com.mongodb.client.MongoClients;
5+
import io.github.microcks.MicrocksApplication;
6+
import org.evomaster.client.java.controller.AuthUtils;
7+
import org.evomaster.client.java.controller.EmbeddedSutController;
8+
import org.evomaster.client.java.controller.InstrumentedSutStarter;
9+
import org.evomaster.client.java.controller.api.dto.auth.AuthenticationDto;
10+
import org.evomaster.client.java.controller.api.dto.SutInfoDto;
11+
import org.evomaster.client.java.sql.DbSpecification;
12+
import org.evomaster.client.java.controller.problem.ProblemInfo;
13+
import org.evomaster.client.java.controller.problem.RestProblem;
14+
import org.springframework.boot.SpringApplication;
15+
import org.springframework.context.ConfigurableApplicationContext;
16+
import org.testcontainers.containers.BindMode;
17+
import org.testcontainers.containers.GenericContainer;
18+
import org.testcontainers.containers.wait.strategy.Wait;
19+
import org.testcontainers.utility.DockerImageName;
20+
21+
import java.time.Duration;
22+
import java.util.Arrays;
23+
import java.util.Collections;
24+
import java.util.List;
25+
import java.util.Map;
26+
27+
28+
/**
29+
* Class used to start/stop the SUT. This will be controller by the EvoMaster process
30+
*/
31+
32+
33+
/**
34+
* Class used to start/stop the SUT. This will be controller by the EvoMaster process
35+
*/
36+
public class EmbeddedEvoMasterController extends EmbeddedSutController {
37+
38+
public static void main(String[] args) {
39+
40+
int port = 40100;
41+
if (args.length > 0) {
42+
port = Integer.parseInt(args[0]);
43+
}
44+
45+
EmbeddedEvoMasterController controller = new EmbeddedEvoMasterController(port);
46+
InstrumentedSutStarter starter = new InstrumentedSutStarter(controller);
47+
48+
starter.start();
49+
}
50+
51+
52+
private ConfigurableApplicationContext ctx;
53+
54+
private static final int MONGODB_PORT = 27017;
55+
private static final int KEYCLOAK_PORT = 8080;
56+
private static final String ADMIN_USER = "admin";
57+
private static final String ADMIN_PASSWORD = "admin";
58+
private static final String REALM_JSON_PATH = "/opt/keycloak/data/import/microcks-realm.json";
59+
private static final String POSTMAN_IMAGE = "quay.io/microcks/microcks-postman-runtime:0.6.0";
60+
private static final int POSTMAN_PORT = 3000;
61+
62+
private static final String MONGODB_VERSION = "7.0";
63+
64+
private static final String MONGODB_DATABASE_NAME = "test";
65+
66+
private static final GenericContainer mongodbContainer = new GenericContainer("mongo:" + MONGODB_VERSION)
67+
.withTmpFs(Collections.singletonMap("/data/db", "rw"))
68+
.withExposedPorts(MONGODB_PORT);
69+
70+
private static final GenericContainer keycloakContainer = new GenericContainer(
71+
DockerImageName.parse("quay.io/keycloak/keycloak:26.0.0")
72+
)
73+
.withExposedPorts(KEYCLOAK_PORT)
74+
.withEnv("KEYCLOAK_ADMIN", ADMIN_USER)
75+
.withEnv("KEYCLOAK_ADMIN_PASSWORD", ADMIN_PASSWORD)
76+
.withEnv("KC_HEALTH_ENABLED", "true")
77+
.withEnv("KC_METRICS_ENABLED", "true")
78+
.withCommand(
79+
"start-dev",
80+
"--hostname-strict=false",
81+
"--import-realm",
82+
"--health-enabled=true"
83+
)
84+
.withClasspathResourceMapping("microcks-realm-sample.json", REALM_JSON_PATH, BindMode.READ_ONLY)
85+
.waitingFor(Wait.forListeningPort());
86+
87+
private static final GenericContainer<?> postmanContainer = new GenericContainer<>(DockerImageName.parse(POSTMAN_IMAGE))
88+
.withExposedPorts(POSTMAN_PORT)
89+
// .withCreateContainerCmdModifier(cmd -> cmd.withName("microcks-postman-runtime"))
90+
.waitingFor(Wait.forHttp("/health")
91+
.forPort(POSTMAN_PORT)
92+
.withStartupTimeout(Duration.ofSeconds(30)))
93+
.withStartupTimeout(Duration.ofSeconds(30));
94+
95+
private MongoClient mongoClient;
96+
97+
public EmbeddedEvoMasterController() {
98+
this(0);
99+
}
100+
101+
public EmbeddedEvoMasterController(int port) {
102+
setControllerPort(port);
103+
}
104+
105+
106+
@Override
107+
public String startSut() {
108+
109+
mongodbContainer.start();
110+
keycloakContainer.start();
111+
postmanContainer.start();
112+
113+
mongoClient = MongoClients.create("mongodb://" + mongodbContainer.getContainerIpAddress() + ":" + mongodbContainer.getMappedPort(MONGODB_PORT));
114+
115+
System.setProperty("SPRING_PROFILES_ACTIVE", "prod");
116+
System.setProperty("SPRING_DATA_MONGODB_URI", "mongodb://" + mongodbContainer.getContainerIpAddress() + ":" + mongodbContainer.getMappedPort(MONGODB_PORT));
117+
System.setProperty("SPRING_DATA_MONGODB_DATABASE", MONGODB_DATABASE_NAME);
118+
System.setProperty("POSTMAN_RUNNER_URL", "http://" + postmanContainer.getContainerIpAddress() + ":" + postmanContainer.getMappedPort(POSTMAN_PORT));
119+
System.setProperty("SERVICES_UPDATE_INTERVAL", "0 0 0/2 * * *");
120+
System.setProperty("KEYCLOAK_URL", "http://" + keycloakContainer.getContainerIpAddress() + ":" + keycloakContainer.getMappedPort(KEYCLOAK_PORT));
121+
System.setProperty("KEYCLOAK_PUBLIC_URL", "http://localhost:" + keycloakContainer.getMappedPort(KEYCLOAK_PORT));
122+
System.setProperty("JAVA_OPTIONS", "-Dspring.security.oauth2.resourceserver.jwt.issuer-uri=http://localhost:" + keycloakContainer.getMappedPort(KEYCLOAK_PORT) + "/realms/microcks -Dspring.security.oauth2.resourceserver.jwt.jwk-set-uri=http://" + keycloakContainer.getContainerIpAddress() + ":" + keycloakContainer.getMappedPort(KEYCLOAK_PORT) + "/realms/microcks/protocol/openid-connect/certs");
123+
System.setProperty("ENABLE_CORS_POLICY", "false");
124+
System.setProperty("CORS_REST_ALLOW_CREDENTIALS", "true");
125+
126+
ctx = SpringApplication.run(MicrocksApplication.class,
127+
new String[]{"--server.port=0",
128+
"--spring.profiles.active=prod",
129+
"--grpc.server.port=0"
130+
});
131+
132+
System.setProperty("TEST_CALLBACK_URL", "http://localhost:" + getSutPort());
133+
134+
return "http://localhost:" + getSutPort();
135+
}
136+
137+
protected int getSutPort() {
138+
return (Integer) ((Map) ctx.getEnvironment()
139+
.getPropertySources().get("server.ports").getSource())
140+
.get("local.server.port");
141+
}
142+
143+
144+
@Override
145+
public boolean isSutRunning() {
146+
return ctx != null && ctx.isRunning();
147+
}
148+
149+
@Override
150+
public void stopSut() {
151+
ctx.stop();
152+
ctx.close();
153+
154+
mongodbContainer.stop();
155+
keycloakContainer.stop();
156+
postmanContainer.stop();
157+
158+
}
159+
160+
@Override
161+
public String getPackagePrefixesToCover() {
162+
return "io.github.microcks.";
163+
}
164+
165+
@Override
166+
public void resetStateOfSUT() {
167+
mongoClient.getDatabase(MONGODB_DATABASE_NAME).drop();
168+
}
169+
170+
171+
@Override
172+
public List<DbSpecification> getDbSpecifications() {
173+
return null;
174+
}
175+
176+
177+
@Override
178+
public List<AuthenticationDto> getInfoForAuthentication() {
179+
//http://localhost:{port}/realms/microcks/protocol/openid-connect/token
180+
String postEndpoint = "http://localhost:" + keycloakContainer.getMappedPort(KEYCLOAK_PORT) + "/realms/microcks/protocol/openid-connect/token";
181+
182+
String payloadTemplate = "username=%s&password=microcks123&grant_type=password&client_id=microcks-serviceaccount&client_secret=ab54d329-e435-41ae-a900-ec6b3fe15c54";
183+
184+
return Arrays.asList(
185+
AuthUtils.getForJsonToken("ADMIN",
186+
postEndpoint,
187+
String.format(payloadTemplate, "admin"),
188+
"/access_token",
189+
"Bearer ",
190+
"application/x-www-form-urlencoded"),
191+
AuthUtils.getForJsonToken("ADMIN_2",
192+
postEndpoint,
193+
String.format(payloadTemplate, "admin2"),
194+
"/access_token",
195+
"Bearer ",
196+
"application/x-www-form-urlencoded")
197+
);
198+
}
199+
200+
201+
@Override
202+
public ProblemInfo getProblemInfo() {
203+
return new RestProblem(
204+
"http://localhost:" + getSutPort() + "/v3/api-docs",
205+
null
206+
);
207+
}
208+
209+
@Override
210+
public SutInfoDto.OutputFormat getPreferredOutputFormat() {
211+
return SutInfoDto.OutputFormat.JAVA_JUNIT_4;
212+
}
213+
214+
@Override
215+
public Object getMongoConnection() {
216+
return mongoClient;
217+
}
218+
}

0 commit comments

Comments
 (0)