| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| using System; |
| using System.Collections.Generic; |
| using System.Linq; |
| using System.Text; |
| using NUnit.Framework; |
| using Avro; |
| |
| namespace Avro.Test |
| { |
| [TestFixture] |
| public class AliasTest |
| { |
| [TestCase(@"{""type"":""record"",""name"":""LongList"", ""namespace"":""com"", ""aliases"":[""c"",""foo.y""], |
| ""fields"": |
| [{""name"":""f1"",""type"":""long"", ""extraprop"":""important"", ""id"":""1029"", ""aliases"":[""a"",""b"",""c""] }, |
| {""name"":""f2"",""type"": ""int""}]}", |
| true)] |
| [TestCase(@"{""type"":""record"",""name"":""LongList"", ""aliases"":[""Alias1""], |
| ""fields"":[{""name"":""f1"",""type"":""long"", ""order"":""junk"" }, |
| {""name"":""f2"",""type"": ""int""}]}", |
| false)] |
| [TestCase(@"{""type"":""record"",""name"":""LongList"", ""aliases"":[""Alias1""], ""customprop"":""123456"", |
| ""fields"":[{""name"":""f1"",""type"":""long"", ""order"":""ascending"", ""fprop"":""faaa"" }, |
| {""name"":""f2"",""type"": ""int""}]}", |
| true)] |
| [TestCase(@"{""type"":""record"",""name"":""LongList"", ""aliases"":[""Alias1""], |
| ""fields"":[{""name"":""f1"",""type"":""long""}, |
| {""name"":""f2"",""type"": ""int""}]}", |
| true)] |
| [TestCase(@"{""type"":""record"",""name"":""LongList"", ""aliases"":[""Alias1"",""Alias2""], |
| ""fields"":[{""name"":""f1"",""type"":""long""}, |
| {""name"":""f2"",""type"": ""int""}]}", |
| true)] |
| [TestCase(@"{""type"":""record"",""name"":""LongList"", ""aliases"":[""Alias1"",9], |
| ""fields"":[{""name"":""f1"",""type"":""long""}, |
| {""name"":""f2"",""type"": ""int""}]}", |
| false)] |
| [TestCase(@"{""type"":""record"",""name"":""LongList"", ""aliases"":[1, 2], |
| ""fields"":[{""name"":""f1"",""type"":""long"", ""default"": ""100""}, |
| {""name"":""f2"",""type"": ""int""}]}", |
| false)] |
| [TestCase(@"{""type"":""record"",""name"":""LongList"", ""aliases"": ""wrong alias format"", |
| ""fields"":[{""name"":""value"",""type"":""long"", ""default"": ""100""}, |
| {""name"":""next"",""type"":[""LongList"",""null""]}]}", |
| false)] |
| public void TestAliases(string s, bool valid) // also tests properties, default, order |
| { |
| try |
| { |
| Schema sc = Schema.Parse(s); |
| Assert.IsTrue(valid); |
| |
| string json = sc.ToString(); |
| Schema sc2 = Schema.Parse(json); |
| string json2 = sc2.ToString(); |
| |
| Assert.IsTrue(json == json2); |
| } |
| catch (Exception ex) |
| { |
| Console.WriteLine(ex.Message); |
| Assert.IsFalse(valid); |
| } |
| } |
| |
| // Enum |
| [TestCase(@"{""type"":""enum"",""name"":""Symbols"", ""symbols"" : [ ""A"", ""B"", ""C"" ] }", |
| @"{""type"":""enum"",""name"":""Symbols"", ""symbols"" : [ ""A"", ""B"", ""C"" ] }", |
| true)] |
| [TestCase(@"{""type"":""enum"",""name"":""Symbols"", ""symbols"" : [ ""A"", ""B"", ""C"" ] }", |
| @"{""type"":""enum"",""name"":""NewSymbols"", ""symbols"" : [ ""A"", ""B"", ""C"" ] }", |
| false)] |
| [TestCase(@"{""type"":""enum"",""name"":""Symbols"", ""aliases"" : [""NewSymbols""], ""symbols"" : [ ""A"", ""B"", ""C"" ] }", |
| @"{""type"":""enum"",""name"":""NewSymbols"", ""symbols"" : [ ""A"", ""B"", ""C"" ] }", |
| true)] |
| [TestCase(@"{""type"":""enum"",""name"":""Symbols"", ""aliases"" : [""DiffSymbols"", ""OtherSymbols""], ""symbols"" : [ ""A"", ""B"", ""C"" ] }", |
| @"{""type"":""enum"",""name"":""NewSymbols"", ""symbols"" : [ ""A"", ""B"", ""C"" ] }", |
| false)] |
| public void TestEnumAliasesResolution(string reader, string writer, bool canread) |
| { |
| try |
| { |
| Schema rs = Schema.Parse(reader); |
| Schema ws = Schema.Parse(writer); |
| Assert.IsTrue(rs.CanRead(ws) == canread); |
| } |
| catch (Exception ex) |
| { |
| Console.WriteLine(ex.Message); |
| Assert.IsTrue(false); |
| } |
| } |
| |
| // Fixed |
| [TestCase(@"{""type"": ""fixed"", ""name"": ""Fixed"", ""size"": 1}", |
| @"{""type"": ""fixed"", ""name"": ""Fixed"", ""size"": 1}", |
| true)] |
| [TestCase(@"{""type"": ""fixed"", ""name"": ""Fixed"", ""size"": 1}", |
| @"{""type"": ""fixed"", ""name"": ""NewFixed"", ""size"": 1}", |
| false)] |
| [TestCase(@"{""type"": ""fixed"", ""name"": ""Fixed"", ""aliases"" : [""NewFixed""], ""size"": 1}", |
| @"{""type"": ""fixed"", ""name"": ""NewFixed"", ""size"": 1}", |
| true)] |
| [TestCase(@"{""type"": ""fixed"", ""name"": ""Fixed"", ""aliases"" : [""DiffFixed"", ""OtherFixed""], ""size"": 1}", |
| @"{""type"": ""fixed"", ""name"": ""NewFixed"", ""size"": 1}", |
| false)] |
| public void TestFixedAliasesResolution(string reader, string writer, bool canread) |
| { |
| try |
| { |
| Schema rs = Schema.Parse(reader); |
| Schema ws = Schema.Parse(writer); |
| Assert.IsTrue(rs.CanRead(ws) == canread); |
| } |
| catch (Exception ex) |
| { |
| Console.WriteLine(ex.Message); |
| Assert.IsTrue(false); |
| } |
| } |
| |
| // Records |
| [TestCase(1,@"{""type"":""record"",""name"":""Rec"", |
| ""fields"":[{""name"":""f1"",""type"":""long"" }, |
| {""name"":""f2"",""type"": ""int""}]}", |
| @"{""type"":""record"",""name"":""Rec"", |
| ""fields"":[{""name"":""f1"",""type"":""long"" }, |
| {""name"":""f2"",""type"": ""int""}]}", |
| true)] |
| [TestCase(2,@"{""type"":""record"",""name"":""Rec"", |
| ""fields"":[{""name"":""f1"",""type"":""long"" }, |
| {""name"":""f2"",""type"": ""int""}]}", |
| @"{""type"":""record"",""name"":""NewRec"", |
| ""fields"":[{""name"":""f1"",""type"":""long"" }, |
| {""name"":""f2"",""type"": ""int""}]}", |
| false)] |
| [TestCase(3,@"{""type"":""record"",""name"":""Rec"", ""aliases"":[""NewRec""], |
| ""fields"":[{""name"":""f1"",""type"":""long"" }, |
| {""name"":""f2"",""type"": ""int""}]}", |
| @"{""type"":""record"",""name"":""NewRec"", |
| ""fields"":[{""name"":""f1"",""type"":""long"" }, |
| {""name"":""f2"",""type"": ""int""}]}", |
| true)] |
| [TestCase(4,@"{""type"":""record"",""name"":""Rec"", ""aliases"":[""OtherRec"",""DiffRec""], |
| ""fields"":[{""name"":""f1"",""type"":""long"" }, |
| {""name"":""f2"",""type"": ""int""}]}", |
| @"{""type"":""record"",""name"":""NewRec"", |
| ""fields"":[{""name"":""f1"",""type"":""long"" }, |
| {""name"":""f2"",""type"": ""int""}]}", |
| false)] |
| [TestCase(5,@"{""type"":""record"",""name"":""Rec"", |
| ""fields"":[{""name"":""f1"",""type"":""long"" }, |
| {""name"":""f3"",""type"": ""int""}]}", |
| @"{""type"":""record"",""name"":""Rec"", |
| ""fields"":[{""name"":""f1"",""type"":""long"" }, |
| {""name"":""f2"",""type"": ""int""}]}", |
| false)] |
| [TestCase(6,@"{""type"":""record"",""name"":""Rec"", |
| ""fields"":[{""name"":""f1"",""type"":""long"" }, |
| {""name"":""f3"",""type"": ""int"", ""aliases"":[""f2""]}]}", |
| @"{""type"":""record"",""name"":""Rec"", |
| ""fields"":[{""name"":""f1"",""type"":""long"" }, |
| {""name"":""f2"",""type"": ""int""}]}", |
| true)] |
| [TestCase(7,@"{""type"":""record"",""name"":""Rec"", |
| ""fields"":[{""name"":""f1"",""type"":""long"" }, |
| {""name"":""f3"",""type"": ""int"", ""aliases"":[""f4"",""f5""]}]}", |
| @"{""type"":""record"",""name"":""Rec"", |
| ""fields"":[{""name"":""f1"",""type"":""long"" }, |
| {""name"":""f2"",""type"": ""int""}]}", |
| false)] |
| [TestCase(8,@"{""type"":""record"",""name"":""Rec"", |
| ""fields"":[{""name"":""f1"",""type"": {""type"":""enum"", ""name"":""Symbol"", ""symbols"":[""A""] }}]}", |
| @"{""type"":""record"",""name"":""Rec"", |
| ""fields"":[{""name"":""f1"",""type"": {""type"":""enum"", ""name"":""NewSymbol"", ""symbols"":[""A""] }}]}", |
| false)] |
| [TestCase(9,@"{""type"":""record"",""name"":""Rec"", |
| ""fields"":[{""name"":""f1"",""type"": {""type"":""enum"", ""name"":""Symbol"", ""aliases"":[""NewSymbol""], ""symbols"":[""A""] }}]}", |
| @"{""type"":""record"",""name"":""Rec"", |
| ""fields"":[{""name"":""f1"",""type"": {""type"":""enum"", ""name"":""NewSymbol"", ""symbols"":[""A""] }}]}", |
| true)] |
| [TestCase(10,@"{""type"":""record"",""name"":""Rec"", |
| ""fields"":[{""name"":""f1"",""type"": {""type"":""enum"", ""name"":""Symbol"", ""aliases"":[""DiffSymbol""], ""symbols"":[""A""] }}]}", |
| @"{""type"":""record"",""name"":""Rec"", |
| ""fields"":[{""name"":""f1"",""type"": {""type"":""enum"", ""name"":""NewSymbol"", ""symbols"":[""A""] }}]}", |
| false)] |
| [TestCase(11,@"{""type"":""record"",""name"":""Rec"",""aliases"":[""NewRec""], |
| ""fields"":[{""name"":""f2"",""aliases"":[""f1""],""type"": {""type"":""enum"", ""name"":""Symbol"", ""aliases"":[""NewSymbol""], ""symbols"":[""A""] }}, |
| {""name"":""f3"",""aliases"":[""f4""],""type"": {""type"":""fixed"", ""name"":""Fixed"", ""aliases"":[""NewFixed""], ""size"": 1 }} |
| ]}", |
| @"{""type"":""record"",""name"":""NewRec"", |
| ""fields"":[{""name"":""f1"",""type"": {""type"":""enum"", ""name"":""NewSymbol"", ""symbols"":[""A""] }}, |
| {""name"":""f4"",""type"": {""type"":""fixed"", ""name"":""NewFixed"", ""size"": 1 }} |
| ]}", |
| true)] |
| [TestCase(12,@"{""type"":""record"",""name"":""Rec"",""aliases"":[""NewRec""], |
| ""fields"":[{""name"":""f2"",""aliases"":[""f1""],""type"": {""type"":""enum"", ""name"":""Symbol"", ""aliases"":[""NewSymbol""], ""symbols"":[""A""] }}, |
| {""name"":""f3"",""aliases"":[""f4""],""type"": {""type"":""fixed"", ""name"":""Fixed"", ""aliases"":[""NewFixed""], ""size"":1 }} |
| ]}", |
| @"{""type"":""record"",""name"":""NewRec"", |
| ""fields"":[{""name"":""f1"",""type"": {""type"":""enum"", ""name"":""NewSymbol"", ""symbols"":[""A"",""B""] }}, |
| {""name"":""f4"",""type"": {""type"":""fixed"", ""name"":""NewFixed"", ""size"":1 }} |
| ]}", |
| true)] |
| |
| public void TestRecordAliasesResolution(int testid, string reader, string writer, bool canread) |
| { |
| try |
| { |
| Schema rs = Schema.Parse(reader); |
| Schema ws = Schema.Parse(writer); |
| Assert.IsTrue(rs.CanRead(ws) == canread); |
| } |
| catch (Exception ex) |
| { |
| Console.WriteLine(ex.Message); |
| Assert.IsTrue(false); |
| } |
| } |
| |
| } |
| } |