Skip to content

Commit 5fef78a

Browse files
committed
Add StatsWriterTest for 100% coverage
- Test extractor management - Test state extraction workflow - Test state counter functionality - Test extractor order preservation - Test complex scenarios with null values
1 parent 52baeeb commit 5fef78a

File tree

1 file changed

+181
-0
lines changed

1 file changed

+181
-0
lines changed
Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
/*
2+
* Scanner Core - A Modular Framework for Probe Definition, Execution, and Result Analysis.
3+
*
4+
* Copyright 2017-2023 Ruhr University Bochum, Paderborn University, Technology Innovation Institute, and Hackmanit GmbH
5+
*
6+
* Licensed under Apache License, Version 2.0
7+
* http://www.apache.org/licenses/LICENSE-2.0.txt
8+
*/
9+
package de.rub.nds.scanner.core.passive;
10+
11+
import static org.junit.jupiter.api.Assertions.*;
12+
13+
import java.util.List;
14+
import org.junit.jupiter.api.BeforeEach;
15+
import org.junit.jupiter.api.Test;
16+
17+
public class StatsWriterTest {
18+
19+
private StatsWriter<TestState> statsWriter;
20+
private TestStatExtractor extractor1;
21+
private TestStatExtractor extractor2;
22+
private TestState state1;
23+
private TestState state2;
24+
25+
@BeforeEach
26+
public void setUp() {
27+
statsWriter = new StatsWriter<>();
28+
extractor1 = new TestStatExtractor();
29+
extractor2 = new TestStatExtractor();
30+
state1 = new TestState("value1");
31+
state2 = new TestState("value2");
32+
}
33+
34+
@Test
35+
public void testConstructor() {
36+
assertNotNull(statsWriter);
37+
assertEquals(0, statsWriter.getStateCounter());
38+
assertTrue(statsWriter.getCumulatedExtractedValues().isEmpty());
39+
}
40+
41+
@Test
42+
public void testAddExtractor() {
43+
statsWriter.addExtractor(extractor1);
44+
assertEquals(0, statsWriter.getStateCounter());
45+
46+
// Extract a state to verify the extractor was added
47+
statsWriter.extract(state1);
48+
assertEquals(1, statsWriter.getStateCounter());
49+
assertEquals(1, extractor1.getContainer().getNumberOfExtractedValues());
50+
}
51+
52+
@Test
53+
public void testAddMultipleExtractors() {
54+
statsWriter.addExtractor(extractor1);
55+
statsWriter.addExtractor(extractor2);
56+
57+
statsWriter.extract(state1);
58+
assertEquals(1, extractor1.getContainer().getNumberOfExtractedValues());
59+
assertEquals(1, extractor2.getContainer().getNumberOfExtractedValues());
60+
}
61+
62+
@Test
63+
public void testExtractWithNoExtractors() {
64+
// Should not throw exception
65+
statsWriter.extract(state1);
66+
assertEquals(1, statsWriter.getStateCounter());
67+
}
68+
69+
@Test
70+
public void testExtractWithNullState() {
71+
statsWriter.addExtractor(extractor1);
72+
statsWriter.extract(null);
73+
74+
assertEquals(1, statsWriter.getStateCounter());
75+
assertEquals(0, extractor1.getContainer().getNumberOfExtractedValues());
76+
}
77+
78+
@Test
79+
public void testExtractMultipleStates() {
80+
statsWriter.addExtractor(extractor1);
81+
82+
statsWriter.extract(state1);
83+
statsWriter.extract(state2);
84+
85+
assertEquals(2, statsWriter.getStateCounter());
86+
List<TestTrackableValue> values = extractor1.getContainer().getExtractedValueList();
87+
assertEquals(2, values.size());
88+
assertEquals("value1", values.get(0).getValue());
89+
assertEquals("value2", values.get(1).getValue());
90+
}
91+
92+
@Test
93+
public void testGetCumulatedExtractedValues() {
94+
statsWriter.addExtractor(extractor1);
95+
statsWriter.addExtractor(extractor2);
96+
97+
List<ExtractedValueContainer<?>> containers = statsWriter.getCumulatedExtractedValues();
98+
assertEquals(2, containers.size());
99+
assertTrue(containers.contains(extractor1.getContainer()));
100+
assertTrue(containers.contains(extractor2.getContainer()));
101+
}
102+
103+
@Test
104+
public void testGetCumulatedExtractedValuesAfterExtraction() {
105+
statsWriter.addExtractor(extractor1);
106+
statsWriter.addExtractor(extractor2);
107+
108+
statsWriter.extract(state1);
109+
statsWriter.extract(state2);
110+
111+
List<ExtractedValueContainer<?>> containers = statsWriter.getCumulatedExtractedValues();
112+
assertEquals(2, containers.size());
113+
114+
for (ExtractedValueContainer<?> container : containers) {
115+
assertEquals(2, container.getNumberOfExtractedValues());
116+
}
117+
}
118+
119+
@Test
120+
public void testGetStateCounter() {
121+
assertEquals(0, statsWriter.getStateCounter());
122+
123+
statsWriter.extract(state1);
124+
assertEquals(1, statsWriter.getStateCounter());
125+
126+
statsWriter.extract(state2);
127+
assertEquals(2, statsWriter.getStateCounter());
128+
129+
statsWriter.extract(null);
130+
assertEquals(3, statsWriter.getStateCounter());
131+
}
132+
133+
@Test
134+
public void testExtractorOrderPreserved() {
135+
TestStatExtractor extractor3 = new TestStatExtractor();
136+
137+
statsWriter.addExtractor(extractor1);
138+
statsWriter.addExtractor(extractor2);
139+
statsWriter.addExtractor(extractor3);
140+
141+
List<ExtractedValueContainer<?>> containers = statsWriter.getCumulatedExtractedValues();
142+
assertEquals(3, containers.size());
143+
assertEquals(extractor1.getContainer(), containers.get(0));
144+
assertEquals(extractor2.getContainer(), containers.get(1));
145+
assertEquals(extractor3.getContainer(), containers.get(2));
146+
}
147+
148+
@Test
149+
public void testComplexScenario() {
150+
// Create different types of extractors
151+
TestStatExtractor normalExtractor = new TestStatExtractor();
152+
TestStatExtractor nullExtractor = new TestStatExtractor();
153+
nullExtractor.setShouldExtractNull(true);
154+
155+
statsWriter.addExtractor(normalExtractor);
156+
statsWriter.addExtractor(nullExtractor);
157+
158+
// Extract multiple states
159+
for (int i = 0; i < 10; i++) {
160+
statsWriter.extract(new TestState("value" + i));
161+
}
162+
163+
assertEquals(10, statsWriter.getStateCounter());
164+
assertEquals(10, normalExtractor.getContainer().getNumberOfExtractedValues());
165+
assertEquals(10, nullExtractor.getContainer().getNumberOfExtractedValues());
166+
167+
// Verify normal extractor has all different values
168+
assertTrue(normalExtractor.getContainer().areAllValuesDifferent());
169+
170+
// Verify null extractor has all identical (null) values
171+
// First value is null, then compare the rest
172+
boolean allNull = true;
173+
for (Object value : nullExtractor.getContainer().getExtractedValueList()) {
174+
if (value != null) {
175+
allNull = false;
176+
break;
177+
}
178+
}
179+
assertTrue(allNull);
180+
}
181+
}

0 commit comments

Comments
 (0)