Skip to content

Commit 4dc134e

Browse files
committed
chore: Compare jsons as trees not as string-like content
1 parent 5f88fa0 commit 4dc134e

4 files changed

Lines changed: 31 additions & 34 deletions

File tree

pom.xml

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@
7474
<maven-enforcer-plugin.version>3.6.2</maven-enforcer-plugin.version>
7575
<regexp-gen.version>3.0.0</regexp-gen.version>
7676
<slf4j-ext.version>2.0.12</slf4j-ext.version>
77-
<javafaker.version>1.0.2</javafaker.version>
7877
<kotlin-reflect.version>2.1.20</kotlin-reflect.version>
7978
<jackson.version>2.21.1</jackson.version>
8079
<license-maven-plugin.version>2.7.1</license-maven-plugin.version>
@@ -677,17 +676,6 @@
677676
<artifactId>slf4j-ext</artifactId>
678677
<version>${slf4j-ext.version}</version>
679678
</dependency>
680-
<dependency>
681-
<groupId>com.github.javafaker</groupId>
682-
<artifactId>javafaker</artifactId>
683-
<version>${javafaker.version}</version>
684-
<exclusions>
685-
<exclusion>
686-
<groupId>org.yaml</groupId>
687-
<artifactId>snakeyaml</artifactId>
688-
</exclusion>
689-
</exclusions>
690-
</dependency>
691679
<dependency>
692680
<groupId>com.fasterxml.jackson.datatype</groupId>
693681
<artifactId>jackson-datatype-jsr310</artifactId>

src/main/java/dev/dochia/cli/core/io/ServiceCaller.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ public void initHttpClient() {
150150
.sslSocketFactory(sslSocketFactory, (X509TrustManager) trustAllCerts[0])
151151
.retryOnConnectionFailure(true)
152152
.protocols(processingArguments.isHttp2PriorKnowledge() ? List.of(Protocol.H2_PRIOR_KNOWLEDGE) : List.of(Protocol.HTTP_2, Protocol.HTTP_1_1))
153-
.hostnameVerifier((hostname, session) -> true).build();
153+
.hostnameVerifier((_, _) -> true).build();
154154

155155
logger.debug("Proxy configuration to be used: {}", authArguments.getProxy());
156156
} catch (GeneralSecurityException | IOException e) {
@@ -646,7 +646,7 @@ private static void replaceHeaderWithUserSuppliedHeader(List<KeyValuePair<String
646646
headers.removeIf(headersToFilter);
647647

648648
LongStream.range(0, howManyHeadersToRemove)
649-
.forEach(iteration -> headers.add(new KeyValuePair<>(headerName, headerValue)));
649+
.forEach(_ -> headers.add(new KeyValuePair<>(headerName, headerValue)));
650650
}
651651

652652
private boolean isSuppliedHeaderInFuzzData(ServiceData data, Map.Entry<String, String> suppliedHeader) {

src/main/java/dev/dochia/cli/core/util/JsonUtils.java

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
11
package dev.dochia.cli.core.util;
22

3-
import static com.fasterxml.jackson.core.JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN;
4-
import static com.fasterxml.jackson.databind.SerializationFeature.FAIL_ON_EMPTY_BEANS;
5-
import static com.fasterxml.jackson.databind.SerializationFeature.INDENT_OUTPUT;
6-
import static com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS;
7-
import static com.fasterxml.jackson.databind.SerializationFeature.WRITE_ENUMS_USING_TO_STRING;
8-
93
import com.fasterxml.jackson.annotation.JsonInclude;
104
import com.fasterxml.jackson.core.JsonGenerator;
115
import com.fasterxml.jackson.databind.JsonNode;
@@ -36,6 +30,12 @@
3630
import dev.dochia.cli.core.model.ann.ExcludeTestCaseStrategy;
3731
import io.github.ludovicianul.prettylogger.PrettyLogger;
3832
import io.github.ludovicianul.prettylogger.PrettyLoggerFactory;
33+
import net.minidev.json.JSONArray;
34+
import net.minidev.json.JSONValue;
35+
import net.minidev.json.parser.JSONParser;
36+
import org.apache.commons.lang3.StringUtils;
37+
import org.apache.commons.text.StringEscapeUtils;
38+
3939
import java.io.IOException;
4040
import java.io.StringReader;
4141
import java.io.StringWriter;
@@ -50,11 +50,12 @@
5050
import java.util.regex.Matcher;
5151
import java.util.regex.Pattern;
5252
import java.util.stream.Collectors;
53-
import net.minidev.json.JSONArray;
54-
import net.minidev.json.JSONValue;
55-
import net.minidev.json.parser.JSONParser;
56-
import org.apache.commons.lang3.StringUtils;
57-
import org.apache.commons.text.StringEscapeUtils;
53+
54+
import static com.fasterxml.jackson.core.JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN;
55+
import static com.fasterxml.jackson.databind.SerializationFeature.FAIL_ON_EMPTY_BEANS;
56+
import static com.fasterxml.jackson.databind.SerializationFeature.INDENT_OUTPUT;
57+
import static com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS;
58+
import static com.fasterxml.jackson.databind.SerializationFeature.WRITE_ENUMS_USING_TO_STRING;
5859

5960
/**
6061
* Utility class for JSON objects interaction.
@@ -249,12 +250,21 @@ public static boolean equalAsJson(String json1, String json2) {
249250
if (!isValidJson(json1) || !isValidJson(json2)) {
250251
return json1.equalsIgnoreCase(json2);
251252
}
253+
252254
try {
253-
return JsonPath.parse(json1).jsonString().contentEquals(JsonPath.parse(json2).jsonString());
254-
} catch (UnsupportedOperationException _) {
255-
String json1Unescaped = StringEscapeUtils.unescapeJson(json1).replaceAll("(^[\"'])|([\"']$)", "");
256-
String json2Unescaped = StringEscapeUtils.unescapeJson(json2).replaceAll("(^[\"'])|([\"']$)", "");
257-
return JsonPath.parse(json1Unescaped).jsonString().contentEquals(JsonPath.parse(json2Unescaped).jsonString());
255+
JsonNode n1 = SIMPLE_OBJECT_MAPPER.readTree(json1);
256+
JsonNode n2 = SIMPLE_OBJECT_MAPPER.readTree(json2);
257+
return n1.equals(n2); // object key order does NOT matter
258+
} catch (Exception _) {
259+
try {
260+
String j1 = StringEscapeUtils.unescapeJson(json1).replaceAll("(^[\"'])|([\"']$)", "");
261+
String j2 = StringEscapeUtils.unescapeJson(json2).replaceAll("(^[\"'])|([\"']$)", "");
262+
JsonNode n1 = SIMPLE_OBJECT_MAPPER.readTree(j1);
263+
JsonNode n2 = SIMPLE_OBJECT_MAPPER.readTree(j2);
264+
return n1.equals(n2);
265+
} catch (Exception _) {
266+
return json1.equalsIgnoreCase(json2);
267+
}
258268
}
259269
}
260270

src/main/resources/application.properties

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,18 @@ quarkus.native.additional-build-args=\
66
--initialize-at-run-time=org.apache.commons.lang3.RandomUtils.RANDOM,\
77
--initialize-at-run-time=org.apache.commons.lang3.RandomStringUtils,\
88
--initialize-at-run-time=io.netty.internal.tcnative.SSLPrivateKeyMethod, \
9-
--initialize-at-run-time=com.github.javafaker.Faker, \
10-
--initialize-at-run-time=com.github.javafaker.service.RandomService, \
119
--initialize-at-run-time=dev.dochia.cli.core.util.CommonUtils, \
1210
--initialize-at-run-time=org.apache.commons.logging.impl.Log4jApiLogFactory, \
1311
--enable-native-access=ALL-UNNAMED, \
1412
-O3,\
1513
-DmaxYamlCodePoints=99999999
1614
quarkus.native.enable-dashboard-dump=false
17-
quarkus.native.resources.includes=playbook-profiles.yml,THIRD_PARTY_LICENSES.txt,blns.txt,ro.yml,chart.js,assets.zip,summary.mustache,summary-buckets.mustache,pl4j-*.properties,pl4j.properties,test-case.mustache,LICENSE,scripts.js,styles.css,styles-buckets.css,version.properties
15+
quarkus.native.resources.includes=playbook-profiles.yml,THIRD_PARTY_LICENSES.txt,blns.txt,data.yml,chart.js,assets.zip,summary.mustache,summary-buckets.mustache,pl4j-*.properties,pl4j.properties,test-case.mustache,LICENSE,scripts.js,styles.css,styles-buckets.css,version.properties
1816
app.timestamp=@maven.build.timestamp@
1917
quarkus.log.level=ERROR
2018
quarkus.log.category."dev.dochia.cli".level=INFO
2119
quarkus.log.category."okhttp3".level=OFF
2220
quarkus.log.category."okio".level=OFF
2321
quarkus.banner.enabled=false
24-
quarkus.log.console.format=%m%n
22+
quarkus.log.console.format=%m%n
23+
quarkus.devservices.enabled=false

0 commit comments

Comments
 (0)