Skip to content

Commit c9a6310

Browse files
committed
Swagger petstore drivers
1 parent 67fe552 commit c9a6310

File tree

12 files changed

+297
-7
lines changed

12 files changed

+297
-7
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,3 +363,4 @@ jdk_8_maven/em/external/rest/spring-batch-rest/target
363363

364364
/jdk_8_maven/cs/rest/original/swagger-petstore/target
365365
/jdk_8_maven/em/embedded/rest/swagger-petstore/target
366+
/jdk_8_maven/em/external/rest/swagger-petstore/target

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ For simplicity, all schemas are also available as JSON/YML files under the folde
7070
> **IMPORTANT**: More details (e.g., #LOCs and used databases) on these APIs can be found [in this table](statistics/table_emb.md).
7171
7272

73-
### REST: Java/Kotlin (31)
73+
### REST: Java/Kotlin (32)
7474

7575
* **Bibliothek** (MIT), [jdk_17_gradle/cs/rest/bibliothek](jdk_17_gradle/cs/rest/bibliothek), from [https://github.com/PaperMC/bibliothek](https://github.com/PaperMC/bibliothek)
7676

@@ -126,6 +126,8 @@ For simplicity, all schemas are also available as JSON/YML files under the folde
126126

127127
* **Spring Boot Restful API Example** (MIT), [jdk_17_maven/cs/rest/spring-rest-example](jdk_17_maven/cs/rest/spring-rest-example), from [https://github.com/phantasmicmeans/spring-boot-restful-api-example](https://github.com/phantasmicmeans/spring-boot-restful-api-example)
128128

129+
* **Swagger Petstore** (Apache), [jdk_8_maven/cs/rest/original/swagger-petstore](jdk_8_maven/cs/rest/original/swagger-petstore), from [https://github.com/swagger-api/swagger-petstore](https://github.com/swagger-api/swagger-petstore)
130+
129131
* **Tiltaksgjennomføring** (MIT), [jdk_17_maven/cs/rest/tiltaksgjennomforing](jdk_17_maven/cs/rest/tiltaksgjennomforing), from [https://github.com/navikt/tiltaksgjennomforing-api](https://github.com/navikt/tiltaksgjennomforing-api)
130132

131133
* **User Management** (MIT), [jdk_8_maven/cs/rest/original/user-management](jdk_8_maven/cs/rest/original/user-management), from [https://github.com/andreagiassi/microservice-rbac-user-management](https://github.com/andreagiassi/microservice-rbac-user-management)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
FROM amazoncorretto:8-alpine-jdk
2+
3+
COPY ./dist/swagger-petstore-sut.jar .
4+
COPY ./dist/jacocoagent.jar .
5+
6+
7+
8+
#ENV TOOL="undefined"
9+
#ENV RUN="0"
10+
11+
ENTRYPOINT \
12+
java \
13+
# unfortunately dumponexit is completely unreliable in Docker :(
14+
# -javaagent:jacocoagent.jar=destfile=./jacoco/swagger-petstore__${TOOL}__${RUN}__jacoco.exec,append=false,dumponexit=true \
15+
-javaagent:jacocoagent.jar=output=tcpserver,address=*,port=6300,append=false,dumponexit=false \
16+
-jar swagger-petstore-sut.jar \
17+
8080

dockerfiles/swagger-petstore.yaml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
services:
2+
sut-swagger-petstore:
3+
build:
4+
dockerfile: ./dockerfiles/swagger-petstore.dockerfile
5+
context: ..
6+
# environment:
7+
# TOOL: ${TOOL:-undefined}
8+
# RUN: ${RUN:-0}
9+
ports:
10+
- "${HOST_PORT:-8080}:8080"
11+
- "${JACOCO_PORT:-6300}:6300"
12+
# volumes:
13+
# default env does not work on volumes
14+
# - ${JACOCODIR}:/jacoco
15+

jdk_8_maven/cs/rest/original/swagger-petstore/src/main/java/io/swagger/petstore/Main.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,21 @@ public void startServer(int port) throws Exception {
5050
}
5151
}
5252
}
53+
System.out.println(tempDir);
54+
//also extract inflector.yaml
55+
try (java.io.InputStream is = Main.class.getClassLoader().getResourceAsStream("inflector.yaml")) {
56+
if (is != null) {
57+
File inflectorFile = new File("./", "inflector.yaml");
58+
try (java.io.FileOutputStream fos = new java.io.FileOutputStream(inflectorFile)) {
59+
byte[] buffer = new byte[1024];
60+
int bytesRead;
61+
while ((bytesRead = is.read(buffer)) != -1) {
62+
fos.write(buffer, 0, bytesRead);
63+
}
64+
}
65+
}
66+
}
67+
5368

5469
webappDirLocation = tempDir.getAbsolutePath();
5570
} else {

jdk_8_maven/em/external/rest/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
<module>blogapi</module>
3333
<module>spring-batch-rest</module>
3434
<module>spring-actuator-demo</module>
35+
<module>swagger-petstore</module>
3536
</modules>
3637

3738
</project>
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
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-swagger-petstore</artifactId>
8+
<packaging>jar</packaging>
9+
10+
<parent>
11+
<groupId>org.evomaster</groupId>
12+
<artifactId>evomaster-benchmark-em-external-rest</artifactId>
13+
<version>3.4.1-SNAPSHOT</version>
14+
</parent>
15+
16+
<dependencies>
17+
<dependency>
18+
<groupId>junit</groupId>
19+
<artifactId>junit</artifactId>
20+
<scope>compile</scope>
21+
<version>4.11</version>
22+
</dependency>
23+
</dependencies>
24+
25+
<build>
26+
<plugins>
27+
<plugin>
28+
<groupId>org.apache.maven.plugins</groupId>
29+
<artifactId>maven-shade-plugin</artifactId>
30+
<executions>
31+
<execution>
32+
<phase>package</phase>
33+
<goals>
34+
<goal>shade</goal>
35+
</goals>
36+
<configuration>
37+
<finalName>swagger-petstore-evomaster-runner</finalName>
38+
<transformers>
39+
<transformer
40+
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
41+
<manifestEntries>
42+
<Main-Class>em.external.spring.batch.rest.ExternalEvoMasterController
43+
</Main-Class>
44+
<Premain-Class>org.evomaster.client.java.instrumentation.InstrumentingAgent
45+
</Premain-Class>
46+
<Agent-Class>org.evomaster.client.java.instrumentation.InstrumentingAgent
47+
</Agent-Class>
48+
<Can-Redefine-Classes>true</Can-Redefine-Classes>
49+
<Can-Retransform-Classes>true</Can-Retransform-Classes>
50+
</manifestEntries>
51+
</transformer>
52+
</transformers>
53+
</configuration>
54+
</execution>
55+
</executions>
56+
</plugin>
57+
</plugins>
58+
</build>
59+
</project>
Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
package em.external.swagger.petstore;
2+
3+
4+
import org.evomaster.client.java.controller.ExternalSutController;
5+
import org.evomaster.client.java.controller.InstrumentedSutStarter;
6+
import org.evomaster.client.java.controller.api.dto.SutInfoDto;
7+
import org.evomaster.client.java.controller.api.dto.auth.AuthenticationDto;
8+
import org.evomaster.client.java.controller.problem.ProblemInfo;
9+
import org.evomaster.client.java.controller.problem.RestProblem;
10+
import org.evomaster.client.java.sql.DbSpecification;
11+
12+
import java.util.List;
13+
14+
public class ExternalEvoMasterController extends ExternalSutController {
15+
16+
public static void main(String[] args) {
17+
18+
19+
int controllerPort = 40100;
20+
if (args.length > 0) {
21+
controllerPort = Integer.parseInt(args[0]);
22+
}
23+
int sutPort = 12345;
24+
if (args.length > 1) {
25+
sutPort = Integer.parseInt(args[1]);
26+
}
27+
String jarLocation = "cs/rest/original/swagger-petstore/target";
28+
if (args.length > 2) {
29+
jarLocation = args[2];
30+
}
31+
if(! jarLocation.endsWith(".jar")) {
32+
jarLocation += "/swagger-petstore-sut.jar";
33+
}
34+
35+
int timeoutSeconds = 120;
36+
if(args.length > 3){
37+
timeoutSeconds = Integer.parseInt(args[3]);
38+
}
39+
String command = "java";
40+
if(args.length > 4){
41+
command = args[4];
42+
}
43+
44+
45+
ExternalEvoMasterController controller =
46+
new ExternalEvoMasterController(controllerPort, jarLocation,
47+
sutPort, timeoutSeconds, command);
48+
49+
InstrumentedSutStarter starter = new InstrumentedSutStarter(controller);
50+
starter.start();
51+
52+
}
53+
54+
private final int timeoutSeconds;
55+
private final int sutPort;
56+
private String jarLocation;
57+
58+
private List<DbSpecification> dbSpecification;
59+
60+
public ExternalEvoMasterController(){
61+
this(40100, "cs/rest/original/swagger-petstore/target/swagger-petstore-sut.jar", 12345, 120, "java");
62+
}
63+
64+
public ExternalEvoMasterController(String jarLocation) {
65+
this();
66+
this.jarLocation = jarLocation;
67+
}
68+
69+
public ExternalEvoMasterController(
70+
int controllerPort, String jarLocation, int sutPort, int timeoutSeconds, String command
71+
) {
72+
73+
if(jarLocation==null || jarLocation.isEmpty()){
74+
throw new IllegalArgumentException("Missing jar location");
75+
}
76+
77+
this.sutPort = sutPort;
78+
this.jarLocation = jarLocation;
79+
this.timeoutSeconds = timeoutSeconds;
80+
setControllerPort(controllerPort);
81+
setJavaCommand(command);
82+
}
83+
84+
@Override
85+
public String[] getInputParameters() {
86+
return new String[]{
87+
"" + sutPort
88+
};
89+
}
90+
91+
@Override
92+
public String[] getJVMParameters() {
93+
return new String[]{
94+
};
95+
}
96+
97+
98+
@Override
99+
public String getBaseURL() {
100+
return "http://localhost:" + sutPort;
101+
}
102+
103+
@Override
104+
public String getPathToExecutableJar() {
105+
return jarLocation;
106+
}
107+
108+
@Override
109+
public String getLogMessageOfInitializedServer() {
110+
return "Starting ProtocolHandler ";
111+
}
112+
113+
@Override
114+
public void preStart() {
115+
}
116+
117+
@Override
118+
public void postStart() {
119+
120+
}
121+
122+
@Override
123+
public void preStop() {
124+
125+
}
126+
127+
@Override
128+
public void postStop() {
129+
130+
}
131+
132+
@Override
133+
public long getMaxAwaitForInitializationInSeconds() {
134+
return timeoutSeconds;
135+
}
136+
137+
@Override
138+
public String getPackagePrefixesToCover() {
139+
return "io.swagger.petstore.";
140+
}
141+
142+
143+
public void resetStateOfSUT() {
144+
}
145+
146+
147+
@Override
148+
public ProblemInfo getProblemInfo() {
149+
return new RestProblem(
150+
getBaseURL() + "/api/v3/openapi.json",
151+
null
152+
);
153+
}
154+
155+
@Override
156+
public SutInfoDto.OutputFormat getPreferredOutputFormat() {
157+
return SutInfoDto.OutputFormat.JAVA_JUNIT_5;
158+
}
159+
160+
@Override
161+
public List<AuthenticationDto> getInfoForAuthentication() {
162+
return null;
163+
}
164+
165+
166+
@Override
167+
public List<DbSpecification> getDbSpecifications() {
168+
return dbSpecification;
169+
}
170+
171+
}

scripts/dist.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,18 @@ def build_jdk_8_maven():
177177
copy(folder + "/cs/rest-gui/genome-nexus/web/target/genome-nexus-sut.jar", DIST)
178178
copy(folder + "/em/external/rest/genome-nexus/target/genome-nexus-evomaster-runner.jar", DIST)
179179

180+
copy(folder + "/cs/rest/original/spring-batch-rest/example/api/target/spring-batch-rest-sut.jar", DIST)
181+
copy(folder + "/em/external/rest/spring-batch-rest/target/spring-batch-rest-evomaster-runner.jar", DIST)
182+
183+
184+
copy(folder + "/cs/rest/original/spring-actuator-demo/target/spring-actuator-demo-sut.jar", DIST)
185+
copy(folder + "/em/external/rest/spring-actuator-demo/target/spring-actuator-demo-evomaster-runner.jar", DIST)
186+
187+
copy(folder + "/cs/rest/original/swagger-petstore/target/swagger-petstore-sut.jar", DIST)
188+
copy(folder + "/em/external/rest/swagger-petstore/target/swagger-petstore-evomaster-runner.jar", DIST)
189+
190+
# graphql
191+
180192
copy(folder + "/cs/graphql/petclinic-graphql/target/petclinic-graphql-sut.jar", DIST)
181193
copy(folder + "/em/external/graphql/petclinic-graphql/target/petclinic-graphql-evomaster-runner.jar", DIST)
182194

@@ -200,12 +212,6 @@ def build_jdk_8_maven():
200212
copy(folder + "/cs/rpc/grpc/artificial/grpc-scs/target/rpc-grpc-scs-sut.jar", DIST)
201213
copy(folder + "/em/external/grpc/scs/target/rpc-grpc-scs-evomaster-runner.jar", DIST)
202214

203-
copy(folder + "/cs/rest/original/spring-batch-rest/example/api/target/spring-batch-rest-sut.jar", DIST)
204-
copy(folder + "/em/external/rest/spring-batch-rest/target/spring-batch-rest-evomaster-runner.jar", DIST)
205-
206-
207-
copy(folder + "/cs/rest/original/spring-actuator-demo/target/spring-actuator-demo-sut.jar", DIST)
208-
copy(folder + "/em/external/rest/spring-actuator-demo/target/spring-actuator-demo-evomaster-runner.jar", DIST)
209215

210216
ind0 = os.environ.get('SUT_LOCATION_IND0', '')
211217
if ind0 == '':

scripts/dockerize/data/sut.csv

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,4 @@ spring-rest-example,TRUE,"","--server.port=8080 --spring.datasource.username=roo
3030
erc20-rest-service,TRUE,"",--server.port=8080,http://localhost:8080/v2/api-docs,http://localhost:8080,FALSE,,,,,,FALSE,FALSE,
3131
spring-actuator-demo,TRUE,"",--server.port=8080,http://localhost:8080/v3/api-docs,http://localhost:8080,FALSE,,,,,,FALSE,FALSE,
3232
webgoat,TRUE,"-Drunning.in.docker=true","--webgoat.port=8080 --webwolf.port=8081 --server.address=""0.0.0.0"" --spring.profiles.active=dev --spring.datasource.driver-class-name=org.h2.Driver --spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect --spring.jpa.properties.jakarta.persistence.schema-generation.scripts.action=none --spring.sql.init.mode=never --spring.datasource.url=""jdbc:h2:file:./test"" --spring.datasource.username=sa --spring.datasource.password",http://localhost:8080/WebGoat/v3/api-docs,http://localhost:8080,TRUE,,,,,,FALSE,FALSE,
33+
swagger-petstore,TRUE,"","8080",http://localhost:8080//api/v3/openapi.json,http://localhost:8080,FALSE,,,,,,FALSE,FALSE,

0 commit comments

Comments
 (0)