This is an automated email from the ASF dual-hosted git repository. nizhikov pushed a commit to branch IGNITE-14320-2 in repository https://gitbox.apache.org/repos/asf/ignite.git
commit f5d5ba03d3053d8c3086871070ef200f4da726f1 Author: Nikolay Izhikov <[email protected]> AuthorDate: Tue Mar 16 09:49:59 2021 +0300 IGNITE-14320 Fix invocation .Net -> .Net services with system types arguments. --- .../Binary/BinaryNameMapperTest.cs | 94 ++++++++++++++++++---- .../Services/ServicesTypeAutoResolveTest.cs | 36 +++++---- .../Binary/BinaryBasicNameMapper.cs | 5 +- .../Impl/Binary/TypeNameParser.cs | 10 ++- 4 files changed, 109 insertions(+), 36 deletions(-) diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryNameMapperTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryNameMapperTest.cs index 1974caf..b3168a6 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryNameMapperTest.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryNameMapperTest.cs @@ -45,22 +45,22 @@ namespace Apache.Ignite.Core.Tests.Binary Assert.AreEqual("System.String[]", mapper.GetTypeName(typeof(string[]).FullName)); // Generics. - Assert.AreEqual("System.Collections.Generic.List`1[[System.String]]", + Assert.AreEqual("System.Collections.Generic.List`1[[System.String]]", mapper.GetTypeName(typeof(List<string>).AssemblyQualifiedName)); - - Assert.AreEqual("System.Collections.Generic.Dictionary`2[[System.Int32],[System.String]]", + + Assert.AreEqual("System.Collections.Generic.Dictionary`2[[System.Int32],[System.String]]", mapper.GetTypeName(typeof(Dictionary<int, string>).AssemblyQualifiedName)); - + Assert.AreEqual("Apache.Ignite.Core.Tests.Binary.BinaryNameMapperTest+Bar`1[[Apache.Ignite.Core." + - "Tests.Binary.BinaryNameMapperTest+Foo]]", + "Tests.Binary.BinaryNameMapperTest+Foo]]", mapper.GetTypeName(typeof(Bar<Foo>).AssemblyQualifiedName)); Assert.AreEqual("Apache.Ignite.Core.Tests.Binary.BinaryNameMapperTest+Bar`1[[Apache.Ignite.Core.Tests" + - ".Binary.BinaryNameMapperTest+Foo]][]", + ".Binary.BinaryNameMapperTest+Foo]][]", mapper.GetTypeName(typeof(Bar<Foo>[]).AssemblyQualifiedName)); - + Assert.AreEqual("Apache.Ignite.Core.Tests.Binary.BinaryNameMapperTest+Bar`1[[Apache.Ignite.Core.Tests." + - "Binary.BinaryNameMapperTest+Foo[]]][]", + "Binary.BinaryNameMapperTest+Foo[]]][]", mapper.GetTypeName(typeof(Bar<Foo[]>[]).AssemblyQualifiedName)); // Open generics. @@ -78,7 +78,7 @@ namespace Apache.Ignite.Core.Tests.Binary public void TestSimpleName() { var mapper = new BinaryBasicNameMapper {IsSimpleName = true}; - + // Simple type. Assert.AreEqual("Int32", mapper.GetTypeName(typeof(int).AssemblyQualifiedName)); Assert.AreEqual("Int32", mapper.GetTypeName(typeof(int).FullName)); @@ -89,7 +89,7 @@ namespace Apache.Ignite.Core.Tests.Binary // Generics. Assert.AreEqual("List`1[[String]]", mapper.GetTypeName(typeof(List<string>).AssemblyQualifiedName)); - Assert.AreEqual("Dictionary`2[[Int32],[String]]", + Assert.AreEqual("Dictionary`2[[Int32],[String]]", mapper.GetTypeName(typeof(Dictionary<int, string>).AssemblyQualifiedName)); Assert.AreEqual("Bar`1[[Foo]]", mapper.GetTypeName(typeof(Bar<Foo>).AssemblyQualifiedName)); Assert.AreEqual("Bar`1[[Foo]][]", mapper.GetTypeName(typeof(Bar<Foo>[]).AssemblyQualifiedName)); @@ -110,11 +110,23 @@ namespace Apache.Ignite.Core.Tests.Binary Assert.AreEqual("org.company.MyClass", mapper.GetTypeName("Org.Company.MyClass")); Assert.AreEqual("org.company.URL", mapper.GetTypeName("Org.Company.URL")); - Assert.AreEqual("apache.ignite.platform.model.Address", + Assert.AreEqual("apache.ignite.platform.model.Address", mapper.GetTypeName(typeof(Address).FullName)); - Assert.AreEqual("apache.ignite.platform.model.Address[]", + Assert.AreEqual("apache.ignite.platform.model.Address[]", mapper.GetTypeName(typeof(Address[]).FullName)); + + Assert.AreEqual("System.Collections.Generic.List`1", + mapper.GetTypeName(typeof(List<>).AssemblyQualifiedName)); + + Assert.AreEqual("System.Collections.Generic.List`1[[apache.ignite.platform.model.Address]]", + mapper.GetTypeName(typeof(List<Address>).AssemblyQualifiedName)); + + Assert.AreEqual("System.Collections.Generic.Dictionary`2", + mapper.GetTypeName(typeof(Dictionary<,>).AssemblyQualifiedName)); + + Assert.AreEqual("System.Collections.Generic.Dictionary`2[[System.Int32],[apache.ignite.platform.model.Address]]", + mapper.GetTypeName(typeof(Dictionary<int,Address>).AssemblyQualifiedName)); } /// <summary> @@ -131,6 +143,18 @@ namespace Apache.Ignite.Core.Tests.Binary Assert.AreEqual("MyClass", mapper.GetTypeName("Org.Company.MyClass")); Assert.AreEqual("URL", mapper.GetTypeName("Org.Company.URL")); + Assert.AreEqual("List`1", + mapper.GetTypeName(typeof(List<>).AssemblyQualifiedName)); + + Assert.AreEqual("List`1[[Address]]", + mapper.GetTypeName(typeof(List<Address>).AssemblyQualifiedName)); + + Assert.AreEqual("Dictionary`2", + mapper.GetTypeName(typeof(Dictionary<,>).AssemblyQualifiedName)); + + Assert.AreEqual("Dictionary`2[[Int32],[Address]]", + mapper.GetTypeName(typeof(Dictionary<int,Address>).AssemblyQualifiedName)); + mapper = new BinaryBasicNameMapper {IsSimpleName = true, NamespacePrefix = "org."}; Assert.IsTrue(mapper.IsSimpleName); @@ -138,6 +162,18 @@ namespace Apache.Ignite.Core.Tests.Binary Assert.AreEqual("Class", mapper.GetTypeName("Org.MyCompany.Class")); Assert.AreEqual("MyClass", mapper.GetTypeName("Org.Company.MyClass")); Assert.AreEqual("URL", mapper.GetTypeName("Org.Company.URL")); + + Assert.AreEqual("List`1", + mapper.GetTypeName(typeof(List<>).AssemblyQualifiedName)); + + Assert.AreEqual("List`1[[Address]]", + mapper.GetTypeName(typeof(List<Address>).AssemblyQualifiedName)); + + Assert.AreEqual("Dictionary`2", + mapper.GetTypeName(typeof(Dictionary<,>).AssemblyQualifiedName)); + + Assert.AreEqual("Dictionary`2[[Int32],[Address]]", + mapper.GetTypeName(typeof(Dictionary<int, Address>).AssemblyQualifiedName)); } /// <summary> @@ -154,12 +190,24 @@ namespace Apache.Ignite.Core.Tests.Binary Assert.AreEqual("org.company.MyClass", mapper.GetTypeName("Company.MyClass")); Assert.AreEqual("org.company.URL", mapper.GetTypeName("Company.URL")); - Assert.AreEqual("org.apache.ignite.platform.model.Address", + Assert.AreEqual("org.apache.ignite.platform.model.Address", mapper.GetTypeName(typeof(Address).FullName)); - Assert.AreEqual("org.apache.ignite.platform.model.Address[]", + Assert.AreEqual("org.apache.ignite.platform.model.Address[]", mapper.GetTypeName(typeof(Address[]).FullName)); - + + Assert.AreEqual("System.Collections.Generic.List`1[[org.apache.ignite.platform.model.Address]]", + mapper.GetTypeName(typeof(List<Address>).AssemblyQualifiedName)); + + Assert.AreEqual("System.Collections.Generic.List`1", + mapper.GetTypeName(typeof(List<>).AssemblyQualifiedName)); + + Assert.AreEqual("System.Collections.Generic.Dictionary`2", + mapper.GetTypeName(typeof(Dictionary<,>).AssemblyQualifiedName)); + + Assert.AreEqual("System.Collections.Generic.Dictionary`2[[System.Int32],[org.apache.ignite.platform.model.Address]]", + mapper.GetTypeName(typeof(Dictionary<int, Address>).AssemblyQualifiedName)); + mapper = new BinaryBasicNameMapper {NamespacePrefix = "Org.", NamespaceToLower = false}; Assert.IsFalse(mapper.IsSimpleName); @@ -168,11 +216,23 @@ namespace Apache.Ignite.Core.Tests.Binary Assert.AreEqual("Org.Company.MyClass", mapper.GetTypeName("Company.MyClass")); Assert.AreEqual("Org.Company.URL", mapper.GetTypeName("Company.URL")); - Assert.AreEqual("Org.Apache.Ignite.Platform.Model.Address", + Assert.AreEqual("Org.Apache.Ignite.Platform.Model.Address", mapper.GetTypeName(typeof(Address).FullName)); - Assert.AreEqual("Org.Apache.Ignite.Platform.Model.Address[]", + Assert.AreEqual("Org.Apache.Ignite.Platform.Model.Address[]", mapper.GetTypeName(typeof(Address[]).FullName)); + + Assert.AreEqual("System.Collections.Generic.List`1[[Org.Apache.Ignite.Platform.Model.Address]]", + mapper.GetTypeName(typeof(List<Address>).AssemblyQualifiedName)); + + Assert.AreEqual("System.Collections.Generic.List`1", + mapper.GetTypeName(typeof(List<>).AssemblyQualifiedName)); + + Assert.AreEqual("System.Collections.Generic.Dictionary`2", + mapper.GetTypeName(typeof(Dictionary<,>).AssemblyQualifiedName)); + + Assert.AreEqual("System.Collections.Generic.Dictionary`2[[System.Int32],[Org.Apache.Ignite.Platform.Model.Address]]", + mapper.GetTypeName(typeof(Dictionary<int, Address>).AssemblyQualifiedName)); } /// <summary> diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Services/ServicesTypeAutoResolveTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Services/ServicesTypeAutoResolveTest.cs index f3a7c7c..3de31ab 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Services/ServicesTypeAutoResolveTest.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Services/ServicesTypeAutoResolveTest.cs @@ -23,6 +23,8 @@ namespace Apache.Ignite.Core.Tests.Services using System.Linq; using System.Reflection; using Apache.Ignite.Core.Binary; + using Apache.Ignite.Core.Impl.Binary; + using Apache.Ignite.Core.Services; using NUnit.Framework; using Apache.Ignite.Platform.Model; @@ -169,14 +171,27 @@ namespace Apache.Ignite.Core.Tests.Services var deps = svc.testDepartments(new[] { - new Department() {Name = "HR"}, - new Department() {Name = "IT"} + new Department {Name = "HR"}, + new Department {Name = "IT"} }.ToList()); Assert.NotNull(deps); Assert.AreEqual(1, deps.Count); Assert.AreEqual("Executive", deps.OfType<Department>().ToArray()[0].Name); + Assert.IsNull(svc.testMap(null)); + + var map = new Dictionary<Key, Value>(); + + map.Add(new Key() {Id = 1}, new Value() {Val = "value1"}); + map.Add(new Key() {Id = 2}, new Value() {Val = "value2"}); + + var res = svc.testMap(map); + + Assert.NotNull(res); + Assert.AreEqual(1, res.Count); + Assert.AreEqual("value3", ((Value)res[new Key() {Id = 3}]).Val); + Assert.IsNull(svc.testAddress(null)); Address addr = svc.testAddress(new Address {Zip = "000", Addr = "Moscow"}); @@ -199,19 +214,6 @@ namespace Apache.Ignite.Core.Tests.Services Assert.AreEqual("Kyle Reese", emps[0].Fio); Assert.AreEqual(3, emps[0].Salary); - Assert.IsNull(svc.testMap(null)); - - var map = new Dictionary<Key, Value>(); - - map.Add(new Key() {Id = 1}, new Value() {Val = "value1"}); - map.Add(new Key() {Id = 2}, new Value() {Val = "value2"}); - - var res = svc.testMap(map); - - Assert.NotNull(res); - Assert.AreEqual(1, res.Count); - Assert.AreEqual("value3", ((Value)res[new Key() {Id = 3}]).Val); - var accs = svc.testAccounts(); Assert.NotNull(accs); @@ -226,10 +228,10 @@ namespace Apache.Ignite.Core.Tests.Services Assert.NotNull(users); Assert.AreEqual(2, users.Length); Assert.AreEqual(1, users[0].Id); - Assert.AreEqual(ACL.Allow, users[0].Acl); + Assert.AreEqual(ACL.ALLOW, users[0].Acl); Assert.AreEqual("admin", users[0].Role.Name); Assert.AreEqual(2, users[1].Id); - Assert.AreEqual(ACL.Deny, users[1].Acl); + Assert.AreEqual(ACL.DENY, users[1].Acl); Assert.AreEqual("user", users[1].Role.Name); } diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Binary/BinaryBasicNameMapper.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/BinaryBasicNameMapper.cs index 4385f2c..47c7bd8 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Binary/BinaryBasicNameMapper.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Binary/BinaryBasicNameMapper.cs @@ -140,10 +140,13 @@ namespace Apache.Ignite.Core.Binary if (IsSimpleName) return name.GetName(); - var fullName = NamespaceToLower && name.HasNamespace() + var fullName = NamespaceToLower && name.HasNamespace() && !name.IsSystem() ? name.GetNamespace().ToLower(CultureInfo.InvariantCulture) + name.GetName() : name.GetNameWithNamespace(); + if (name.IsSystem()) + return fullName; + return NamespacePrefix + fullName; } } diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/TypeNameParser.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/TypeNameParser.cs index f3ea08f..5ac7b63 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/TypeNameParser.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/TypeNameParser.cs @@ -168,11 +168,19 @@ namespace Apache.Ignite.Core.Impl.Binary } /// <summary> + /// Get a value indicating that type is a System type. E.g List, Dictionary. + /// </summary> + public bool IsSystem() + { + return GetFullName().StartsWith("System"); + } + + /// <summary> /// Gets namespace name part. /// </summary> public string GetNamespace() { - return NameStart == 0 ? null : _typeName.Substring(_start, NameStart); + return NameStart == 0 ? null : _typeName.Substring(_start, NameStart - _start); } /// <summary>
