Skip to content

Commit 1685dcb

Browse files
authored
test: add empty string and unicode edge cases to ValueTest (#8219)
1 parent d8f5c04 commit 1685dcb

File tree

2 files changed

+57
-7
lines changed

2 files changed

+57
-7
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.api.logs;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
10+
import edu.berkeley.cs.jqf.fuzz.Fuzz;
11+
import edu.berkeley.cs.jqf.fuzz.JQF;
12+
import edu.berkeley.cs.jqf.fuzz.junit.GuidedFuzzing;
13+
import edu.berkeley.cs.jqf.fuzz.random.NoGuidance;
14+
import io.opentelemetry.api.common.Value;
15+
import java.nio.charset.StandardCharsets;
16+
import java.util.Base64;
17+
import org.junit.jupiter.api.Test;
18+
import org.junit.runner.Result;
19+
import org.junit.runner.RunWith;
20+
21+
public class ValueFuzzTest {
22+
@RunWith(JQF.class)
23+
public static class FuzzTestCases {
24+
@Fuzz
25+
public void valueByteAsStringFuzz(String randomString) {
26+
String base64Encoded = Value.of(randomString.getBytes(StandardCharsets.UTF_8)).asString();
27+
byte[] decodedBytes = Base64.getDecoder().decode(base64Encoded);
28+
assertThat(new String(decodedBytes, StandardCharsets.UTF_8)).isEqualTo(randomString);
29+
}
30+
}
31+
32+
@SuppressWarnings("SystemOut")
33+
@Test
34+
void valueByteAsStringFuzzing() {
35+
Result result =
36+
GuidedFuzzing.run(
37+
FuzzTestCases.class,
38+
"valueByteAsStringFuzz",
39+
new NoGuidance(10000, System.out),
40+
System.out);
41+
assertThat(result.wasSuccessful()).isTrue();
42+
}
43+
}

api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.junit.jupiter.params.ParameterizedTest;
2626
import org.junit.jupiter.params.provider.Arguments;
2727
import org.junit.jupiter.params.provider.MethodSource;
28+
import org.junit.jupiter.params.provider.ValueSource;
2829

2930
class ValueTest {
3031

@@ -204,12 +205,18 @@ private static Stream<Arguments> asStringArgs() {
204205
arguments(Value.of("hello world".getBytes(StandardCharsets.UTF_8)), "aGVsbG8gd29ybGQ="));
205206
}
206207

207-
@Test
208-
void valueByteAsString() {
209-
// TODO: add more test cases
210-
String str = "hello world";
211-
String base64Encoded = Value.of(str.getBytes(StandardCharsets.UTF_8)).asString();
212-
byte[] decodedBytes = Base64.getDecoder().decode(base64Encoded);
213-
assertThat(new String(decodedBytes, StandardCharsets.UTF_8)).isEqualTo(str);
208+
@ParameterizedTest
209+
@ValueSource(
210+
strings = {
211+
"standard string",
212+
"special characters !@#$%^&*()",
213+
"multi\nline\tstring",
214+
"",
215+
"emoji boundary test 🚀👩‍💻"
216+
})
217+
void valueByteAsString(String inputStr) {
218+
String base64 = Value.of(inputStr.getBytes(StandardCharsets.UTF_8)).asString();
219+
byte[] decoded = Base64.getDecoder().decode(base64);
220+
assertThat(new String(decoded, StandardCharsets.UTF_8)).isEqualTo(inputStr);
214221
}
215222
}

0 commit comments

Comments
 (0)