From ed0c64374c430c950b0b311c7fe1c30a3f09fb2c Mon Sep 17 00:00:00 2001 From: Omur Date: Mon, 16 Jun 2025 11:36:25 +0200 Subject: [PATCH 1/2] drivers --- README.md | 2 + dockerfiles/spring-rest-example.dockerfile | 17 + dockerfiles/spring-rest-example.yaml | 38 ++ jdk_17_maven/em/embedded/rest/pom.xml | 1 + .../embedded/rest/spring-rest-example/pom.xml | 42 ++ .../spring/EmbeddedEvoMasterController.java | 142 +++++++ jdk_17_maven/em/external/rest/pom.xml | 1 + .../external/rest/spring-rest-example/pom.xml | 70 ++++ .../spring/ExternalEvoMasterController.java | 223 ++++++++++ openapi-swagger/spring-rest-example.json | 390 ++++++++++++++++++ scripts/dist.py | 3 + scripts/dockerize/data/sut.csv | 5 +- statistics/data.csv | 1 + statistics/table_emb.md | 1 + 14 files changed, 934 insertions(+), 2 deletions(-) create mode 100644 dockerfiles/spring-rest-example.dockerfile create mode 100644 dockerfiles/spring-rest-example.yaml create mode 100644 jdk_17_maven/em/embedded/rest/spring-rest-example/pom.xml create mode 100644 jdk_17_maven/em/embedded/rest/spring-rest-example/src/main/java/em/embedded/com/example/spring/EmbeddedEvoMasterController.java create mode 100644 jdk_17_maven/em/external/rest/spring-rest-example/pom.xml create mode 100644 jdk_17_maven/em/external/rest/spring-rest-example/src/main/java/em/external/com/example/spring/ExternalEvoMasterController.java create mode 100644 openapi-swagger/spring-rest-example.json diff --git a/README.md b/README.md index d2f65ea48..1b90614cb 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,8 @@ For simplicity, all schemas are also available as JSON/YML files under the folde * **Spring-batch-rest** (Apache), [jdk_8_maven/cs/rest/original/spring-batch-rest](jdk_8_maven/cs/rest/original/spring-batch-rest), from [https://github.com/chrisgleissner/spring-batch-rest](https://github.com/chrisgleissner/spring-batch-rest) +* **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) + * **Tiltaksgjennomføring API** (MIT), [jdk_17_maven/cs/rest/tiltaksgjennomforing-api](jdk_17_maven/cs/rest/tiltaksgjennomforing-api), from [https://github.com/navikt/tiltaksgjennomforing-api](https://github.com/navikt/tiltaksgjennomforing-api) * **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) diff --git a/dockerfiles/spring-rest-example.dockerfile b/dockerfiles/spring-rest-example.dockerfile new file mode 100644 index 000000000..f9b57ca40 --- /dev/null +++ b/dockerfiles/spring-rest-example.dockerfile @@ -0,0 +1,17 @@ +FROM amazoncorretto:17-alpine-jdk + +COPY ./dist/spring-rest-example-sut.jar . +COPY ./dist/jacocoagent.jar . + + + +#ENV TOOL="undefined" +#ENV RUN="0" + +ENTRYPOINT \ + java \ +# unfortunately dumponexit is completely unreliable in Docker :( +# -javaagent:jacocoagent.jar=destfile=./jacoco/spring-rest-example__${TOOL}__${RUN}__jacoco.exec,append=false,dumponexit=true \ + -javaagent:jacocoagent.jar=output=tcpserver,address=*,port=6300,append=false,dumponexit=false \ + -jar spring-rest-example-sut.jar \ + --server.port=8080 --spring.datasource.username=root --spring.datasource.password=root --spring.datasource.url="jdbc:mysql://db:3306/example?useSSL=false&allowPublicKeyRetrieval=true" \ No newline at end of file diff --git a/dockerfiles/spring-rest-example.yaml b/dockerfiles/spring-rest-example.yaml new file mode 100644 index 000000000..03f068903 --- /dev/null +++ b/dockerfiles/spring-rest-example.yaml @@ -0,0 +1,38 @@ +services: + sut-spring-rest-example: + build: + dockerfile: ./dockerfiles/spring-rest-example.dockerfile + context: .. +# environment: +# TOOL: ${TOOL:-undefined} +# RUN: ${RUN:-0} + ports: + - "${HOST_PORT:-8080}:8080" + - "${JACOCO_PORT:-6300}:6300" +# volumes: + # default env does not work on volumes +# - ${JACOCODIR}:/jacoco + depends_on: + db: + condition: service_healthy + + db: + image: mysql:8.0 + tmpfs: + - '/var/lib/mysql' + + + environment: + MYSQL_ROOT_PASSWORD: root + MYSQL_DATABASE: example + + + + + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] + interval: 30s + timeout: 30s + retries: 3 + + diff --git a/jdk_17_maven/em/embedded/rest/pom.xml b/jdk_17_maven/em/embedded/rest/pom.xml index ca2d8b1f5..b0c0a0abd 100644 --- a/jdk_17_maven/em/embedded/rest/pom.xml +++ b/jdk_17_maven/em/embedded/rest/pom.xml @@ -15,6 +15,7 @@ familie-ba-sak tiltaksgjennomforing-api ohsome-api + spring-rest-example diff --git a/jdk_17_maven/em/embedded/rest/spring-rest-example/pom.xml b/jdk_17_maven/em/embedded/rest/spring-rest-example/pom.xml new file mode 100644 index 000000000..0c8429ae5 --- /dev/null +++ b/jdk_17_maven/em/embedded/rest/spring-rest-example/pom.xml @@ -0,0 +1,42 @@ + + + 4.0.0 + + org.evomaster + evomaster-benchmark-jdk17-em-embedded-rest + 3.4.1-SNAPSHOT + + + evomaster-benchmark-jdk17-em-embedded-rest-spring-rest-example + jar + + + + + org.springframework.boot + spring-boot-dependencies + 3.0.4 + pom + import + + + + + + + com.example + spring-rest-example + 0.0.1 + + + org.testcontainers + testcontainers + 1.19.1 + compile + + + + + diff --git a/jdk_17_maven/em/embedded/rest/spring-rest-example/src/main/java/em/embedded/com/example/spring/EmbeddedEvoMasterController.java b/jdk_17_maven/em/embedded/rest/spring-rest-example/src/main/java/em/embedded/com/example/spring/EmbeddedEvoMasterController.java new file mode 100644 index 000000000..bca290054 --- /dev/null +++ b/jdk_17_maven/em/embedded/rest/spring-rest-example/src/main/java/em/embedded/com/example/spring/EmbeddedEvoMasterController.java @@ -0,0 +1,142 @@ +package em.embedded.com.example.spring; + +import com.sw.project.ProjectApiApplication; +import org.evomaster.client.java.controller.EmbeddedSutController; +import org.evomaster.client.java.controller.InstrumentedSutStarter; +import org.evomaster.client.java.controller.api.dto.SutInfoDto; +import org.evomaster.client.java.controller.api.dto.auth.AuthenticationDto; +import org.evomaster.client.java.controller.api.dto.database.schema.DatabaseType; +import org.evomaster.client.java.controller.problem.ProblemInfo; +import org.evomaster.client.java.controller.problem.RestProblem; +import org.evomaster.client.java.sql.DbSpecification; +import org.springframework.boot.SpringApplication; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.jdbc.core.JdbcTemplate; +import org.testcontainers.containers.GenericContainer; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.*; + +public class EmbeddedEvoMasterController extends EmbeddedSutController { + + private static final GenericContainer mysql = new GenericContainer("mysql:8.0" ) + .withEnv(new HashMap(){{ + put("MYSQL_ROOT_PASSWORD", "root"); + put("MYSQL_DATABASE", "example"); + }}) + .withExposedPorts(3306) + .withTmpFs(Collections.singletonMap("/var/lib/mysql", "rw")); + + private ConfigurableApplicationContext ctx; + + private Connection sqlConnection; + private List dbSpecification; + + + public EmbeddedEvoMasterController() { + this(40100); + } + + public EmbeddedEvoMasterController(int port) { + setControllerPort(port); + } + + public static void main(String[] args) { + int port = 40100; + if (args.length > 0) { + port = Integer.parseInt(args[0]); + } + + EmbeddedEvoMasterController controller = new EmbeddedEvoMasterController(port); + InstrumentedSutStarter starter = new InstrumentedSutStarter(controller); + + starter.start(); + } + + @Override + public boolean isSutRunning() { + return ctx!=null && ctx.isRunning(); + } + + @Override + public String getPackagePrefixesToCover() { + return "com.sw.project."; + } + + @Override + public List getInfoForAuthentication() { + return null; + } + + @Override + public ProblemInfo getProblemInfo() { + return new RestProblem( + "http://localhost:" + getSutPort() + "/v3/api-docs", + null + ); + } + + @Override + public SutInfoDto.OutputFormat getPreferredOutputFormat() { + return SutInfoDto.OutputFormat.JAVA_JUNIT_5; + } + + @Override + public String startSut() { + mysql.start(); + + String host = mysql.getContainerIpAddress(); + int port = mysql.getMappedPort(3306); + String url = "jdbc:mysql://"+host+":"+port+"/example?useSSL=false&allowPublicKeyRetrieval=true"; + + ctx = SpringApplication.run(ProjectApiApplication.class, new String[]{ + "--server.port=0", + "--spring.datasource.url="+url, + "--spring.datasource.username=root", + "--spring.datasource.password=root", + "--management.server.port=-1", + "--logging.level.root=OFF", + "--logging.level.org.springframework=INFO" + }); + + if (sqlConnection != null) { + try { + sqlConnection.close(); + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + JdbcTemplate jdbc = ctx.getBean(JdbcTemplate.class); + try { + sqlConnection = jdbc.getDataSource().getConnection(); + } catch (SQLException e) { + throw new RuntimeException(e); + } + + dbSpecification = Arrays.asList(new DbSpecification(DatabaseType.MYSQL,sqlConnection)); + + return "http://localhost:" + getSutPort(); + } + + protected int getSutPort() { + return (Integer) ((Map) ctx.getEnvironment() + .getPropertySources().get("server.ports").getSource()) + .get("local.server.port"); + } + + @Override + public void stopSut() { + ctx.stop(); + mysql.stop(); + } + + @Override + public void resetStateOfSUT() { + } + + @Override + public List getDbSpecifications() { + return dbSpecification; + } +} diff --git a/jdk_17_maven/em/external/rest/pom.xml b/jdk_17_maven/em/external/rest/pom.xml index e6a57b320..b6317c1eb 100644 --- a/jdk_17_maven/em/external/rest/pom.xml +++ b/jdk_17_maven/em/external/rest/pom.xml @@ -16,6 +16,7 @@ familie-ba-sak tiltaksgjennomforing-api ohsome-api + spring-rest-example \ No newline at end of file diff --git a/jdk_17_maven/em/external/rest/spring-rest-example/pom.xml b/jdk_17_maven/em/external/rest/spring-rest-example/pom.xml new file mode 100644 index 000000000..72cf197f4 --- /dev/null +++ b/jdk_17_maven/em/external/rest/spring-rest-example/pom.xml @@ -0,0 +1,70 @@ + + + 4.0.0 + + org.evomaster + evomaster-benchmark-jdk17-em-external-rest + 3.4.1-SNAPSHOT + + + evomaster-benchmark-jdk17-em-external-rest-spring-rest-example + jar + + + + + org.testcontainers + testcontainers + compile + + + junit + junit + 4.12 + compile + + + mysql + mysql-connector-java + 8.0.33 + + + + + + + org.apache.maven.plugins + maven-shade-plugin + + + package + + shade + + + spring-rest-example-evomaster-runner + + + + em.external.com.example.spring.ExternalEvoMasterController + + org.evomaster.client.java.instrumentation.InstrumentingAgent + + org.evomaster.client.java.instrumentation.InstrumentingAgent + + true + true + + + + + + + + + + + diff --git a/jdk_17_maven/em/external/rest/spring-rest-example/src/main/java/em/external/com/example/spring/ExternalEvoMasterController.java b/jdk_17_maven/em/external/rest/spring-rest-example/src/main/java/em/external/com/example/spring/ExternalEvoMasterController.java new file mode 100644 index 000000000..73299000e --- /dev/null +++ b/jdk_17_maven/em/external/rest/spring-rest-example/src/main/java/em/external/com/example/spring/ExternalEvoMasterController.java @@ -0,0 +1,223 @@ +package em.external.com.example.spring; + +import org.evomaster.client.java.controller.ExternalSutController; +import org.evomaster.client.java.controller.InstrumentedSutStarter; +import org.evomaster.client.java.controller.api.dto.SutInfoDto; +import org.evomaster.client.java.controller.api.dto.auth.AuthenticationDto; +import org.evomaster.client.java.controller.api.dto.database.schema.DatabaseType; +import org.evomaster.client.java.controller.problem.ProblemInfo; +import org.evomaster.client.java.controller.problem.RestProblem; +import org.evomaster.client.java.sql.DbSpecification; +import org.testcontainers.containers.GenericContainer; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; + +public class ExternalEvoMasterController extends ExternalSutController { + + + public static void main(String[] args) { + + int controllerPort = 40100; + if (args.length > 0) { + controllerPort = Integer.parseInt(args[0]); + } + int sutPort = 12345; + if (args.length > 1) { + sutPort = Integer.parseInt(args[1]); + } + String jarLocation = "cs/rest/spring-rest-example/target"; + if (args.length > 2) { + jarLocation = args[2]; + } + if(! jarLocation.endsWith(".jar")) { + jarLocation += "/spring-rest-example-sut.jar"; + } + + int timeoutSeconds = 120; + if(args.length > 3){ + timeoutSeconds = Integer.parseInt(args[3]); + } + String command = "java"; + if(args.length > 4){ + command = args[4]; + } + + + ExternalEvoMasterController controller = + new ExternalEvoMasterController(controllerPort, jarLocation, + sutPort, timeoutSeconds, command); + controller.setNeedsJdk17Options(true); + + InstrumentedSutStarter starter = new InstrumentedSutStarter(controller); + starter.start(); + } + + private final int timeoutSeconds; + private final int sutPort; + private String jarLocation; + private Connection sqlConnection; + + private List dbSpecification; + + private static final GenericContainer mysql = new GenericContainer("mysql:8.0" ) + .withEnv(new HashMap(){{ + put("MYSQL_ROOT_PASSWORD", "root"); + put("MYSQL_DATABASE", "example"); + }}) + .withExposedPorts(3306) + .withTmpFs(Collections.singletonMap("/var/lib/mysql", "rw")) + ; + + public ExternalEvoMasterController(){ + this(40100, "cs/rest/spring-rest-example/target", 12345, 120, "java"); + } + + public ExternalEvoMasterController(String jarLocation) { + this(); + this.jarLocation = jarLocation; + } + + public ExternalEvoMasterController( + int controllerPort, String jarLocation, int sutPort, int timeoutSeconds, String command + ) { + + if(jarLocation==null || jarLocation.isEmpty()){ + throw new IllegalArgumentException("Missing jar location"); + } + + + this.sutPort = sutPort; + this.jarLocation = jarLocation; + this.timeoutSeconds = timeoutSeconds; + setControllerPort(controllerPort); + setJavaCommand(command); + } + + + @Override + public String[] getInputParameters() { + return new String[]{ + "--server.port=" + sutPort, + "--spring.datasource.url=" + dbUrl(), + "--spring.datasource.username=root", + "--spring.datasource.password=root", + "--management.server.port=-1", + "--logging.level.root=OFF", + "--logging.level.org.springframework=INFO" + }; + } + + public String[] getJVMParameters() { + return new String[]{}; + } + + private String dbUrl() { + + String host = mysql.getContainerIpAddress(); + int port = mysql.getMappedPort(3306); + + String url = "jdbc:mysql://"+host+":"+port+"/example?useSSL=false&allowPublicKeyRetrieval=true"; + + return url; + } + + @Override + public String getBaseURL() { + return "http://localhost:" + sutPort; + } + + @Override + public String getPathToExecutableJar() { + return jarLocation; + } + + @Override + public String getLogMessageOfInitializedServer() { + return "Tomcat started on "; + } + + @Override + public long getMaxAwaitForInitializationInSeconds() { + return timeoutSeconds; + } + + @Override + public void preStart() { + mysql.start(); + } + + @Override + public void postStart() { + closeDataBaseConnection(); + + try { + sqlConnection = DriverManager.getConnection(dbUrl(), "root", "root"); + + dbSpecification = Arrays.asList(new DbSpecification(DatabaseType.MYSQL,sqlConnection)); + + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public void resetStateOfSUT() { + + } + + @Override + public void preStop() { + closeDataBaseConnection(); + } + + @Override + public void postStop() { + mysql.stop(); + } + + private void closeDataBaseConnection() { + if (sqlConnection != null) { + try { + sqlConnection.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + sqlConnection = null; + } + } + + @Override + public String getPackagePrefixesToCover() { + return "com.sw.project."; + } + + @Override + public ProblemInfo getProblemInfo() { + return new RestProblem( + getBaseURL() + "/v3/api-docs", + null + ); + } + + @Override + public SutInfoDto.OutputFormat getPreferredOutputFormat() { + return SutInfoDto.OutputFormat.JAVA_JUNIT_5; + } + + + @Override + public List getInfoForAuthentication() { + return null; + } + + @Override + public List getDbSpecifications() { + return dbSpecification; + } +} diff --git a/openapi-swagger/spring-rest-example.json b/openapi-swagger/spring-rest-example.json new file mode 100644 index 000000000..f8267db90 --- /dev/null +++ b/openapi-swagger/spring-rest-example.json @@ -0,0 +1,390 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "Relationship Application API", + "description": "project-api", + "termsOfService": "http://swagger.io/terms/", + "license": { + "name": "Apache 2.0", + "url": "http://springdoc.org" + }, + "version": "0.0.1" + }, + "servers": [ + { + "url": "http://localhost:8080", + "description": "Generated server url" + } + ], + "paths": { + "/api/project/{code}": { + "get": { + "tags": [ + "project-controller" + ], + "summary": "code로 프로젝트 조회", + "description": "code는 6자리 영문과 숫자조합 ", + "operationId": "getProject", + "parameters": [ + { + "name": "code", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + } + } + } + } + }, + "put": { + "tags": [ + "project-controller" + ], + "summary": "project 업데이트", + "description": "code로 project 변경, title 필요", + "operationId": "updateProject", + "parameters": [ + { + "name": "code", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Project" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + }, + "delete": { + "tags": [ + "project-controller" + ], + "summary": "code로 프로젝트 삭제", + "description": "code 필요", + "operationId": "deleteProject", + "parameters": [ + { + "name": "code", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/subproblem": { + "post": { + "tags": [ + "sub-problem-controller" + ], + "operationId": "saveSubProblem", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/subProblemBody" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/project": { + "post": { + "tags": [ + "project-controller" + ], + "summary": "프로젝트 생성", + "description": "code는 자동생성, title(String) 필요", + "operationId": "createProject", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Project" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/problem/{code}": { + "get": { + "tags": [ + "problem-controller" + ], + "summary": "code로 문제 조회", + "description": "code는 6자리 영문과 숫자조합", + "operationId": "getProblemByCode", + "parameters": [ + { + "name": "code", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Problem" + } + } + } + } + } + } + }, + "post": { + "tags": [ + "problem-controller" + ], + "summary": "문제 생성", + "description": "code는 6자리 영문과 숫자조합, problem parameter는 사용 X", + "operationId": "saveProblem", + "parameters": [ + { + "name": "code", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Problem" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "type": "object" + } + } + } + } + } + }, + "delete": { + "tags": [ + "problem-controller" + ], + "summary": "code로 최근 문제 삭제", + "description": "code는 6자리 영문과 숫자조합", + "operationId": "deleteProblem", + "parameters": [ + { + "name": "code", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/problem/{code}/all": { + "delete": { + "tags": [ + "problem-controller" + ], + "summary": "code로 모든 문제 삭제, ", + "description": "code는 6자리 영문과 숫자조합", + "operationId": "deleteAllProblem", + "parameters": [ + { + "name": "code", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "type": "object" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "Problem": { + "type": "object", + "properties": { + "idx": { + "type": "integer", + "format": "int64" + }, + "title": { + "type": "string" + }, + "project": { + "$ref": "#/components/schemas/Project" + }, + "problemCode": { + "type": "string" + } + } + }, + "Project": { + "required": [ + "title" + ], + "type": "object", + "properties": { + "idx": { + "type": "integer", + "format": "int64" + }, + "code": { + "maxLength": 6, + "minLength": 0, + "type": "string" + }, + "title": { + "maxLength": 200, + "minLength": 0, + "type": "string" + }, + "problem": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/Problem" + } + } + } + }, + "subProblemBody": { + "type": "object", + "properties": { + "pro_idx": { + "type": "integer", + "format": "int64" + }, + "content": { + "type": "string" + } + } + } + } + } +} \ No newline at end of file diff --git a/scripts/dist.py b/scripts/dist.py index 20bce29e4..8717b99d2 100755 --- a/scripts/dist.py +++ b/scripts/dist.py @@ -260,6 +260,9 @@ def build_jdk_17_maven(): copy(folder + "/cs/rest/ohsome-api/target/ohsome-api-sut.jar", DIST) copy(folder + "/em/external/rest/ohsome-api/target/ohsome-api-evomaster-runner.jar", DIST) + copy(folder + "/cs/rest/spring-rest-example/target/spring-rest-example-sut.jar", DIST) + copy(folder + "/em/external/rest/spring-rest-example/target/spring-rest-example-evomaster-runner.jar", DIST) + #################### def build_jdk_21_maven(): folder = "jdk_21_maven" diff --git a/scripts/dockerize/data/sut.csv b/scripts/dockerize/data/sut.csv index b04256861..0c62bbc45 100644 --- a/scripts/dockerize/data/sut.csv +++ b/scripts/dockerize/data/sut.csv @@ -24,5 +24,6 @@ youtube-mock,TRUE,"",--server.port=8080,http://localhost:8080/swagger.yaml,http: person-controller,TRUE,"",--server.port=8080 --spring.data.mongodb.uri=mongodb://db:27017 --spring.cache.type=None,http://localhost:8080/v3/api-docs,http://localhost:8080,FALSE,mongo:7.0,27017,/data/db,,,FALSE,FALSE, tracking-system,TRUE,"","--server.port=8080 --spring.profiles.active=dev --spring.datasource.url=""jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1"" --spring.datasource.username=sa --spring.datasource.password",http://localhost:8080/app/v2/api-docs,http://localhost:8080,FALSE,,,,,,FALSE,FALSE, tiltaksgjennomforing-api,TRUE,"",--server.port=8080 --spring.profiles.active=dev-gcp-labs --spring.datasource.driverClassName=org.postgresql.Driver --spring.sql.init.platform=postgres --no.nav.security.jwt.issuer.aad.discoveryurl=http://mock-oauth2-server:8083/aad/.well-known/openid-configuration --no.nav.security.jwt.issuer.aad.accepted_audience=aad --no.nav.security.jwt.issuer.system.discoveryurl=http://mock-oauth2-server:8083/system/.well-known/openid-configuration --no.nav.security.jwt.issuer.system.accepted_audience=system --no.nav.security.jwt.issuer.tokenx.discoveryurl=http://mock-oauth2-server:8083/tokenx/.well-known/openid-configuration --no.nav.security.jwt.issuer.tokenx.accepted_audience=tokenx --management.server.port=-1 --server.ssl.enabled=false --spring.datasource.url=jdbc:postgresql://db:5432/tiltaksgjennomforing --spring.datasource.username=postgres --spring.datasource.password=password --sentry.logging.enabled=false --sentry.environment=local --logging.level.root=OFF --logging.config=classpath:logback-spring.xml --logging.level.org.springframework=INFO,http://localhost:8080/tiltaksgjennomforing-api/v3/api-docs,http://localhost:8080,FALSE,postgres:13.13,5432,/var/lib/postgresql/data,POSTGRES_PASSWORD: password;POSTGRES_HOST_AUTH_METHOD: trust;POSTGRES_DB: tiltaksgjennomforing,,TRUE,FALSE, -ohsome-api,TRUE,,--server.port=8080 --database.db=heidelberg,http:///localhost:8080/docs?group=Data%20Aggregation,http://localhost:8080,TRUE,,,,,,FALSE,FALSE, -spring-batch-rest,TRUE,,--server.port=8080 --spring.batch.job.enabled=false --lastNamePrefix= --upperCase=false,http://localhost:8080/v3/api-docs,http://localhost:8080,FALSE,,,,,,FALSE,FALSE, \ No newline at end of file +ohsome-api,TRUE,"",--server.port=8080 --database.db=heidelberg,http:///localhost:8080/docs?group=Data%20Aggregation,http://localhost:8080,TRUE,,,,,,FALSE,FALSE, +spring-batch-rest,TRUE,,--server.port=8080 --spring.batch.job.enabled=false --lastNamePrefix= --upperCase=false,http://localhost:8080/v3/api-docs,http://localhost:8080,FALSE,,,,,,FALSE,FALSE, +spring-rest-example,TRUE,"","--server.port=8080 --spring.datasource.username=root --spring.datasource.password=root --spring.datasource.url=""jdbc:mysql://db:3306/example?useSSL=false&allowPublicKeyRetrieval=true""",http://localhost:8080/v3/api-docs,http://localhost:8080,FALSE,mysql:8.0,3306,/var/lib/mysql,MYSQL_ROOT_PASSWORD: root;MYSQL_DATABASE: example,,FALSE,TRUE,"""CMD""; ""mysqladmin""; ""ping""; ""-h""; ""localhost""" diff --git a/statistics/data.csv b/statistics/data.csv index 19d89fd6e..a5d1a1b23 100644 --- a/statistics/data.csv +++ b/statistics/data.csv @@ -24,6 +24,7 @@ TRUE,rest-scs,REST,Java,JDK 8,Maven,13,862,,UNDEFINED,11,FALSE,UNDEFINED TRUE,restcountries,REST,Java,JDK 8,Maven,24,1977,,MPL,22,FALSE,https://github.com/apilayer/restcountries TRUE,scout-api,REST,Java,JDK 8,Maven,93,9736,H2,MIT,49,TRUE,https://github.com/mikaelsvensson/scout-api TRUE,spring-batch-rest,REST,Java,JDK 8,Maven,65,3668,,Apache,5,FALSE,https://github.com/chrisgleissner/spring-batch-rest +TRUE,spring-rest-example,REST,Java,JDK 17,Maven,32,1426,MySQL,MIT,9,FALSE,https://github.com/phantasmicmeans/spring-boot-restful-api-example TRUE,genome-nexus,REST,Java,JDK 8,Maven,405,30004,MongoDB,MIT,23,FALSE,https://github.com/genome-nexus/genome-nexus TRUE,market,REST,Java,JDK 11,Maven,124,9861,H2,MIT,13,TRUE,https://github.com/aleksey-lukyanets/market TRUE,petclinic-graphql,GraphQL,Java,JDK 8,Maven,89,5212,PostgreSQL,Apache,15,FALSE,https://github.com/spring-petclinic/spring-petclinic-graphql diff --git a/statistics/table_emb.md b/statistics/table_emb.md index 78e0fd448..a4134c84e 100644 --- a/statistics/table_emb.md +++ b/statistics/table_emb.md @@ -27,6 +27,7 @@ |__restcountries__|REST|1977|24|22|Java|JDK 8|Maven||| |__reservations-api__|REST|1853|39|7|Java|JDK 11|Gradle|MongoDB|✓| |__session-service__|REST|1471|15|8|Java|JDK 8|Maven|MongoDB|| +|__spring-rest-example__|REST|1426|32|9|Java|JDK 17|Maven|MySQL|| |__person-controller__|REST|1112|16|12|Java|JDK 21|Maven|MongoDB|| |__rest-scs__|REST|862|13|11|Java|JDK 8|Maven||| |__rest-ncs__|REST|605|9|6|Java|JDK 8|Maven||| From b8aed709150be33fb8882f4316f508cb93134515 Mon Sep 17 00:00:00 2001 From: Omur Date: Mon, 16 Jun 2025 13:50:16 +0200 Subject: [PATCH 2/2] counter update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1b90614cb..c4eaffed1 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@ For simplicity, all schemas are also available as JSON/YML files under the folde > **IMPORTANT**: More details (e.g., #LOCs and used databases) on these APIs can be found [in this table](statistics/table_emb.md). -### REST: Java/Kotlin (27) +### REST: Java/Kotlin (28) * **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)