From 92f3672d40f5e3e53f382c7fbaacad0cb2ae9286 Mon Sep 17 00:00:00 2001 From: Mikhail Filatov Date: Mon, 18 Jan 2021 16:20:29 +0300 Subject: [PATCH 1/9] IGNITE-14012 fix ducktape jmx_tools MBean pattern --- .../ducktests/tests/ignitetest/services/utils/jmx_utils.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/ducktests/tests/ignitetest/services/utils/jmx_utils.py b/modules/ducktests/tests/ignitetest/services/utils/jmx_utils.py index a14d96d61335d..c45fc90676345 100644 --- a/modules/ducktests/tests/ignitetest/services/utils/jmx_utils.py +++ b/modules/ducktests/tests/ignitetest/services/utils/jmx_utils.py @@ -187,7 +187,7 @@ def kernal_mbean(self): """ :return: IgniteKernal MBean. """ - return self.jmx_client().find_mbean('.*group=Kernal,name=IgniteKernal') + return self.jmx_client().find_mbean('.*group=Kernal.*name=IgniteKernal') @memoize def disco_mbean(self): @@ -197,6 +197,6 @@ def disco_mbean(self): disco_spi = next(self.kernal_mbean().DiscoverySpiFormatted).strip() if 'ZookeeperDiscoverySpi' in disco_spi: - return self.jmx_client().find_mbean('.*group=SPIs,name=ZookeeperDiscoverySpi') + return self.jmx_client().find_mbean('.*group=SPIs.*name=ZookeeperDiscoverySpi') - return self.jmx_client().find_mbean('.*group=SPIs,name=TcpDiscoverySpi') + return self.jmx_client().find_mbean('.*group=SPIs.*name=TcpDiscoverySpi') From 664ede5caed8ddb949a377e9571aef274f34292c Mon Sep 17 00:00:00 2001 From: Mikhail Filatov Date: Wed, 26 May 2021 19:23:03 +0300 Subject: [PATCH 2/9] Rewrite test to use SQL --- .../UserModifyingApplication.java | 37 +++++++------------ .../utils/ignite_configuration/__init__.py | 2 + .../utils/templates/thin_client_config.xml.j2 | 5 +++ .../tests/ignitetest/tests/auth_test.py | 21 +++++++---- 4 files changed, 33 insertions(+), 32 deletions(-) diff --git a/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/authentication/UserModifyingApplication.java b/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/authentication/UserModifyingApplication.java index 836d21f9ceea3..5913e7766df15 100644 --- a/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/authentication/UserModifyingApplication.java +++ b/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/authentication/UserModifyingApplication.java @@ -19,50 +19,39 @@ import com.fasterxml.jackson.databind.JsonNode; import org.apache.ignite.IgniteCheckedException; -import org.apache.ignite.internal.IgniteEx; +import org.apache.ignite.cache.query.FieldsQueryCursor; +import org.apache.ignite.cache.query.SqlFieldsQuery; import org.apache.ignite.internal.ducktest.utils.IgniteAwareApplication; -import org.apache.ignite.internal.processors.authentication.AuthorizationContext; -import org.apache.ignite.internal.processors.authentication.IgniteAuthenticationProcessor; import org.apache.ignite.internal.processors.rest.GridRestCommand; -/** - * Simple application that modify users. - */ +import java.util.List; + +/** Simple application that modify users. */ public class UserModifyingApplication extends IgniteAwareApplication { - /** {@inheritDoc} */ - @Override public void run(JsonNode jsonNode) throws IgniteCheckedException { + /**{@inheritDoc}*/ + @Override public void run(final JsonNode jsonNode) throws IgniteCheckedException { String restKey = jsonNode.get("rest_key").asText(); - - String authName = jsonNode.get("auth_username").asText(); - - String authPwd = jsonNode.get("auth_password").asText(); - String name = jsonNode.get("username").asText(); - String pwd = jsonNode.get("password").asText(); markInitialized(); - log.info("Input data: " + jsonNode.toString()); - - IgniteAuthenticationProcessor auth = ((IgniteEx)ignite).context().authentication(); - - AuthorizationContext actx = auth.authenticate(authName, authPwd); - AuthorizationContext.context(actx); - GridRestCommand cmd = GridRestCommand.fromKey(restKey); switch (cmd) { case ADD_USER: - auth.addUser(name, pwd); + List list1 = client.query(new SqlFieldsQuery(String.format("CREATE USER %s WITH PASSWORD '%s';", name, pwd))).getAll(); + list1.forEach(log::info); break; case UPDATE_USER: - auth.updateUser(name, pwd); + List list2 = client.query(new SqlFieldsQuery(String.format("ALTER USER %s WITH PASSWORD '%s';", name, pwd))).getAll(); + list2.forEach(log::info); break; case REMOVE_USER: - auth.removeUser(name); + List list3 = client.query(new SqlFieldsQuery(String.format("DROP USER %s;", name))).getAll(); + list3.forEach(log::info); break; default: diff --git a/modules/ducktests/tests/ignitetest/services/utils/ignite_configuration/__init__.py b/modules/ducktests/tests/ignitetest/services/utils/ignite_configuration/__init__.py index 5f6d433bfb4b2..f8e52794ff8c0 100644 --- a/modules/ducktests/tests/ignitetest/services/utils/ignite_configuration/__init__.py +++ b/modules/ducktests/tests/ignitetest/services/utils/ignite_configuration/__init__.py @@ -127,6 +127,8 @@ class IgniteThinClientConfiguration(NamedTuple): addresses: str = None version: IgniteVersion = DEV_BRANCH ssl_params: SslParams = None + username: str = None + password: str = None def __prepare_ssl(self, test_globals, shared_root): """ diff --git a/modules/ducktests/tests/ignitetest/services/utils/templates/thin_client_config.xml.j2 b/modules/ducktests/tests/ignitetest/services/utils/templates/thin_client_config.xml.j2 index e58b02a08495d..7ec955b5c1b9b 100644 --- a/modules/ducktests/tests/ignitetest/services/utils/templates/thin_client_config.xml.j2 +++ b/modules/ducktests/tests/ignitetest/services/utils/templates/thin_client_config.xml.j2 @@ -28,6 +28,11 @@ + {% if config.username %} + + + {% endif %} + {% if config.ssl_params %} diff --git a/modules/ducktests/tests/ignitetest/tests/auth_test.py b/modules/ducktests/tests/ignitetest/tests/auth_test.py index 73d4bc04874bd..dc8845e075ed6 100644 --- a/modules/ducktests/tests/ignitetest/tests/auth_test.py +++ b/modules/ducktests/tests/ignitetest/tests/auth_test.py @@ -23,13 +23,15 @@ from ignitetest.services.utils.control_utility import ControlUtility, ControlUtilityError from ignitetest.services.utils.ignite_configuration import IgniteConfiguration, DataStorageConfiguration from ignitetest.services.utils.ignite_configuration.data_storage import DataRegionConfiguration -from ignitetest.utils import ignite_versions, cluster -from ignitetest.services.utils.ignite_configuration.discovery import from_ignite_cluster +from ignitetest.utils import ignite_versions, cluster, ignore_if +from ignitetest.services.utils.ignite_configuration import IgniteThinClientConfiguration +from ignitetest.services.utils.ssl.client_connector_configuration import ClientConnectorConfiguration +from ignitetest.services.utils.auth import is_auth_enabled from ignitetest.utils.ignite_test import IgniteTest from ignitetest.utils.version import DEV_BRANCH, LATEST, IgniteVersion WRONG_PASSWORD = "wrong_password" -TEST_USERNAME = "admin" +TEST_USERNAME = "ADMIN" TEST_PASSWORD = "qwe123" TEST_PASSWORD2 = "123qwe" @@ -48,6 +50,7 @@ class AuthenticationTests(IgniteTest): @cluster(num_nodes=NUM_NODES) @ignite_versions(str(DEV_BRANCH), str(LATEST)) + # @ignore_if(is_auth_enabled(globals)) def test_change_users(self, ignite_version): """ Test add, update and remove user @@ -58,7 +61,8 @@ def test_change_users(self, ignite_version): version=IgniteVersion(ignite_version), data_storage=DataStorageConfiguration( default=DataRegionConfiguration(persistent=True), - ) + ), + client_connector_configuration=ClientConnectorConfiguration() ) servers = IgniteService(self.test_context, config=config, num_nodes=self.NUM_NODES - 1) @@ -67,7 +71,11 @@ def test_change_users(self, ignite_version): ControlUtility(cluster=servers, username=DEFAULT_AUTH_USERNAME, password=DEFAULT_AUTH_PASSWORD).activate() - client_cfg = config._replace(client_mode=True, discovery_spi=from_ignite_cluster(servers)) + client_cfg = IgniteThinClientConfiguration( + addresses=servers.nodes[0].account.hostname + ":" + str(config.client_connector_configuration.port), + version=IgniteVersion(ignite_version), + username=DEFAULT_AUTH_USERNAME, + password=DEFAULT_AUTH_PASSWORD) # Add new user check_authenticate(servers, TEST_USERNAME, TEST_PASSWORD, True) @@ -84,7 +92,6 @@ def test_change_users(self, ignite_version): self.run_with_creds(client_cfg, REMOVE_USER, TEST_USERNAME, free=False) check_authenticate(servers, TEST_USERNAME, TEST_PASSWORD2, True) - # pylint: disable=R0913 def run_with_creds(self, client_configuration, rest_key: str, name: str, password: str = None, clean=False, free=True): """ @@ -95,8 +102,6 @@ def run_with_creds(self, client_configuration, rest_key: str, name: str, passwor client_configuration, java_class_name="org.apache.ignite.internal.ducktest.tests.authentication.UserModifyingApplication", params={"rest_key": rest_key, - "auth_username": DEFAULT_AUTH_USERNAME, - "auth_password": DEFAULT_AUTH_PASSWORD, "username": name, "password": password} ) From ddf3e098cefed3961d13144aa0055e8694929c56 Mon Sep 17 00:00:00 2001 From: Mikhail Filatov Date: Wed, 26 May 2021 19:26:35 +0300 Subject: [PATCH 3/9] Rewrite test to use SQL --- .../authentication/UserModifyingApplication.java | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/authentication/UserModifyingApplication.java b/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/authentication/UserModifyingApplication.java index 5913e7766df15..c40436824380c 100644 --- a/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/authentication/UserModifyingApplication.java +++ b/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/authentication/UserModifyingApplication.java @@ -19,17 +19,16 @@ import com.fasterxml.jackson.databind.JsonNode; import org.apache.ignite.IgniteCheckedException; -import org.apache.ignite.cache.query.FieldsQueryCursor; import org.apache.ignite.cache.query.SqlFieldsQuery; import org.apache.ignite.internal.ducktest.utils.IgniteAwareApplication; import org.apache.ignite.internal.processors.rest.GridRestCommand; -import java.util.List; /** Simple application that modify users. */ public class UserModifyingApplication extends IgniteAwareApplication { - /**{@inheritDoc}*/ - @Override public void run(final JsonNode jsonNode) throws IgniteCheckedException { + /** {@inheritDoc} */ + @Override + public void run(final JsonNode jsonNode) throws IgniteCheckedException { String restKey = jsonNode.get("rest_key").asText(); String name = jsonNode.get("username").asText(); String pwd = jsonNode.get("password").asText(); @@ -40,18 +39,15 @@ public class UserModifyingApplication extends IgniteAwareApplication { switch (cmd) { case ADD_USER: - List list1 = client.query(new SqlFieldsQuery(String.format("CREATE USER %s WITH PASSWORD '%s';", name, pwd))).getAll(); - list1.forEach(log::info); + client.query(new SqlFieldsQuery(String.format("CREATE USER %s WITH PASSWORD '%s';", name, pwd))).getAll(); break; case UPDATE_USER: - List list2 = client.query(new SqlFieldsQuery(String.format("ALTER USER %s WITH PASSWORD '%s';", name, pwd))).getAll(); - list2.forEach(log::info); + client.query(new SqlFieldsQuery(String.format("ALTER USER %s WITH PASSWORD '%s';", name, pwd))).getAll(); break; case REMOVE_USER: - List list3 = client.query(new SqlFieldsQuery(String.format("DROP USER %s;", name))).getAll(); - list3.forEach(log::info); + client.query(new SqlFieldsQuery(String.format("DROP USER %s;", name))).getAll(); break; default: From fc4f030a3c90299a4f2aa69e7cc618edaed2a65d Mon Sep 17 00:00:00 2001 From: Mikhail Filatov Date: Wed, 26 May 2021 19:28:15 +0300 Subject: [PATCH 4/9] Rewrite test to use SQL --- .../tests/authentication/UserModifyingApplication.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/authentication/UserModifyingApplication.java b/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/authentication/UserModifyingApplication.java index c40436824380c..325aa137e435e 100644 --- a/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/authentication/UserModifyingApplication.java +++ b/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/authentication/UserModifyingApplication.java @@ -24,13 +24,16 @@ import org.apache.ignite.internal.processors.rest.GridRestCommand; -/** Simple application that modify users. */ +/** + * Simple application that modify users. + */ public class UserModifyingApplication extends IgniteAwareApplication { /** {@inheritDoc} */ - @Override - public void run(final JsonNode jsonNode) throws IgniteCheckedException { + @Override public void run(final JsonNode jsonNode) throws IgniteCheckedException { String restKey = jsonNode.get("rest_key").asText(); + String name = jsonNode.get("username").asText(); + String pwd = jsonNode.get("password").asText(); markInitialized(); From f82783c4e1b689217b8e3262dd2621c803266924 Mon Sep 17 00:00:00 2001 From: Mikhail Filatov Date: Wed, 26 May 2021 19:29:12 +0300 Subject: [PATCH 5/9] Rewrite test to use SQL --- .../ducktest/tests/authentication/UserModifyingApplication.java | 2 +- modules/ducktests/tests/ignitetest/tests/auth_test.py | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/authentication/UserModifyingApplication.java b/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/authentication/UserModifyingApplication.java index 325aa137e435e..8476c031de45e 100644 --- a/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/authentication/UserModifyingApplication.java +++ b/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/authentication/UserModifyingApplication.java @@ -33,7 +33,7 @@ public class UserModifyingApplication extends IgniteAwareApplication { String restKey = jsonNode.get("rest_key").asText(); String name = jsonNode.get("username").asText(); - + String pwd = jsonNode.get("password").asText(); markInitialized(); diff --git a/modules/ducktests/tests/ignitetest/tests/auth_test.py b/modules/ducktests/tests/ignitetest/tests/auth_test.py index dc8845e075ed6..9411eb5a348bd 100644 --- a/modules/ducktests/tests/ignitetest/tests/auth_test.py +++ b/modules/ducktests/tests/ignitetest/tests/auth_test.py @@ -50,7 +50,6 @@ class AuthenticationTests(IgniteTest): @cluster(num_nodes=NUM_NODES) @ignite_versions(str(DEV_BRANCH), str(LATEST)) - # @ignore_if(is_auth_enabled(globals)) def test_change_users(self, ignite_version): """ Test add, update and remove user From d5f4754a93b32973b21182bd46d7ac0fd80dc76a Mon Sep 17 00:00:00 2001 From: Mikhail Filatov Date: Wed, 26 May 2021 19:33:00 +0300 Subject: [PATCH 6/9] Rewrite test to use SQL --- modules/ducktests/tests/ignitetest/tests/auth_test.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/ducktests/tests/ignitetest/tests/auth_test.py b/modules/ducktests/tests/ignitetest/tests/auth_test.py index 9411eb5a348bd..0667b0c289fc1 100644 --- a/modules/ducktests/tests/ignitetest/tests/auth_test.py +++ b/modules/ducktests/tests/ignitetest/tests/auth_test.py @@ -23,10 +23,9 @@ from ignitetest.services.utils.control_utility import ControlUtility, ControlUtilityError from ignitetest.services.utils.ignite_configuration import IgniteConfiguration, DataStorageConfiguration from ignitetest.services.utils.ignite_configuration.data_storage import DataRegionConfiguration -from ignitetest.utils import ignite_versions, cluster, ignore_if +from ignitetest.utils import ignite_versions, cluster from ignitetest.services.utils.ignite_configuration import IgniteThinClientConfiguration from ignitetest.services.utils.ssl.client_connector_configuration import ClientConnectorConfiguration -from ignitetest.services.utils.auth import is_auth_enabled from ignitetest.utils.ignite_test import IgniteTest from ignitetest.utils.version import DEV_BRANCH, LATEST, IgniteVersion @@ -61,7 +60,7 @@ def test_change_users(self, ignite_version): data_storage=DataStorageConfiguration( default=DataRegionConfiguration(persistent=True), ), - client_connector_configuration=ClientConnectorConfiguration() + client_connector_configuration=ClientConnectorConfiguration() ) servers = IgniteService(self.test_context, config=config, num_nodes=self.NUM_NODES - 1) @@ -91,6 +90,7 @@ def test_change_users(self, ignite_version): self.run_with_creds(client_cfg, REMOVE_USER, TEST_USERNAME, free=False) check_authenticate(servers, TEST_USERNAME, TEST_PASSWORD2, True) + # pylint: disable=R0913 def run_with_creds(self, client_configuration, rest_key: str, name: str, password: str = None, clean=False, free=True): """ From eaf62d36abd03231ce9f8679490f83e366096764 Mon Sep 17 00:00:00 2001 From: Mikhail Filatov Date: Thu, 27 May 2021 10:19:40 +0300 Subject: [PATCH 7/9] fix checkstyle --- .../ducktest/tests/authentication/UserModifyingApplication.java | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/authentication/UserModifyingApplication.java b/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/authentication/UserModifyingApplication.java index 8476c031de45e..952876d625ec8 100644 --- a/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/authentication/UserModifyingApplication.java +++ b/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/authentication/UserModifyingApplication.java @@ -23,7 +23,6 @@ import org.apache.ignite.internal.ducktest.utils.IgniteAwareApplication; import org.apache.ignite.internal.processors.rest.GridRestCommand; - /** * Simple application that modify users. */ From d760b0b9d4e4a164170f55986507aadcd609926e Mon Sep 17 00:00:00 2001 From: Mikhail Filatov Date: Thu, 27 May 2021 10:47:28 +0300 Subject: [PATCH 8/9] checkstyle fix --- modules/ducktests/tests/ignitetest/tests/auth_test.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/ducktests/tests/ignitetest/tests/auth_test.py b/modules/ducktests/tests/ignitetest/tests/auth_test.py index 0667b0c289fc1..c62989a005390 100644 --- a/modules/ducktests/tests/ignitetest/tests/auth_test.py +++ b/modules/ducktests/tests/ignitetest/tests/auth_test.py @@ -58,8 +58,7 @@ def test_change_users(self, ignite_version): auth_enabled=True, version=IgniteVersion(ignite_version), data_storage=DataStorageConfiguration( - default=DataRegionConfiguration(persistent=True), - ), + default=DataRegionConfiguration(persistent=True)), client_connector_configuration=ClientConnectorConfiguration() ) From 7dde5ad7093cafb5235334ba72e2397ec6c0fac8 Mon Sep 17 00:00:00 2001 From: Mikhail Filatov Date: Thu, 27 May 2021 13:16:15 +0300 Subject: [PATCH 9/9] work on PR comments --- .../tests/authentication/UserModifyingApplication.java | 6 +++--- modules/ducktests/tests/ignitetest/tests/auth_test.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/authentication/UserModifyingApplication.java b/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/authentication/UserModifyingApplication.java index 952876d625ec8..a35c0fbc04f79 100644 --- a/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/authentication/UserModifyingApplication.java +++ b/modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/authentication/UserModifyingApplication.java @@ -41,15 +41,15 @@ public class UserModifyingApplication extends IgniteAwareApplication { switch (cmd) { case ADD_USER: - client.query(new SqlFieldsQuery(String.format("CREATE USER %s WITH PASSWORD '%s';", name, pwd))).getAll(); + client.query(new SqlFieldsQuery(String.format("CREATE USER \"%s\" WITH PASSWORD '%s';", name, pwd))).getAll(); break; case UPDATE_USER: - client.query(new SqlFieldsQuery(String.format("ALTER USER %s WITH PASSWORD '%s';", name, pwd))).getAll(); + client.query(new SqlFieldsQuery(String.format("ALTER USER \"%s\" WITH PASSWORD '%s';", name, pwd))).getAll(); break; case REMOVE_USER: - client.query(new SqlFieldsQuery(String.format("DROP USER %s;", name))).getAll(); + client.query(new SqlFieldsQuery(String.format("DROP USER \"%s\";", name))).getAll(); break; default: diff --git a/modules/ducktests/tests/ignitetest/tests/auth_test.py b/modules/ducktests/tests/ignitetest/tests/auth_test.py index c62989a005390..4999b097004a2 100644 --- a/modules/ducktests/tests/ignitetest/tests/auth_test.py +++ b/modules/ducktests/tests/ignitetest/tests/auth_test.py @@ -30,7 +30,7 @@ from ignitetest.utils.version import DEV_BRANCH, LATEST, IgniteVersion WRONG_PASSWORD = "wrong_password" -TEST_USERNAME = "ADMIN" +TEST_USERNAME = "admin" TEST_PASSWORD = "qwe123" TEST_PASSWORD2 = "123qwe"