Skip to content

Commit b9454b5

Browse files
authored
Merge pull request #144 from tls-attacker/guidelines-less-generics
Guidelines with less generics + requirement level in GuidelineCheckResult
2 parents cb66f38 + b0d160b commit b9454b5

18 files changed

+215
-156
lines changed

src/main/java/de/rub/nds/scanner/core/execution/Scanner.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ protected SiteReportRater getSiteReportRater() {
127127
*
128128
* @return A list of guidelines.
129129
*/
130-
protected List<Guideline<ReportT>> getGuidelines() {
130+
protected List<Guideline> getGuidelines() {
131131
return List.of();
132132
}
133133

@@ -191,9 +191,9 @@ public ReportT scan() {
191191

192192
// Guideline Evaluation
193193
LOGGER.debug("Retrieving guidelines for evaluation");
194-
List<Guideline<ReportT>> guidelines = getGuidelines();
194+
List<Guideline> guidelines = getGuidelines();
195195
LOGGER.debug("Got a total of {} guidelines to evaluate", guidelines.size());
196-
for (Guideline<ReportT> guideline : guidelines) {
196+
for (Guideline guideline : guidelines) {
197197
LOGGER.debug("Executing evaluation of guideline '{}'", guideline.getName());
198198
GuidelineChecker<ReportT> checker = new GuidelineChecker<>(guideline);
199199
checker.fillReport(report);

src/main/java/de/rub/nds/scanner/core/guideline/FailedCheckGuidelineResult.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,17 @@ private FailedCheckGuidelineResult() {
1616
super(null, null);
1717
}
1818

19-
public FailedCheckGuidelineResult(String checkName, GuidelineAdherence adherence) {
20-
super(checkName, adherence);
19+
public FailedCheckGuidelineResult(GuidelineCheck check, GuidelineAdherence adherence) {
20+
super(check, adherence);
2121
}
2222

23-
public FailedCheckGuidelineResult(String checkName, GuidelineAdherence adherence, String hint) {
24-
super(checkName, adherence, hint);
23+
public FailedCheckGuidelineResult(
24+
GuidelineCheck check, GuidelineAdherence adherence, String hint) {
25+
super(check, adherence, hint);
26+
}
27+
28+
@Override
29+
public String toString() {
30+
return "Failed guideline check: " + getHint();
2531
}
2632
}

src/main/java/de/rub/nds/scanner/core/guideline/Guideline.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
*/
99
package de.rub.nds.scanner.core.guideline;
1010

11-
import de.rub.nds.scanner.core.report.ScanReport;
1211
import jakarta.xml.bind.annotation.*;
1312
import java.io.Serializable;
1413
import java.util.ArrayList;
@@ -18,19 +17,19 @@
1817
@XmlRootElement(name = "guideline")
1918
@XmlType(propOrder = {"name", "link", "checks"})
2019
@XmlAccessorType(XmlAccessType.FIELD)
21-
public class Guideline<ReportT extends ScanReport> implements Serializable {
20+
public class Guideline implements Serializable {
2221

2322
private String name;
2423
private String link;
2524

2625
@XmlAnyElement(lax = true)
27-
private List<GuidelineCheck<ReportT>> checks;
26+
private List<GuidelineCheck> checks;
2827

2928
/** Private no-arg constructor to please JAXB */
3029
@SuppressWarnings("unused")
3130
private Guideline() {}
3231

33-
public Guideline(String name, String link, List<GuidelineCheck<ReportT>> checks) {
32+
public Guideline(String name, String link, List<GuidelineCheck> checks) {
3433
this.name = name;
3534
this.link = link;
3635
this.checks = new ArrayList<>(checks);
@@ -77,7 +76,7 @@ public void setLink(String link) {
7776
*
7877
* @return an unmodifiable list of guideline checks
7978
*/
80-
public List<GuidelineCheck<ReportT>> getChecks() {
79+
public List<GuidelineCheck> getChecks() {
8180
return checks != null ? Collections.unmodifiableList(checks) : Collections.emptyList();
8281
}
8382

@@ -86,7 +85,7 @@ public List<GuidelineCheck<ReportT>> getChecks() {
8685
*
8786
* @param check the guideline check to add
8887
*/
89-
public void addCheck(GuidelineCheck<ReportT> check) {
88+
public void addCheck(GuidelineCheck check) {
9089
if (checks == null) {
9190
checks = new ArrayList<>();
9291
}

src/main/java/de/rub/nds/scanner/core/guideline/GuidelineCheck.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import org.apache.logging.log4j.Logger;
1616

1717
@XmlAccessorType(XmlAccessType.FIELD)
18-
public abstract class GuidelineCheck<ReportT extends ScanReport> {
18+
public abstract class GuidelineCheck {
1919

2020
private static final Logger LOGGER = LogManager.getLogger();
2121

@@ -46,19 +46,20 @@ public GuidelineCheck(
4646
* @param report the scan report to evaluate
4747
* @return the result of the guideline check evaluation
4848
*/
49-
public abstract GuidelineCheckResult evaluate(ReportT report);
49+
public abstract <ReportT extends ScanReport> GuidelineCheckResult evaluate(ReportT report);
5050

5151
/**
5252
* Checks if the report satisfies the condition required for this guideline check.
5353
*
5454
* @param report the scan report to check against the condition
5555
* @return true if the condition is satisfied or no condition is set, false otherwise
5656
*/
57-
public boolean passesCondition(ReportT report) {
57+
public <ReportT extends ScanReport> boolean passesCondition(ReportT report) {
5858
return this.passesCondition(report, this.condition);
5959
}
6060

61-
private boolean passesCondition(ReportT report, GuidelineCheckCondition condition) {
61+
private <ReportT extends ScanReport> boolean passesCondition(
62+
ReportT report, GuidelineCheckCondition condition) {
6263
if (condition == null) {
6364
return true;
6465
}

src/main/java/de/rub/nds/scanner/core/guideline/GuidelineCheckResult.java

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,25 +14,30 @@
1414
public abstract class GuidelineCheckResult {
1515

1616
private String checkName;
17+
private RequirementLevel level;
1718
private GuidelineAdherence adherence;
1819
private String hint;
1920

2021
@SuppressWarnings("unused")
2122
// Default constructor for deserialization
2223
private GuidelineCheckResult() {
2324
this.checkName = null;
25+
this.level = null;
2426
this.adherence = null;
2527
this.hint = null;
2628
}
2729

28-
protected GuidelineCheckResult(String checkName, GuidelineAdherence adherence) {
29-
this.checkName = checkName;
30+
protected GuidelineCheckResult(GuidelineCheck check, GuidelineAdherence adherence) {
31+
this.checkName = check != null ? check.getName() : null;
32+
this.level = check != null ? check.getRequirementLevel() : null;
3033
this.adherence = adherence;
3134
this.hint = null;
3235
}
3336

34-
protected GuidelineCheckResult(String checkName, GuidelineAdherence adherence, String hint) {
35-
this.checkName = checkName;
37+
protected GuidelineCheckResult(
38+
GuidelineCheck check, GuidelineAdherence adherence, String hint) {
39+
this.checkName = check.getName();
40+
this.level = check.getRequirementLevel();
3641
this.adherence = adherence;
3742
this.hint = hint;
3843
}
@@ -90,4 +95,22 @@ public String getHint() {
9095
public void setHint(String hint) {
9196
this.hint = hint;
9297
}
98+
99+
/**
100+
* Sets the requirement level of the check.
101+
*
102+
* @return the requirementLevel to set
103+
*/
104+
public RequirementLevel getLevel() {
105+
return level;
106+
}
107+
108+
/**
109+
* Sets the requirement level of the check.
110+
*
111+
* @param level the requirementLevel or null if non is set
112+
*/
113+
public void setLevel(RequirementLevel level) {
114+
this.level = level;
115+
}
93116
}

src/main/java/de/rub/nds/scanner/core/guideline/GuidelineChecker.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ public class GuidelineChecker<ReportT extends ScanReport> {
1818

1919
protected static final Logger LOGGER = LogManager.getLogger();
2020

21-
private final Guideline<ReportT> guideline;
21+
private final Guideline guideline;
2222

23-
public GuidelineChecker(Guideline<ReportT> guideline) {
23+
public GuidelineChecker(Guideline guideline) {
2424
this.guideline = guideline;
2525
}
2626

@@ -32,12 +32,12 @@ public GuidelineChecker(Guideline<ReportT> guideline) {
3232
*/
3333
public void fillReport(ReportT report) {
3434
List<GuidelineCheckResult> results = new ArrayList<>();
35-
for (GuidelineCheck<ReportT> check : guideline.getChecks()) {
35+
for (GuidelineCheck check : guideline.getChecks()) {
3636
GuidelineCheckResult result;
3737
if (!check.passesCondition(report)) {
3838
result =
3939
new MissingRequirementGuidelineResult(
40-
check.getName(),
40+
check,
4141
GuidelineAdherence.CONDITION_NOT_MET,
4242
"Condition was not met => Check is skipped.");
4343
} else {
@@ -47,7 +47,7 @@ public void fillReport(ReportT report) {
4747
LOGGER.debug("Failed evaluating check: ", throwable);
4848
result =
4949
new FailedCheckGuidelineResult(
50-
check.getName(),
50+
check,
5151
GuidelineAdherence.CHECK_FAILED,
5252
throwable.getLocalizedMessage());
5353
}

src/main/java/de/rub/nds/scanner/core/guideline/GuidelineIO.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
package de.rub.nds.scanner.core.guideline;
1010

1111
import de.rub.nds.scanner.core.probe.AnalyzedProperty;
12-
import de.rub.nds.scanner.core.report.ScanReport;
1312
import de.rub.nds.scanner.core.util.JaxbSerializer;
1413
import jakarta.xml.bind.JAXBContext;
1514
import jakarta.xml.bind.JAXBException;
@@ -33,8 +32,7 @@
3332
import org.reflections.util.ConfigurationBuilder;
3433
import org.reflections.util.FilterBuilder;
3534

36-
public final class GuidelineIO<ReportT extends ScanReport>
37-
extends JaxbSerializer<Guideline<ReportT>> {
35+
public final class GuidelineIO extends JaxbSerializer<Guideline> {
3836

3937
private Logger LOGGER = LogManager.getLogger();
4038

@@ -112,11 +110,11 @@ private static List<String> listXmlFiles(ClassLoader classLoader, String folder)
112110
return xmlFilePaths;
113111
}
114112

115-
public List<Guideline<ReportT>> readGuidelines(ClassLoader classLoader, String subFolder) {
113+
public List<Guideline> readGuidelines(ClassLoader classLoader, String subFolder) {
116114

117115
LOGGER.debug("Loading guidelines from files...");
118116

119-
List<Guideline<ReportT>> guidelines = new ArrayList<>();
117+
List<Guideline> guidelines = new ArrayList<>();
120118

121119
try {
122120
// Get all files in guideline folder

src/main/java/de/rub/nds/scanner/core/guideline/MissingRequirementGuidelineResult.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ private MissingRequirementGuidelineResult() {
1717
super(null, null);
1818
}
1919

20-
public MissingRequirementGuidelineResult(String checkName, GuidelineAdherence adherence) {
21-
super(checkName, adherence);
20+
public MissingRequirementGuidelineResult(GuidelineCheck check, GuidelineAdherence adherence) {
21+
super(check, adherence);
2222
}
2323

2424
public MissingRequirementGuidelineResult(
25-
String checkName, GuidelineAdherence adherence, String hint) {
26-
super(checkName, adherence, hint);
25+
GuidelineCheck check, GuidelineAdherence adherence, String hint) {
26+
super(check, adherence, hint);
2727
}
2828
}

src/test/java/de/rub/nds/scanner/core/execution/ScannerTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ static class TestScanner extends Scanner<TestReport, TestProbe, TestAfterProbe,
145145
private TestReport reportToReturn;
146146
private boolean checkPrerequisites = true;
147147
private SiteReportRater rater;
148-
private List<Guideline<TestReport>> guidelines = new ArrayList<>();
148+
private List<Guideline> guidelines = new ArrayList<>();
149149

150150
TestScanner(ExecutorConfig config) {
151151
super(config);
@@ -200,7 +200,7 @@ protected SiteReportRater getSiteReportRater() {
200200
}
201201

202202
@Override
203-
protected List<Guideline<TestReport>> getGuidelines() {
203+
protected List<Guideline> getGuidelines() {
204204
return guidelines;
205205
}
206206

@@ -216,7 +216,7 @@ public void setSiteReportRater(SiteReportRater rater) {
216216
this.rater = rater;
217217
}
218218

219-
public void setGuidelines(List<Guideline<TestReport>> guidelines) {
219+
public void setGuidelines(List<Guideline> guidelines) {
220220
this.guidelines = guidelines;
221221
}
222222

@@ -357,8 +357,8 @@ public void testScanWithGuidelines() {
357357
TestReport report;
358358
try (TestScanner scanner = new TestScanner(executorConfig)) {
359359

360-
Guideline<TestReport> guideline =
361-
new Guideline<>("TestGuideline", "http://example.com", new ArrayList<>());
360+
Guideline guideline =
361+
new Guideline("TestGuideline", "http://example.com", new ArrayList<>());
362362

363363
scanner.setGuidelines(List.of(guideline));
364364
report = scanner.scan();

src/test/java/de/rub/nds/scanner/core/guideline/FailedCheckGuidelineResultTest.java

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,33 +12,35 @@
1212
import static org.junit.jupiter.api.Assertions.assertNotNull;
1313
import static org.junit.jupiter.api.Assertions.assertNull;
1414

15+
import de.rub.nds.scanner.core.guideline.testutil.IOTestGuidelineCheck;
1516
import java.lang.reflect.Constructor;
1617
import org.junit.jupiter.api.Test;
1718

1819
class FailedCheckGuidelineResultTest {
1920

2021
@Test
21-
void testConstructorWithNameAndAdherence() {
22-
String checkName = "TestCheck";
22+
void testConstructorWithCheckAndAdherence() {
23+
GuidelineCheck check = new IOTestGuidelineCheck("Test name", RequirementLevel.MUST);
2324
GuidelineAdherence adherence = GuidelineAdherence.CHECK_FAILED;
2425

25-
FailedCheckGuidelineResult result = new FailedCheckGuidelineResult(checkName, adherence);
26+
FailedCheckGuidelineResult result = new FailedCheckGuidelineResult(check, adherence);
2627

27-
assertEquals(checkName, result.getCheckName());
28+
assertEquals(check.getName(), result.getCheckName());
29+
assertEquals(check.getRequirementLevel(), result.getLevel());
2830
assertEquals(adherence, result.getAdherence());
2931
assertNull(result.getHint());
3032
}
3133

3234
@Test
33-
void testConstructorWithNameAdherenceAndHint() {
34-
String checkName = "TestCheck";
35+
void testConstructorWithCheckAdherenceAndHint() {
36+
GuidelineCheck check = new IOTestGuidelineCheck("Test name", RequirementLevel.MUST);
3537
GuidelineAdherence adherence = GuidelineAdherence.CHECK_FAILED;
3638
String hint = "This check failed due to an exception";
3739

38-
FailedCheckGuidelineResult result =
39-
new FailedCheckGuidelineResult(checkName, adherence, hint);
40+
FailedCheckGuidelineResult result = new FailedCheckGuidelineResult(check, adherence, hint);
4041

41-
assertEquals(checkName, result.getCheckName());
42+
assertEquals(check.getName(), result.getCheckName());
43+
assertEquals(check.getRequirementLevel(), result.getLevel());
4244
assertEquals(adherence, result.getAdherence());
4345
assertEquals(hint, result.getHint());
4446
}
@@ -54,20 +56,24 @@ void testDefaultConstructorUsedInReflection() throws Exception {
5456
assertNotNull(instance);
5557
FailedCheckGuidelineResult result = (FailedCheckGuidelineResult) instance;
5658
assertNull(result.getCheckName());
59+
assertNull(result.getLevel());
5760
assertNull(result.getAdherence());
5861
}
5962

6063
@Test
6164
void testInheritanceFromGuidelineCheckResult() {
65+
GuidelineCheck check = new IOTestGuidelineCheck("Test name", RequirementLevel.MUST);
6266
FailedCheckGuidelineResult result =
63-
new FailedCheckGuidelineResult("Test", GuidelineAdherence.CHECK_FAILED);
67+
new FailedCheckGuidelineResult(check, GuidelineAdherence.CHECK_FAILED);
6468

6569
// Test inherited setters
6670
result.setCheckName("NewName");
6771
result.setAdherence(GuidelineAdherence.VIOLATED);
6872
result.setHint("New hint");
73+
result.setLevel(RequirementLevel.MAY);
6974

7075
assertEquals("NewName", result.getCheckName());
76+
assertEquals(RequirementLevel.MAY, result.getLevel());
7177
assertEquals(GuidelineAdherence.VIOLATED, result.getAdherence());
7278
assertEquals("New hint", result.getHint());
7379
}

0 commit comments

Comments
 (0)