Skip to content

Commit 9fdcfe8

Browse files
authored
Merge pull request #118 from tls-attacker/test/passive-package-coverage
test: achieve 100% coverage for passive package
2 parents 6743dd8 + 72bf80e commit 9fdcfe8

File tree

8 files changed

+785
-0
lines changed

8 files changed

+785
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
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 com.fasterxml.jackson.annotation.JsonCreator;
12+
import com.fasterxml.jackson.annotation.JsonProperty;
13+
import java.util.Objects;
14+
15+
public class AnotherTestTrackableValue implements TrackableValue {
16+
private final int number;
17+
18+
@JsonCreator
19+
public AnotherTestTrackableValue(@JsonProperty("number") int number) {
20+
this.number = number;
21+
}
22+
23+
public int getNumber() {
24+
return number;
25+
}
26+
27+
@Override
28+
public boolean equals(Object o) {
29+
if (this == o) return true;
30+
if (o == null || getClass() != o.getClass()) return false;
31+
AnotherTestTrackableValue that = (AnotherTestTrackableValue) o;
32+
return number == that.number;
33+
}
34+
35+
@Override
36+
public int hashCode() {
37+
return Objects.hash(number);
38+
}
39+
40+
@Override
41+
public String toString() {
42+
return "AnotherTestTrackableValue{" + "number=" + number + '}';
43+
}
44+
}
Lines changed: 218 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,218 @@
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 com.fasterxml.jackson.databind.ObjectMapper;
14+
import java.io.IOException;
15+
import java.util.List;
16+
import org.junit.jupiter.api.BeforeEach;
17+
import org.junit.jupiter.api.Test;
18+
19+
public class ExtractedValueContainerTest {
20+
21+
private ExtractedValueContainer<TestTrackableValue> container;
22+
private TestTrackableValue value1;
23+
private TestTrackableValue value2;
24+
private TestTrackableValue value3;
25+
26+
@BeforeEach
27+
public void setUp() {
28+
value1 = new TestTrackableValue("value1");
29+
value2 = new TestTrackableValue("value2");
30+
value3 = new TestTrackableValue("value1"); // Same as value1
31+
}
32+
33+
@Test
34+
public void testDefaultConstructor() {
35+
container = new ExtractedValueContainer<>();
36+
assertNotNull(container.getExtractedValueList());
37+
assertTrue(container.getExtractedValueList().isEmpty());
38+
assertEquals(0, container.getNumberOfExtractedValues());
39+
assertNull(container.getType());
40+
}
41+
42+
@Test
43+
public void testParameterizedConstructor() {
44+
TestTrackableValue sampleValue = new TestTrackableValue("sample");
45+
container = new ExtractedValueContainer<>(sampleValue);
46+
assertNotNull(container.getExtractedValueList());
47+
assertTrue(container.getExtractedValueList().isEmpty());
48+
assertEquals(0, container.getNumberOfExtractedValues());
49+
assertEquals(sampleValue, container.getType());
50+
}
51+
52+
@Test
53+
public void testPutAndGetValues() {
54+
container = new ExtractedValueContainer<>(value1);
55+
56+
container.put(value1);
57+
assertEquals(1, container.getNumberOfExtractedValues());
58+
assertEquals(value1, container.getExtractedValueList().get(0));
59+
60+
container.put(value2);
61+
assertEquals(2, container.getNumberOfExtractedValues());
62+
assertEquals(value2, container.getExtractedValueList().get(1));
63+
}
64+
65+
@Test
66+
public void testAreAllValuesIdenticalWithEmptyContainer() {
67+
container = new ExtractedValueContainer<>();
68+
assertTrue(container.areAllValuesIdentical());
69+
}
70+
71+
@Test
72+
public void testAreAllValuesIdenticalWithSingleValue() {
73+
container = new ExtractedValueContainer<>();
74+
container.put(value1);
75+
assertTrue(container.areAllValuesIdentical());
76+
}
77+
78+
@Test
79+
public void testAreAllValuesIdenticalWithIdenticalValues() {
80+
container = new ExtractedValueContainer<>();
81+
container.put(value1);
82+
container.put(value3); // Same value as value1
83+
container.put(value1);
84+
assertTrue(container.areAllValuesIdentical());
85+
}
86+
87+
@Test
88+
public void testAreAllValuesIdenticalWithDifferentValues() {
89+
container = new ExtractedValueContainer<>();
90+
container.put(value1);
91+
container.put(value2);
92+
assertFalse(container.areAllValuesIdentical());
93+
}
94+
95+
@Test
96+
public void testAreAllValuesIdenticalWithNullValue() {
97+
container = new ExtractedValueContainer<>();
98+
container.put(null);
99+
container.put(value1);
100+
// The actual container compares null != value1, so they're not identical
101+
assertFalse(container.areAllValuesIdentical());
102+
}
103+
104+
@Test
105+
public void testAreAllValuesIdenticalWithAllNullValues() {
106+
container = new ExtractedValueContainer<>();
107+
container.put(null);
108+
container.put(null);
109+
// This will throw NPE due to the implementation bug in areAllValuesIdentical
110+
assertThrows(NullPointerException.class, () -> container.areAllValuesIdentical());
111+
}
112+
113+
@Test
114+
public void testAreAllValuesDifferentWithEmptyContainer() {
115+
container = new ExtractedValueContainer<>();
116+
assertTrue(container.areAllValuesDifferent());
117+
}
118+
119+
@Test
120+
public void testAreAllValuesDifferentWithSingleValue() {
121+
container = new ExtractedValueContainer<>();
122+
container.put(value1);
123+
assertTrue(container.areAllValuesDifferent());
124+
}
125+
126+
@Test
127+
public void testAreAllValuesDifferentWithAllDifferentValues() {
128+
container = new ExtractedValueContainer<>();
129+
container.put(value1);
130+
container.put(value2);
131+
assertTrue(container.areAllValuesDifferent());
132+
}
133+
134+
@Test
135+
public void testAreAllValuesDifferentWithDuplicateValues() {
136+
container = new ExtractedValueContainer<>();
137+
container.put(value1);
138+
container.put(value2);
139+
container.put(value1); // Duplicate
140+
assertFalse(container.areAllValuesDifferent());
141+
}
142+
143+
@Test
144+
public void testAreAllValuesDifferentWithNullValues() {
145+
container = new ExtractedValueContainer<>();
146+
container.put(null);
147+
container.put(value1);
148+
container.put(null); // Duplicate null
149+
assertFalse(container.areAllValuesDifferent());
150+
}
151+
152+
@Test
153+
public void testGetExtractedValueListWithClass() {
154+
container = new ExtractedValueContainer<>(value1);
155+
container.put(value1);
156+
container.put(value2);
157+
158+
List<TestTrackableValue> list = container.getExtractedValueList(TestTrackableValue.class);
159+
assertNotNull(list);
160+
assertEquals(2, list.size());
161+
assertEquals(value1, list.get(0));
162+
assertEquals(value2, list.get(1));
163+
}
164+
165+
@Test
166+
public void testGetExtractedValueListWithWrongClass() {
167+
container = new ExtractedValueContainer<>(value1);
168+
container.put(value1);
169+
170+
assertThrows(
171+
ClassCastException.class,
172+
() -> {
173+
List<String> list = container.getExtractedValueList(String.class);
174+
// This would fail at runtime when accessing elements
175+
String str = list.get(0);
176+
});
177+
}
178+
179+
@Test
180+
public void testGetExtractedValueListGeneric() {
181+
container = new ExtractedValueContainer<>();
182+
container.put(value1);
183+
container.put(value2);
184+
185+
List<?> list = container.getExtractedValueList();
186+
assertNotNull(list);
187+
assertEquals(2, list.size());
188+
}
189+
190+
@Test
191+
public void testJacksonSerialization() throws IOException {
192+
container = new ExtractedValueContainer<>(value1);
193+
container.put(value1);
194+
container.put(value2);
195+
196+
ObjectMapper mapper = new ObjectMapper();
197+
String json = mapper.writeValueAsString(container);
198+
assertNotNull(json);
199+
assertTrue(json.contains("extractedValueList"));
200+
201+
// Test that the container has expected state before serialization
202+
assertEquals(2, container.getNumberOfExtractedValues());
203+
assertFalse(container.areAllValuesIdentical());
204+
assertTrue(container.areAllValuesDifferent());
205+
}
206+
207+
@Test
208+
public void testMultipleValueTypes() {
209+
// Test that container properly handles multiple additions
210+
container = new ExtractedValueContainer<>();
211+
for (int i = 0; i < 10; i++) {
212+
container.put(new TestTrackableValue("value" + i));
213+
}
214+
assertEquals(10, container.getNumberOfExtractedValues());
215+
assertTrue(container.areAllValuesDifferent());
216+
assertFalse(container.areAllValuesIdentical());
217+
}
218+
}
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
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 StatExtractorTest {
18+
19+
private TestStatExtractor extractor;
20+
private TestState state1;
21+
private TestState state2;
22+
23+
@BeforeEach
24+
public void setUp() {
25+
extractor = new TestStatExtractor();
26+
state1 = new TestState("value1");
27+
state2 = new TestState("value2");
28+
}
29+
30+
@Test
31+
public void testConstructor() {
32+
assertNotNull(extractor.getContainer());
33+
assertNotNull(extractor.getValueType());
34+
assertEquals(0, extractor.getContainer().getNumberOfExtractedValues());
35+
}
36+
37+
@Test
38+
public void testGetValueType() {
39+
TrackableValue valueType = extractor.getValueType();
40+
assertNotNull(valueType);
41+
assertTrue(valueType instanceof TestTrackableValue);
42+
}
43+
44+
@Test
45+
public void testPut() {
46+
TestTrackableValue value = new TestTrackableValue("test");
47+
extractor.put(value);
48+
49+
assertEquals(1, extractor.getContainer().getNumberOfExtractedValues());
50+
assertEquals(value, extractor.getContainer().getExtractedValueList().get(0));
51+
}
52+
53+
@Test
54+
public void testPutNull() {
55+
extractor.put(null);
56+
57+
assertEquals(1, extractor.getContainer().getNumberOfExtractedValues());
58+
assertNull(extractor.getContainer().getExtractedValueList().get(0));
59+
}
60+
61+
@Test
62+
public void testExtract() {
63+
extractor.extract(state1);
64+
extractor.extract(state2);
65+
66+
List<TestTrackableValue> values = extractor.getContainer().getExtractedValueList();
67+
assertEquals(2, values.size());
68+
assertEquals("value1", values.get(0).getValue());
69+
assertEquals("value2", values.get(1).getValue());
70+
}
71+
72+
@Test
73+
public void testExtractWithNullState() {
74+
extractor.extract(null);
75+
assertEquals(0, extractor.getContainer().getNumberOfExtractedValues());
76+
}
77+
78+
@Test
79+
public void testExtractWithNullValue() {
80+
TestState nullValueState = new TestState(null);
81+
extractor.extract(nullValueState);
82+
assertEquals(0, extractor.getContainer().getNumberOfExtractedValues());
83+
}
84+
85+
@Test
86+
public void testExtractNullValue() {
87+
extractor.setShouldExtractNull(true);
88+
extractor.extract(state1);
89+
90+
assertEquals(1, extractor.getContainer().getNumberOfExtractedValues());
91+
assertNull(extractor.getContainer().getExtractedValueList().get(0));
92+
}
93+
94+
@Test
95+
public void testGetContainer() {
96+
ExtractedValueContainer<TestTrackableValue> container = extractor.getContainer();
97+
assertNotNull(container);
98+
99+
// Verify it's the same container
100+
extractor.put(new TestTrackableValue("test"));
101+
assertEquals(1, container.getNumberOfExtractedValues());
102+
}
103+
104+
@Test
105+
public void testMultipleExtractions() {
106+
// Test multiple extractions maintain order
107+
for (int i = 0; i < 5; i++) {
108+
extractor.extract(new TestState("value" + i));
109+
}
110+
111+
List<TestTrackableValue> values = extractor.getContainer().getExtractedValueList();
112+
assertEquals(5, values.size());
113+
for (int i = 0; i < 5; i++) {
114+
assertEquals("value" + i, values.get(i).getValue());
115+
}
116+
}
117+
}

0 commit comments

Comments
 (0)