diff options
author | Fabian Meumertzheim <meumertzheim@code-intelligence.com> | 2023-02-13 16:55:20 +0100 |
---|---|---|
committer | Fabian Meumertzheim <fabian@meumertzhe.im> | 2023-02-16 15:05:25 +0100 |
commit | 7e3dfa62b8a77bad494b7876f4da182fa0ea3a8b (patch) | |
tree | fedcd1b79d0c85f1868be57f3716d3ba46c4c9cf /src/test/java/com/code_intelligence/jazzer/mutation | |
parent | 771c985f459c27d9d82dd95f95f23edb57d1bd68 (diff) | |
download | jazzer-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')
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( |