Пример #1
0
        public AvroRecord ToAvroRecord(Schema schema)
        {
            var rs       = schema as RecordSchema;
            var avroEnum = new AvroEnum(rs.GetField("EnumMember").TypeSchema)
            {
                Value = this.EnumMember.ToString()
            };

            var result = new AvroRecord(schema);

            result["EnumMember"]       = avroEnum;
            result["StringMember"]     = this.StringMember;
            result["FloatMember"]      = this.FloatMember;
            result["IntMember"]        = this.IntMember;
            result["LongMember"]       = this.LongMember;
            result["DoubleMember"]     = this.DoubleMember;
            result["BoolMember"]       = this.BoolMember;
            result["DecimalMember"]    = this.DecimalMember.ToString();
            result["GuidMember"]       = this.GuidMember.ToByteArray();
            result["DateTimeMember"]   = DateTimeSerializer.ConvertDateTimeToPosixTime(this.DateTimeMember);
            result["IntArrayMember"]   = this.IntArrayMember;
            result["SByteArrayMember"] = this.SByteArrayMember;
            result["IntListMember"]    = this.IntListMember.ToArray();
            result["IntMapMember"]     = this.IntMapMember;

            return(result);
        }
        public void GenericSerializer_SerializeEnum()
        {
            const string Schema = "{" +
                                  "\"type\":\"enum\"," +
                                  "\"name\":\"Microsoft.Hadoop.Avro.Tests.TestEnum\"," +
                                  "\"symbols\":" +
                                  "[" +
                                  "\"EnumValue3\"," +
                                  "\"EnumValue2\"," +
                                  "\"EnumValue1\"" +
                                  "]}";
            var serializer = AvroSerializer.CreateGeneric(Schema);

            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 = serializer.Deserialize(stream);
                Assert.AreEqual(expected.IntegerValue, actual.IntegerValue);
                Assert.AreEqual(expected.Value, actual.Value);
            }
        }
Пример #3
0
        private void EncodeAvroEnum(IEncoder encoder, AvroEnum enumeration)
        {
            for (int i = 0; i < this.itemSchemas.Count; ++i)
            {
                if (this.itemSchemas[i] == enumeration.Schema)
                {
                    encoder.Encode(i);
                    this.itemSchemas[i].Serializer.Serialize(encoder, enumeration);
                    return;
                }
            }

            throw new SerializationException(
                      string.Format(CultureInfo.InvariantCulture, "The corresponding enumeration schema is not found for type '{0}'.", enumeration.GetType()));
        }
        public void SchemaDefaultValues_Enum()
        {
            const string DefaultSchema  = @"{ ""type"": ""enum"",""name"": ""Suit"",""symbols"" : [""SPADES"", ""HEARTS"", ""DIAMONDS"", ""CLUBS""]}";
            var          tempSerializer = AvroSerializer.CreateGeneric(DefaultSchema);
            var          defaultValue   = new AvroEnum(tempSerializer.WriterSchema);

            defaultValue.Value = "DIAMONDS";
            const string DefaultValueJson = @"""DIAMONDS""";

            RoundTripSerializationWithDefaultsAndCheck(
                DefaultSchema,
                defaultValue,
                DefaultValueJson,
                (expected, actual) => Assert.AreEqual(expected.Value, actual.Value));
        }
Пример #5
0
        public void GenericSerializer_UnionOfNullAndEnumWithInvalidEnum()
        {
            Assert.Throws <SerializationException>(() =>
            {
                const string Schema = @"
                        [
                            ""null"",
                            {
                                ""type"":""enum"",
                                ""name"":""Microsoft.Hadoop.Avro.Tests.TestEnum"",
                                ""symbols"":
                                [
                                    ""EnumValue3"",
                                    ""EnumValue2"",
                                    ""EnumValue1""
                                ]
                            }
                        ]";

                const string InvalidEnumSchema = @"{
                        ""type"":""enum"",
                        ""name"":""Microsoft.Hadoop.Avro.Tests.InvalidEnum"",
                        ""symbols"":
                        [
                            ""InvalidValue3"",
                            ""InvalidValue2"",
                            ""InvalidValue1""
                        ]
                    }";

                var invalidSchemaSerializer = AvroSerializer.CreateGeneric(InvalidEnumSchema);
                var invalidEnum             = new AvroEnum(invalidSchemaSerializer.WriterSchema)
                {
                    Value = "InvalidValue3"
                };
                var serializer = AvroSerializer.CreateGeneric(Schema);

                using (var memoryStream = new MemoryStream())
                {
                    serializer.Serialize(memoryStream, invalidEnum);
                }
            }
                                                   );
        }
        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);
                }
            });
        }
Пример #7
0
 public void SchemaDefaultValues_EnumWithInvalidSymbol()
 {
     Assert.Throws <SerializationException>(() =>
     {
         const string DefaultSchema =
             @"{ ""type"": ""enum"",""name"": ""Suit"",""symbols"" : [""SPADES"", ""HEARTS"", ""DIAMONDS"", ""CLUBS""]}";
         var tempSerializer = AvroSerializer.CreateGeneric(DefaultSchema);
         var defaultValue   = new AvroEnum(tempSerializer.WriterSchema)
         {
             Value = "DIAMONDS"
         };
         const string DefaultValueJson = @"""SOMESYMBOL""";
         RoundTripSerializationWithDefaultsAndCheck(
             DefaultSchema,
             defaultValue,
             DefaultValueJson,
             (expected, actual) => Assert.Equal(expected.Value, actual.Value));
     }
                                            );
 }
Пример #8
0
        public void AvroEnum_SerializeInvalidObject()
        {
            const string Schema = @"{
                        ""type"":""enum"",
                        ""name"":""Microsoft.Hadoop.Avro.Tests.TestEnum"",
                        ""symbols"":
                        [
                            ""EnumValue3"",
                            ""EnumValue2"",
                            ""EnumValue1""
                        ]
                    }";

            const string InvalidEnumSchema = @"{
                ""type"":""enum"",
                ""name"":""Microsoft.Hadoop.Avro.Tests.InvalidEnum"",
                ""symbols"":
                [
                    ""InvalidValue3"",
                    ""InvalidValue2"",
                    ""InvalidValue1""
                ]
            }";

            var invalidSchemaSerializer = AvroSerializer.CreateGeneric(InvalidEnumSchema);
            var invalidEnum             = new AvroEnum(invalidSchemaSerializer.WriterSchema)
            {
                Value = "InvalidValue3"
            };
            var serializer = AvroSerializer.CreateGeneric(Schema);

            using (var memoryStream = new MemoryStream())
            {
                Utilities.ShouldThrow <ArgumentNullException>(() => serializer.Serialize(memoryStream, null));
                Utilities.ShouldThrow <SerializationException>(() => serializer.Serialize(memoryStream, ClassOfInt.Create(false)));
                Utilities.ShouldThrow <SerializationException>(() => serializer.Serialize(memoryStream, invalidEnum));
            }
        }
Пример #9
0
        public void AvroEnum_CreateUnionOfAvroEnumAndNull()
        {
            const string Schema      = @"
                        [
                            ""null"",
                            {
                                ""type"":""enum"",
                                ""name"":""Microsoft.Hadoop.Avro.Tests.TestEnum"",
                                ""symbols"":
                                [
                                    ""EnumValue3"",
                                    ""EnumValue2"",
                                    ""EnumValue1""
                                ]
                            }
                        ]";
            var          serializer  = AvroSerializer.CreateGeneric(Schema);
            var          unionSchema = (UnionSchema)serializer.WriterSchema;

            var expected = new AvroEnum(unionSchema.Schemas[1])
            {
                IntegerValue = 0
            };

            serializer.Serialize(this.stream, null);
            serializer.Serialize(this.stream, expected);

            this.stream.Seek(0, SeekOrigin.Begin);

            var actual1 = serializer.Deserialize(this.stream);

            Assert.Null(actual1);
            var actual2 = (AvroEnum)serializer.Deserialize(this.stream);

            Assert.Equal(expected.Value, actual2.Value);
        }
        public void SchemaEvolution_EnumWithExtraReaderSymbols()
        {
            const string WriterSchema = @"{
                ""type"": ""enum"",
                ""name"": ""Suit"",
                ""namespace"":""Microsoft.Hadoop.Avro.Tests"",
                ""symbols"" : [""Spades"", ""Hearts"", ""Diamonds"", ""Clubs""]}";

            var serializer = AvroSerializer.CreateGeneric(WriterSchema);
            var deserializer = AvroSerializer.CreateDeserializerOnly<SuitWithExtraFields>(WriterSchema, this.dataContractSettings);

            using (var stream = new MemoryStream())
            {
                dynamic expected = new AvroEnum(serializer.WriterSchema);
                expected.Value = "Spades";

                serializer.Serialize(stream, expected);
                stream.Seek(0, SeekOrigin.Begin);

                var actual = deserializer.Deserialize(stream);
                Assert.AreEqual(expected.Value, actual.ToString());
            }
        }
        public void AvroEnum_CreateUnionOfAvroEnumAndNull()
        {
            const string Schema = @"
                        [
                            ""null"",
                            {
                                ""type"":""enum"",
                                ""name"":""Microsoft.Hadoop.Avro.Tests.TestEnum"",
                                ""symbols"":
                                [
                                    ""EnumValue3"",
                                    ""EnumValue2"",
                                    ""EnumValue1""
                                ]
                            }
                        ]";
            var serializer = AvroSerializer.CreateGeneric(Schema);
            var unionSchema = (UnionSchema)serializer.WriterSchema;

            var expected = new AvroEnum(unionSchema.Schemas[1]) { IntegerValue = 0 };
            serializer.Serialize(this.stream, null);
            serializer.Serialize(this.stream, expected);

            this.stream.Seek(0, SeekOrigin.Begin);

            var actual1 = serializer.Deserialize(this.stream);
            Assert.IsNull(actual1);
            var actual2 = (AvroEnum)serializer.Deserialize(this.stream);
            Assert.AreEqual(expected.Value, actual2.Value);
        }
        public void AvroEnum_SerializeInvalidObject()
        {
            const string Schema = @"{
                        ""type"":""enum"",
                        ""name"":""Microsoft.Hadoop.Avro.Tests.TestEnum"",
                        ""symbols"":
                        [
                            ""EnumValue3"",
                            ""EnumValue2"",
                            ""EnumValue1""
                        ]
                    }";

            const string InvalidEnumSchema = @"{
                ""type"":""enum"",
                ""name"":""Microsoft.Hadoop.Avro.Tests.InvalidEnum"",
                ""symbols"":
                [
                    ""InvalidValue3"",
                    ""InvalidValue2"",
                    ""InvalidValue1""
                ]
            }";

            var invalidSchemaSerializer = AvroSerializer.CreateGeneric(InvalidEnumSchema);
            var invalidEnum = new AvroEnum(invalidSchemaSerializer.WriterSchema) { Value = "InvalidValue3" };
            var serializer = AvroSerializer.CreateGeneric(Schema);

            using (var memoryStream = new MemoryStream())
            {
                Utilities.ShouldThrow<ArgumentNullException>(() => serializer.Serialize(memoryStream, null));
                Utilities.ShouldThrow<SerializationException>(() => serializer.Serialize(memoryStream, ClassOfInt.Create(false)));
                Utilities.ShouldThrow<SerializationException>(() => serializer.Serialize(memoryStream, invalidEnum));
            }
        }
        public void GenericSerializer_UnionOfNullAndEnumWithInvalidEnum()
        {
            const string Schema = @"
                [
                    ""null"",
                    {
                        ""type"":""enum"",
                        ""name"":""Microsoft.Hadoop.Avro.Tests.TestEnum"",
                        ""symbols"":
                        [
                            ""EnumValue3"",
                            ""EnumValue2"",
                            ""EnumValue1""
                        ]
                    }
                ]";

            const string InvalidEnumSchema = @"{
                ""type"":""enum"",
                ""name"":""Microsoft.Hadoop.Avro.Tests.InvalidEnum"",
                ""symbols"":
                [
                    ""InvalidValue3"",
                    ""InvalidValue2"",
                    ""InvalidValue1""
                ]
            }";

            var invalidSchemaSerializer = AvroSerializer.CreateGeneric(InvalidEnumSchema);
            var invalidEnum = new AvroEnum(invalidSchemaSerializer.WriterSchema) { Value = "InvalidValue3" };
            var serializer = AvroSerializer.CreateGeneric(Schema);

            using (var memoryStream = new MemoryStream())
            {
                serializer.Serialize(memoryStream, invalidEnum);
            }
        }