Skip to content

Commit a85c4f4

Browse files
authored
Merge pull request #134 from WebFuzzing/erc20-drivers
Erc20 drivers
2 parents 99da9d8 + a7c5eb1 commit a85c4f4

File tree

20 files changed

+1500
-5
lines changed

20 files changed

+1500
-5
lines changed

.github/workflows/ci.yaml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
strategy:
1515
matrix:
1616
os: [ubuntu-latest, windows-latest, macos-latest]
17-
folder: [jdk_8_maven, jdk_11_maven, jdk_17_maven, jdk_21_maven, jdk_11_gradle, jdk_17_gradle]
17+
folder: [jdk_8_maven, jdk_11_maven, jdk_17_maven, jdk_21_maven, jdk_8_gradle, jdk_11_gradle, jdk_17_gradle]
1818
include:
1919
# Maven
2020
- folder: jdk_8_maven
@@ -30,6 +30,9 @@ jobs:
3030
jdk-version: 21
3131
command: mvn clean install -DskipTests
3232
# Gradle
33+
- folder: jdk_8_gradle
34+
jdk-version: 1.8
35+
command: chmod +x gradlew & ./gradlew build -x test
3336
- folder: jdk_11_gradle
3437
jdk-version: 11
3538
command: chmod +x gradlew & ./gradlew build -x test

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,3 +345,9 @@ jdk_8_maven/em/external/rest/spring-batch-rest/target
345345
/jdk_17_maven/cs/rest/spring-rest-example/target/
346346
/jdk_17_maven/em/embedded/rest/spring-rest-example/target/
347347
/jdk_17_maven/em/external/rest/spring-rest-example/target/
348+
349+
/jdk_8_gradle/.gradle
350+
/jdk_8_gradle/cs/rest/erc20-rest-service/build
351+
/jdk_8_gradle/em/embedded/rest/erc20-rest-service/build
352+
/jdk_8_gradle/em/external/rest/erc20-rest-service/build
353+
/jdk_8_gradle/cs/rest/erc20-rest-service/.gradle

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 (28)
73+
### REST: Java/Kotlin (29)
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

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

8181
* **CWA-Verification-Server** (Apache), [jdk_11_maven/cs/rest/cwa-verification-server](jdk_11_maven/cs/rest/cwa-verification-server), from [https://github.com/corona-warn-app/cwa-verification-server](https://github.com/corona-warn-app/cwa-verification-server)
8282

83+
* **ERC20 Rest Service** (not-known license), [jdk_8_gradle/cs/rest/erc20-rest-service](jdk_8_gradle/cs/rest/erc20-rest-service), from [https://github.com/web3labs/erc20-rest-service](https://github.com/web3labs/erc20-rest-service)
84+
8385
* **Familie Ba Sak** (MIT), [jdk_17_maven/cs/rest/familie-ba-sak](jdk_17_maven/cs/rest/familie-ba-sak), from [https://github.com/navikt/familie-ba-sak](https://github.com/navikt/familie-ba-sak)
8486

8587
* **Features-Service** (Apache), [jdk_8_maven/cs/rest/original/features-service](jdk_8_maven/cs/rest/original/features-service), from [https://github.com/JavierMF/features-service](https://github.com/JavierMF/features-service)
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/erc20-rest-service-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/erc20-rest-service__${TOOL}__${RUN}__jacoco.exec,append=false,dumponexit=true \
15+
-javaagent:jacocoagent.jar=output=tcpserver,address=*,port=6300,append=false,dumponexit=false \
16+
-jar erc20-rest-service-sut.jar \
17+
--server.port=8080
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
services:
2+
sut-erc20-rest-service:
3+
build:
4+
dockerfile: ./dockerfiles/erc20-rest-service.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_gradle/build.gradle

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
2+
allprojects {
3+
ext {
4+
EVOMASTER_VERSION = "3.4.1-SNAPSHOT"
5+
}
6+
}

jdk_8_gradle/cs/rest/erc20-rest-service/build.gradle

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,22 @@ repositories {
1717
mavenCentral()
1818
}
1919

20+
configurations.named("implementation") {
21+
resolutionStrategy {
22+
failOnVersionConflict()
23+
}
24+
}
25+
2026
dependencies {
2127
compile 'org.springframework.boot:spring-boot-starter-web:2.1.7.RELEASE',
2228
'io.springfox:springfox-swagger2:2.7.0',
2329
'io.springfox:springfox-swagger-ui:2.7.0',
2430
'org.projectlombok:lombok:1.16.16',
25-
'org.web3j:quorum:4.+',
26-
'org.web3j:core:4.+',
31+
//MODIFIED
32+
// 'org.web3j:quorum:4.+',
33+
// 'org.web3j:core:4.+',
34+
'org.web3j:quorum:4.8.4',
35+
'org.web3j:core:4.8.7',
2736
'io.reactivex.rxjava2:rxjava:2.2.0',
2837
'com.fasterxml.jackson:jackson-bom:2.9.4',
2938
'org.apache.httpcomponents:httpclient:4.5.3'
@@ -34,6 +43,19 @@ dependencies {
3443

3544
implementation("org.web3j:contracts:4.2.0") { exclude group: 'org.web3j' }
3645
}
46+
// MODIFIED START
47+
tasks.named("bootJar") {
48+
archiveClassifier = 'sut'
49+
archiveFileName = "${project.name}-${archiveClassifier.get()}.jar"
50+
51+
}
52+
53+
tasks.named("jar") {
54+
archiveClassifier = 'plain'
55+
archiveFileName = "${project.name}-${archiveClassifier.get()}.jar"
56+
enabled = true
57+
}
58+
// MODIFIED END
3759

3860
run {
3961
/* Can pass all the properties: */
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
2+
repositories {
3+
mavenLocal()
4+
mavenCentral()
5+
maven( url ="https://jcenter.bintray.com")
6+
}
7+
8+
9+
plugins {
10+
`java-library`
11+
}
12+
13+
14+
configurations.named("implementation") {
15+
resolutionStrategy {
16+
failOnVersionConflict()
17+
}
18+
}
19+
20+
java {
21+
sourceCompatibility = JavaVersion.VERSION_1_8
22+
targetCompatibility = JavaVersion.VERSION_1_8
23+
}
24+
25+
val EVOMASTER_VERSION = project.ext.get("EVOMASTER_VERSION")
26+
27+
dependencies{
28+
implementation("org.evomaster:evomaster-client-java-controller:$EVOMASTER_VERSION")
29+
implementation("org.evomaster:evomaster-client-java-dependencies:$EVOMASTER_VERSION")
30+
implementation(project(":cs:rest:erc20-rest-service"))
31+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
package em.embedded.erc20restservice;
2+
3+
import org.evomaster.client.java.controller.EmbeddedSutController;
4+
import org.evomaster.client.java.controller.InstrumentedSutStarter;
5+
import org.evomaster.client.java.controller.api.dto.auth.AuthenticationDto;
6+
import org.evomaster.client.java.controller.api.dto.SutInfoDto;
7+
import org.evomaster.client.java.sql.DbSpecification;
8+
import org.evomaster.client.java.controller.problem.ProblemInfo;
9+
import org.evomaster.client.java.controller.problem.RestProblem;
10+
import org.springframework.boot.SpringApplication;
11+
import org.springframework.context.ConfigurableApplicationContext;
12+
import java.util.List;
13+
import java.util.Map;
14+
import io.blk.erc20.Application;
15+
16+
17+
/**
18+
* Class used to start/stop the SUT. This will be controller by the EvoMaster process
19+
*/
20+
public class EmbeddedEvoMasterController extends EmbeddedSutController {
21+
22+
public static void main(String[] args) {
23+
24+
int port = 40100;
25+
if (args.length > 0) {
26+
port = Integer.parseInt(args[0]);
27+
}
28+
29+
EmbeddedEvoMasterController controller = new EmbeddedEvoMasterController(port);
30+
InstrumentedSutStarter starter = new InstrumentedSutStarter(controller);
31+
32+
starter.start();
33+
}
34+
35+
36+
private ConfigurableApplicationContext ctx;
37+
38+
public EmbeddedEvoMasterController() {
39+
this(0);
40+
}
41+
42+
public EmbeddedEvoMasterController(int port) {
43+
setControllerPort(port);
44+
}
45+
46+
47+
@Override
48+
public String startSut() {
49+
50+
ctx = SpringApplication.run(Application.class,
51+
new String[]{"--server.port=0",
52+
});
53+
54+
return "http://localhost:" + getSutPort();
55+
}
56+
57+
58+
protected int getSutPort() {
59+
return (Integer) ((Map) ctx.getEnvironment()
60+
.getPropertySources().get("server.ports").getSource())
61+
.get("local.server.port");
62+
}
63+
64+
65+
@Override
66+
public boolean isSutRunning() {
67+
return ctx != null && ctx.isRunning();
68+
}
69+
70+
@Override
71+
public void stopSut() {
72+
ctx.stop();
73+
ctx.close();
74+
}
75+
76+
@Override
77+
public String getPackagePrefixesToCover() {
78+
return "io.blk.erc20.";
79+
}
80+
81+
@Override
82+
public void resetStateOfSUT() {
83+
}
84+
85+
@Override
86+
public List<DbSpecification> getDbSpecifications() {
87+
return null;
88+
}
89+
90+
91+
@Override
92+
public List<AuthenticationDto> getInfoForAuthentication() {
93+
return null;
94+
}
95+
96+
97+
@Override
98+
public ProblemInfo getProblemInfo() {
99+
return new RestProblem(
100+
"http://localhost:" + getSutPort() + "/v2/api-docs",
101+
null
102+
);
103+
}
104+
105+
@Override
106+
public SutInfoDto.OutputFormat getPreferredOutputFormat() {
107+
return SutInfoDto.OutputFormat.JAVA_JUNIT_4;
108+
}
109+
110+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import org.gradle.jvm.tasks.Jar
2+
3+
plugins {
4+
`java-library`
5+
}
6+
7+
repositories {
8+
mavenLocal()
9+
mavenCentral()
10+
maven( url ="https://jcenter.bintray.com")
11+
}
12+
13+
configurations.named("implementation") {
14+
resolutionStrategy {
15+
failOnVersionConflict()
16+
}
17+
}
18+
19+
java {
20+
sourceCompatibility = JavaVersion.VERSION_1_8
21+
targetCompatibility = JavaVersion.VERSION_1_8
22+
}
23+
24+
val EVOMASTER_VERSION = project.ext.get("EVOMASTER_VERSION")
25+
26+
dependencies{
27+
implementation("org.evomaster:evomaster-client-java-controller:$EVOMASTER_VERSION")
28+
implementation("org.evomaster:evomaster-client-java-instrumentation:$EVOMASTER_VERSION")
29+
implementation("org.evomaster:evomaster-client-java-dependencies:$EVOMASTER_VERSION")
30+
}
31+
32+
33+
34+
val fatJar = task("fatJar", type = Jar::class) {
35+
baseName = "${project.name}-evomaster-runner"
36+
isZip64 = true
37+
manifest {
38+
attributes["Implementation-Title"] = "EM"
39+
attributes["Implementation-Version"] = "1.0"
40+
attributes["Main-Class"] = "em.external.erc20restservice.ExternalEvoMasterController"
41+
attributes["Premain-Class"] = "org.evomaster.client.java.instrumentation.InstrumentingAgent"
42+
attributes["Agent-Class"] = "org.evomaster.client.java.instrumentation.InstrumentingAgent"
43+
attributes["Can-Redefine-Classes"] = "true"
44+
attributes["Can-Retransform-Classes"] = "true"
45+
}
46+
from(configurations.runtimeClasspath.get().map{ if (it.isDirectory) it else zipTree(it) })
47+
with(tasks.jar.get() as CopySpec)
48+
}
49+
50+
tasks {
51+
"build" {
52+
dependsOn(fatJar)
53+
}
54+
}

0 commit comments

Comments
 (0)