From e03362b53c6857eb8b039b358049ac842125b564 Mon Sep 17 00:00:00 2001 From: Sven Niclas Hebrok Date: Mon, 13 Nov 2023 15:56:40 +0100 Subject: [PATCH 1/2] Incorporate feedback form PR --- .../probe/result/SummarizableTestResult.java | 36 +++++++++++++++++++ .../core/probe/result/TestResults.java | 12 ++++++- 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 src/main/java/de/rub/nds/scanner/core/probe/result/SummarizableTestResult.java diff --git a/src/main/java/de/rub/nds/scanner/core/probe/result/SummarizableTestResult.java b/src/main/java/de/rub/nds/scanner/core/probe/result/SummarizableTestResult.java new file mode 100644 index 0000000..98b26d9 --- /dev/null +++ b/src/main/java/de/rub/nds/scanner/core/probe/result/SummarizableTestResult.java @@ -0,0 +1,36 @@ +/* + * Scanner Core - A modular framework for probe definition, execution, and result analysis. + * + * Copyright 2017-2023 Ruhr University Bochum, Paderborn University, Technology Innovation Institute, and Hackmanit GmbH + * + * Licensed under Apache License, Version 2.0 + * http://www.apache.org/licenses/LICENSE-2.0.txt + */ +package de.rub.nds.scanner.core.probe.result; + +/** + * A complex test result that can still be summarized into a single TestResults. This summary might + * be generated on the fly (from the contained details), or set explicitly (e.g. in case of an + * error) + */ +public interface SummarizableTestResult extends TestResult { + TestResults getSummarizedResult(); + + /** + * @return Whether the summary was explicitly set instead of generated on the fly. + */ + boolean isExplicitSummary(); + + @Override + default boolean equalsExpectedResult(TestResult other) { + if (other instanceof TestResults) { + return getSummarizedResult().equals(other); + } + return this.equals(other); + } + + @Override + default String getName() { + return getSummarizedResult().getName(); + } +} diff --git a/src/main/java/de/rub/nds/scanner/core/probe/result/TestResults.java b/src/main/java/de/rub/nds/scanner/core/probe/result/TestResults.java index 6073758..12376ea 100644 --- a/src/main/java/de/rub/nds/scanner/core/probe/result/TestResults.java +++ b/src/main/java/de/rub/nds/scanner/core/probe/result/TestResults.java @@ -22,7 +22,7 @@ @JsonIncludeProperties({"type", "value"}) @JsonPropertyOrder({"type", "value"}) @JsonFormat(shape = JsonFormat.Shape.OBJECT) -public enum TestResults implements TestResult { +public enum TestResults implements SummarizableTestResult { TRUE, FALSE, PARTIALLY, @@ -48,4 +48,14 @@ public String getName() { public static TestResults of(boolean value) { return value ? TRUE : FALSE; } + + @Override + public TestResults getSummarizedResult() { + return this; + } + + @Override + public boolean isExplicitSummary() { + return true; + } } From 904afde4a139623382a399fe4ec7ffb1c6b0963e Mon Sep 17 00:00:00 2001 From: Sven Niclas Hebrok Date: Fri, 17 Nov 2023 09:16:37 +0100 Subject: [PATCH 2/2] Implement Result that may contain further details Also add serializable interface to TestResult class --- .../core/probe/result/DetailedResult.java | 56 +++++++++++++++++++ .../scanner/core/probe/result/TestResult.java | 4 +- 2 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 src/main/java/de/rub/nds/scanner/core/probe/result/DetailedResult.java diff --git a/src/main/java/de/rub/nds/scanner/core/probe/result/DetailedResult.java b/src/main/java/de/rub/nds/scanner/core/probe/result/DetailedResult.java new file mode 100644 index 0000000..edc5d96 --- /dev/null +++ b/src/main/java/de/rub/nds/scanner/core/probe/result/DetailedResult.java @@ -0,0 +1,56 @@ +/* + * Scanner Core - A modular framework for probe definition, execution, and result analysis. + * + * Copyright 2017-2023 Ruhr University Bochum, Paderborn University, Technology Innovation Institute, and Hackmanit GmbH + * + * Licensed under Apache License, Version 2.0 + * http://www.apache.org/licenses/LICENSE-2.0.txt + */ +package de.rub.nds.scanner.core.probe.result; + +import java.io.Serializable; + +public class DetailedResult implements SummarizableTestResult { + + public static DetailedResult TRUE() { + return new DetailedResult<>(TestResults.TRUE); + } + + public static DetailedResult TRUE(T details) { + return new DetailedResult<>(TestResults.TRUE, details); + } + + public static DetailedResult FALSE() { + return new DetailedResult<>(TestResults.FALSE); + } + + public static DetailedResult FALSE(T details) { + return new DetailedResult<>(TestResults.FALSE, details); + } + + private final T details; + private final TestResults summary; + + public DetailedResult(TestResults summary, T details) { + this.details = details; + this.summary = summary; + } + + public DetailedResult(TestResults summary) { + this(summary, null); + } + + public T getDetails() { + return details; + } + + @Override + public TestResults getSummarizedResult() { + return summary; + } + + @Override + public boolean isExplicitSummary() { + return true; + } +} diff --git a/src/main/java/de/rub/nds/scanner/core/probe/result/TestResult.java b/src/main/java/de/rub/nds/scanner/core/probe/result/TestResult.java index 9c50e97..14d4cec 100644 --- a/src/main/java/de/rub/nds/scanner/core/probe/result/TestResult.java +++ b/src/main/java/de/rub/nds/scanner/core/probe/result/TestResult.java @@ -8,8 +8,10 @@ */ package de.rub.nds.scanner.core.probe.result; +import java.io.Serializable; + /** The interface for TestResults */ -public interface TestResult { +public interface TestResult extends Serializable { /** * @return the name of the TestResult.