You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2017/10/25 09:59:23 UTC

[31/50] [abbrv] ignite git commit: IGNITE-6263 .NET: Verify Java config parity with a unit test

IGNITE-6263 .NET: Verify Java config parity with a unit test


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/3be007f3
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/3be007f3
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/3be007f3

Branch: refs/heads/ignite-5937
Commit: 3be007f3091adbf0d230ac999684b1cbb5e8ed1a
Parents: 7810970
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Mon Oct 23 17:43:46 2017 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Mon Oct 23 17:43:46 2017 +0300

----------------------------------------------------------------------
 .../Apache.Ignite.Core.Tests.csproj             |   7 +
 .../ApiParity/CacheConfigurationParityTest.cs   |  88 ++++++++++++
 .../ClientConnectorConfigurationParityTest.cs   |  39 ++++++
 .../DataRegionConfigurationParityTest.cs        |  39 ++++++
 .../DataStorageConfigurationParityTest.cs       |  53 ++++++++
 .../ApiParity/IgniteConfigurationParityTest.cs  |  98 ++++++++++++++
 .../ApiParity/ParityTest.cs                     | 135 +++++++++++++++++++
 .../QueryEntityConfigurationParityTest.cs       |  49 +++++++
 8 files changed, 508 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/3be007f3/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
index 1d17757..7e1753c 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
@@ -69,6 +69,13 @@
     <Reference Include="System.Xml.Linq" />
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="ApiParity\ClientConnectorConfigurationParityTest.cs" />
+    <Compile Include="ApiParity\DataRegionConfigurationParityTest.cs" />
+    <Compile Include="ApiParity\DataStorageConfigurationParityTest.cs" />
+    <Compile Include="ApiParity\IgniteConfigurationParityTest.cs" />
+    <Compile Include="ApiParity\ParityTest.cs" />
+    <Compile Include="ApiParity\CacheConfigurationParityTest.cs" />
+    <Compile Include="ApiParity\QueryEntityConfigurationParityTest.cs" />
     <Compile Include="Binary\BinaryBuilderSelfTestSimpleName.cs" />
     <Compile Include="Binary\BinaryDateTimeTest.cs" />
     <Compile Include="Binary\BinaryEqualityComparerTest.cs" />

http://git-wip-us.apache.org/repos/asf/ignite/blob/3be007f3/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/CacheConfigurationParityTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/CacheConfigurationParityTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/CacheConfigurationParityTest.cs
new file mode 100644
index 0000000..617eb83
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/CacheConfigurationParityTest.cs
@@ -0,0 +1,88 @@
+/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Tests.ApiParity
+{
+    using System.Collections.Generic;
+    using Apache.Ignite.Core.Cache.Configuration;
+    using NUnit.Framework;
+
+    /// <summary>
+    /// Tests that .NET <see cref="CacheConfiguration"/> has all properties from Java configuration APIs.
+    /// </summary>
+    public class CacheConfigurationParityTest
+    {
+        /** Known property name mappings. */
+        private static readonly Dictionary<string, string> KnownMappings = new Dictionary<string, string>
+        {
+            {"isStoreKeepBinary", "KeepBinaryInStore"},
+            {"Affinity", "AffinityFunction"},
+            {"DefaultLockTimeout", "LockTimeout"}
+        };
+
+        /** Properties that are not needed on .NET side. */
+        private static readonly string[] UnneededProperties =
+        {
+            // False matches.
+            "clearQueryEntities",
+
+            // Java-specific.
+            "CacheStoreSessionListenerFactories",
+            "CacheEntryListenerConfigurations",
+            "TopologyValidator",
+            "SqlFunctionClasses",
+            "Interceptor",
+            "EvictionFilter",
+            "IndexedTypes",
+
+            // Deprecated, but not marked so.
+            "AffinityMapper"
+        };
+
+        /** Properties that are missing on .NET side. */
+        private static readonly string[] MissingProperties =
+        {
+            "NodeFilter",  // IGNITE-2890
+
+            "KeyConfiguration",  // IGNITE-6704
+
+            // IGNITE-6705
+            "IsOnheapCacheEnabled",
+            "StoreConcurrentLoadAllThreshold",
+            "RebalanceOrder",
+            "RebalanceBatchesPrefetchCount",
+            "MaxQueryIteratorsCount",
+            "QueryDetailMetricsSize",
+            "SqlSchema",
+            "QueryParallelism"
+        };
+
+        /// <summary>
+        /// Tests the cache configuration parity.
+        /// </summary>
+        [Test]
+        public void TestCacheConfiguration()
+        {
+            ParityTest.CheckConfigurationParity(
+                @"modules\core\src\main\java\org\apache\ignite\configuration\CacheConfiguration.java", 
+                typeof(CacheConfiguration),
+                UnneededProperties,
+                MissingProperties,
+                KnownMappings);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/3be007f3/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/ClientConnectorConfigurationParityTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/ClientConnectorConfigurationParityTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/ClientConnectorConfigurationParityTest.cs
new file mode 100644
index 0000000..f735557
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/ClientConnectorConfigurationParityTest.cs
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Tests.ApiParity
+{
+    using Apache.Ignite.Core.Configuration;
+    using NUnit.Framework;
+
+    /// <summary>
+    /// Tests that .NET <see cref="ClientConnectorConfiguration"/> has all properties from Java configuration APIs.
+    /// </summary>
+    public class ClientConnectorConfigurationParityTest
+    {
+        /// <summary>
+        /// Tests the ignite configuration parity.
+        /// </summary>
+        [Test]
+        public void TestConnectorConfiguration()
+        {
+            ParityTest.CheckConfigurationParity(
+                @"modules\core\src\main\java\org\apache\ignite\configuration\ClientConnectorConfiguration.java", 
+                typeof(ClientConnectorConfiguration));
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/3be007f3/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/DataRegionConfigurationParityTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/DataRegionConfigurationParityTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/DataRegionConfigurationParityTest.cs
new file mode 100644
index 0000000..dbc4686
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/DataRegionConfigurationParityTest.cs
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Tests.ApiParity
+{
+    using Apache.Ignite.Core.Configuration;
+    using NUnit.Framework;
+
+    /// <summary>
+    /// Tests that .NET <see cref="DataRegionConfiguration"/> has all properties from Java configuration APIs.
+    /// </summary>
+    public class DataRegionConfigurationParityTest
+    {
+        /// <summary>
+        /// Tests the ignite configuration parity.
+        /// </summary>
+        [Test]
+        public void TestRegionConfiguration()
+        {
+            ParityTest.CheckConfigurationParity(
+                @"modules\core\src\main\java\org\apache\ignite\configuration\DataRegionConfiguration.java", 
+                typeof(DataRegionConfiguration));
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/3be007f3/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/DataStorageConfigurationParityTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/DataStorageConfigurationParityTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/DataStorageConfigurationParityTest.cs
new file mode 100644
index 0000000..db53e2e
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/DataStorageConfigurationParityTest.cs
@@ -0,0 +1,53 @@
+/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Tests.ApiParity
+{
+    using Apache.Ignite.Core.Configuration;
+    using NUnit.Framework;
+
+    /// <summary>
+    /// Tests that .NET <see cref="DataStorageConfiguration"/> has all properties from Java configuration APIs.
+    /// </summary>
+    public class DataStorageConfigurationParityTest
+    {
+        /** Properties that are not needed on .NET side. */
+        private static readonly string[] UnneededProperties =
+        {
+            "FileIOFactory"
+        };
+
+        /** Properties that are missing on .NET side. */
+        private static readonly string[] MissingProperties =
+        {
+            "WalAutoArchiveAfterInactivity"
+        };
+
+        /// <summary>
+        /// Tests the ignite configuration parity.
+        /// </summary>
+        [Test]
+        public void TestStorageConfiguration()
+        {
+            ParityTest.CheckConfigurationParity(
+                @"modules\core\src\main\java\org\apache\ignite\configuration\DataStorageConfiguration.java", 
+                typeof(DataStorageConfiguration),
+                UnneededProperties,
+                MissingProperties);
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/3be007f3/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/IgniteConfigurationParityTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/IgniteConfigurationParityTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/IgniteConfigurationParityTest.cs
new file mode 100644
index 0000000..235b177
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/IgniteConfigurationParityTest.cs
@@ -0,0 +1,98 @@
+/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Tests.ApiParity
+{
+    using System.Collections.Generic;
+    using NUnit.Framework;
+
+    /// <summary>
+    /// Tests that .NET <see cref="IgniteConfiguration"/> has all properties from Java configuration APIs.
+    /// </summary>
+    public class IgniteConfigurationParityTest
+    {
+        /** Known property name mappings Java -> .NET. */
+        private static readonly Dictionary<string, string> KnownMappings = new Dictionary<string, string>
+        {
+            {"GridLogger", "Logger"},
+            {"IncludeEventTypes", "IncludedEventTypes"},
+        };
+
+        /** Properties that are not needed on .NET side. */
+        private static readonly string[] UnneededProperties =
+        {
+            "PeerClassLoadingThreadPoolSize",
+            "IgfsThreadPoolSize",
+            "UtilityCacheKeepAliveTime",
+            "MBeanServer",
+            "isPeerClassLoadingEnabled",
+            "isMarshalLocalJobs",
+            "PeerClassLoadingLocalClassPathExclude",
+            "LifecycleBeans",
+            "SslContextFactory",
+            "SegmentationResolvers",
+            "CollisionSpi",
+            "DeploymentSpi",
+            "CheckpointSpi",
+            "FailoverSpi",
+            "LoadBalancingSpi",
+            "IndexingSpi",
+            "AddressResolver",
+            "DeploymentMode",
+            "PeerClassLoadingMissedResourcesCacheSize",
+            "CacheKeyConfiguration",
+            "FileSystemConfiguration",
+            "HadoopConfiguration",
+            "ConnectorConfiguration",
+            "ServiceConfiguration",
+            "WarmupClosure",
+            "ClassLoader",
+            "CacheStoreSessionListenerFactories",
+            "PlatformConfiguration",
+            "ExecutorConfiguration"
+        };
+
+        /** Properties that are missing on .NET side. */
+        private static readonly string[] MissingProperties =
+        {
+            "RebalanceThreadPoolSize",
+            "SegmentationPolicy",
+            "isWaitForSegmentOnStart",
+            "isAllSegmentationResolversPassRequired",
+            "SegmentationResolveAttempts",
+            "SegmentCheckFrequency",
+            "isCacheSanityCheckEnabled",
+            "TimeServerPortBase",
+            "TimeServerPortRange",
+            "IncludeProperties"
+        };
+
+        /// <summary>
+        /// Tests the ignite configuration parity.
+        /// </summary>
+        [Test]
+        public void TestIgniteConfiguration()
+        {
+            ParityTest.CheckConfigurationParity(
+                @"modules\core\src\main\java\org\apache\ignite\configuration\IgniteConfiguration.java", 
+                typeof(IgniteConfiguration),
+                UnneededProperties,
+                MissingProperties,
+                KnownMappings);
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/3be007f3/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/ParityTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/ParityTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/ParityTest.cs
new file mode 100644
index 0000000..068d22e
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/ParityTest.cs
@@ -0,0 +1,135 @@
+/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Tests.ApiParity
+{
+    using System;
+    using System.Collections.Generic;
+    using System.IO;
+    using System.Linq;
+    using System.Text;
+    using System.Text.RegularExpressions;
+    using Apache.Ignite.Core.Impl.Common;
+    using NUnit.Framework;
+
+    /// <summary>
+    /// Base class for API parity tests.
+    /// </summary>
+    public static class ParityTest
+    {
+        /** Property regex. */
+        private static readonly Regex JavaPropertyRegex = 
+            new Regex("(@Deprecated)?\\s+public [^=^\r^\n]+ (\\w+)\\(\\) {", RegexOptions.Compiled);
+
+        /** Properties that are not needed on .NET side. */
+        private static readonly string[] UnneededProperties =
+        {
+            "toString",
+            "hashCode",
+            "writeReplace"
+        };
+
+        /// <summary>
+        /// Tests the configuration parity.
+        /// </summary>
+        public static void CheckConfigurationParity(string javaFilePath, 
+            Type type, 
+            IEnumerable<string> excludedProperties = null,
+            IEnumerable<string> knownMissingProperties = null,
+            Dictionary<string, string> knownMappings = null)
+        {
+            var path = Path.Combine(IgniteHome.Resolve(null), javaFilePath);
+
+            Assert.IsTrue(File.Exists(path));
+
+            var dotNetProperties = type.GetProperties()
+                .ToDictionary(x => x.Name, x => x, StringComparer.OrdinalIgnoreCase);
+
+            var javaProperties = GetJavaProperties(path)
+                .Except(excludedProperties ?? Enumerable.Empty<string>());
+
+            var missingProperties = javaProperties
+                .Where(jp => !GetNameVariants(jp, knownMappings).Any(dotNetProperties.ContainsKey))
+                .ToDictionary(x => x, x => x, StringComparer.OrdinalIgnoreCase);
+
+            var knownMissing = (knownMissingProperties ?? Enumerable.Empty<string>())
+                .ToDictionary(x => x, x => x, StringComparer.OrdinalIgnoreCase);
+
+            var sb = new StringBuilder();
+
+            foreach (var javaMissingProp in missingProperties)
+            {
+                if (!knownMissing.ContainsKey(javaMissingProp.Key))
+                {
+                    sb.AppendFormat("{0}.{1} property is missing in .NET.\n", type.Name, javaMissingProp.Key);
+                }
+            }
+
+            foreach (var dotnetMissingProp in knownMissing)
+            {
+                if (!missingProperties.ContainsKey(dotnetMissingProp.Key))
+                {
+                    sb.AppendFormat("{0}.{1} property is missing in Java, but is specified as known in .NET.\n", 
+                        type.Name, dotnetMissingProp.Key);
+                }
+            }
+
+            if (sb.Length > 0)
+            {
+                Assert.Fail(sb.ToString());
+            }
+        }
+
+        /// <summary>
+        /// Gets the java properties from file.
+        /// </summary>
+        private static IEnumerable<string> GetJavaProperties(string path)
+        {
+            var text = File.ReadAllText(path);
+
+            return JavaPropertyRegex.Matches(text)
+                .OfType<Match>()
+                .Where(m => m.Groups[1].Value == string.Empty)
+                .Select(m => m.Groups[2].Value.Replace("get", ""))
+                .Where(x => !x.Contains(" void "))
+                .Except(UnneededProperties);
+        }
+
+        /// <summary>
+        /// Gets the name variants for a property.
+        /// </summary>
+        private static IEnumerable<string> GetNameVariants(string javaPropertyName, 
+            IDictionary<string, string> knownMappings)
+        {
+            yield return javaPropertyName;
+
+            yield return javaPropertyName.Replace("PoolSize", "ThreadPoolSize");
+
+            if (javaPropertyName.StartsWith("is"))
+            {
+                yield return javaPropertyName.Substring(2);
+            }
+
+            string map;
+
+            if (knownMappings != null && knownMappings.TryGetValue(javaPropertyName, out map))
+            {
+                yield return map;
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/3be007f3/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/QueryEntityConfigurationParityTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/QueryEntityConfigurationParityTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/QueryEntityConfigurationParityTest.cs
new file mode 100644
index 0000000..e186612
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/QueryEntityConfigurationParityTest.cs
@@ -0,0 +1,49 @@
+/*
+ * 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.
+ */
+
+namespace Apache.Ignite.Core.Tests.ApiParity
+{
+    using Apache.Ignite.Core.Cache.Configuration;
+    using NUnit.Framework;
+
+    /// <summary>
+    /// Tests that .NET <see cref="QueryEntity"/> has all properties from Java configuration APIs.
+    /// </summary>
+    public class QueryEntityConfigurationParityTest
+    {
+        /** Properties that are not needed on .NET side. */
+        private static readonly string[] UnneededProperties =
+        {
+            "findKeyType",
+            "findValueType",
+            "KeyFields",
+            "NotNullFields"
+        };
+
+        /// <summary>
+        /// Tests the ignite configuration parity.
+        /// </summary>
+        [Test]
+        public void TestQueryEntityConfiguration()
+        {
+            ParityTest.CheckConfigurationParity(
+                @"modules\core\src\main\java\org\apache\ignite\cache\QueryEntity.java", 
+                typeof(QueryEntity),
+                UnneededProperties);
+        }
+    }
+}
\ No newline at end of file