use of org.infinispan.protostream.config.Configuration in project protostream by infinispan.
the class DescriptorsTest method testBrokenUndefinedAnnotation.
@Test
public void testBrokenUndefinedAnnotation() {
exception.expect(AnnotationParserException.class);
exception.expectMessage("Error: 2,21: ')' expected");
Configuration config = Configuration.builder().annotationsConfig().annotation("Field", AnnotationElement.AnnotationTarget.FIELD).attribute(AnnotationElement.Annotation.VALUE_DEFAULT_ATTRIBUTE).type(AnnotationElement.AttributeType.BOOLEAN).defaultValue(true).build();
String testProto = "message M {\n" + " /** Here we have an annotation that fails to parse\n" + " @SomeAnnotation(777 @Field */\n" + " optional int32 field1 = 1; \n" + "}";
FileDescriptorSource fileDescriptorSource = FileDescriptorSource.fromString("test.proto", testProto);
Map<String, FileDescriptor> descriptors = parseAndResolve(fileDescriptorSource, config);
// todo [anistor] The processing of annotations is waaay too lazy
descriptors.get("test.proto").getMessageTypes().get(0).getFields().get(0).getAnnotations();
}
use of org.infinispan.protostream.config.Configuration in project protostream by infinispan.
the class DescriptorsTest method testMultipleAnnotationAttribute.
@Test
public void testMultipleAnnotationAttribute() {
Configuration config = Configuration.builder().annotationsConfig().annotation("Xyz", AnnotationElement.AnnotationTarget.MESSAGE).attribute("elem1").type(AnnotationElement.AttributeType.BOOLEAN).defaultValue(true).multiple(true).build();
String testProto = "/** @Xyz(elem1 = {true, false, true}) */\n" + "message M {\n" + " optional int32 field1 = 1; \n" + "}\n";
FileDescriptorSource fileDescriptorSource = FileDescriptorSource.fromString("test.proto", testProto);
Map<String, FileDescriptor> descriptors = parseAndResolve(fileDescriptorSource, config);
FileDescriptor fileDescriptor = descriptors.get("test.proto");
List<Descriptor> messageTypes = fileDescriptor.getMessageTypes();
Descriptor messageType = messageTypes.get(0);
assertEquals("M", messageType.getFullName());
AnnotationElement.Annotation annotation = messageType.getAnnotations().get("Xyz");
assertNotNull(annotation);
AnnotationElement.Value attr = annotation.getAttributeValue("elem1");
assertTrue(attr instanceof AnnotationElement.Array);
assertTrue(attr.getValue() instanceof List);
List values = (List) attr.getValue();
assertEquals(3, values.size());
assertEquals(true, values.get(0));
assertEquals(false, values.get(1));
assertEquals(true, values.get(2));
}
use of org.infinispan.protostream.config.Configuration in project protostream by infinispan.
the class DescriptorsTest method testUndefinedAnnotation.
@Test
public void testUndefinedAnnotation() {
Configuration config = Configuration.builder().annotationsConfig().annotation("Field", AnnotationElement.AnnotationTarget.FIELD).attribute(AnnotationElement.Annotation.VALUE_DEFAULT_ATTRIBUTE).type(AnnotationElement.AttributeType.BOOLEAN).defaultValue(true).build();
String testProto = "message M {\n" + " /** @SomeAnnotation(x=777, y=\"YES\") @Field */\n" + " optional int32 field1 = 1; \n" + "}";
FileDescriptorSource fileDescriptorSource = FileDescriptorSource.fromString("test.proto", testProto);
Map<String, FileDescriptor> descriptors = parseAndResolve(fileDescriptorSource, config);
// todo [anistor] The processing of annotations is waaay too lazy
AnnotationElement.Annotation someAnnotation = descriptors.get("test.proto").getMessageTypes().get(0).getFields().get(0).getAnnotations().get("SomeAnnotation");
assertNull(someAnnotation);
AnnotationElement.Annotation fieldAnnotation = descriptors.get("test.proto").getMessageTypes().get(0).getFields().get(0).getAnnotations().get("Field");
assertNotNull(fieldAnnotation);
assertEquals("Field", fieldAnnotation.getName());
}
use of org.infinispan.protostream.config.Configuration in project protostream by infinispan.
the class ProtobufUtilTest method testWrappedMessageTypeIdMapper.
@Test
public void testWrappedMessageTypeIdMapper() throws Exception {
WrappedMessageTypeIdMapper mapper = new WrappedMessageTypeIdMapper() {
@Override
public int mapTypeIdOut(int typeId, ImmutableSerializationContext ctx) {
if (typeId == 100042) {
// change typeId ouf User
return 100021;
}
return typeId;
}
};
Configuration cfg = Configuration.builder().wrappingConfig().wrappedMessageTypeIdMapper(mapper).build();
ImmutableSerializationContext ctx = createContext(cfg);
// this has TypeId 100042
User user = new User();
user.setId(1);
user.setName("John");
user.setSurname("Batman");
user.setGender(User.Gender.MALE);
byte[] bytes = ProtobufUtil.toWrappedByteArray(ctx, user);
int[] seenTypeId = new int[] { -1 };
TagHandler tagHandler = new TagHandler() {
@Override
public void onTag(int fieldNumber, FieldDescriptor fieldDescriptor, Object tagValue) {
if (fieldNumber == WrappedMessage.WRAPPED_TYPE_ID) {
seenTypeId[0] = (Integer) tagValue;
}
}
};
Descriptor wrappedMessageDescriptor = ctx.getMessageDescriptor(WrappedMessage.PROTOBUF_TYPE_NAME);
ProtobufParser.INSTANCE.parse(tagHandler, wrappedMessageDescriptor, bytes);
assertEquals(100021, seenTypeId[0]);
}
use of org.infinispan.protostream.config.Configuration in project protostream by infinispan.
the class DescriptorsTest method testAnnotationParser.
@Test
public void testAnnotationParser() throws Exception {
Configuration config = Configuration.builder().annotationsConfig().annotation("Indexed", AnnotationElement.AnnotationTarget.MESSAGE).attribute(AnnotationElement.Annotation.VALUE_DEFAULT_ATTRIBUTE).type(AnnotationElement.AttributeType.BOOLEAN).defaultValue(true).metadataCreator((descriptor, annotation) -> annotation.getDefaultAttributeValue().getValue()).build();
FileDescriptorSource fileDescriptorSource = FileDescriptorSource.fromResources("sample_bank_account/bank.proto");
Map<String, FileDescriptor> descriptors = parseAndResolve(fileDescriptorSource, config);
FileDescriptor fileDescriptor = descriptors.get("sample_bank_account/bank.proto");
List<Descriptor> messageTypes = fileDescriptor.getMessageTypes();
Descriptor userMessageType = messageTypes.get(0);
assertEquals("sample_bank_account.User", userMessageType.getFullName());
assertEquals(Boolean.TRUE, userMessageType.getProcessedAnnotation("Indexed"));
Descriptor accountMessageType = messageTypes.get(1);
assertEquals("sample_bank_account.Account", accountMessageType.getFullName());
assertEquals(Boolean.TRUE, accountMessageType.getProcessedAnnotation("Indexed"));
}
Aggregations