public void GenericSerializer_SerializeUsingDifferentReaderWriterType() { const string StringSchema = @"{ ""type"":""record"", ""name"":""Microsoft.Hadoop.Avro.Tests.SimpleIntClass"", ""fields"": [ { ""name"":""IntField"", ""type"":""int"" } ] }"; var serializer = AvroSerializer.CreateGeneric(StringSchema); var deserializer = AvroSerializer.CreateGenericDeserializerOnly(StringSchema, StringSchema); using (var stream = new MemoryStream()) { dynamic expected = new AvroRecord(serializer.WriterSchema); expected.IntField = 5; serializer.Serialize(stream, expected); stream.Position = 0; var actual = deserializer.Deserialize(stream) as AvroRecord; Assert.IsTrue(expected["IntField"].Equals(actual["IntField"])); } }
public void GenericSerializer_SerializeEvolvedRecordWithPromotedField() { const string WriterSchema = @"{ ""type"":""record"", ""name"":""Microsoft.Hadoop.Avro.Tests.SimpleIntClass"", ""fields"": [ {""name"":""IntField"", ""type"":""int""} ] }"; const string ReaderSchema = @"{ ""type"":""record"", ""name"":""Microsoft.Hadoop.Avro.Tests.SimpleIntClass"", ""fields"": [ {""name"":""IntField"",""type"":""long""} ] }"; var serializer = AvroSerializer.CreateGeneric(WriterSchema); var deserializer = AvroSerializer.CreateGenericDeserializerOnly(WriterSchema, ReaderSchema); using (var stream = new MemoryStream()) { dynamic expected = new AvroRecord(serializer.ReaderSchema); expected.IntField = 1; serializer.Serialize(stream, expected); stream.Seek(0, SeekOrigin.Begin); dynamic actual = deserializer.Deserialize(stream); Assert.AreEqual(expected.IntField, actual.IntField); } }
public void SchemaDefaultValues_RecordWithIntFieldHavingDefaultValue() { const string WriterSchema = @"{ ""type"":""record"", ""name"":""Microsoft.Hadoop.Avro.Tests.SimpleIntClass"", ""fields"": [ { ""name"":""IntField"", ""type"":""int"", ""default"": 0 } ] }"; var serializer = AvroSerializer.CreateGeneric(WriterSchema); var deserializer = AvroSerializer.CreateGenericDeserializerOnly(WriterSchema, WriterSchema); using (var stream = new MemoryStream()) { dynamic expected = new AvroRecord(serializer.ReaderSchema); expected.IntField = 1; serializer.Serialize(stream, expected); stream.Seek(0, SeekOrigin.Begin); dynamic actual = deserializer.Deserialize(stream); Assert.Equal(expected.IntField, actual.IntField); } }
public void GenericSerializer_CreateGenericDeserializerWithNullReaderSchema() { const string WriterSchema = @"{ ""type"":""record"", ""name"":""Microsoft.Hadoop.Avro.Tests.SimpleIntClass"", ""fields"": [ {""name"":""LongMap"", ""type"": [""null"", {""type"":""map"", ""values"":""long""}]}, ] }"; Assert.ThrowsException <ArgumentNullException>(() => AvroSerializer.CreateGenericDeserializerOnly(WriterSchema, null)); }
public void GenericSerializer_CreateGenericDeserializerWithNullWriterSchema() { const string ReaderSchema = @"{ ""type"":""record"", ""name"":""Microsoft.Hadoop.Avro.Tests.SimpleIntClass"", ""fields"": [ {""name"":""LongMap"", ""type"": [""null"", {""type"":""map"", ""values"":""long""}]}, ] }"; AvroSerializer.CreateGenericDeserializerOnly(null, ReaderSchema); }
/// <summary> /// Initializes a new instance of the <see cref="StreamReader{T}"/> class for Avro records. /// </summary> /// <param name="readerSchema">The reader schema.</param> /// <param name="stream">The input stream.</param> /// <param name="leaveOpen">If set to <c>true</c> leaves the input stream open.</param> /// <param name="codecFactory">The codec factory.</param> public StreamReader(string readerSchema, Stream stream, bool leaveOpen, CodecFactory codecFactory) { if (stream == null) { throw new ArgumentNullException("stream"); } if (codecFactory == null) { throw new ArgumentNullException("codecFactory"); } this.stream = stream; this.decoder = new BinaryDecoder(stream, leaveOpen); this.header = ObjectContainerHeader.Read(this.decoder); this.codec = codecFactory.Create(this.header.CodecName); this.serializer = (IAvroSerializer <T>)AvroSerializer.CreateGenericDeserializerOnly(this.header.Schema, readerSchema ?? this.header.Schema); }
public void GenericSerializer_SerializeEnumEvolvedWithExtraSymbols() { const string WriterSchema = "{" + "\"type\":\"enum\"," + "\"name\":\"Microsoft.Hadoop.Avro.Tests.TestEnum\"," + "\"symbols\":" + "[" + "\"EnumValue3\"," + "\"EnumValue2\"," + "\"EnumValue1\"" + "]}"; const string ReaderSchema = "{" + "\"type\":\"enum\"," + "\"name\":\"Microsoft.Hadoop.Avro.Tests.TestEnum\"," + "\"symbols\":" + "[" + "\"EnumValue3\"," + "\"EnumValue2\"," + "\"EnumValue1\"," + "\"ExtraEnumValue0\"" + "]}"; var serializer = AvroSerializer.CreateGeneric(WriterSchema); var deserializer = AvroSerializer.CreateGenericDeserializerOnly(WriterSchema, ReaderSchema); Assert.ThrowsException <Exception>(() => { using (var stream = new MemoryStream()) { dynamic expected = new AvroEnum(serializer.WriterSchema); expected.IntegerValue = 0; serializer.Serialize(stream, expected); stream.Seek(0, SeekOrigin.Begin); dynamic actual = deserializer.Deserialize(stream); Assert.AreEqual(expected.IntegerValue, actual.IntegerValue); Assert.AreEqual(expected.Value, actual.Value); } }); }
public void GenericSerializer_SerializeEvolvedRecordWithExtraFieldHavingDefaultValue() { const string WriterSchema = @"{ ""type"":""record"", ""name"":""Microsoft.Hadoop.Avro.Tests.SimpleIntClass"", ""fields"": [ {""name"":""IntField"", ""type"":""int""} ] }"; const string ReaderSchema = @"{ ""type"":""record"", ""name"":""Microsoft.Hadoop.Avro.Tests.SimpleIntClass"", ""fields"": [ {""name"":""IntField"",""type"":""int""}, {""name"":""ExtraField"",""type"":""string"",""default"":""Default""} ] }"; var serializer = AvroSerializer.CreateGeneric(WriterSchema); var deserializer = AvroSerializer.CreateGenericDeserializerOnly(WriterSchema, ReaderSchema); using (var stream = new MemoryStream()) { dynamic expected = new AvroRecord(serializer.ReaderSchema); expected.IntField = Utilities.GetRandom <int>(false); serializer.Serialize(stream, expected); stream.Seek(0, SeekOrigin.Begin); dynamic actual = deserializer.Deserialize(stream); Assert.AreEqual(expected.IntField, actual.IntField); Assert.AreEqual("Default", actual.ExtraField); } }
private static void RoundTripSerializationWithDefaultsAndCheck <TS>( string extraFieldSchema, TS extraFieldValue, string extraValueAsString, Action <dynamic, dynamic> check) { var readerSchema = @"{ ""type"":""record"", ""name"":""Microsoft.Hadoop.Avro.Tests.SimpleIntClass"", ""fields"": [ { ""name"":""IntField"", ""type"":""int"" }, { ""name"":""ExtraField"", ""type"":" + extraFieldSchema + @", ""default"":" + extraValueAsString + @" } ] }"; var serializer = AvroSerializer.CreateGeneric(SimpleIntClassRecordSchema); var deserializer = AvroSerializer.CreateGenericDeserializerOnly(SimpleIntClassRecordSchema, readerSchema); using (var memoryStream = new MemoryStream()) { dynamic expected = new AvroRecord(serializer.WriterSchema); expected.IntField = Utilities.GetRandom <int>(false); serializer.Serialize(memoryStream, expected); memoryStream.Seek(0, SeekOrigin.Begin); dynamic actual = deserializer.Deserialize(memoryStream); Assert.AreEqual(expected.IntField, actual.IntField); check(extraFieldValue, actual.ExtraField); } }