From 1890af65dde9733c5d779dc97d5d1ce12bfc9815 Mon Sep 17 00:00:00 2001 From: Daniel D'Avella Date: Thu, 23 May 2024 16:57:32 -0400 Subject: [PATCH] Add FailureState to Result --- .../io/codemodder/codetf/CodeTFResult.java | 27 ++++++++++++---- .../io/codemodder/codetf/FailureState.java | 32 +++++++++++++++++++ .../codemodder/codetf/CodeTFResultTest.java | 11 +++++++ 3 files changed, 64 insertions(+), 6 deletions(-) create mode 100644 src/main/java/io/codemodder/codetf/FailureState.java diff --git a/src/main/java/io/codemodder/codetf/CodeTFResult.java b/src/main/java/io/codemodder/codetf/CodeTFResult.java index 54a013c..3b8f523 100644 --- a/src/main/java/io/codemodder/codetf/CodeTFResult.java +++ b/src/main/java/io/codemodder/codetf/CodeTFResult.java @@ -12,6 +12,7 @@ public final class CodeTFResult { private final String summary; private final String description; private final DetectionTool detectionTool; + private final FailureState failureState; private final Set failedFiles; private final List references; private final Map properties; @@ -24,15 +25,17 @@ public CodeTFResult( @JsonProperty(value = "summary", index = 2) final String summary, @JsonProperty(value = "description", index = 3) final String description, @JsonProperty(value = "detectionTool", index = 4) final DetectionTool detectionTool, - @JsonProperty(value = "failedFiles", index = 5) final Set failedFiles, - @JsonProperty(value = "references", index = 6) final List references, - @JsonProperty(value = "properties", index = 7) final Map properties, - @JsonProperty(value = "changeset", index = 8) final List changeset, - @JsonProperty(value = "unfixed", index = 9) final List unfixedFindings) { + @JsonProperty(value = "failureState", index = 5) final FailureState failureState, + @JsonProperty(value = "failedFiles", index = 6) final Set failedFiles, + @JsonProperty(value = "references", index = 7) final List references, + @JsonProperty(value = "properties", index = 8) final Map properties, + @JsonProperty(value = "changeset", index = 9) final List changeset, + @JsonProperty(value = "unfixed", index = 10) final List unfixedFindings) { this.codemod = CodeTFValidator.requireNonBlank(codemod); this.summary = CodeTFValidator.requireNonBlank(summary); this.description = CodeTFValidator.requireNonBlank(description); this.detectionTool = detectionTool; + this.failureState = failureState; this.failedFiles = CodeTFValidator.toImmutableCopyOrEmptyOnNull(failedFiles); this.references = CodeTFValidator.toImmutableCopyOrEmptyOnNull(references); this.properties = CodeTFValidator.toImmutableCopyOrEmptyOnNull(properties); @@ -46,7 +49,7 @@ public CodeTFResult( final String summary, final String description, final List changeset) { - this(codemod, summary, description, null, null, null, null, changeset, null); + this(codemod, summary, description, null, null, null, null, null, changeset, null); } public String getCodemod() { @@ -65,6 +68,10 @@ public DetectionTool getDetectionTool() { return detectionTool; } + public FailureState getFailureState() { + return failureState; + } + public Set getFailedFiles() { return failedFiles; } @@ -108,6 +115,8 @@ public static class Builder { private final CodeTFResult originalResult; private String updatedSummary; private String updatedDescription; + + private FailureState failureState; private List updatedReferences; private DetectionTool detectionTool; private List changeset; @@ -131,6 +140,11 @@ public Builder withDescription(final String description) { return this; } + public Builder withFailureState(final FailureState failureState) { + this.failureState = failureState; + return this; + } + public Builder withReferences(final List references) { Objects.requireNonNull(references); this.updatedReferences = references; @@ -171,6 +185,7 @@ public CodeTFResult build() { updatedSummary != null ? updatedSummary : originalResult.getSummary(), updatedDescription != null ? updatedDescription : originalResult.getDescription(), detectionTool != null ? detectionTool : originalResult.getDetectionTool(), + failureState != null ? failureState : originalResult.getFailureState(), originalResult.getFailedFiles(), updatedReferences != null ? updatedReferences : originalResult.getReferences(), originalResult.getProperties(), diff --git a/src/main/java/io/codemodder/codetf/FailureState.java b/src/main/java/io/codemodder/codetf/FailureState.java new file mode 100644 index 0000000..2145107 --- /dev/null +++ b/src/main/java/io/codemodder/codetf/FailureState.java @@ -0,0 +1,32 @@ +package io.codemodder.codetf; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; + +public class FailureState { + private final boolean failed; + private final String reason; + private final String exception; + + @JsonCreator + public FailureState( + @JsonProperty("failed") final boolean failed, + @JsonProperty("reason") final String reason, + @JsonProperty("exception") final String exception) { + this.failed = failed; + this.reason = reason; + this.exception = exception; + } + + public boolean failed() { + return failed; + } + + public String reason() { + return reason; + } + + public String exception() { + return exception; + } +} diff --git a/src/test/java/io/codemodder/codetf/CodeTFResultTest.java b/src/test/java/io/codemodder/codetf/CodeTFResultTest.java index 09f1093..cd8f8ed 100644 --- a/src/test/java/io/codemodder/codetf/CodeTFResultTest.java +++ b/src/test/java/io/codemodder/codetf/CodeTFResultTest.java @@ -16,6 +16,7 @@ void it_creates_result() { "Hardened object deserialization calls against attack", "Lengthier description about deserialization risks, protections, etc...", null, + null, Set.of("/foo/failed.java"), List.of( new CodeTFReference( @@ -61,6 +62,7 @@ void it_creates_result_with_detection_tool() { "Hardened object deserialization calls against attack", "Lengthier description about deserialization risks, protections, etc...", tool, + null, Set.of("/foo/failed.java"), List.of( new CodeTFReference( @@ -143,6 +145,7 @@ void it_has_changeset_with_ai() { "Hardened object deserialization calls against attack", "Lengthier description about deserialization risks, protections, etc...", null, + null, Set.of("/foo/failed.java"), List.of( new CodeTFReference( @@ -154,4 +157,12 @@ void it_has_changeset_with_ai() { assertTrue(result.usesAi()); } + + @Test + void it_has_failure_state() { + FailureState state = new FailureState(true, "reason", "exception"); + assertTrue(state.failed()); + assertEquals("reason", state.reason()); + assertEquals("exception", state.exception()); + } }