Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 10
0
        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);
        }
Esempio n. 12
0
        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());
        }
Esempio n. 14
0
        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);
        }
Esempio n. 15
0
        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); });
        }
Esempio n. 16
0
        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); });
        }
Esempio n. 17
0
        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));
        }
Esempio n. 18
0
        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));
        }
Esempio n. 23
0
        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));
        }
Esempio n. 24
0
        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));
        }
Esempio n. 25
0
        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());
        }
Esempio n. 29
0
        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;
        }