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);
            }
        }
Beispiel #3
0
        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));
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        /// <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);
            }
        }