public void Multiple_ISpecificRecords() { var serializer = new AvroSerializer <ISpecificRecord>(schemaRegistryClient); var deserializerUser = new AvroDeserializer <User>(schemaRegistryClient); var deserializerCar = new AvroDeserializer <Car>(schemaRegistryClient); var user = new User { favorite_color = "blue", favorite_number = 100, name = "awesome" }; var car = new Car { color = "blue", name = "great_brand" }; var bytesUser = serializer.SerializeAsync(user, new SerializationContext(MessageComponentType.Value, testTopic)).Result; var resultUser = deserializerUser.DeserializeAsync(bytesUser, false, new SerializationContext(MessageComponentType.Value, testTopic)).Result as User; Assert.NotNull(resultUser); Assert.Equal(user.name, resultUser.name); Assert.Equal(user.favorite_color, resultUser.favorite_color); Assert.Equal(user.favorite_number, resultUser.favorite_number); var bytesCar = serializer.SerializeAsync(car, new SerializationContext(MessageComponentType.Value, testTopic)).Result; var resultCar = deserializerCar.DeserializeAsync(bytesCar, false, new SerializationContext(MessageComponentType.Value, testTopic)).Result as Car; Assert.NotNull(resultCar); Assert.Equal(car.name, resultCar.name); Assert.Equal(car.color, resultCar.color); }
public void Incompatible() { var avroSerializer = new AvroSerializer <string>(schemaRegistryClient); var avroDeserializer = new AvroDeserializer <int>(schemaRegistryClient); var bytes = avroSerializer.SerializeAsync("hello world", new SerializationContext(MessageComponentType.Value, testTopic)).Result; Assert.Throws <System.AggregateException>(() => avroDeserializer.DeserializeAsync(bytes, false, new SerializationContext(MessageComponentType.Value, testTopic)).Result); }
public void Incompatible() { var avroSerializer = new AvroSerializer <string>(schemaRegistryClient); var avroDeserializer = new AvroDeserializer <int>(schemaRegistryClient); var bytes = avroSerializer.SerializeAsync("hello world", false, new MessageMetadata(), new TopicPartition("topic", Partition.Any)).Result; Assert.Throws <System.AggregateException>(() => avroDeserializer.DeserializeAsync(bytes, false, false, new MessageMetadata(), new TopicPartition("topic", Partition.Any)).Result); }
public void DeserializerConfigure() { var config = new Dictionary <string, string> { }; // should not throw. var avroDeserializer = new AvroDeserializer <int>(null, config); }
public void NullInt() { var deserializer = new AvroDeserializer <int>(schemaRegistryClient); var exception = Assert.Throws <AggregateException>(() => deserializer.DeserializeAsync(ReadOnlyMemory <byte> .Empty, isNull: true, new SerializationContext(MessageComponentType.Value, testTopic)).Result); Assert.Equal("Cannot deserialize null to a Value Type", exception.InnerException.Message); }
public override Task StartAsync(CancellationToken cancellationToken) { var schemaRegistry = new LocalSchemaRegistry(avroSchema); AvroDeserializer <TValue> avroDeserializer = new AvroDeserializer <TValue>(schemaRegistry); SetConsumerAndExecutor(avroDeserializer, null, null); return(Task.CompletedTask); }
public void DeserializerThrowsOnUnrelated() { var config = new Dictionary <string, string> { { "some.random.config.param", "false" } }; Assert.Throws <ArgumentException>(() => { var avroDeserializer = new AvroDeserializer <int>(null, config); }); }
public void DeserializerUnexpectedAvroConfigParam() { var config = new Dictionary <string, string> { { "avro.serializer.auto.register.schemas", "false" } }; Assert.Throws <ArgumentException>(() => { var avroDeserializer = new AvroDeserializer <int>(null, config); }); }
public void DoubleSerDe() { var avroSerializer = new AvroSerializer <double>(schemaRegistryClient); var avroDeserializer = new AvroDeserializer <double>(schemaRegistryClient); byte[] bytes; bytes = avroSerializer.SerializeAsync(123d, false, new MessageMetadata(), new TopicPartition(testTopic, Partition.Any)).Result; Assert.Equal(123d, avroDeserializer.DeserializeAsync(bytes, false, false, new MessageMetadata(), new TopicPartition(testTopic, Partition.Any)).Result); }
public void BoolSerDe() { var avroSerializer = new AvroSerializer <bool>(schemaRegistryClient); var avroDeserializer = new AvroDeserializer <bool>(schemaRegistryClient); byte[] bytes; bytes = avroSerializer.SerializeAsync(true, new SerializationContext(MessageComponentType.Value, testTopic)).Result; Assert.True(avroDeserializer.DeserializeAsync(bytes, false, new SerializationContext(MessageComponentType.Value, testTopic)).Result); }
public void BytesSerDe() { var avroSerializer = new AvroSerializer <byte[]>(schemaRegistryClient); var avroDeserializer = new AvroDeserializer <byte[]>(schemaRegistryClient); byte[] bytes; bytes = avroSerializer.SerializeAsync(new byte[] { 2, 3, 4 }, false, new MessageMetadata(), new TopicPartition(testTopic, Partition.Any)).Result; Assert.Equal(new byte[] { 2, 3, 4 }, avroDeserializer.DeserializeAsync(bytes, false, false, new MessageMetadata(), new TopicPartition(testTopic, Partition.Any)).Result); }
public void DoubleSerDe() { var avroSerializer = new AvroSerializer <double>(schemaRegistryClient); var avroDeserializer = new AvroDeserializer <double>(schemaRegistryClient); byte[] bytes; bytes = avroSerializer.SerializeAsync(123d, new SerializationContext(MessageComponentType.Value, testTopic)).Result; Assert.Equal(123d, avroDeserializer.DeserializeAsync(bytes, false, new SerializationContext(MessageComponentType.Value, testTopic)).Result); }
public void DeserializerConfigure() { var avroDeserializer = new AvroDeserializer <int>(schemaRegistryClient); var config = new Dictionary <string, string> { }; var modifiedConfig = avroDeserializer.Configure(config, true); Assert.Equal(0, modifiedConfig.Count()); }
public void NullString() { var serializer = new AvroSerializer <string>(schemaRegistryClient); var deserializer = new AvroDeserializer <string>(schemaRegistryClient); var bytes = serializer.SerializeAsync(null, new SerializationContext(MessageComponentType.Value, testTopic)).Result; var result = deserializer.DeserializeAsync(bytes, isNull: true, new SerializationContext(MessageComponentType.Value, testTopic)).Result; Assert.Null(bytes); Assert.Null(result); }
public void DeserializerUnexpectedConfigParam() { var avroDeserializer = new AvroDeserializer <int>(schemaRegistryClient); var config = new Dictionary <string, object> { { "avro.serializer.auto.register.schemas", false } }; Assert.Throws <ArgumentException>(() => { avroDeserializer.Configure(config, true); }); }
public void DeserializerDoubleConfigureSchemaRegistry() { var avroDeserializer = new AvroDeserializer <int>(schemaRegistryClient); var config = new Dictionary <string, object> { { "schema.registry.url", "localhost:8081" } }; Assert.Throws <ArgumentException>(() => { avroDeserializer.Configure(config, true); }); }
public void BoolSerDe() { var avroSerializer = new AvroSerializer <bool>(schemaRegistryClient); avroSerializer.Configure(new Dictionary <string, string>(), false); var avroDeserializer = new AvroDeserializer <bool>(schemaRegistryClient); avroDeserializer.Configure(new Dictionary <string, string>(), false); byte[] bytes; bytes = avroSerializer.Serialize(testTopic, true); Assert.Equal(true, avroDeserializer.Deserialize(testTopic, bytes, false)); }
public async Task Handle(byte[] message, ISchemaRegistryClient schemaRegistry, CancellationToken token) { var deserializer = new AvroDeserializer <TEvent>(schemaRegistry); var mySpecificRecord = await deserializer.DeserializeAsync(message, false, new SerializationContext()); using (var scope = _services.CreateScope()) { var serviceBus = scope.ServiceProvider.GetRequiredService <IServiceBus>(); await serviceBus.PublishAsync(mySpecificRecord, token); } }
public void Incompatible() { var avroSerializer = new AvroSerializer <string>(schemaRegistryClient); avroSerializer.Configure(new Dictionary <string, object>(), false); var avroDeserializer = new AvroDeserializer <int>(schemaRegistryClient); avroDeserializer.Configure(new Dictionary <string, object>(), false); byte[] bytes; bytes = avroSerializer.Serialize(testTopic, "Hello world"); Assert.Throws <global::Avro.AvroException>(() => avroDeserializer.Deserialize(testTopic, bytes)); }
public void StringSerDe() { var avroSerializer = new AvroSerializer <string>(schemaRegistryClient); avroSerializer.Configure(new Dictionary <string, object>(), false); var avroDeserializer = new AvroDeserializer <string>(schemaRegistryClient); avroDeserializer.Configure(new Dictionary <string, object>(), false); byte[] bytes; bytes = avroSerializer.Serialize(testTopic, "abc"); Assert.Equal("abc", avroDeserializer.Deserialize(testTopic, bytes)); }
public void BytesSerDe() { var avroSerializer = new AvroSerializer <byte[]>(schemaRegistryClient); avroSerializer.Configure(new Dictionary <string, object>(), false); var avroDeserializer = new AvroDeserializer <byte[]>(schemaRegistryClient); avroDeserializer.Configure(new Dictionary <string, object>(), false); byte[] bytes; bytes = avroSerializer.Serialize(testTopic, new byte[] { 2, 3, 4 }); Assert.Equal(new byte[] { 2, 3, 4 }, avroDeserializer.Deserialize(testTopic, bytes)); }
public void DoubleSerDe() { var avroSerializer = new AvroSerializer <double>(schemaRegistryClient); avroSerializer.Configure(new Dictionary <string, object>(), false); var avroDeserializer = new AvroDeserializer <double>(schemaRegistryClient); avroDeserializer.Configure(new Dictionary <string, object>(), false); byte[] bytes; bytes = avroSerializer.Serialize(testTopic, 123d); Assert.Equal(123d, avroDeserializer.Deserialize(testTopic, bytes)); }
public void FloatSerDe() { var avroSerializer = new AvroSerializer <float>(schemaRegistryClient); avroSerializer.Configure(new Dictionary <string, string>(), false); var avroDeserializer = new AvroDeserializer <float>(schemaRegistryClient); avroDeserializer.Configure(new Dictionary <string, string>(), false); byte[] bytes; bytes = avroSerializer.Serialize(testTopic, 123f); Assert.Equal(123f, avroDeserializer.Deserialize(testTopic, bytes, false)); }
public void NullSerDe() { var avroSerializer = new AvroSerializer <Null>(schemaRegistryClient); avroSerializer.Configure(new Dictionary <string, string>(), false); var avroDeserializer = new AvroDeserializer <Null>(schemaRegistryClient); avroDeserializer.Configure(new Dictionary <string, string>(), false); byte[] bytes; bytes = avroSerializer.Serialize(testTopic, null); Assert.Null(avroDeserializer.Deserialize(testTopic, bytes, false)); }
public void DeserializerIgnoresUnrelated() { var avroDeserializer = new AvroDeserializer <int>(schemaRegistryClient); var config = new Dictionary <string, object> { { "some.random.config.param", false } }; var modifiedConfig = avroDeserializer.Configure(config, true); Assert.Equal(1, modifiedConfig.Count()); }
/// <summary> /// Initialize method with a current context which contains <see cref="IStreamConfig"/>. /// Can be used to initialize the serdes according to some parameters present in the configuration such as the schema.registry.url /// </summary> /// <param name="context">SerDesContext with stream configuration</param> public override void Initialize(SerDesContext context) { if (!isInitialized) { if (context.Config is ISchemaRegistryConfig schemaConfig) { registryClient = GetSchemaRegistryClient(GetConfig(schemaConfig)); deserializer = new AvroDeserializer <T>(registryClient); serializer = new AvroSerializer <T>(registryClient, GetSerializerConfig(schemaConfig)); isInitialized = true; } else { throw new StreamConfigException($"Configuration must inherited from ISchemaRegistryConfig for SchemaAvroSerDes<{typeof(T).Name}"); } } }
public void ISpecificRecord() { var serializer = new AvroSerializer <User>(schemaRegistryClient); var deserializer = new AvroDeserializer <User>(schemaRegistryClient); var user = new User { favorite_color = "blue", favorite_number = 100, name = "awesome" }; var bytes = serializer.SerializeAsync(user, false, new MessageMetadata(), new TopicPartition("topic", Partition.Any)).Result; var result = deserializer.DeserializeAsync(bytes, false, false, new MessageMetadata(), new TopicPartition("topic", Partition.Any)).Result; Assert.Equal(user.name, result.name); Assert.Equal(user.favorite_color, result.favorite_color); Assert.Equal(user.favorite_number, result.favorite_number); }
private static string DeserializeAvro(byte[] data, string topic, bool isKey) { if (_cachedSchemaRegistryClient == null) { _cachedSchemaRegistryClient = new CachedSchemaRegistryClient(new SchemaRegistryConfig { Url = _schemaRegistryUrl }); } if (_avroDeserializer == null) { _avroDeserializer = new AvroDeserializer <GenericRecord>(_cachedSchemaRegistryClient); } var deserializationTask = _avroDeserializer.DeserializeAsync(data, false, new SerializationContext(isKey ? MessageComponentType.Key : MessageComponentType.Value, topic)); deserializationTask.Wait(); return(deserializationTask.Result.ToOutputString()); }
public void ISpecificRecord() { var serializer = new AvroSerializer <User>(schemaRegistryClient); var deserializer = new AvroDeserializer <User>(schemaRegistryClient); var user = new User { favorite_color = "blue", favorite_number = 100, name = "awesome" }; var bytes = serializer.SerializeAsync(user, new SerializationContext(MessageComponentType.Value, testTopic)).Result; var result = deserializer.DeserializeAsync(bytes, false, new SerializationContext(MessageComponentType.Value, testTopic)).Result; Assert.Equal(user.name, result.name); Assert.Equal(user.favorite_color, result.favorite_color); Assert.Equal(user.favorite_number, result.favorite_number); }
public KafkaConsumer(string bootstrapServers, RecordConfig recordConfig, string topic, string groupId, int partition, int offset, Action <string, dynamic, DateTime> consumeResultHandler, Action <string> errorHandler) { if (consumeResultHandler == null || errorHandler == null) { throw new Exception("Empty handler"); } _consumeResultHandler = consumeResultHandler; _cts = new CancellationTokenSource(); //1 var schemaRegistry = new CachedSchemaRegistryClient(new SchemaRegistryConfig { SchemaRegistryUrl = schemaRegistryUrl }); //var schemaRegistry = new SchemaRegistryClient(new Schema(recordConfig.Subject, recordConfig.Version, recordConfig.Id, recordConfig.SchemaString)); //1 var schemaRegistry = new SchemaRegistryClient(new Schema(recordConfig.Subject, recordConfig.Version, recordConfig.Id, recordConfig.SchemaString)); //1 _avroDeserializer = new AvroDeserializer <GenericRecord>(schemaRegistry); _consumer = new ConsumerBuilder <string, byte[]>( new ConsumerConfig { BootstrapServers = bootstrapServers, GroupId = groupId, AutoOffsetReset = AutoOffsetReset.Earliest }) .SetKeyDeserializer(Deserializers.Utf8) .SetValueDeserializer(Deserializers.ByteArray /*new AvroDeserializer<T>(schemaRegistry).AsSyncOverAsync()*/) .SetErrorHandler((_, e) => errorHandler(e.Reason)) .Build(); _consumer.Assign(new List <TopicPartitionOffset> { new TopicPartitionOffset(topic, partition, offset) }); _topic = topic; }