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); } }
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)); }
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); } }); }
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)); } ); }
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 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); } }