You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ni...@apache.org on 2021/03/16 07:29:56 UTC

[ignite] 02/02: IGNITE-14320 Fix invocation .Net -> .Net services with system types arguments.

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 <ni...@apache.org>
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>