You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by av...@apache.org on 2019/05/06 13:28:18 UTC
[ignite] branch master updated: IGNITE-11744 Adds configuration for
explicit plugins providing. (#6517)
This is an automated email from the ASF dual-hosted git repository.
av pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push:
new 7a42592 IGNITE-11744 Adds configuration for explicit plugins providing. (#6517)
7a42592 is described below
commit 7a4259284369332c3076fff9137114fb02560a2a
Author: Petrov Mikhail <32...@users.noreply.github.com>
AuthorDate: Mon May 6 16:28:06 2019 +0300
IGNITE-11744 Adds configuration for explicit plugins providing. (#6517)
---
.../ignite/configuration/IgniteConfiguration.java | 30 ++++++++++++
.../org/apache/ignite/internal/IgniteKernal.java | 3 +-
.../org.apache.ignite.plugin.PluginProvider | 3 +-
.../GridDiscoveryManagerAttributesSelfTest.java | 10 ++--
.../processors/security/AbstractSecurityTest.java | 27 +++--------
...ava => AbstractTestSecurityPluginProvider.java} | 33 ++++---------
.../client/ThinClientPermissionCheckTest.java | 3 +-
.../security/impl/TestSecurityPluginProvider.java | 55 ++++++++++++++++++++++
.../spi/discovery/AuthenticationRestartTest.java | 6 +--
.../TestReconnectSecurityPluginProvider.java} | 21 ++++-----
...scoveryNodeAttributesUpdateOnReconnectTest.java | 6 +--
.../junits/GridTestKernalContext.java | 4 +-
.../ApiParity/IgniteConfigurationParityTest.cs | 3 +-
13 files changed, 124 insertions(+), 80 deletions(-)
diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
index 1ded486..cddb2ee 100644
--- a/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
@@ -397,6 +397,7 @@ public class IgniteConfiguration {
private TransactionConfiguration txCfg = new TransactionConfiguration();
/** */
+ @Deprecated
private PluginConfiguration[] pluginCfgs;
/** Flag indicating whether cache sanity check is enabled. */
@@ -530,6 +531,9 @@ public class IgniteConfiguration {
/** SQL schemas to be created on node start. */
private String[] sqlSchemas;
+ /** Plugin providers. */
+ private PluginProvider[] pluginProvs;
+
/**
* Creates valid grid configuration with all default values.
*/
@@ -622,6 +626,7 @@ public class IgniteConfiguration {
p2pPoolSize = cfg.getPeerClassLoadingThreadPoolSize();
platformCfg = cfg.getPlatformConfiguration();
pluginCfgs = cfg.getPluginConfigurations();
+ pluginProvs = cfg.getPluginProviders();
pubPoolSize = cfg.getPublicThreadPoolSize();
qryPoolSize = cfg.getQueryThreadPoolSize();
rebalanceThreadPoolSize = cfg.getRebalanceThreadPoolSize();
@@ -2846,6 +2851,7 @@ public class IgniteConfiguration {
* @return Plugin configurations.
* @see PluginProvider
*/
+ @Deprecated
public PluginConfiguration[] getPluginConfigurations() {
return pluginCfgs;
}
@@ -2856,7 +2862,10 @@ public class IgniteConfiguration {
* @param pluginCfgs Plugin configurations.
* @return {@code this} for chaining.
* @see PluginProvider
+ * @deprecated Since {@link PluginProvider}s can be set explicitly via {@link #setPluginProviders(PluginProvider[])}
+ * it's preferable to store {@link PluginConfiguration} as a part of {@link PluginProvider}.
*/
+ @Deprecated
public IgniteConfiguration setPluginConfigurations(PluginConfiguration... pluginCfgs) {
this.pluginCfgs = pluginCfgs;
@@ -3198,6 +3207,27 @@ public class IgniteConfiguration {
return this;
}
+ /**
+ * Gets plugin providers.
+ *
+ * @return Plugin providers.
+ */
+ public PluginProvider[] getPluginProviders() {
+ return pluginProvs;
+ }
+
+ /**
+ * Sets plugin providers.
+ *
+ * @param pluginProvs Plugin providers.
+ * @return {@code this} for chaining.
+ */
+ public IgniteConfiguration setPluginProviders(PluginProvider... pluginProvs) {
+ this.pluginProvs = pluginProvs;
+
+ return this;
+ }
+
/** {@inheritDoc} */
@Override public String toString() {
return S.toString(IgniteConfiguration.class, this);
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
index 241b16e..51dde45 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
@@ -887,7 +887,8 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
// Ack configuration.
ackSpis();
- List<PluginProvider> plugins = U.allPluginProviders();
+ List<PluginProvider> plugins = cfg.getPluginProviders() != null && cfg.getPluginProviders().length > 0 ?
+ Arrays.asList(cfg.getPluginProviders()) : U.allPluginProviders();
// Spin out SPIs & managers.
try {
diff --git a/modules/core/src/test/java/META-INF/services/org.apache.ignite.plugin.PluginProvider b/modules/core/src/test/java/META-INF/services/org.apache.ignite.plugin.PluginProvider
index 5e51c7a..6bca88f 100644
--- a/modules/core/src/test/java/META-INF/services/org.apache.ignite.plugin.PluginProvider
+++ b/modules/core/src/test/java/META-INF/services/org.apache.ignite.plugin.PluginProvider
@@ -1,5 +1,4 @@
-org.apache.ignite.internal.processors.security.impl.TestSecurityProcessorProvider
org.apache.ignite.internal.processors.cache.persistence.standbycluster.IgniteStandByClusterTest$StanByClusterTestProvider
org.apache.ignite.internal.processors.cache.persistence.wal.memtracker.PageMemoryTrackerPluginProvider
org.apache.ignite.internal.processors.configuration.distributed.TestDistibutedConfigurationPlugin
-org.apache.ignite.plugin.NodeValidationPluginProvider
\ No newline at end of file
+org.apache.ignite.plugin.NodeValidationPluginProvider
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManagerAttributesSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManagerAttributesSelfTest.java
index ce384de..7ab79bf 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManagerAttributesSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManagerAttributesSelfTest.java
@@ -24,9 +24,8 @@ import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.internal.IgniteEx;
import org.apache.ignite.internal.binary.BinaryMarshaller;
import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
-import org.apache.ignite.internal.processors.security.impl.TestSecurityPluginConfiguration;
+import org.apache.ignite.spi.discovery.TestReconnectSecurityPluginProvider;
import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
-import org.apache.ignite.spi.discovery.tcp.TestReconnectProcessor;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.junit.Test;
@@ -70,11 +69,8 @@ public abstract class GridDiscoveryManagerAttributesSelfTest extends GridCommonA
cfg.setDeploymentMode(mode);
cfg.setPeerClassLoadingEnabled(p2pEnabled);
- if(secEnabled){
- cfg.setPluginConfigurations(
- (TestSecurityPluginConfiguration)TestReconnectProcessor::new
- );
- }
+ if(secEnabled)
+ cfg.setPluginProviders(new TestReconnectSecurityPluginProvider());
return cfg;
}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/security/AbstractSecurityTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/security/AbstractSecurityTest.java
index 165c46a..cc02d67 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/security/AbstractSecurityTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/security/AbstractSecurityTest.java
@@ -17,14 +17,11 @@
package org.apache.ignite.internal.processors.security;
-import java.util.Arrays;
import org.apache.ignite.configuration.DataRegionConfiguration;
import org.apache.ignite.configuration.DataStorageConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.internal.IgniteEx;
-import org.apache.ignite.internal.processors.security.impl.TestSecurityData;
-import org.apache.ignite.internal.processors.security.impl.TestSecurityPluginConfiguration;
-import org.apache.ignite.internal.processors.security.impl.TestSecurityProcessor;
+import org.apache.ignite.internal.processors.security.impl.TestSecurityPluginProvider;
import org.apache.ignite.plugin.security.SecurityPermission;
import org.apache.ignite.plugin.security.SecurityPermissionSet;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
@@ -47,10 +44,10 @@ public class AbstractSecurityTest extends GridCommonAbstractTest {
/**
* @param instanceName Instance name.
- * @param secCfg Security plugin configuration.
+ * @param pluginProv Security plugin provider.
*/
protected IgniteConfiguration getConfiguration(String instanceName,
- TestSecurityPluginConfiguration secCfg) throws Exception {
+ AbstractTestSecurityPluginProvider pluginProv) throws Exception {
return getConfiguration(instanceName)
.setDataStorageConfiguration(
@@ -60,20 +57,7 @@ public class AbstractSecurityTest extends GridCommonAbstractTest {
)
)
.setAuthenticationEnabled(true)
- .setPluginConfigurations(secCfg);
- }
-
- /**
- * @param login Login.
- * @param pwd Password.
- * @param prmSet Security permission set.
- * @return Security plaugin configuration.
- */
- protected TestSecurityPluginConfiguration secPluginCfg(String login, String pwd, SecurityPermissionSet prmSet,
- TestSecurityData... clientData) {
- return ctx -> new TestSecurityProcessor(ctx,
- new TestSecurityData(login, pwd, prmSet),
- Arrays.asList(clientData));
+ .setPluginProviders(pluginProv);
}
/** */
@@ -92,6 +76,7 @@ public class AbstractSecurityTest extends GridCommonAbstractTest {
* @param isClient Is client.
*/
protected IgniteEx startGrid(String login, SecurityPermissionSet prmSet, boolean isClient) throws Exception {
- return startGrid(getConfiguration(login, secPluginCfg(login, "", prmSet)).setClientMode(isClient));
+ return startGrid(getConfiguration(login, new TestSecurityPluginProvider(login, "", prmSet))
+ .setClientMode(isClient));
}
}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/security/impl/TestSecurityProcessorProvider.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/security/AbstractTestSecurityPluginProvider.java
similarity index 73%
rename from modules/core/src/test/java/org/apache/ignite/internal/processors/security/impl/TestSecurityProcessorProvider.java
rename to modules/core/src/test/java/org/apache/ignite/internal/processors/security/AbstractTestSecurityPluginProvider.java
index 1ff5a20..f23c6c1 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/security/impl/TestSecurityProcessorProvider.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/security/AbstractTestSecurityPluginProvider.java
@@ -15,19 +15,17 @@
* limitations under the License.
*/
-package org.apache.ignite.internal.processors.security.impl;
+package org.apache.ignite.internal.processors.security;
import java.io.Serializable;
import java.util.UUID;
import org.apache.ignite.cluster.ClusterNode;
-import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.GridKernalContext;
import org.apache.ignite.internal.IgniteEx;
-import org.apache.ignite.internal.processors.security.GridSecurityProcessor;
import org.apache.ignite.plugin.CachePluginContext;
import org.apache.ignite.plugin.CachePluginProvider;
import org.apache.ignite.plugin.ExtensionRegistry;
import org.apache.ignite.plugin.IgnitePlugin;
-import org.apache.ignite.plugin.PluginConfiguration;
import org.apache.ignite.plugin.PluginContext;
import org.apache.ignite.plugin.PluginProvider;
import org.apache.ignite.plugin.PluginValidationException;
@@ -36,7 +34,7 @@ import org.jetbrains.annotations.Nullable;
/**
* Security processor provider for tests.
*/
-public class TestSecurityProcessorProvider implements PluginProvider {
+public abstract class AbstractTestSecurityPluginProvider implements PluginProvider {
/** {@inheritDoc} */
@Override public String name() {
return "TestSecurityProcessorProvider";
@@ -66,32 +64,17 @@ public class TestSecurityProcessorProvider implements PluginProvider {
/** {@inheritDoc} */
@SuppressWarnings("unchecked")
@Override public @Nullable Object createComponent(PluginContext ctx, Class cls) {
- if (cls.isAssignableFrom(GridSecurityProcessor.class)) {
- TestSecurityPluginConfiguration cfg = secProcBuilder(ctx);
-
- return cfg != null ? cfg.build(((IgniteEx)ctx.grid()).context()) : null;
- }
+ if (cls.isAssignableFrom(GridSecurityProcessor.class))
+ return securityProcessor(((IgniteEx)ctx.grid()).context());
return null;
}
/**
- * Gets security processor builder.
- *
- * @param ctx Context.
+ * @param ctx Grid kernal context.
+ * @return {@link GridSecurityProcessor} istance.
*/
- private TestSecurityPluginConfiguration secProcBuilder(PluginContext ctx){
- IgniteConfiguration igniteCfg = ctx.igniteConfiguration();
-
- if (igniteCfg.getPluginConfigurations() != null) {
- for (PluginConfiguration pluginCfg : igniteCfg.getPluginConfigurations()) {
- if (pluginCfg instanceof TestSecurityPluginConfiguration)
- return (TestSecurityPluginConfiguration)pluginCfg;
- }
- }
-
- return null;
- }
+ protected abstract GridSecurityProcessor securityProcessor(GridKernalContext ctx);
/** {@inheritDoc} */
@Override public CachePluginProvider createCacheProvider(CachePluginContext ctx) {
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/security/client/ThinClientPermissionCheckTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/security/client/ThinClientPermissionCheckTest.java
index b41d9b4..3259a94 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/security/client/ThinClientPermissionCheckTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/security/client/ThinClientPermissionCheckTest.java
@@ -33,6 +33,7 @@ import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.internal.IgniteEx;
import org.apache.ignite.internal.processors.security.AbstractSecurityTest;
import org.apache.ignite.internal.processors.security.impl.TestSecurityData;
+import org.apache.ignite.internal.processors.security.impl.TestSecurityPluginProvider;
import org.apache.ignite.internal.util.typedef.G;
import org.apache.ignite.lang.IgniteBiTuple;
import org.apache.ignite.plugin.security.SecurityPermissionSetBuilder;
@@ -98,7 +99,7 @@ public class ThinClientPermissionCheckTest extends AbstractSecurityTest {
return getConfiguration(
instanceName,
- secPluginCfg("srv_" + instanceName, null, ALLOW_ALL, clientData)
+ new TestSecurityPluginProvider("srv_" + instanceName, null, ALLOW_ALL, clientData)
).setCacheConfiguration(
new CacheConfiguration().setName(CACHE),
new CacheConfiguration().setName(FORBIDDEN_CACHE)
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/security/impl/TestSecurityPluginProvider.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/security/impl/TestSecurityPluginProvider.java
new file mode 100644
index 0000000..9c3e871
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/security/impl/TestSecurityPluginProvider.java
@@ -0,0 +1,55 @@
+/*
+ * 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.
+ */
+
+package org.apache.ignite.internal.processors.security.impl;
+
+import java.util.Arrays;
+import org.apache.ignite.internal.GridKernalContext;
+import org.apache.ignite.internal.processors.security.AbstractTestSecurityPluginProvider;
+import org.apache.ignite.internal.processors.security.GridSecurityProcessor;
+import org.apache.ignite.plugin.security.SecurityPermissionSet;
+
+/** */
+public class TestSecurityPluginProvider extends AbstractTestSecurityPluginProvider {
+ /** Login. */
+ private final String login;
+
+ /** Password. */
+ private final String pwd;
+
+ /** Permissions. */
+ private final SecurityPermissionSet perms;
+
+ /** Users security data. */
+ private final TestSecurityData[] clientData;
+
+ /** */
+ public TestSecurityPluginProvider(String login, String pwd, SecurityPermissionSet perms,
+ TestSecurityData... clientData) {
+ this.login = login;
+ this.pwd = pwd;
+ this.perms = perms;
+ this.clientData = clientData.clone();
+ }
+
+ /** {@inheritDoc} */
+ @Override protected GridSecurityProcessor securityProcessor(GridKernalContext ctx) {
+ return new TestSecurityProcessor(ctx,
+ new TestSecurityData(login, pwd, perms),
+ Arrays.asList(clientData));
+ }
+}
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/AuthenticationRestartTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/AuthenticationRestartTest.java
index 8d61851..f1c3684 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/AuthenticationRestartTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/AuthenticationRestartTest.java
@@ -19,11 +19,9 @@ package org.apache.ignite.spi.discovery;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.internal.IgniteEx;
-import org.apache.ignite.internal.processors.security.impl.TestSecurityPluginConfiguration;
import org.apache.ignite.internal.util.lang.GridAbsPredicate;
import org.apache.ignite.lang.IgniteFuture;
import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
-import org.apache.ignite.spi.discovery.tcp.TestReconnectProcessor;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.junit.Test;
@@ -42,9 +40,7 @@ public class AuthenticationRestartTest extends GridCommonAbstractTest {
((TcpDiscoverySpi)cfg.getDiscoverySpi()).setJoinTimeout(1120_000);
- cfg.setPluginConfigurations(
- (TestSecurityPluginConfiguration)TestReconnectProcessor::new
- );
+ cfg.setPluginProviders(new TestReconnectSecurityPluginProvider());
return cfg;
}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/security/impl/TestSecurityPluginConfiguration.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/TestReconnectSecurityPluginProvider.java
similarity index 66%
rename from modules/core/src/test/java/org/apache/ignite/internal/processors/security/impl/TestSecurityPluginConfiguration.java
rename to modules/core/src/test/java/org/apache/ignite/spi/discovery/TestReconnectSecurityPluginProvider.java
index 97c1e45..8103884 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/security/impl/TestSecurityPluginConfiguration.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/TestReconnectSecurityPluginProvider.java
@@ -15,20 +15,17 @@
* limitations under the License.
*/
-package org.apache.ignite.internal.processors.security.impl;
+package org.apache.ignite.spi.discovery;
import org.apache.ignite.internal.GridKernalContext;
import org.apache.ignite.internal.processors.security.GridSecurityProcessor;
-import org.apache.ignite.plugin.PluginConfiguration;
+import org.apache.ignite.internal.processors.security.AbstractTestSecurityPluginProvider;
+import org.apache.ignite.spi.discovery.tcp.TestReconnectProcessor;
-/**
- * Grid security configuration for tests.
- */
-@FunctionalInterface
-public interface TestSecurityPluginConfiguration extends PluginConfiguration {
- /**
- * @param ctx GridKernalContext.
- * @return GridSecurityProcessor.
- */
- public GridSecurityProcessor build(GridKernalContext ctx);
+/** */
+public class TestReconnectSecurityPluginProvider extends AbstractTestSecurityPluginProvider {
+ /** {@inheritDoc} */
+ @Override protected GridSecurityProcessor securityProcessor(GridKernalContext ctx) {
+ return new TestReconnectProcessor(ctx);
+ }
}
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryNodeAttributesUpdateOnReconnectTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryNodeAttributesUpdateOnReconnectTest.java
index f20bf55..6db7ff7 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryNodeAttributesUpdateOnReconnectTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryNodeAttributesUpdateOnReconnectTest.java
@@ -28,9 +28,9 @@ import org.apache.ignite.events.DiscoveryEvent;
import org.apache.ignite.events.Event;
import org.apache.ignite.events.EventType;
import org.apache.ignite.internal.IgniteClientReconnectAbstractTest;
-import org.apache.ignite.internal.processors.security.impl.TestSecurityPluginConfiguration;
import org.apache.ignite.lang.IgnitePredicate;
import org.apache.ignite.resources.LoggerResource;
+import org.apache.ignite.spi.discovery.TestReconnectSecurityPluginProvider;
import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.junit.Test;
@@ -69,9 +69,7 @@ public class TcpDiscoveryNodeAttributesUpdateOnReconnectTest extends GridCommonA
cfg.setDiscoverySpi(spi);
- cfg.setPluginConfigurations(
- (TestSecurityPluginConfiguration)TestReconnectProcessor::new
- );
+ cfg.setPluginProviders(new TestReconnectSecurityPluginProvider());
return cfg;
}
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridTestKernalContext.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridTestKernalContext.java
index 3594b79..17e1fed 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridTestKernalContext.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridTestKernalContext.java
@@ -17,6 +17,7 @@
package org.apache.ignite.testframework.junits;
+import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.ListIterator;
@@ -79,7 +80,8 @@ public class GridTestKernalContext extends GridKernalContextImpl {
null,
null,
null,
- U.allPluginProviders(),
+ cfg.getPluginProviders() != null && cfg.getPluginProviders().length > 0 ?
+ Arrays.asList(cfg.getPluginProviders()) : U.allPluginProviders(),
null,
null,
null,
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/IgniteConfigurationParityTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/IgniteConfigurationParityTest.cs
index a50d48a..af8f76e 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/IgniteConfigurationParityTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/IgniteConfigurationParityTest.cs
@@ -82,7 +82,8 @@ namespace Apache.Ignite.Core.Tests.ApiParity
"TimeServerPortRange",
"IncludeProperties",
"isAutoActivationEnabled", // IGNITE-7301
- "NetworkCompressionLevel"
+ "NetworkCompressionLevel",
+ "PluginProviders"
};
/// <summary>