From 568f3e7c3deab9af5193cda3043d3d9cb7762c8b Mon Sep 17 00:00:00 2001 From: Tusharika Date: Sat, 28 Mar 2026 00:58:15 +0530 Subject: [PATCH 1/3] test: add empty string and unicode edge cases to ValueTest --- .../java/io/opentelemetry/api/logs/ValueTest.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java b/api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java index 0f449c2ecb0..b7a0f704c1e 100644 --- a/api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java +++ b/api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java @@ -211,5 +211,17 @@ void valueByteAsString() { String base64Encoded = Value.of(str.getBytes(StandardCharsets.UTF_8)).asString(); byte[] decodedBytes = Base64.getDecoder().decode(base64Encoded); assertThat(new String(decodedBytes, StandardCharsets.UTF_8)).isEqualTo(str); + + // Test empty string + String emptyStr = ""; + String emptyBase64 = Value.of(emptyStr.getBytes(StandardCharsets.UTF_8)).asString(); + byte[] decodedEmpty = Base64.getDecoder().decode(emptyBase64); + assertThat(new String(decodedEmpty, StandardCharsets.UTF_8)).isEqualTo(emptyStr); + + // Test string with special characters + String specialStr = "hello \n \t 🌍 world!"; + String specialBase64 = Value.of(specialStr.getBytes(StandardCharsets.UTF_8)).asString(); + byte[] decodedSpecial = Base64.getDecoder().decode(specialBase64); + assertThat(new String(decodedSpecial, StandardCharsets.UTF_8)).isEqualTo(specialStr); } } From 7b02592db2d4bc30a4c516d6f693d3e6f53a38f0 Mon Sep 17 00:00:00 2001 From: Tusharika Date: Sat, 28 Mar 2026 12:12:50 +0530 Subject: [PATCH 2/3] test: upgrade string boundary checks to property-based fuzz tests --- .../io/opentelemetry/api/logs/ValueTest.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java b/api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java index b7a0f704c1e..0b0ea26b7ae 100644 --- a/api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java +++ b/api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java @@ -25,6 +25,12 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; +import edu.berkeley.cs.jqf.fuzz.Fuzz; +import edu.berkeley.cs.jqf.fuzz.JQF; +import edu.berkeley.cs.jqf.fuzz.junit.GuidedFuzzing; +import edu.berkeley.cs.jqf.fuzz.random.NoGuidance; +import org.junit.runner.Result; +import org.junit.runner.RunWith; class ValueTest { @@ -224,4 +230,23 @@ void valueByteAsString() { byte[] decodedSpecial = Base64.getDecoder().decode(specialBase64); assertThat(new String(decodedSpecial, StandardCharsets.UTF_8)).isEqualTo(specialStr); } + + @RunWith(JQF.class) + public static class FuzzTestCases { + @Fuzz + public void valueByteAsStringFuzz(String randomString) { + String base64Encoded = Value.of(randomString.getBytes(StandardCharsets.UTF_8)).asString(); + byte[] decodedBytes = Base64.getDecoder().decode(base64Encoded); + assertThat(new String(decodedBytes, StandardCharsets.UTF_8)).isEqualTo(randomString); + } + } + + @SuppressWarnings("SystemOut") + @Test + void valueByteAsStringFuzzing() { + Result result = GuidedFuzzing.run( + FuzzTestCases.class, "valueByteAsStringFuzz", new NoGuidance(10000, System.out), System.out); + assertThat(result.wasSuccessful()).isTrue(); + } } + From 8fcff5e91ce68910fcbfb1ef58d2f9aead8ac512 Mon Sep 17 00:00:00 2001 From: Tusharika Date: Sat, 28 Mar 2026 12:25:39 +0530 Subject: [PATCH 3/3] style: fix import lexicographical order via spotlessApply --- .../io/opentelemetry/api/logs/ValueTest.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java b/api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java index 0b0ea26b7ae..d4d3c788638 100644 --- a/api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java +++ b/api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java @@ -9,6 +9,10 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.jupiter.params.provider.Arguments.arguments; +import edu.berkeley.cs.jqf.fuzz.Fuzz; +import edu.berkeley.cs.jqf.fuzz.JQF; +import edu.berkeley.cs.jqf.fuzz.junit.GuidedFuzzing; +import edu.berkeley.cs.jqf.fuzz.random.NoGuidance; import io.opentelemetry.api.common.KeyValue; import io.opentelemetry.api.common.Value; import io.opentelemetry.api.common.ValueType; @@ -25,10 +29,6 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import edu.berkeley.cs.jqf.fuzz.Fuzz; -import edu.berkeley.cs.jqf.fuzz.JQF; -import edu.berkeley.cs.jqf.fuzz.junit.GuidedFuzzing; -import edu.berkeley.cs.jqf.fuzz.random.NoGuidance; import org.junit.runner.Result; import org.junit.runner.RunWith; @@ -244,9 +244,12 @@ public void valueByteAsStringFuzz(String randomString) { @SuppressWarnings("SystemOut") @Test void valueByteAsStringFuzzing() { - Result result = GuidedFuzzing.run( - FuzzTestCases.class, "valueByteAsStringFuzz", new NoGuidance(10000, System.out), System.out); + Result result = + GuidedFuzzing.run( + FuzzTestCases.class, + "valueByteAsStringFuzz", + new NoGuidance(10000, System.out), + System.out); assertThat(result.wasSuccessful()).isTrue(); } } -