diff options
author | Fabian Meumertzheim <meumertzheim@code-intelligence.com> | 2023-04-25 11:18:17 +0200 |
---|---|---|
committer | Fabian Meumertzheim <fabian@meumertzhe.im> | 2023-04-25 13:57:10 +0200 |
commit | 88ba6dd97f9f4ca0272620b736ecdbef58b123d2 (patch) | |
tree | 2612645bbb2bb8a5f833414cefa771b88b20e7ed /src/test/java/com | |
parent | 559bfac068691f3cc3fb81ce26628dc5402e1fdc (diff) | |
download | jazzer-api-88ba6dd97f9f4ca0272620b736ecdbef58b123d2.tar.gz |
mutation: Add support for `DynamicMessage`
A new `DescriptorSource` annotation is used to specify a field with the
`DynamicMessage`'s `Descriptor`.
Since `DynamicMessage` instances are only compatible if their
descriptors are reference equal, the mutator interner now checks for
this instead of relying on `equals`.
Diffstat (limited to 'src/test/java/com')
-rw-r--r-- | src/test/java/com/code_intelligence/jazzer/mutation/mutator/StressTest.java | 13 |
1 files changed, 13 insertions, 0 deletions
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 25ca16e0..ccee97c0 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 @@ -38,6 +38,7 @@ import com.code_intelligence.jazzer.mutation.annotation.InRange; import com.code_intelligence.jazzer.mutation.annotation.NotNull; import com.code_intelligence.jazzer.mutation.annotation.WithSize; import com.code_intelligence.jazzer.mutation.annotation.proto.AnySource; +import com.code_intelligence.jazzer.mutation.annotation.proto.DescriptorSource; import com.code_intelligence.jazzer.mutation.api.PseudoRandom; import com.code_intelligence.jazzer.mutation.api.Serializer; import com.code_intelligence.jazzer.mutation.api.SerializingMutator; @@ -63,8 +64,10 @@ import com.code_intelligence.jazzer.protobuf.Proto3.RepeatedIntegralField3; import com.code_intelligence.jazzer.protobuf.Proto3.RepeatedRecursiveMessageField3; import com.code_intelligence.jazzer.protobuf.Proto3.StringField3; import com.google.protobuf.Any; +import com.google.protobuf.Descriptors.Descriptor; import com.google.protobuf.Descriptors.FieldDescriptor; import com.google.protobuf.Descriptors.FieldDescriptor.JavaType; +import com.google.protobuf.DynamicMessage; import com.google.protobuf.Message; import com.google.protobuf.Message.Builder; import java.io.ByteArrayInputStream; @@ -90,6 +93,9 @@ public class StressTest { private static final int NUM_MUTATE_PER_INIT = 100; private static final double MANY_DISTINCT_ELEMENTS_RATIO = 0.5; + @SuppressWarnings("unused") + static final Descriptor TEST_PROTOBUF_DESCRIPTOR = TestProtobuf.getDescriptor(); + private enum TestEnumTwo { A, B } private enum TestEnumThree { A, B, C } @@ -303,6 +309,13 @@ public class StressTest { "{Builder.Nullable<Boolean>, Builder.Nullable<Integer>, Builder.Nullable<Integer>, Builder.Nullable<Long>, Builder.Nullable<Long>, Builder.Nullable<Float>, Builder.Nullable<Double>, Builder.Nullable<String>, Builder.Nullable<Enum<Enum>>, Builder.Nullable<{Builder.Nullable<Integer>, Builder via List<Integer>} -> Message>, Builder via List<Boolean>, Builder via List<Integer>, Builder via List<Integer>, Builder via List<Long>, Builder via List<Long>, Builder via List<Float>, Builder via List<Double>, Builder via List<String>, Builder via List<Enum<Enum>>, Builder via List<(cycle) -> Message>, Builder.Map<Integer,Integer>, Builder.Nullable<FixedValue(OnlyLabel)>, Builder.Nullable<{<empty>} -> Message>, Builder.Nullable<Integer> | Builder.Nullable<Long> | Builder.Nullable<Integer>} -> Message", manyDistinctElements(), manyDistinctElements()), arguments( + new TypeHolder<@NotNull @DescriptorSource( + "com.code_intelligence.jazzer.mutation.mutator.StressTest#TEST_PROTOBUF_DESCRIPTOR") + DynamicMessage>() { + }.annotatedType(), + "{Builder.Nullable<Boolean>, Builder.Nullable<Integer>, Builder.Nullable<Integer>, Builder.Nullable<Long>, Builder.Nullable<Long>, Builder.Nullable<Float>, Builder.Nullable<Double>, Builder.Nullable<String>, Builder.Nullable<Enum<Enum>>, Builder.Nullable<{Builder.Nullable<Integer>, Builder via List<Integer>} -> Message>, Builder via List<Boolean>, Builder via List<Integer>, Builder via List<Integer>, Builder via List<Long>, Builder via List<Long>, Builder via List<Float>, Builder via List<Double>, Builder via List<String>, Builder via List<Enum<Enum>>, Builder via List<(cycle) -> Message>, Builder.Map<Integer,Integer>, Builder.Nullable<FixedValue(OnlyLabel)>, Builder.Nullable<{<empty>} -> Message>, Builder.Nullable<Integer> | Builder.Nullable<Long> | Builder.Nullable<Integer>} -> Message", + manyDistinctElements(), manyDistinctElements()), + arguments( new TypeHolder<@NotNull @AnySource( {PrimitiveField3.class, MessageField3.class}) AnyField3>() { }.annotatedType(), |