Skip to content

Commit 5924df2

Browse files
authored
Merge branch 'master' into refactor/steady-state-decouple-from-standard-ga-v2
2 parents 4d1a085 + bbfea02 commit 5924df2

1,111 files changed

Lines changed: 25569 additions & 5952 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/ci.yml

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ on:
3131
# - "**"
3232

3333
env:
34-
evomaster-version: 4.0.1
34+
evomaster-version: 5.1.1
3535
# Unfortunately, to use JPackage we need JDK 17 or above :(
3636
# Which is really bad due to the madness of --add-opens.
3737
# Even if hunt down all cases of reflections in EM, there is still the problem of
@@ -42,7 +42,7 @@ env:
4242
build-jdk: 17
4343
retention-days: 5
4444
debug: false # put to true if need to debug a specific test
45-
debugTestName: "com.foo.base.BaseIT" # replace with test to debug
45+
debugTestName: "GeneRandomizedTest" # replace with test to debug
4646

4747
# This build is quite expensive (some hours), so we run it whole only on some JVM versions and OSs.
4848
# For the moment, we need to support JVM 8 and all following LTS versions (e.g, 11 and 17).
@@ -62,6 +62,11 @@ jobs:
6262
- name: Set skip-jobs variable
6363
id: set-output
6464
run: echo "debug=${{ env.debug }}" >> $GITHUB_OUTPUT
65+
- name: Verify Docker is working fine
66+
run: |
67+
timeout 30s bash -c 'until docker info; do sleep 1; done'
68+
docker version
69+
docker info
6570
6671
6772
debug:
@@ -117,9 +122,9 @@ jobs:
117122
# Make test report accessible from GitHub Actions (as Maven logs are long)
118123
- name: Publish Test Report
119124
if: success() || failure()
120-
uses: mikepenz/action-junit-report@v5
125+
uses: mikepenz/action-junit-report@v6
121126
env:
122-
NODE_OPTIONS: "--max_old_space_size=8000"
127+
NODE_OPTIONS: "--max_old_space_size=9000"
123128
with:
124129
report_paths: '**/target/*-reports/TEST-*.xml'
125130
# Upload coverage results

.github/workflows/release.yml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ on:
88
- "v*"
99

1010
env:
11-
evomaster-version: 4.0.1
12-
jdk-jar: 1.8
11+
evomaster-version: 5.1.1
12+
jdk-jar: 17
1313
jdk-jpackage: 21
1414
retention-days: 1
1515
## Doesn't work, ie, use env in env
@@ -55,11 +55,16 @@ jobs:
5555
with:
5656
username: ${{ secrets.DOCKERHUB_USERNAME }}
5757
password: ${{ secrets.DOCKERHUB_PASSWORD }}
58+
- name: Set up QEMU
59+
uses: docker/setup-qemu-action@v4
60+
- name: Set up Docker Buildx
61+
uses: docker/setup-buildx-action@v4
5862
- name: Build and push Docker
5963
uses: docker/build-push-action@v5
6064
with:
6165
context: .
6266
push: true
67+
platforms: linux/amd64,linux/arm64
6368
tags: ${{ steps.meta.outputs.tags }}
6469
labels: ${{ steps.meta.outputs.labels }}
6570

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ Migrations/
105105
/core-tests/e2e-tests/spring/spring-web/target/
106106
/core-tests/e2e-tests/spring/spring-rest-mongo/target/
107107
/core-tests/e2e-tests/spring/spring-rest-opensearch/target/
108+
/core-tests/e2e-tests/spring/spring-rest-redis/target/
108109
/core-tests/client-java/target/
109110
/core-tests/client-java/dependencies/target/
110111
/core-tests/client-java/sql-dto/target/
@@ -159,3 +160,7 @@ client-java/sql-dto/target
159160
client-java/distance-heuristics/target
160161
client-java/test-old-libraries/target
161162
core-tests/e2e-tests/spring/spring-rest-mysql/target
163+
/core-tests/jdk-8/spring-rest-openapi-v2/target/
164+
/core-tests/jdk-8/spring-rest-openapi-v2-driver/target/
165+
/core-tests/jdk-8/spring-rest-openapi-v2-sut/target/
166+
/core-tests/jdk-8/spring-rest-openapi-v2-tests/target/

README.md

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,25 @@
11
# EvoMaster: A Tool For Automatically Generating System-Level Test Cases
22

33

4-
![](docs/img/carl-cerstrand-136810_compressed.jpg "Photo by Carl Cerstrand on Unsplash")
4+
[//]: # (![](docs/img/carl-cerstrand-136810_compressed.jpg "Photo by Carl Cerstrand on Unsplash"))
55

66
[![Maven Central](https://img.shields.io/maven-central/v/org.evomaster/evomaster-client-java.svg?label=Maven%20Central)](https://central.sonatype.com/artifact/org.evomaster/evomaster-client-java)
77
[![javadoc](https://javadoc.io/badge2/org.evomaster/evomaster-client-java-controller/javadoc.svg)](https://javadoc.io/doc/org.evomaster/evomaster-client-java-controller)
88
![CI](https://github.com/WebFuzzing/EvoMaster/workflows/CI/badge.svg)
99
[![codecov](https://codecov.io/gh/WebFuzzing/EvoMaster/branch/master/graph/badge.svg)](https://codecov.io/gh/WebFuzzing/EvoMaster)
10-
[![DOI](https://zenodo.org/badge/92385933.svg)](https://zenodo.org/badge/latestdoi/92385933)
10+
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.5052036.svg)](https://doi.org/10.5281/zenodo.5052036)
1111
[![License: LGPL v3](https://img.shields.io/badge/License-LGPL_v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0)
1212
[![Github All Releases](https://img.shields.io/github/downloads/WebFuzzing/evomaster/total.svg)](https://github.com/WebFuzzing/EvoMaster/releases)
1313

1414

15+
1516
### Summary
1617

18+
[//]: # (<div style="float: left; margin-right: 15px; margin-bottom: 10px;">)
19+
<img align="left" src="docs/img/em_mascot.png" alt="AI-generated mascot, with Bing" width="100" />
20+
21+
[//]: # (</div>)
22+
1723
_EvoMaster_ ([www.evomaster.org](http://evomaster.org)) is the first (2016) open-source AI-driven tool
1824
that automatically *generates* system-level test cases
1925
for web/enterprise applications.
@@ -123,10 +129,9 @@ Note, since version 4.0.0, now _EvoMaster_ by default also creates an interactiv
123129

124130
* _State-of-the-art_: an [independent study (2022)](https://arxiv.org/abs/2204.08348), comparing 10 fuzzers on 20 RESTful APIs, shows that _EvoMaster_ gives the best results. Another [independent study (2024)](https://arxiv.org/abs/2410.12547) done by a different research group confirms these results.
125131

126-
* _Schema_: REST APIs must provide a schema in [OpenAPI/Swagger](https://swagger.io)
127-
format (either _v2_ or _v3_).
132+
* _Schema_: REST APIs must provide a schema in [OpenAPI format](https://www.openapis.org/). We support versions _2.0_, _3.0_ and _3.1_. Unfortunately, support for version _3.2_ is currently on hold due to [swagger-parser](https://github.com/swagger-api/swagger-parser/issues/2248).
128133

129-
* _Output_: the tool generates _JUnit_ (version 4 or 5) tests, written in either Java or Kotlin, as well as test suites in Python and JavaScript. For a complete list, see the documentation for the CLI parameter [--outputFormat](docs/options.md).
134+
* _Output_: the tool generates _JUnit_ (version 4 or 5) tests, written in either _Java_ or _Kotlin_, as well as test suites in _Python_ and _JavaScript_. For a complete list, see the documentation for the CLI parameter [--outputFormat](docs/options.md).
130135
Some examples are: PYTHON_UNITTEST, KOTLIN_JUNIT_5, JAVA_JUNIT_4 and JS_JEST.
131136
Note that the generated tests rely on third-party libraries (e.g., to make HTTP calls).
132137
These will need to be setup in your projects, [see documentation](docs/library_dependencies.md).
@@ -198,7 +203,9 @@ Examples of Fortune 500 companies using _EvoMaster_ are:
198203

199204
![](docs/img/video-player-flaticon.png)
200205

201-
* A [45-minute talk given at TestCon'25](https://www.youtube.com/watch?v=uKKRo3LrNiw&list=PLqYhGsQ9iSEoXaRmW9WQjjXJK_1NbLlZ6&index=15) on Fuzz Testing Web APIs gives an overview of what can be expected from this kind of fuzzers.
206+
* A [45-minute talk given at TestCon'25](https://www.youtube.com/watch?v=uKKRo3LrNiw&list=PLqYhGsQ9iSEoXaRmW9WQjjXJK_1NbLlZ6&index=15) on Fuzz Testing Web APIs gives an overview of what can be expected from this kind of fuzzers.
207+
A [shorter version (16 minutes)](https://www.youtube.com/watch?v=iJdhVzGedjM)
208+
was given at Nordic APIs 2025 Platform Summit.
202209

203210
* A [short video](https://youtu.be/3mYxjgnhLEo) (5 minutes)
204211
shows the use of _EvoMaster_ on one of the
@@ -225,10 +232,11 @@ Existing open-source tools for REST API fuzzing, with at least 100 stars on GitH
225232
[Fuzz-lightyear](https://github.com/Yelp/fuzz-lightyear),
226233
[ResTest](https://github.com/isa-group/RESTest),
227234
[Restler](https://github.com/microsoft/restler-fuzzer),
235+
[Schemathesis](https://github.com/schemathesis/schemathesis)
228236
and
229-
[Schemathesis](https://github.com/schemathesis/schemathesis).
237+
[WuppieFuzz](https://github.com/TNO-S3/WuppieFuzz).
230238

231-
All these tools are _black-box_, i.e., they do not analyze the source-code of the tested APIs to generate more effective test data.
239+
Apart from WuppieFuzz, all these tools are _black-box_, i.e., they do not analyze the source-code of the tested APIs to generate more effective test data.
232240
As we are the authors of EvoMaster, we are too biased to compare it properly with those other black-box tools.
233241
However, different independent studies (e.g., in [2022](https://arxiv.org/abs/2204.08348) and [2024](https://arxiv.org/abs/2410.12547)) shows that EvoMaster is among the best performant.
234242
Furthermore, if your APIs are running on the JVM (e.g., written in Java or Kotlin), then EvoMaster has clearly an advantage, as it supports _white-box_ testing.

client-java/ci-utils/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<parent>
1414
<artifactId>evomaster-client-java</artifactId>
1515
<groupId>org.evomaster</groupId>
16-
<version>4.0.1-SNAPSHOT</version>
16+
<version>5.1.1-SNAPSHOT</version>
1717
</parent>
1818

1919
<artifactId>evomaster-ci-utils</artifactId>

client-java/client-util/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>org.evomaster</groupId>
77
<artifactId>evomaster-client-java</artifactId>
8-
<version>4.0.1-SNAPSHOT</version>
8+
<version>5.1.1-SNAPSHOT</version>
99
</parent>
1010

1111
<artifactId>evomaster-client-java-util</artifactId>

client-java/controller-api/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>org.evomaster</groupId>
77
<artifactId>evomaster-client-java</artifactId>
8-
<version>4.0.1-SNAPSHOT</version>
8+
<version>5.1.1-SNAPSHOT</version>
99
</parent>
1010

1111
<artifactId>evomaster-client-java-controller-api</artifactId>

client-java/controller-api/src/main/java/org/evomaster/client/java/controller/api/dto/ExtraHeuristicEntryDto.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ public class ExtraHeuristicEntryDto implements Serializable {
99

1010
/**
1111
* The type of extra heuristic.
12-
* Note: for the moment, we only have heuristics on SQL, MONGO and OPENSEARCH commands
12+
* Note: for the moment, we only have heuristics on SQL, MONGO, OPENSEARCH and REDIS commands
1313
*/
14-
public enum Type {SQL, MONGO, OPENSEARCH}
14+
public enum Type {SQL, MONGO, OPENSEARCH, REDIS}
1515

1616
/**
1717
* Should we try to minimize or maximize the heuristic?

client-java/controller/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>org.evomaster</groupId>
77
<artifactId>evomaster-client-java</artifactId>
8-
<version>4.0.1-SNAPSHOT</version>
8+
<version>5.1.1-SNAPSHOT</version>
99
</parent>
1010

1111
<artifactId>evomaster-client-java-controller</artifactId>

client-java/controller/src/main/java/org/evomaster/client/java/controller/AuthUtils.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -182,9 +182,11 @@ public static AuthenticationDto getForJsonToken(
182182
le.setExpectCookies(false);
183183
le.setPayloadRaw(payload);
184184
le.setToken(new TokenHandling());
185-
le.getToken().setExtractFromField(extractFromField);
186-
le.getToken().setHeaderPrefix(headerPrefix);
187-
le.getToken().setHttpHeaderName("Authorization");
185+
le.getToken().setExtractFrom(TokenHandling.ExtractFrom.BODY);
186+
le.getToken().setExtractSelector(extractFromField);
187+
le.getToken().setSendIn(TokenHandling.SendIn.HEADER);
188+
le.getToken().setSendName("Authorization");
189+
le.getToken().setSendTemplate(headerPrefix+"{token}");
188190

189191
AuthenticationDto dto = new AuthenticationDto(dtoName);
190192
dto.setLoginEndpointAuth(le);

0 commit comments

Comments
 (0)