This is an automated email from the ASF dual-hosted git repository.
mpetrov 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 ffc049c1df7 IGNITE-27754 Replace ad-hoc withSecurityContextOnAllNodes
method with explicit Security Context switch in tests. (#12704)
ffc049c1df7 is described below
commit ffc049c1df7e1ba26d56fbe5f6863fe21bd0e9b2
Author: Mikhail Petrov <[email protected]>
AuthorDate: Sat Feb 7 18:33:02 2026 +0300
IGNITE-27754 Replace ad-hoc withSecurityContextOnAllNodes method with
explicit Security Context switch in tests. (#12704)
---
.../integration/AbstractBasicIntegrationTest.java | 13 +
.../integration/SqlDiagnosticIntegrationTest.java | 16 +-
.../integration/UserDdlIntegrationTest.java | 22 +-
.../JdbcThinAuthenticateConnectionSelfTest.java | 8 +-
.../Authentication1kUsersNodeRestartTest.java | 37 +-
.../AuthenticationOnNotActiveClusterTest.java | 11 +-
.../AuthenticationProcessorNodeRestartTest.java | 190 +++-----
.../AuthenticationProcessorSelfTest.java | 481 +++++++++------------
.../authentication/SqlUserCommandSelfTest.java | 87 ++--
9 files changed, 332 insertions(+), 533 deletions(-)
diff --git
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/AbstractBasicIntegrationTest.java
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/AbstractBasicIntegrationTest.java
index 0cac27a032b..51ec53c59a0 100644
---
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/AbstractBasicIntegrationTest.java
+++
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/AbstractBasicIntegrationTest.java
@@ -44,11 +44,15 @@ import
org.apache.ignite.internal.processors.query.calcite.prepare.bounds.Search
import org.apache.ignite.internal.processors.query.calcite.schema.IgniteIndex;
import org.apache.ignite.internal.processors.query.calcite.schema.IgniteTable;
import org.apache.ignite.internal.processors.query.calcite.util.Commons;
+import org.apache.ignite.internal.processors.security.OperationSecurityContext;
+import org.apache.ignite.internal.processors.security.SecurityContext;
import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.internal.util.typedef.G;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.jetbrains.annotations.Nullable;
+import static
org.apache.ignite.internal.processors.authentication.AuthenticationProcessorSelfTest.authenticate;
+import static
org.apache.ignite.internal.processors.authentication.User.DFAULT_USER_NAME;
import static
org.apache.ignite.internal.processors.query.calcite.exec.ExchangeServiceImpl.INBOX_INITIALIZATION_TIMEOUT;
import static
org.apache.ignite.testframework.GridTestUtils.assertThrowsAnyCause;
import static org.apache.ignite.testframework.GridTestUtils.waitForCondition;
@@ -237,6 +241,15 @@ public class AbstractBasicIntegrationTest extends
GridCommonAbstractTest {
return sql(client, sql, params);
}
+ /** */
+ protected List<List<?>> sqlAsRoot(IgniteEx ignite, String sql) throws
Exception {
+ SecurityContext secCtx = authenticate(grid(0), DFAULT_USER_NAME,
"ignite");
+
+ try (OperationSecurityContext ignored =
ignite.context().security().withContext(secCtx)) {
+ return sql(ignite, sql);
+ }
+ }
+
/** */
protected List<List<?>> sql(IgniteEx ignite, String sql, Object... params)
{
// {@code sql} can contain more than one query.
diff --git
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/SqlDiagnosticIntegrationTest.java
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/SqlDiagnosticIntegrationTest.java
index 40af652725f..944c7785839 100644
---
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/SqlDiagnosticIntegrationTest.java
+++
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/SqlDiagnosticIntegrationTest.java
@@ -70,7 +70,6 @@ import
org.apache.ignite.internal.processors.query.calcite.exec.task.QueryBlocki
import
org.apache.ignite.internal.processors.query.calcite.exec.task.StripedQueryTaskExecutor;
import
org.apache.ignite.internal.processors.query.running.GridRunningQueryInfo;
import org.apache.ignite.internal.processors.query.running.HeavyQueriesTracker;
-import org.apache.ignite.internal.processors.security.SecurityContext;
import org.apache.ignite.internal.util.GridTestClockTimer;
import org.apache.ignite.internal.util.future.GridCompoundFuture;
import org.apache.ignite.internal.util.typedef.F;
@@ -89,8 +88,6 @@ import static
org.apache.ignite.IgniteSystemProperties.IGNITE_STARVATION_CHECK_I
import static org.apache.ignite.events.EventType.EVT_CACHE_QUERY_EXECUTED;
import static org.apache.ignite.events.EventType.EVT_CACHE_QUERY_OBJECT_READ;
import static org.apache.ignite.events.EventType.EVT_SQL_QUERY_EXECUTION;
-import static
org.apache.ignite.internal.processors.authentication.AuthenticationProcessorSelfTest.authenticate;
-import static
org.apache.ignite.internal.processors.authentication.AuthenticationProcessorSelfTest.withSecurityContextOnAllNodes;
import static
org.apache.ignite.internal.processors.authentication.User.DFAULT_USER_NAME;
import static
org.apache.ignite.internal.processors.cache.query.GridCacheQueryType.SQL_FIELDS;
import static
org.apache.ignite.internal.processors.metric.impl.MetricUtils.metricName;
@@ -127,9 +124,6 @@ public class SqlDiagnosticIntegrationTest extends
AbstractBasicIntegrationTest {
/** */
private ListeningTestLogger log;
- /** */
- private SecurityContext secCtxDflt;
-
/** {@inheritDoc} */
@Override protected IgniteConfiguration getConfiguration(String
igniteInstanceName) throws Exception {
return super.getConfiguration(igniteInstanceName)
@@ -164,8 +158,6 @@ public class SqlDiagnosticIntegrationTest extends
AbstractBasicIntegrationTest {
client = startClientGrid();
client.cluster().state(ClusterState.ACTIVE);
-
- secCtxDflt = authenticate(grid(0), DFAULT_USER_NAME, "ignite");
}
/** {@inheritDoc} */
@@ -223,8 +215,6 @@ public class SqlDiagnosticIntegrationTest extends
AbstractBasicIntegrationTest {
/** */
@Test
public void testBatchParserMetrics() throws Exception {
- withSecurityContextOnAllNodes(secCtxDflt);
-
MetricRegistryImpl mreg0 =
grid(0).context().metric().registry(QUERY_PARSER_METRIC_GROUP_NAME);
MetricRegistryImpl mreg1 =
grid(1).context().metric().registry(QUERY_PARSER_METRIC_GROUP_NAME);
mreg0.reset();
@@ -644,8 +634,6 @@ public class SqlDiagnosticIntegrationTest extends
AbstractBasicIntegrationTest {
/** */
@Test
public void testSensitiveInformationHiding() throws Exception {
- withSecurityContextOnAllNodes(secCtxDflt);
-
cleanPerformanceStatisticsDir();
startCollectStatistics();
@@ -697,8 +685,8 @@ public class SqlDiagnosticIntegrationTest extends
AbstractBasicIntegrationTest {
sql(grid(0), "CREATE TABLE test_sens1 (val) WITH
CACHE_NAME=\"test_sens1\" AS SELECT 'sensitive' AS val");
// Test CREATE/ALTER USER commands rewrite.
- sql(grid(0), "CREATE USER test WITH PASSWORD 'sensitive'");
- sql(grid(0), "ALTER USER test WITH PASSWORD 'sensitive'");
+ sqlAsRoot(grid(0), "CREATE USER test WITH PASSWORD 'sensitive'");
+ sqlAsRoot(grid(0), "ALTER USER test WITH PASSWORD 'sensitive'");
// Test JOIN.
sql(grid(0),
diff --git
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/UserDdlIntegrationTest.java
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/UserDdlIntegrationTest.java
index e4b55afb155..b12ed29ad42 100644
---
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/UserDdlIntegrationTest.java
+++
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/UserDdlIntegrationTest.java
@@ -28,16 +28,11 @@ import org.apache.ignite.testframework.GridTestUtils;
import org.junit.Test;
import static
org.apache.ignite.internal.processors.authentication.AuthenticationProcessorSelfTest.authenticate;
-import static
org.apache.ignite.internal.processors.authentication.AuthenticationProcessorSelfTest.withSecurityContextOnAllNodes;
-import static
org.apache.ignite.internal.processors.authentication.User.DFAULT_USER_NAME;
/**
* Integration test for CREATE/ALTER/DROP USER DDL commands.
*/
public class UserDdlIntegrationTest extends AbstractDdlIntegrationTest {
- /** Security context for default user. */
- private SecurityContext secCtxDflt;
-
/** {@inheritDoc} */
@Override protected IgniteConfiguration getConfiguration(String
igniteInstanceName) throws Exception {
IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
@@ -55,41 +50,30 @@ public class UserDdlIntegrationTest extends
AbstractDdlIntegrationTest {
return cfg;
}
- /** {@inheritDoc} */
- @Override protected void beforeTest() throws Exception {
- super.beforeTest();
-
- secCtxDflt = authenticate(grid(0), DFAULT_USER_NAME, "ignite");
-
- assertNotNull(secCtxDflt);
- }
-
/**
* Creates, alter and drops user.
*/
@SuppressWarnings("ThrowableNotThrown")
@Test
public void testCreateAlterDropUser() throws Exception {
- withSecurityContextOnAllNodes(secCtxDflt);
-
for (Ignite ignite : G.allGrids()) {
IgniteEx igniteEx = (IgniteEx)ignite;
- sql(igniteEx, "CREATE USER test WITH PASSWORD 'test'");
+ sqlAsRoot(igniteEx, "CREATE USER test WITH PASSWORD 'test'");
SecurityContext secCtx = authenticate(igniteEx, "TEST", "test");
assertNotNull(secCtx);
assertEquals("TEST", secCtx.subject().login());
- sql(igniteEx, "ALTER USER test WITH PASSWORD 'newpasswd'");
+ sqlAsRoot(igniteEx, "ALTER USER test WITH PASSWORD 'newpasswd'");
secCtx = authenticate(igniteEx, "TEST", "newpasswd");
assertNotNull(secCtx);
assertEquals("TEST", secCtx.subject().login());
- sql(igniteEx, "DROP USER test");
+ sqlAsRoot(igniteEx, "DROP USER test");
GridTestUtils.assertThrowsWithCause(() -> authenticate(igniteEx,
"TEST", "newpasswd"),
IgniteAccessControlException.class);
diff --git
a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinAuthenticateConnectionSelfTest.java
b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinAuthenticateConnectionSelfTest.java
index d46e1466ad2..d7da1fa4ab2 100644
---
a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinAuthenticateConnectionSelfTest.java
+++
b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinAuthenticateConnectionSelfTest.java
@@ -28,8 +28,7 @@ import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.testframework.GridTestUtils;
import org.junit.Test;
-import static
org.apache.ignite.internal.processors.authentication.AuthenticationProcessorSelfTest.authenticate;
-import static
org.apache.ignite.internal.processors.authentication.AuthenticationProcessorSelfTest.withSecurityContextOnAllNodes;
+import static
org.apache.ignite.internal.processors.authentication.AuthenticationProcessorSelfTest.asRoot;
/**
* Tests for authenticated an non authenticated JDBC thin connection.
@@ -40,7 +39,6 @@ public class JdbcThinAuthenticateConnectionSelfTest extends
JdbcThinAbstractSelf
private static final String URL = "jdbc:ignite:thin://127.0.0.1";
/** {@inheritDoc} */
- @SuppressWarnings("deprecation")
@Override protected IgniteConfiguration getConfiguration(String
igniteInstanceName) throws Exception {
IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
@@ -66,9 +64,7 @@ public class JdbcThinAuthenticateConnectionSelfTest extends
JdbcThinAbstractSelf
grid(0).cluster().state(ClusterState.ACTIVE);
- try (AutoCloseable ignored =
withSecurityContextOnAllNodes(authenticate(grid(0), "ignite", "ignite"))) {
- grid(0).context().security().createUser("another_user",
"passwd".toCharArray());
- }
+ asRoot(grid(0), s -> s.createUser("another_user",
"passwd".toCharArray()));
}
/** {@inheritDoc} */
diff --git
a/modules/core/src/test/java/org/apache/ignite/internal/processors/authentication/Authentication1kUsersNodeRestartTest.java
b/modules/core/src/test/java/org/apache/ignite/internal/processors/authentication/Authentication1kUsersNodeRestartTest.java
index 5bb5a2c909a..5c894ca0740 100644
---
a/modules/core/src/test/java/org/apache/ignite/internal/processors/authentication/Authentication1kUsersNodeRestartTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/internal/processors/authentication/Authentication1kUsersNodeRestartTest.java
@@ -18,19 +18,16 @@
package org.apache.ignite.internal.processors.authentication;
import java.util.stream.IntStream;
-import org.apache.ignite.IgniteException;
import org.apache.ignite.cluster.ClusterState;
import org.apache.ignite.configuration.DataRegionConfiguration;
import org.apache.ignite.configuration.DataStorageConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.processors.security.IgniteSecurity;
-import org.apache.ignite.internal.processors.security.SecurityContext;
import org.apache.ignite.testframework.GridTestUtils;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.junit.Test;
+import static
org.apache.ignite.internal.processors.authentication.AuthenticationProcessorSelfTest.asRoot;
import static
org.apache.ignite.internal.processors.authentication.AuthenticationProcessorSelfTest.authenticate;
-import static
org.apache.ignite.internal.processors.authentication.AuthenticationProcessorSelfTest.withSecurityContextOnAllNodes;
/**
* Test for {@link IgniteAuthenticationProcessor} on unstable topology.
@@ -90,33 +87,11 @@ public class Authentication1kUsersNodeRestartTest extends
GridCommonAbstractTest
grid(0).cluster().state(ClusterState.ACTIVE);
- IgniteSecurity sec = grid(0).context().security();
-
- SecurityContext secCtxDflt = authenticate(grid(0),
User.DFAULT_USER_NAME, "ignite");
-
- withSecurityContextOnAllNodes(secCtxDflt);
-
- IntStream.range(0, USERS_COUNT).parallel().forEach(
- i -> {
- try (AutoCloseable ignored =
withSecurityContextOnAllNodes(secCtxDflt)) {
- sec.createUser("test" + i, "init".toCharArray());
- }
- catch (Exception e) {
- throw new IgniteException(e);
- }
- }
- );
-
- IntStream.range(0, USERS_COUNT).parallel().forEach(
- i -> {
- try (AutoCloseable ignored =
withSecurityContextOnAllNodes(secCtxDflt)) {
- sec.alterUser("test" + i, ("passwd_" + i).toCharArray());
- }
- catch (Exception e) {
- throw new IgniteException(e);
- }
- }
- );
+ IntStream.range(0, USERS_COUNT).parallel().forEach(i ->
+ asRoot(grid(0), s -> s.createUser("test" + i,
"init".toCharArray())));
+
+ IntStream.range(0, USERS_COUNT).parallel().forEach(i ->
+ asRoot(grid(0), s -> s.alterUser("test" + i, ("passwd_" +
i).toCharArray())));
stopGrid(0);
diff --git
a/modules/core/src/test/java/org/apache/ignite/internal/processors/authentication/AuthenticationOnNotActiveClusterTest.java
b/modules/core/src/test/java/org/apache/ignite/internal/processors/authentication/AuthenticationOnNotActiveClusterTest.java
index c6797501c38..2da948b2578 100644
---
a/modules/core/src/test/java/org/apache/ignite/internal/processors/authentication/AuthenticationOnNotActiveClusterTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/internal/processors/authentication/AuthenticationOnNotActiveClusterTest.java
@@ -27,8 +27,8 @@ import org.apache.ignite.testframework.GridTestUtils;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.junit.Test;
+import static
org.apache.ignite.internal.processors.authentication.AuthenticationProcessorSelfTest.asRoot;
import static
org.apache.ignite.internal.processors.authentication.AuthenticationProcessorSelfTest.authenticate;
-import static
org.apache.ignite.internal.processors.authentication.AuthenticationProcessorSelfTest.withSecurityContextOnAllNodes;
/**
* Test for {@link IgniteAuthenticationProcessor}.
@@ -109,12 +109,11 @@ public class AuthenticationOnNotActiveClusterTest extends
GridCommonAbstractTest
grid(0).cluster().state(ClusterState.ACTIVE);
- SecurityContext secCtxDflt = authenticate(grid(0),
User.DFAULT_USER_NAME, "ignite");
+ for (int i = 0; i < 10; ++i) {
+ String userName = "test" + i;
- withSecurityContextOnAllNodes(secCtxDflt);
-
- for (int i = 0; i < 10; ++i)
- grid(0).context().security().createUser("test" + i,
"passwd".toCharArray());
+ asRoot(grid(0), s -> s.createUser(userName,
"passwd".toCharArray()));
+ }
stopAllGrids();
diff --git
a/modules/core/src/test/java/org/apache/ignite/internal/processors/authentication/AuthenticationProcessorNodeRestartTest.java
b/modules/core/src/test/java/org/apache/ignite/internal/processors/authentication/AuthenticationProcessorNodeRestartTest.java
index 73401606f97..e776abe2cc2 100644
---
a/modules/core/src/test/java/org/apache/ignite/internal/processors/authentication/AuthenticationProcessorNodeRestartTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/internal/processors/authentication/AuthenticationProcessorNodeRestartTest.java
@@ -33,9 +33,9 @@ import
org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.junit.Ignore;
import org.junit.Test;
+import static
org.apache.ignite.internal.processors.authentication.AuthenticationProcessorSelfTest.asRoot;
import static
org.apache.ignite.internal.processors.authentication.AuthenticationProcessorSelfTest.authenticate;
-import static
org.apache.ignite.internal.processors.authentication.AuthenticationProcessorSelfTest.withSecurityContextOnAllNodes;
-import static
org.apache.ignite.internal.processors.authentication.User.DFAULT_USER_NAME;
+import static org.apache.ignite.testframework.GridTestUtils.runMultiThreaded;
/**
* Test for {@link IgniteAuthenticationProcessor} on unstable topology.
@@ -50,9 +50,6 @@ public class AuthenticationProcessorNodeRestartTest extends
GridCommonAbstractTe
/** Client node. */
private static final int CLI_NODE = NODES_COUNT - 1;
- /** Authorization context for default user. */
- private SecurityContext secCtxDflt;
-
/** Random. */
private static final Random RND = new Random(System.currentTimeMillis());
@@ -94,10 +91,6 @@ public class AuthenticationProcessorNodeRestartTest extends
GridCommonAbstractTe
startClientGrid(CLI_NODE);
grid(0).cluster().state(ClusterState.ACTIVE);
-
- secCtxDflt = authenticate(grid(0), DFAULT_USER_NAME, "ignite");
-
- assertNotNull(secCtxDflt);
}
/** {@inheritDoc} */
@@ -113,58 +106,48 @@ public class AuthenticationProcessorNodeRestartTest
extends GridCommonAbstractTe
@Ignore("https://issues.apache.org/jira/browse/IGNITE-7472")
@Test
public void testConcurrentAddUpdateRemoveNodeRestartCoordinator() throws
Exception {
- final IgniteInternalFuture restartFut = restartCoordinator();
-
- withSecurityContextOnAllNodes(secCtxDflt);
+ final IgniteInternalFuture<?> restartFut = restartCoordinator();
final AtomicInteger usrCnt = new AtomicInteger();
- GridTestUtils.runMultiThreaded(() -> {
- withSecurityContextOnAllNodes(secCtxDflt);
-
+ runMultiThreaded(() -> asRoot(grid(CLI_NODE), s -> {
String user = "test" + usrCnt.getAndIncrement();
- try {
- int state = 0;
- while (!restartFut.isDone()) {
- try {
- switch (state) {
- case 0:
-
grid(CLI_NODE).context().security().createUser(user, ("passwd_" +
user).toCharArray());
-
- break;
+ int state = 0;
+ while (!restartFut.isDone()) {
+ try {
+ switch (state) {
+ case 0:
+ s.createUser(user, ("passwd_" +
user).toCharArray());
- case 1:
-
grid(CLI_NODE).context().security().alterUser(user, ("new_passwd_" +
user).toCharArray());
+ break;
- break;
+ case 1:
+ s.alterUser(user, ("new_passwd_" +
user).toCharArray());
- case 2:
-
grid(CLI_NODE).context().security().dropUser(user);
+ break;
- break;
+ case 2:
+ s.dropUser(user);
- default:
- fail("Invalid state: " + state);
- }
+ break;
- state = ++state > 2 ? 0 : state;
- }
- catch (UserManagementException e) {
- U.error(log, e);
- fail("Unexpected exception on user operation");
- }
- catch (IgniteCheckedException e) {
- // Reconnect
- U.error(log, e);
+ default:
+ fail("Invalid state: " + state);
}
+
+ state = ++state > 2 ? 0 : state;
+ }
+ catch (UserManagementException e) {
+ U.error(log, e);
+ fail("Unexpected exception on user operation");
+ }
+ catch (IgniteCheckedException e) {
+ // Reconnect
+ U.error(log, e);
}
}
- catch (Exception e) {
- U.error(log, "Unexpected exception on concurrent add/remove: "
+ user, e);
- fail();
- }
- }, 10, "user-op");
+ }), 10, "user-op");
restartFut.get();
}
@@ -176,12 +159,12 @@ public class AuthenticationProcessorNodeRestartTest
extends GridCommonAbstractTe
public void testConcurrentAuthorize() throws Exception {
final int testUsersCnt = 10;
- withSecurityContextOnAllNodes(secCtxDflt);
-
- for (int i = 0; i < testUsersCnt; ++i)
- grid(CLI_NODE).context().security().createUser("test" + i,
("passwd_test" + i).toCharArray());
+ asRoot(grid(CLI_NODE), s -> {
+ for (int i = 0; i < testUsersCnt; ++i)
+ s.createUser("test" + i, ("passwd_test" + i).toCharArray());
+ });
- final IgniteInternalFuture restartFut = GridTestUtils.runAsync(() -> {
+ final IgniteInternalFuture<?> restartFut = GridTestUtils.runAsync(()
-> {
try {
for (int i = 0; i < RESTARTS; ++i) {
int nodeIdx = RND.nextInt(NODES_COUNT - 1);
@@ -230,7 +213,7 @@ public class AuthenticationProcessorNodeRestartTest extends
GridCommonAbstractTe
/**
* @return Future.
*/
- private IgniteInternalFuture restartCoordinator() {
+ private IgniteInternalFuture<?> restartCoordinator() {
return GridTestUtils.runAsync(() -> {
try {
int restarts = 0;
@@ -264,51 +247,28 @@ public class AuthenticationProcessorNodeRestartTest
extends GridCommonAbstractTe
public void test1kUsersNodeRestartServer() throws Exception {
final AtomicInteger usrCnt = new AtomicInteger();
- GridTestUtils.runMultiThreaded(() -> {
- withSecurityContextOnAllNodes(secCtxDflt);
+ runMultiThreaded(() -> asRoot(grid(0), s -> {
+ while (usrCnt.get() < 200) {
+ String user = "test" + usrCnt.getAndIncrement();
- try {
- while (usrCnt.get() < 200) {
- String user = "test" + usrCnt.getAndIncrement();
-
- System.out.println("+++ CREATE " + user);
- grid(0).context().security().createUser(user,
"init".toCharArray());
- }
+ s.createUser(user, "init".toCharArray());
}
- catch (Exception e) {
- log.error("Unexpected exception.", e);
-
- fail("Unexpected exception on add / remove");
- }
- }, 3, "user-op");
+ }), 3, "user-op");
usrCnt.set(0);
- GridTestUtils.runMultiThreaded(() -> {
- withSecurityContextOnAllNodes(secCtxDflt);
+ runMultiThreaded(() -> asRoot(grid(0), s -> {
+ while (usrCnt.get() < 200) {
+ String user = "test" + usrCnt.getAndIncrement();
- try {
- while (usrCnt.get() < 200) {
- String user = "test" + usrCnt.getAndIncrement();
-
- System.out.println("+++ ALTER " + user);
-
- grid(0).context().security().alterUser(user, ("passwd_" +
user).toCharArray());
- }
- }
- catch (Exception e) {
- log.error("Unexpected exception.", e);
-
- fail("Unexpected exception on add / remove");
+ s.alterUser(user, ("passwd_" + user).toCharArray());
}
- }, 3, "user-op");
+ }), 3, "user-op");
- System.out.println("+++ STOP");
stopGrid(0, true);
U.sleep(1000);
- System.out.println("+++ START");
startGrid(0);
authenticate(grid(0), "ignite", "ignite");
@@ -319,32 +279,19 @@ public class AuthenticationProcessorNodeRestartTest
extends GridCommonAbstractTe
*/
@Test
public void testConcurrentAddUpdateRemoveNodeRestartServer() throws
Exception {
- IgniteInternalFuture restartFut = loopServerRestarts();
-
- withSecurityContextOnAllNodes(secCtxDflt);
+ IgniteInternalFuture<?> restartFut = loopServerRestarts();
final AtomicInteger usrCnt = new AtomicInteger();
- GridTestUtils.runMultiThreaded(() -> {
- withSecurityContextOnAllNodes(secCtxDflt);
-
+ runMultiThreaded(() -> asRoot(grid(CLI_NODE), s -> {
String user = "test" + usrCnt.getAndIncrement();
- try {
- while (!restartFut.isDone()) {
- grid(CLI_NODE).context().security().createUser(user,
"init".toCharArray());
-
- grid(CLI_NODE).context().security().alterUser(user,
("passwd_" + user).toCharArray());
-
- grid(CLI_NODE).context().security().dropUser(user);
- }
- }
- catch (Exception e) {
- log.error("Unexpected exception.", e);
-
- fail("Unexpected exception on add / remove");
+ while (!restartFut.isDone()) {
+ s.createUser(user, "init".toCharArray());
+ s.alterUser(user, ("passwd_" + user).toCharArray());
+ s.dropUser(user);
}
- }, 10, "user-op");
+ }), 10, "user-op");
restartFut.get();
}
@@ -354,36 +301,25 @@ public class AuthenticationProcessorNodeRestartTest
extends GridCommonAbstractTe
*/
@Test
public void testConcurrentFailedOperationNodeRestartServer() throws
Exception {
- IgniteInternalFuture restartFut = loopServerRestarts();
-
- withSecurityContextOnAllNodes(secCtxDflt);
+ IgniteInternalFuture<?> restartFut = loopServerRestarts();
- grid(CLI_NODE).context().security().createUser("test",
"test".toCharArray());
-
- GridTestUtils.runMultiThreaded(() -> {
- withSecurityContextOnAllNodes(secCtxDflt);
+ asRoot(grid(CLI_NODE), s -> s.createUser("test",
"test".toCharArray()));
- try {
- while (!restartFut.isDone()) {
- GridTestUtils.assertThrows(log, () -> {
- grid(CLI_NODE).context().security().createUser("test",
"test".toCharArray());
-
- return null;
- }, UserManagementException.class, "User already exists");
- }
- }
- catch (Exception e) {
- log.error("Unexpected exception.", e);
+ runMultiThreaded(() -> asRoot(grid(CLI_NODE), s -> {
+ while (!restartFut.isDone()) {
+ GridTestUtils.assertThrows(log, () -> {
+ s.createUser("test", "test".toCharArray());
- fail("Unexpected error on failed operation");
+ return null;
+ }, UserManagementException.class, "User already exists");
}
- }, 10, "user-op");
+ }), 10, "user-op");
restartFut.get();
}
/** */
- private IgniteInternalFuture loopServerRestarts() {
+ private IgniteInternalFuture<?> loopServerRestarts() {
return GridTestUtils.runAsync(() -> {
try {
for (int i = 0; i < RESTARTS; ++i) {
diff --git
a/modules/core/src/test/java/org/apache/ignite/internal/processors/authentication/AuthenticationProcessorSelfTest.java
b/modules/core/src/test/java/org/apache/ignite/internal/processors/authentication/AuthenticationProcessorSelfTest.java
index 3cc4cbc001e..9976502b213 100644
---
a/modules/core/src/test/java/org/apache/ignite/internal/processors/authentication/AuthenticationProcessorSelfTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/internal/processors/authentication/AuthenticationProcessorSelfTest.java
@@ -17,14 +17,11 @@
package org.apache.ignite.internal.processors.authentication;
-import java.util.ArrayList;
import java.util.Base64;
-import java.util.List;
import java.util.Random;
-import java.util.concurrent.Callable;
import java.util.concurrent.atomic.AtomicInteger;
-import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.Ignition;
import org.apache.ignite.cluster.ClusterState;
import org.apache.ignite.configuration.DataRegionConfiguration;
import org.apache.ignite.configuration.DataStorageConfiguration;
@@ -34,7 +31,8 @@ import org.apache.ignite.internal.IgniteInternalFuture;
import org.apache.ignite.internal.processors.security.IgniteSecurity;
import org.apache.ignite.internal.processors.security.OperationSecurityContext;
import org.apache.ignite.internal.processors.security.SecurityContext;
-import org.apache.ignite.internal.util.typedef.G;
+import org.apache.ignite.internal.util.lang.ConsumerX;
+import org.apache.ignite.internal.util.lang.RunnableX;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.plugin.security.AuthenticationContext;
import org.apache.ignite.plugin.security.SecurityCredentials;
@@ -62,9 +60,6 @@ public class AuthenticationProcessorSelfTest extends
GridCommonAbstractTest {
/** Random. */
private static final Random RND = new Random(System.currentTimeMillis());
- /** Security context for default user. */
- protected SecurityContext secCtxDflt;
-
/**
* @param len String length.
* @return Random string (Base64 on random bytes).
@@ -115,10 +110,6 @@ public class AuthenticationProcessorSelfTest extends
GridCommonAbstractTest {
startClientGrid(CLI_NODE);
grid(0).cluster().state(ClusterState.ACTIVE);
-
- secCtxDflt = authenticate(grid(0), DFAULT_USER_NAME, "ignite");
-
- assertNotNull(secCtxDflt);
}
/** {@inheritDoc} */
@@ -146,19 +137,27 @@ public class AuthenticationProcessorSelfTest extends
GridCommonAbstractTest {
*/
@Test
public void testDefaultUserUpdate() throws Exception {
- try (AutoCloseable ignored =
withSecurityContextOnAllNodes(secCtxDflt)) {
- // Change from all nodes
- for (int nodeIdx = 0; nodeIdx < NODES_COUNT; ++nodeIdx) {
- grid(nodeIdx).context().security().alterUser("ignite",
("ignite" + nodeIdx).toCharArray());
+ String rootPwd = "ignite";
- // Check each change from all nodes
- for (int i = 0; i < NODES_COUNT; ++i) {
- SecurityContext secCtx = authenticate(grid(i), "ignite",
"ignite" + nodeIdx);
+ // Change from all nodes
+ for (int nodeIdx = 0; nodeIdx < NODES_COUNT; ++nodeIdx) {
+ String updRootPwd = "ignite" + nodeIdx;
- assertNotNull(secCtx);
- assertEquals("ignite", secCtx.subject().login());
- }
+ asRoot(
+ grid(nodeIdx),
+ s -> s.alterUser("ignite", updRootPwd.toCharArray()),
+ rootPwd
+ );
+
+ // Check each change from all nodes
+ for (int i = 0; i < NODES_COUNT; ++i) {
+ SecurityContext secCtx = authenticate(grid(i), "ignite",
updRootPwd);
+
+ assertNotNull(secCtx);
+ assertEquals("ignite", secCtx.subject().login());
}
+
+ rootPwd = updRootPwd;
}
}
@@ -167,20 +166,15 @@ public class AuthenticationProcessorSelfTest extends
GridCommonAbstractTest {
*/
@Test
public void testRemoveDefault() throws Exception {
- try (AutoCloseable ignored =
withSecurityContextOnAllNodes(secCtxDflt)) {
- for (int i = 0; i < NODES_COUNT; ++i) {
- final int nodeIdx = i;
-
- GridTestUtils.assertThrows(log, new Callable<Object>() {
- @Override public Object call() throws Exception {
- grid(nodeIdx).context().security().dropUser("ignite");
+ for (int i = 0; i < NODES_COUNT; ++i) {
+ final int nodeIdx = i;
- return null;
- }
- }, IgniteAccessControlException.class, "Default user cannot be
removed");
+ assertThrows(
+ () -> asRoot(grid(nodeIdx), s -> s.dropUser("ignite")),
+ IgniteAccessControlException.class,
+ "Default user cannot be removed");
- assertNotNull(authenticate(grid(0), "ignite", "ignite"));
- }
+ assertNotNull(authenticate(grid(0), "ignite", "ignite"));
}
}
@@ -189,49 +183,38 @@ public class AuthenticationProcessorSelfTest extends
GridCommonAbstractTest {
*/
@Test
public void testUserManagementPermission() throws Exception {
- try (AutoCloseable nodeCtxsHnd =
withSecurityContextOnAllNodes(secCtxDflt)) {
- grid(0).context().security().createUser("test",
"test".toCharArray());
-
- final SecurityContext secCtx = authenticate(grid(0), "test",
"test");
+ asRoot(grid(0), s -> s.createUser("test", "test".toCharArray()));
- for (int i = 0; i < NODES_COUNT; ++i) {
- final int nodeIdx = i;
+ final SecurityContext secCtx = authenticate(grid(0), "test", "test");
- AutoCloseable innerNodeCtxsHnd =
withSecurityContextOnAllNodes(secCtx);
+ for (int i = 0; i < NODES_COUNT; ++i) {
+ final int nodeIdx = i;
- GridTestUtils.assertThrows(log, new Callable<Object>() {
- @Override public Object call() throws Exception {
- grid(nodeIdx).context().security().createUser("test1",
"test1".toCharArray());
+ try (OperationSecurityContext ignored =
grid(nodeIdx).context().security().withContext(secCtx)) {
+ GridTestUtils.assertThrows(log, () -> {
+ grid(nodeIdx).context().security().createUser("test1",
"test1".toCharArray());
- return null;
- }
+ return null;
}, IgniteAccessControlException.class, "User management
operations are not allowed for user");
- GridTestUtils.assertThrows(log, new Callable<Object>() {
- @Override public Object call() throws Exception {
- grid(nodeIdx).context().security().dropUser("test");
+ GridTestUtils.assertThrows(log, () -> {
+ grid(nodeIdx).context().security().dropUser("test");
- return null;
- }
+ return null;
}, IgniteAccessControlException.class, "User management
operations are not allowed for user");
grid(nodeIdx).context().security().alterUser("test",
"new_password".toCharArray());
grid(nodeIdx).context().security().alterUser("test",
"test".toCharArray());
+ }
- // Check error on empty auth context:
- innerNodeCtxsHnd.close();
- nodeCtxsHnd.close();
-
- GridTestUtils.assertThrows(log, new Callable<Object>() {
- @Override public Object call() throws Exception {
- grid(nodeIdx).context().security().dropUser("test");
+ // Check error on empty auth context:
+ GridTestUtils.assertThrows(log, () -> {
+ grid(nodeIdx).context().security().dropUser("test");
- return null;
- }
- }, IgniteAccessControlException.class,
- "User management operations initiated on behalf of the
Ignite node are not expected.");
- }
+ return null;
+ }, IgniteAccessControlException.class,
+ "User management operations initiated on behalf of the Ignite
node are not expected.");
}
}
@@ -240,22 +223,20 @@ public class AuthenticationProcessorSelfTest extends
GridCommonAbstractTest {
*/
@Test
public void testProceedUsersOnJoinNode() throws Exception {
- try (AutoCloseable ignored =
withSecurityContextOnAllNodes(secCtxDflt)) {
- grid(0).context().security().createUser("test0",
"test".toCharArray());
- grid(0).context().security().createUser("test1",
"test".toCharArray());
+ asRoot(grid(0), s -> s.createUser("test0", "test".toCharArray()));
+ asRoot(grid(0), s -> s.createUser("test1", "test".toCharArray()));
- int nodeIdx = NODES_COUNT;
+ int nodeIdx = NODES_COUNT;
- startGrid(nodeIdx);
+ startGrid(nodeIdx);
- SecurityContext secCtx0 = authenticate(grid(nodeIdx), "test0",
"test");
- SecurityContext secCtx1 = authenticate(grid(nodeIdx), "test1",
"test");
+ SecurityContext secCtx0 = authenticate(grid(nodeIdx), "test0", "test");
+ SecurityContext secCtx1 = authenticate(grid(nodeIdx), "test1", "test");
- assertNotNull(secCtx0);
- assertEquals("test0", secCtx0.subject().login());
- assertNotNull(secCtx1);
- assertEquals("test1", secCtx1.subject().login());
- }
+ assertNotNull(secCtx0);
+ assertEquals("test0", secCtx0.subject().login());
+ assertNotNull(secCtx1);
+ assertEquals("test1", secCtx1.subject().login());
}
/**
@@ -263,26 +244,20 @@ public class AuthenticationProcessorSelfTest extends
GridCommonAbstractTest {
*/
@Test
public void testAuthenticationInvalidUser() throws Exception {
- try (AutoCloseable ignored =
withSecurityContextOnAllNodes(secCtxDflt)) {
- for (int i = 0; i < NODES_COUNT; ++i) {
- final int nodeIdx = i;
+ for (int i = 0; i < NODES_COUNT; ++i) {
+ final int nodeIdx = i;
- GridTestUtils.assertThrows(log, new Callable<Object>() {
- @Override public Object call() throws Exception {
- authenticate(grid(nodeIdx), "invalid_name", "test");
+ GridTestUtils.assertThrows(log, () -> {
+ authenticate(grid(nodeIdx), "invalid_name", "test");
- return null;
- }
- }, IgniteAccessControlException.class, "The user name or
password is incorrect");
+ return null;
+ }, IgniteAccessControlException.class, "The user name or password
is incorrect");
- GridTestUtils.assertThrows(log, new Callable<Object>() {
- @Override public Object call() throws Exception {
- authenticate(grid(nodeIdx), "test",
"invalid_password");
+ GridTestUtils.assertThrows(log, () -> {
+ authenticate(grid(nodeIdx), "test", "invalid_password");
- return null;
- }
- }, IgniteAccessControlException.class, "The user name or
password is incorrect");
- }
+ return null;
+ }, IgniteAccessControlException.class, "The user name or password
is incorrect");
}
}
@@ -291,11 +266,9 @@ public class AuthenticationProcessorSelfTest extends
GridCommonAbstractTest {
*/
@Test
public void testAddUpdateRemoveUser() throws Exception {
- try (AutoCloseable ignored =
withSecurityContextOnAllNodes(secCtxDflt)) {
- for (int i = 0; i < NODES_COUNT; ++i) {
- for (int j = 0; j < NODES_COUNT; ++j)
- checkAddUpdateRemoveUser(grid(i), grid(j));
- }
+ for (int i = 0; i < NODES_COUNT; ++i) {
+ for (int j = 0; j < NODES_COUNT; ++j)
+ checkAddUpdateRemoveUser(grid(i), grid(j));
}
}
@@ -304,15 +277,13 @@ public class AuthenticationProcessorSelfTest extends
GridCommonAbstractTest {
*/
@Test
public void testUpdateUser() throws Exception {
- try (AutoCloseable ignored =
withSecurityContextOnAllNodes(secCtxDflt)) {
- grid(0).context().security().createUser("test",
"test".toCharArray());
+ asRoot(grid(0), s -> s.createUser("test", "test".toCharArray()));
- SecurityContext secCtx = authenticate(grid(0), "test", "test");
+ assertNotNull(authenticate(grid(0), "test", "test"));
- for (int i = 0; i < NODES_COUNT; ++i) {
- for (int j = 0; j < NODES_COUNT; ++j)
- checkUpdateUser(secCtx, grid(i), grid(j));
- }
+ for (int i = 0; i < NODES_COUNT; ++i) {
+ for (int j = 0; j < NODES_COUNT; ++j)
+ checkUpdateUser(grid(i), grid(j));
}
}
@@ -321,26 +292,12 @@ public class AuthenticationProcessorSelfTest extends
GridCommonAbstractTest {
*/
@Test
public void testUpdateRemoveDoesNotExistsUser() throws Exception {
- try (AutoCloseable ignored =
withSecurityContextOnAllNodes(secCtxDflt)) {
- for (int i = 0; i < NODES_COUNT; ++i) {
- final int nodeIdx = i;
-
- GridTestUtils.assertThrows(log, new Callable<Object>() {
- @Override public Object call() throws Exception {
-
grid(nodeIdx).context().security().alterUser("invalid_name",
"test".toCharArray());
-
- return null;
- }
- }, UserManagementException.class, "User doesn't exist");
+ for (int i = 0; i < NODES_COUNT; ++i) {
+ final int nodeIdx = i;
- GridTestUtils.assertThrows(log, new Callable<Object>() {
- @Override public Object call() throws Exception {
-
grid(nodeIdx).context().security().dropUser("invalid_name");
+ assertThrows(() -> asRoot(grid(nodeIdx), s ->
s.alterUser("invalid_name", "test".toCharArray())), "User doesn't exist");
- return null;
- }
- }, UserManagementException.class, "User doesn't exist");
- }
+ assertThrows(() -> asRoot(grid(nodeIdx), s ->
s.dropUser("invalid_name")), "User doesn't exist");
}
}
@@ -349,20 +306,12 @@ public class AuthenticationProcessorSelfTest extends
GridCommonAbstractTest {
*/
@Test
public void testAddAlreadyExistsUser() throws Exception {
- try (AutoCloseable ignored =
withSecurityContextOnAllNodes(secCtxDflt)) {
- grid(0).context().security().createUser("test",
"test".toCharArray());
-
- for (int i = 0; i < NODES_COUNT; ++i) {
- final int nodeIdx = i;
+ asRoot(grid(0), s -> s.createUser("test", "test".toCharArray()));
- GridTestUtils.assertThrows(log, new Callable<Object>() {
- @Override public Object call() throws Exception {
- grid(nodeIdx).context().security().createUser("test",
"new_passwd".toCharArray());
+ for (int i = 0; i < NODES_COUNT; ++i) {
+ final int nodeIdx = i;
- return null;
- }
- }, UserManagementException.class, "User already exists");
- }
+ assertThrows(() -> asRoot(grid(nodeIdx), s -> s.createUser("test",
"new_passwd".toCharArray())), "User already exists");
}
}
@@ -371,39 +320,37 @@ public class AuthenticationProcessorSelfTest extends
GridCommonAbstractTest {
*/
@Test
public void testAuthorizeOnClientDisconnect() throws Exception {
- try (AutoCloseable ignored =
withSecurityContextOnAllNodes(secCtxDflt)) {
- grid(CLI_NODE).context().security().createUser("test",
"test".toCharArray());
- }
+ asRoot(grid(CLI_NODE), s -> s.createUser("test",
"test".toCharArray()));
- final IgniteInternalFuture stopServersFut = GridTestUtils.runAsync(new
Runnable() {
- @Override public void run() {
- try {
- for (int i = 0; i < CLI_NODE; ++i) {
- Thread.sleep(500);
+ final IgniteInternalFuture<?> stopServersFut =
GridTestUtils.runAsync(() -> {
+ try {
+ for (int i = 0; i < CLI_NODE; ++i) {
+ Thread.sleep(500);
- stopGrid(i);
- }
- }
- catch (Exception e) {
- e.printStackTrace();
- fail("Unexpected exception");
+ stopGrid(i);
}
}
- });
+ catch (Exception e) {
+ log.error("Unexpected exception", e);
- GridTestUtils.assertThrows(log, new Callable<Object>() {
- @Override public Object call() throws Exception {
- while (!stopServersFut.isDone()) {
- SecurityContext secCtx = authenticate(grid(CLI_NODE),
"test", "test");
+ fail("Unexpected exception");
+ }
+ });
- assertNotNull(secCtx);
- }
+ GridTestUtils.assertThrows(
+ log,
+ () -> {
+ while (!stopServersFut.isDone()) {
+ SecurityContext secCtx = authenticate(grid(CLI_NODE),
"test", "test");
- return null;
+ assertNotNull(secCtx);
}
+
+ return null;
},
IgniteCheckedException.class,
- "Client node was disconnected from topology (operation result is
unknown)");
+ "Client node was disconnected from topology (operation result is
unknown)"
+ );
stopServersFut.get();
}
@@ -415,24 +362,15 @@ public class AuthenticationProcessorSelfTest extends
GridCommonAbstractTest {
public void testConcurrentAddRemove() throws Exception {
final AtomicInteger usrCnt = new AtomicInteger();
- GridTestUtils.runMultiThreaded(new Runnable() {
- @Override public void run() {
- withSecurityContextOnAllNodes(secCtxDflt);
- String user = "test" + usrCnt.getAndIncrement();
+ GridTestUtils.runMultiThreaded(() -> asRoot(grid(CLI_NODE), s -> {
+ String user = "test" + usrCnt.getAndIncrement();
- try {
- for (int i = 0; i < ITERATIONS; ++i) {
- grid(CLI_NODE).context().security().createUser(user,
("passwd_" + user).toCharArray());
+ for (int i = 0; i < ITERATIONS; ++i) {
+ s.createUser(user, ("passwd_" + user).toCharArray());
- grid(CLI_NODE).context().security().dropUser(user);
- }
- }
- catch (Exception e) {
- e.printStackTrace();
- fail("Unexpected exception");
- }
+ s.dropUser(user);
}
- }, 10, "user-op");
+ }), 10, "user-op");
}
/**
@@ -440,30 +378,31 @@ public class AuthenticationProcessorSelfTest extends
GridCommonAbstractTest {
*/
@Test
public void testUserPersistence() throws Exception {
- try (AutoCloseable ignored =
withSecurityContextOnAllNodes(secCtxDflt)) {
- for (int i = 0; i < NODES_COUNT; ++i)
- grid(i).context().security().createUser("test" + i, ("passwd"
+ i).toCharArray());
-
- grid(CLI_NODE).context().security().alterUser("ignite",
"new_passwd".toCharArray());
+ for (int i = 0; i < NODES_COUNT; ++i) {
+ int finalI = i;
- stopAllGrids();
+ asRoot(grid(CLI_NODE), s -> s.createUser("test" + finalI,
("passwd" + finalI).toCharArray()));
+ }
- startGrids(NODES_COUNT - 1);
- startClientGrid(CLI_NODE);
+ asRoot(grid(CLI_NODE), s -> s.alterUser("ignite",
"new_passwd".toCharArray()));
- for (int i = 0; i < NODES_COUNT; ++i) {
- for (int usrIdx = 0; usrIdx < NODES_COUNT; ++usrIdx) {
- SecurityContext secCtx0 = authenticate(grid(i), "test" +
usrIdx, "passwd" + usrIdx);
+ stopAllGrids();
- assertNotNull(secCtx0);
- assertEquals("test" + usrIdx, secCtx0.subject().login());
- }
+ startGrids(NODES_COUNT - 1);
+ startClientGrid(CLI_NODE);
- SecurityContext secCtx = authenticate(grid(i), "ignite",
"new_passwd");
+ for (int i = 0; i < NODES_COUNT; ++i) {
+ for (int usrIdx = 0; usrIdx < NODES_COUNT; ++usrIdx) {
+ SecurityContext secCtx0 = authenticate(grid(i), "test" +
usrIdx, "passwd" + usrIdx);
- assertNotNull(secCtx);
- assertEquals("ignite", secCtx.subject().login());
+ assertNotNull(secCtx0);
+ assertEquals("test" + usrIdx, secCtx0.subject().login());
}
+
+ SecurityContext secCtx = authenticate(grid(i), "ignite",
"new_passwd");
+
+ assertNotNull(secCtx);
+ assertEquals("ignite", secCtx.subject().login());
}
}
@@ -472,27 +411,25 @@ public class AuthenticationProcessorSelfTest extends
GridCommonAbstractTest {
*/
@Test
public void testDefaultUserPersistence() throws Exception {
- try (AutoCloseable ignored =
withSecurityContextOnAllNodes(secCtxDflt)) {
- grid(CLI_NODE).context().security().createUser("test",
"passwd".toCharArray());
+ asRoot(grid(CLI_NODE), s -> s.createUser("test",
"passwd".toCharArray()));
- stopAllGrids();
+ stopAllGrids();
- U.sleep(500);
+ U.sleep(500);
- startGrids(NODES_COUNT - 1);
- startClientGrid(CLI_NODE);
+ startGrids(NODES_COUNT - 1);
+ startClientGrid(CLI_NODE);
- for (int i = 0; i < NODES_COUNT; ++i) {
- SecurityContext secCtx = authenticate(grid(i), "ignite",
"ignite");
+ for (int i = 0; i < NODES_COUNT; ++i) {
+ SecurityContext secCtx = authenticate(grid(i), "ignite", "ignite");
- assertNotNull(secCtx);
- assertEquals("ignite", secCtx.subject().login());
+ assertNotNull(secCtx);
+ assertEquals("ignite", secCtx.subject().login());
- secCtx = authenticate(grid(i), "test", "passwd");
+ secCtx = authenticate(grid(i), "test", "passwd");
- assertNotNull(secCtx);
- assertEquals("test", secCtx.subject().login());
- }
+ assertNotNull(secCtx);
+ assertEquals("test", secCtx.subject().login());
}
}
@@ -501,64 +438,24 @@ public class AuthenticationProcessorSelfTest extends
GridCommonAbstractTest {
*/
@Test
public void testInvalidUserNamePassword() throws Exception {
- withSecurityContextOnAllNodes(secCtxDflt);
-
- GridTestUtils.assertThrows(log, new Callable<Object>() {
- @Override public Object call() throws Exception {
- grid(CLI_NODE).context().security().createUser(null,
"test".toCharArray());
-
- return null;
- }
- }, UserManagementException.class, "User name is empty");
-
- GridTestUtils.assertThrows(log, new Callable<Object>() {
- @Override public Object call() throws Exception {
- grid(CLI_NODE).context().security().createUser("",
"test".toCharArray());
-
- return null;
- }
- }, UserManagementException.class, "User name is empty");
+ assertThrows(() -> asRoot(grid(CLI_NODE), s -> s.createUser(null,
"test".toCharArray())), "User name is empty");
- GridTestUtils.assertThrows(log, new Callable<Object>() {
- @Override public Object call() throws Exception {
- grid(CLI_NODE).context().security().createUser("test", null);
+ assertThrows(() -> asRoot(grid(CLI_NODE), s -> s.createUser("",
"test".toCharArray())), "User name is empty");
- return null;
- }
- }, UserManagementException.class, "Password is empty");
+ assertThrows(() -> asRoot(grid(CLI_NODE), s -> s.createUser("test",
null)), "Password is empty");
- GridTestUtils.assertThrows(log, new Callable<Object>() {
- @Override public Object call() throws Exception {
- grid(CLI_NODE).context().security().createUser("test",
"".toCharArray());
-
- return null;
- }
- }, UserManagementException.class, "Password is empty");
-
- GridTestUtils.assertThrows(log, new Callable<Object>() {
- @Override public Object call() throws Exception {
- grid(CLI_NODE).context().security().createUser(
-
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- "a".toCharArray());
-
- return null;
- }
- }, UserManagementException.class, "User name is too long");
- }
-
- /**
- * @param name User name to check.
- */
- private void checkInvalidUsername(final String name) {
+ assertThrows(() -> asRoot(grid(CLI_NODE), s -> s.createUser("test",
"".toCharArray())), "Password is empty");
+ assertThrows(() -> asRoot(grid(CLI_NODE), s -> s.createUser(
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "a".toCharArray())),
+ "User name is too long");
}
/** Test the ability to obtain the security context ot an authenticated
user on the remote server node. */
@Test
public void testRemoteNodeSecurityContext() throws Exception {
- try (OperationSecurityContext ignored =
grid(CLI_NODE).context().security().withContext(secCtxDflt)) {
- grid(CLI_NODE).context().security().createUser("test",
"pwd".toCharArray());
- }
+ asRoot(grid(CLI_NODE), s -> s.createUser("test", "pwd".toCharArray()));
SecuritySubject subj = authenticate(grid(0), "test", "pwd").subject();
@@ -579,15 +476,7 @@ public class AuthenticationProcessorSelfTest extends
GridCommonAbstractTest {
* @param passwd User's password to check.
*/
private void checkInvalidPassword(final String passwd) {
- withSecurityContextOnAllNodes(secCtxDflt);
-
- GridTestUtils.assertThrows(log, new Callable<Object>() {
- @Override public Object call() throws Exception {
- grid(CLI_NODE).context().security().createUser("test",
passwd.toCharArray());
-
- return null;
- }
- }, UserManagementException.class, "Invalid user name");
+ assertThrows(() -> asRoot(grid(CLI_NODE), s -> s.createUser("test",
passwd.toCharArray())), "Invalid user name");
}
/**
@@ -596,38 +485,37 @@ public class AuthenticationProcessorSelfTest extends
GridCommonAbstractTest {
* @throws Exception On error.
*/
private void checkAddUpdateRemoveUser(IgniteEx createNode, IgniteEx
authNode) throws Exception {
- createNode.context().security().createUser("test",
"test".toCharArray());
+ asRoot(createNode, s -> s.createUser("test", "test".toCharArray()));
SecurityContext newSecCtx = authenticate(authNode, "test", "test");
assertNotNull(newSecCtx);
assertEquals("test", newSecCtx.subject().login());
- createNode.context().security().alterUser("test",
"newpasswd".toCharArray());
+ asRoot(createNode, s -> s.alterUser("test",
"newpasswd".toCharArray()));
newSecCtx = authenticate(authNode, "test", "newpasswd");
assertNotNull(newSecCtx);
assertEquals("test", newSecCtx.subject().login());
- createNode.context().security().dropUser("test");
+ asRoot(createNode, s -> s.dropUser("test"));
}
/**
- * @param secCtx Security context.
* @param updNode Node to execute update operation.
* @param authNode Node to execute authentication.
* @throws Exception On error.
*/
- private void checkUpdateUser(SecurityContext secCtx, IgniteEx updNode,
IgniteEx authNode) throws Exception {
+ private void checkUpdateUser(IgniteEx updNode, IgniteEx authNode) throws
Exception {
String newPasswd = randomString(16);
- updNode.context().security().alterUser("test",
newPasswd.toCharArray());
+ asRoot(updNode, s -> s.alterUser("test", newPasswd.toCharArray()));
- SecurityContext secCtxNew = authenticate(authNode, "test", newPasswd);
+ SecurityContext secCtx = authenticate(authNode, "test", newPasswd);
- assertNotNull(secCtxNew);
- assertEquals("test", secCtxNew.subject().login());
+ assertNotNull(secCtx);
+ assertEquals("test", secCtx.subject().login());
}
/** Authenticates user on the specified node. */
@@ -640,21 +528,50 @@ public class AuthenticationProcessorSelfTest extends
GridCommonAbstractTest {
return ignite.context().security().authenticate(authCtx);
}
- /**
- * Sets specified security context on all nodes.
- *
- * @return Holder of current security contexts. If closed, all security
context will bew restored.
- */
- public static AutoCloseable withSecurityContextOnAllNodes(SecurityContext
ctx) {
- List<OperationSecurityContext> oldSecCtxs = new ArrayList<>();
+ /** */
+ public static void asRoot(IgniteEx ignite, ConsumerX<IgniteSecurity>
action) {
+ asRoot(ignite, action, "ignite");
+ }
+
+ /** */
+ public static void asRoot(IgniteEx ignite, ConsumerX<IgniteSecurity>
action, String rootPwd) {
+ try {
+ IgniteEx srv = (IgniteEx)Ignition.allGrids().stream()
+ .filter(g -> !g.configuration().isClientMode())
+ .findFirst()
+ .orElseThrow();
+
+ SecurityContext secCtx = authenticate(srv, DFAULT_USER_NAME,
rootPwd);
- for (Ignite node : G.allGrids())
-
oldSecCtxs.add(((IgniteEx)node).context().security().withContext(ctx));
+ assertNotNull(secCtx);
- return new AutoCloseable() {
- @Override public void close() throws Exception {
- oldSecCtxs.forEach(OperationSecurityContext::close);
+ try (OperationSecurityContext ignored =
ignite.context().security().withContext(secCtx)) {
+ action.accept(ignite.context().security());
}
- };
+ }
+ catch (Exception e) {
+ log.error("Operation failed", e);
+
+ throw new RuntimeException(e);
+ }
+ }
+
+ /** */
+ private void assertThrows(RunnableX action, String msg) {
+ assertThrows(action, UserManagementException.class, msg);
+ }
+
+ /** */
+ private void assertThrows(RunnableX action, Class<? extends Throwable>
errCls, String msg) {
+ GridTestUtils.assertThrowsAnyCause(
+ log,
+ () -> {
+ action.run();
+
+ return null;
+ },
+ errCls,
+ msg
+ );
}
}
diff --git
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/authentication/SqlUserCommandSelfTest.java
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/authentication/SqlUserCommandSelfTest.java
index 1cf41f20f16..524e9992736 100644
---
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/authentication/SqlUserCommandSelfTest.java
+++
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/authentication/SqlUserCommandSelfTest.java
@@ -26,13 +26,13 @@ import
org.apache.ignite.configuration.DataStorageConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
import
org.apache.ignite.internal.processors.authentication.IgniteAccessControlException;
import
org.apache.ignite.internal.processors.authentication.UserManagementException;
+import org.apache.ignite.internal.processors.security.OperationSecurityContext;
import org.apache.ignite.internal.processors.security.SecurityContext;
import org.apache.ignite.testframework.GridTestUtils;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.junit.Test;
import static
org.apache.ignite.internal.processors.authentication.AuthenticationProcessorSelfTest.authenticate;
-import static
org.apache.ignite.internal.processors.authentication.AuthenticationProcessorSelfTest.withSecurityContextOnAllNodes;
import static
org.apache.ignite.internal.processors.authentication.User.DFAULT_USER_NAME;
/**
@@ -42,9 +42,6 @@ public class SqlUserCommandSelfTest extends
GridCommonAbstractTest {
/** Nodes count. */
private static final int NODES_COUNT = 3;
- /** Security context for default user. */
- private SecurityContext secCtxDflt;
-
/** {@inheritDoc} */
@Override protected IgniteConfiguration getConfiguration(String
igniteInstanceName) throws Exception {
IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
@@ -73,10 +70,6 @@ public class SqlUserCommandSelfTest extends
GridCommonAbstractTest {
startClientGrid(NODES_COUNT - 1);
grid(0).cluster().state(ClusterState.ACTIVE);
-
- secCtxDflt = authenticate(grid(0), DFAULT_USER_NAME, "ignite");
-
- assertNotNull(secCtxDflt);
}
/** {@inheritDoc} */
@@ -91,24 +84,22 @@ public class SqlUserCommandSelfTest extends
GridCommonAbstractTest {
*/
@Test
public void testCreateUpdateDropUser() throws Exception {
- withSecurityContextOnAllNodes(secCtxDflt);
-
for (int i = 0; i < NODES_COUNT; ++i) {
- userSql(i, "CREATE USER test WITH PASSWORD 'test'");
+ doSqlAsRoot(i, "CREATE USER test WITH PASSWORD 'test'");
SecurityContext secCtx = authenticate(grid(i), "TEST", "test");
assertNotNull(secCtx);
assertEquals("TEST", secCtx.subject().login());
- userSql(i, "ALTER USER test WITH PASSWORD 'newpasswd'");
+ doSqlAsRoot(i, "ALTER USER test WITH PASSWORD 'newpasswd'");
secCtx = authenticate(grid(i), "TEST", "newpasswd");
assertNotNull(secCtx);
assertEquals("TEST", secCtx.subject().login());
- userSql(i, "DROP USER test");
+ doSqlAsRoot(i, "DROP USER test");
}
}
@@ -117,15 +108,14 @@ public class SqlUserCommandSelfTest extends
GridCommonAbstractTest {
*/
@Test
public void testCreateWithAlreadyExistUser() throws Exception {
- withSecurityContextOnAllNodes(secCtxDflt);
- userSql(0, "CREATE USER test WITH PASSWORD 'test'");
+ doSqlAsRoot(0, "CREATE USER test WITH PASSWORD 'test'");
for (int i = 0; i < NODES_COUNT; ++i) {
final int idx = i;
GridTestUtils.assertThrowsAnyCause(log, new Callable<Void>() {
@Override public Void call() throws Exception {
- userSql(idx, "CREATE USER test WITH PASSWORD 'test'");
+ doSqlAsRoot(idx, "CREATE USER test WITH PASSWORD 'test'");
return null;
}
@@ -138,14 +128,12 @@ public class SqlUserCommandSelfTest extends
GridCommonAbstractTest {
*/
@Test
public void testAlterDropNotExistUser() throws Exception {
- withSecurityContextOnAllNodes(secCtxDflt);
-
for (int i = 0; i < NODES_COUNT; ++i) {
final int idx = i;
GridTestUtils.assertThrowsAnyCause(log, new Callable<Void>() {
@Override public Void call() throws Exception {
- userSql(idx, "ALTER USER test WITH PASSWORD 'test'");
+ doSqlAsRoot(idx, "ALTER USER test WITH PASSWORD 'test'");
return null;
}
@@ -153,7 +141,7 @@ public class SqlUserCommandSelfTest extends
GridCommonAbstractTest {
GridTestUtils.assertThrowsAnyCause(log, new Callable<Void>() {
@Override public Void call() throws Exception {
- userSql(idx, "DROP USER test");
+ doSqlAsRoot(idx, "DROP USER test");
return null;
}
@@ -171,7 +159,7 @@ public class SqlUserCommandSelfTest extends
GridCommonAbstractTest {
GridTestUtils.assertThrowsAnyCause(log, new Callable<Void>() {
@Override public Void call() throws Exception {
- userSql(idx, "CREATE USER test WITH PASSWORD 'test'");
+ doSql(idx, "CREATE USER test WITH PASSWORD 'test'");
return null;
}
@@ -180,7 +168,7 @@ public class SqlUserCommandSelfTest extends
GridCommonAbstractTest {
GridTestUtils.assertThrowsAnyCause(log, new Callable<Void>() {
@Override public Void call() throws Exception {
- userSql(idx, "ALTER USER test WITH PASSWORD 'test'");
+ doSql(idx, "ALTER USER test WITH PASSWORD 'test'");
return null;
}
@@ -189,7 +177,7 @@ public class SqlUserCommandSelfTest extends
GridCommonAbstractTest {
GridTestUtils.assertThrowsAnyCause(log, new Callable<Void>() {
@Override public Void call() throws Exception {
- userSql(idx, "DROP USER test");
+ doSql(idx, "DROP USER test");
return null;
}
@@ -203,20 +191,17 @@ public class SqlUserCommandSelfTest extends
GridCommonAbstractTest {
*/
@Test
public void testNotAuthorizedOperation() throws Exception {
- withSecurityContextOnAllNodes(secCtxDflt);
-
- userSql(0, "CREATE USER user0 WITH PASSWORD 'user0'");
+ String login = "USER0";
+ String pwd = "user0";
- SecurityContext secCtx = authenticate(grid(0), "USER0", "user0");
-
- withSecurityContextOnAllNodes(secCtx);
+ doSqlAsRoot(0, "CREATE USER " + login + " WITH PASSWORD '" + pwd +
"'");
for (int i = 0; i < NODES_COUNT; ++i) {
final int idx = i;
GridTestUtils.assertThrowsAnyCause(log, new Callable<Void>() {
@Override public Void call() throws Exception {
- userSql(idx, "CREATE USER test WITH PASSWORD 'test'");
+ doSqlAs(idx, "CREATE USER test WITH PASSWORD 'test'",
login, pwd);
return null;
}
@@ -224,7 +209,7 @@ public class SqlUserCommandSelfTest extends
GridCommonAbstractTest {
GridTestUtils.assertThrowsAnyCause(log, new Callable<Void>() {
@Override public Void call() throws Exception {
- userSql(idx, "ALTER USER test WITH PASSWORD 'test'");
+ doSqlAs(idx, "ALTER USER test WITH PASSWORD 'test'",
login, pwd);
return null;
}
@@ -232,7 +217,7 @@ public class SqlUserCommandSelfTest extends
GridCommonAbstractTest {
GridTestUtils.assertThrowsAnyCause(log, new Callable<Void>() {
@Override public Void call() throws Exception {
- userSql(idx, "DROP USER test");
+ doSqlAs(idx, "DROP USER test", login, pwd);
return null;
}
@@ -245,14 +230,12 @@ public class SqlUserCommandSelfTest extends
GridCommonAbstractTest {
*/
@Test
public void testDropDefaultUser() throws Exception {
- withSecurityContextOnAllNodes(secCtxDflt);
-
for (int i = 0; i < NODES_COUNT; ++i) {
final int idx = i;
GridTestUtils.assertThrowsAnyCause(log, new Callable<Void>() {
@Override public Void call() throws Exception {
- userSql(idx, "DROP USER \"ignite\"");
+ doSqlAsRoot(idx, "DROP USER \"ignite\"");
return null;
}
@@ -265,26 +248,34 @@ public class SqlUserCommandSelfTest extends
GridCommonAbstractTest {
*/
@Test
public void testQuotedUsername() throws Exception {
- withSecurityContextOnAllNodes(secCtxDflt);
+ doSqlAsRoot(0, "CREATE USER \"test\" with password 'test'");
- userSql(0, "CREATE USER \"test\" with password 'test'");
+ doSqlAsRoot(0, "CREATE USER \" test\" with password 'test'");
- userSql(0, "CREATE USER \" test\" with password 'test'");
+ doSqlAsRoot(0, "CREATE USER \" test \" with password 'test'");
- userSql(0, "CREATE USER \" test \" with password 'test'");
+ doSqlAsRoot(0, "CREATE USER \"test \" with password 'test'");
- userSql(0, "CREATE USER \"test \" with password 'test'");
+ doSqlAsRoot(0, "CREATE USER \"111\" with password 'test'");
+ }
- userSql(0, "CREATE USER \"111\" with password 'test'");
+ /** */
+ private void doSqlAsRoot(int nodeIdx, String sql) throws Exception {
+ doSqlAs(nodeIdx, sql, DFAULT_USER_NAME, "ignite");
}
- /**
- * @param nodeIdx Node index.
- * @param sql Sql query.
- */
- private void userSql(int nodeIdx, String sql) {
- List<List<?>> res = grid(nodeIdx).context().query().querySqlFields(
- new SqlFieldsQuery(sql), false).getAll();
+ /** */
+ private void doSqlAs(int nodeIdx, String sql, String login, String pwd)
throws Exception {
+ SecurityContext secCtx = authenticate(grid(0), login, pwd);
+
+ try (OperationSecurityContext ignored =
grid(nodeIdx).context().security().withContext(secCtx)) {
+ doSql(nodeIdx, sql);
+ }
+ }
+
+ /** */
+ private void doSql(int nodeIdx, String sql) {
+ List<List<?>> res = grid(nodeIdx).context().query().querySqlFields(new
SqlFieldsQuery(sql), false).getAll();
assertEquals(1, res.size());
assertEquals(1, res.get(0).size());