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>