aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/com/code_intelligence/jazzer/mutation
diff options
context:
space:
mode:
authorFabian Meumertzheim <meumertzheim@code-intelligence.com>2023-02-13 16:55:20 +0100
committerFabian Meumertzheim <fabian@meumertzhe.im>2023-02-16 15:05:25 +0100
commit7e3dfa62b8a77bad494b7876f4da182fa0ea3a8b (patch)
treefedcd1b79d0c85f1868be57f3716d3ba46c4c9cf /src/test/java/com/code_intelligence/jazzer/mutation
parent771c985f459c27d9d82dd95f95f23edb57d1bd68 (diff)
downloadjazzer-api-7e3dfa62b8a77bad494b7876f4da182fa0ea3a8b.tar.gz
mutation: Add proto3 tests to StressTest
When messages become too complex to exercise fully in unit tests, we should be adding them to `StressTest` instead.
Diffstat (limited to 'src/test/java/com/code_intelligence/jazzer/mutation')
-rw-r--r--src/test/java/com/code_intelligence/jazzer/mutation/mutator/BUILD.bazel1
-rw-r--r--src/test/java/com/code_intelligence/jazzer/mutation/mutator/StressTest.java33
-rw-r--r--src/test/java/com/code_intelligence/jazzer/mutation/mutator/proto/BUILD.bazel2
-rw-r--r--src/test/java/com/code_intelligence/jazzer/mutation/mutator/proto/BuilderMutatorProto3Test.java12
4 files changed, 33 insertions, 15 deletions
diff --git a/src/test/java/com/code_intelligence/jazzer/mutation/mutator/BUILD.bazel b/src/test/java/com/code_intelligence/jazzer/mutation/mutator/BUILD.bazel
index bf8a690c..5553c653 100644
--- a/src/test/java/com/code_intelligence/jazzer/mutation/mutator/BUILD.bazel
+++ b/src/test/java/com/code_intelligence/jazzer/mutation/mutator/BUILD.bazel
@@ -10,6 +10,7 @@ java_test_suite(
"//src/main/java/com/code_intelligence/jazzer/mutation/api",
"//src/main/java/com/code_intelligence/jazzer/mutation/mutator",
"//src/main/java/com/code_intelligence/jazzer/mutation/support",
+ "//src/test/java/com/code_intelligence/jazzer/mutation/mutator/proto:proto3_java_proto",
"//src/test/java/com/code_intelligence/jazzer/mutation/support:test_support",
],
)
diff --git a/src/test/java/com/code_intelligence/jazzer/mutation/mutator/StressTest.java b/src/test/java/com/code_intelligence/jazzer/mutation/mutator/StressTest.java
index 0f672570..4de5c54f 100644
--- a/src/test/java/com/code_intelligence/jazzer/mutation/mutator/StressTest.java
+++ b/src/test/java/com/code_intelligence/jazzer/mutation/mutator/StressTest.java
@@ -36,13 +36,13 @@ import com.code_intelligence.jazzer.mutation.api.PseudoRandom;
import com.code_intelligence.jazzer.mutation.api.Serializer;
import com.code_intelligence.jazzer.mutation.api.SerializingMutator;
import com.code_intelligence.jazzer.mutation.support.TypeHolder;
+import com.code_intelligence.jazzer.protobuf.Proto3.OptionalPrimitiveField3;
+import com.code_intelligence.jazzer.protobuf.Proto3.RepeatedRecursiveMessageField3;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
-import java.io.PipedInputStream;
-import java.io.PipedOutputStream;
import java.lang.reflect.AnnotatedType;
import java.util.ArrayList;
import java.util.HashSet;
@@ -122,6 +122,29 @@ public class StressTest {
exactly(rangeClosed(Integer.MIN_VALUE, Integer.MIN_VALUE + 5).boxed().toArray())));
}
+ public static Stream<Arguments> protoStressTestCases() {
+ return Stream.of(
+ arguments(new TypeHolder<@NotNull OptionalPrimitiveField3>() {}.annotatedType(),
+ "{Builder.Nullable<Boolean>} -> Message",
+ exactly(OptionalPrimitiveField3.newBuilder().build(),
+ OptionalPrimitiveField3.newBuilder().setSomeField(false).build(),
+ OptionalPrimitiveField3.newBuilder().setSomeField(true).build()),
+ exactly(OptionalPrimitiveField3.newBuilder().build(),
+ OptionalPrimitiveField3.newBuilder().setSomeField(false).build(),
+ OptionalPrimitiveField3.newBuilder().setSomeField(true).build())),
+ arguments(new TypeHolder<@NotNull RepeatedRecursiveMessageField3>() {}.annotatedType(),
+ "{Builder.Boolean, Builder via List<(cycle)>} -> Message",
+ contains(RepeatedRecursiveMessageField3.getDefaultInstance(),
+ RepeatedRecursiveMessageField3.newBuilder().setSomeField(true).build(),
+ RepeatedRecursiveMessageField3.newBuilder()
+ .addMessageField(RepeatedRecursiveMessageField3.getDefaultInstance())
+ .build(),
+ RepeatedRecursiveMessageField3.newBuilder()
+ .addMessageField(RepeatedRecursiveMessageField3.newBuilder().setSomeField(true))
+ .build()),
+ manyDistinctElements()));
+ }
+
@SafeVarargs
private static Consumer<List<Object>> all(Consumer<List<Object>>... checks) {
return list -> {
@@ -131,6 +154,10 @@ public class StressTest {
};
}
+ private static Consumer<List<Object>> distinctElements(int num) {
+ return list -> assertThat(new HashSet<>(list).size()).isAtLeast(num);
+ }
+
private static Consumer<List<Object>> manyDistinctElements() {
return distinctElementsRatio(MANY_DISTINCT_ELEMENTS_RATIO);
}
@@ -187,7 +214,7 @@ public class StressTest {
}
@ParameterizedTest(name = "{0}")
- @MethodSource("stressTestCases")
+ @MethodSource({"stressTestCases", "protoStressTestCases"})
void genericMutatorStressTest(AnnotatedType type, String mutatorTree,
Consumer<List<Object>> expectedInitValues, Consumer<List<Object>> expectedMutatedValues)
throws IOException {
diff --git a/src/test/java/com/code_intelligence/jazzer/mutation/mutator/proto/BUILD.bazel b/src/test/java/com/code_intelligence/jazzer/mutation/mutator/proto/BUILD.bazel
index 0814ddfc..8a5ebd36 100644
--- a/src/test/java/com/code_intelligence/jazzer/mutation/mutator/proto/BUILD.bazel
+++ b/src/test/java/com/code_intelligence/jazzer/mutation/mutator/proto/BUILD.bazel
@@ -7,6 +7,8 @@ proto_library(
java_proto_library(
name = "proto3_java_proto",
+ testonly = True,
+ visibility = ["//src/test/java/com/code_intelligence/jazzer/mutation/mutator:__pkg__"],
deps = [":proto3_proto"],
)
diff --git a/src/test/java/com/code_intelligence/jazzer/mutation/mutator/proto/BuilderMutatorProto3Test.java b/src/test/java/com/code_intelligence/jazzer/mutation/mutator/proto/BuilderMutatorProto3Test.java
index f615e4e2..02587259 100644
--- a/src/test/java/com/code_intelligence/jazzer/mutation/mutator/proto/BuilderMutatorProto3Test.java
+++ b/src/test/java/com/code_intelligence/jazzer/mutation/mutator/proto/BuilderMutatorProto3Test.java
@@ -19,7 +19,6 @@ package com.code_intelligence.jazzer.mutation.mutator.proto;
import static com.code_intelligence.jazzer.mutation.support.TestSupport.mockPseudoRandom;
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.extensions.proto.ProtoTruth.assertThat;
-import static org.junit.jupiter.api.Assertions.fail;
import com.code_intelligence.jazzer.mutation.annotation.NotNull;
import com.code_intelligence.jazzer.mutation.api.ChainedMutatorFactory;
@@ -36,9 +35,6 @@ import com.code_intelligence.jazzer.protobuf.Proto3.PrimitiveField3;
import com.code_intelligence.jazzer.protobuf.Proto3.RecursiveMessageField3;
import com.code_intelligence.jazzer.protobuf.Proto3.RepeatedMessageField3;
import com.code_intelligence.jazzer.protobuf.Proto3.RepeatedPrimitiveField3;
-import com.code_intelligence.jazzer.protobuf.Proto3.RepeatedRecursiveMessageField3;
-import com.google.protobuf.Any;
-import com.google.protobuf.Descriptors.OneofDescriptor;
import org.junit.jupiter.api.Test;
class BuilderMutatorProto3Test {
@@ -295,14 +291,6 @@ class BuilderMutatorProto3Test {
}
@Test
- void testRepeatedRecursiveMessageField() {
- InPlaceMutator<RepeatedRecursiveMessageField3.Builder> mutator =
- (InPlaceMutator<RepeatedRecursiveMessageField3.Builder>) FACTORY.createInPlaceOrThrow(
- new TypeHolder<RepeatedRecursiveMessageField3.@NotNull Builder>() {}.annotatedType());
- assertThat(mutator.toString()).isEqualTo("{Builder.Boolean, Builder via List<(cycle)>}");
- }
-
- @Test
void testOneOfField3() {
InPlaceMutator<OneOfField3.Builder> mutator =
(InPlaceMutator<OneOfField3.Builder>) FACTORY.createInPlaceOrThrow(