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 0f5b85f5ac2 IGNITE-19370 control.sh should be able to use custom SSL
factory (#10667)
0f5b85f5ac2 is described below
commit 0f5b85f5ac2e07274d11c8f9c5b84ebb343157b5
Author: Anton Vinogradov <[email protected]>
AuthorDate: Fri May 12 11:44:28 2023 +0300
IGNITE-19370 control.sh should be able to use custom SSL factory (#10667)
---
docs/_docs/tools/control-script.adoc | 1 +
modules/control-utility/pom.xml | 25 ++----
.../internal/commandline/CommandHandler.java | 23 ++++-
.../internal/commandline/CommonArgParser.java | 14 +++-
.../commandline/ConnectionAndSslParameters.java | 16 +++-
.../testsuites/IgniteControlUtilityTestSuite.java | 8 +-
.../util/GridCommandHandlerAbstractTest.java | 20 ++++-
...ridCommandHandlerIncompatibleSslConfigTest.java | 54 ++++++++++++
.../ignite/util/GridCommandHandlerSslTest.java | 3 +-
.../ignite/util/GridCommandHandlerTestUtils.java | 38 ---------
.../util/GridCommandHandlerWithSslFactoryTest.java | 98 ++++++++++++++++++++++
...est.java => GridCommandHandlerWithSslTest.java} | 2 +-
.../src/test/resources/ssl-factory-config.xml | 36 ++++++++
...mandHandlerClusterByClassTest_cache_help.output | 2 +-
...ridCommandHandlerClusterByClassTest_help.output | 2 +-
...dlerClusterByClassWithSSLTest_cache_help.output | 2 +-
...andHandlerClusterByClassWithSSLTest_help.output | 2 +-
17 files changed, 272 insertions(+), 74 deletions(-)
diff --git a/docs/_docs/tools/control-script.adoc
b/docs/_docs/tools/control-script.adoc
index 592c0c89b21..490c55e7f37 100644
--- a/docs/_docs/tools/control-script.adoc
+++ b/docs/_docs/tools/control-script.adoc
@@ -60,6 +60,7 @@ If you want to connect to a node that is running on a remove
machine, specify th
| --truststore-type TRUSTSTORE_TYPE | The type of the truststore. | `JKS`
| --truststore TRUSTSTORE_PATH | The path to the truststore. |
| --truststore-password TRUSTSTORE_PWD | The password to the truststore. |
+| --ssl-factory SSL_FACTORY_PATH | Custom SSL factory Spring xml file path. |
|===
diff --git a/modules/control-utility/pom.xml b/modules/control-utility/pom.xml
index 13729cbb94f..636a58590f2 100644
--- a/modules/control-utility/pom.xml
+++ b/modules/control-utility/pom.xml
@@ -41,6 +41,11 @@
<artifactId>ignite-core</artifactId>
</dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>ignite-spring</artifactId>
+ </dependency>
+
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>ignite-indexing</artifactId>
@@ -74,20 +79,6 @@
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-beans</artifactId>
- <version>${spring.version}</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-context</artifactId>
- <version>${spring.version}</version>
- <scope>test</scope>
- </dependency>
-
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>ignite-tools</artifactId>
@@ -107,12 +98,6 @@
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>ignite-spring</artifactId>
- <scope>test</scope>
- </dependency>
-
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-test</artifactId>
diff --git
a/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java
b/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java
index 6edcda692aa..84f592d57e8 100644
---
a/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java
+++
b/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java
@@ -17,6 +17,7 @@
package org.apache.ignite.internal.commandline;
+import java.net.URL;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@@ -27,6 +28,8 @@ import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.UUID;
+import javax.cache.configuration.Factory;
+import javax.net.ssl.SSLContext;
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.IgniteException;
import org.apache.ignite.IgniteLogger;
@@ -39,6 +42,8 @@ import
org.apache.ignite.internal.client.GridClientHandshakeException;
import org.apache.ignite.internal.client.GridServerUnreachableException;
import
org.apache.ignite.internal.client.impl.connection.GridClientConnectionResetException;
import org.apache.ignite.internal.logger.IgniteLoggerEx;
+import org.apache.ignite.internal.util.IgniteUtils;
+import org.apache.ignite.internal.util.spring.IgniteSpringHelperImpl;
import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.internal.util.typedef.X;
import org.apache.ignite.internal.util.typedef.internal.SB;
@@ -48,6 +53,7 @@ import
org.apache.ignite.plugin.security.SecurityCredentialsBasicProvider;
import org.apache.ignite.plugin.security.SecurityCredentialsProvider;
import org.apache.ignite.ssl.SslContextFactory;
import org.jetbrains.annotations.NotNull;
+import org.springframework.context.ApplicationContext;
import static java.lang.System.lineSeparator;
import static java.util.Objects.nonNull;
@@ -536,8 +542,13 @@ public class CommandHandler {
if (!F.isEmpty(userName))
clientCfg.setSecurityCredentialsProvider(getSecurityCredentialsProvider(userName,
password, clientCfg));
- if (!F.isEmpty(args.sslKeyStorePath()))
+ if (!F.isEmpty(args.sslKeyStorePath()) ||
!F.isEmpty(args.sslFactoryConfigPath())) {
+ if (!F.isEmpty(args.sslKeyStorePath()) &&
!F.isEmpty(args.sslFactoryConfigPath()))
+ throw new IgniteCheckedException("Incorrect SSL configuration.
" +
+ "SSL factory config path should not be specified
simultaneously with other SSL options like keystore path.");
+
clientCfg.setSslContextFactory(createSslSupportFactory(args));
+ }
return clientCfg;
}
@@ -570,7 +581,15 @@ public class CommandHandler {
* @param args Commond args.
* @return Ssl support factory.
*/
- @NotNull private SslContextFactory
createSslSupportFactory(ConnectionAndSslParameters args) {
+ @NotNull private Factory<SSLContext>
createSslSupportFactory(ConnectionAndSslParameters args) throws
IgniteCheckedException {
+ if (!F.isEmpty(args.sslFactoryConfigPath())) {
+ URL springCfg =
IgniteUtils.resolveSpringUrl(args.sslFactoryConfigPath());
+
+ ApplicationContext ctx =
IgniteSpringHelperImpl.applicationContext(springCfg);
+
+ return (Factory<SSLContext>)ctx.getBean(Factory.class);
+ }
+
SslContextFactory factory = new SslContextFactory();
String[] sslProtocols = split(args.sslProtocol(), ",");
diff --git
a/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/CommonArgParser.java
b/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/CommonArgParser.java
index 91257db88ee..2a16b809f2f 100644
---
a/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/CommonArgParser.java
+++
b/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/CommonArgParser.java
@@ -104,6 +104,9 @@ public class CommonArgParser {
/** */
static final String CMD_ENABLE_EXPERIMENTAL = "--enable-experimental";
+ /** */
+ static final String CMD_SSL_FACTORY = "--ssl-factory";
+
/** List of optional auxiliary commands. */
private static final Set<String> AUX_COMMANDS = new HashSet<>();
@@ -126,6 +129,7 @@ public class CommonArgParser {
AUX_COMMANDS.add(CMD_SSL_PROTOCOL);
AUX_COMMANDS.add(CMD_SSL_KEY_ALGORITHM);
AUX_COMMANDS.add(CMD_SSL_CIPHER_SUITES);
+ AUX_COMMANDS.add(CMD_SSL_FACTORY);
AUX_COMMANDS.add(CMD_KEYSTORE);
AUX_COMMANDS.add(CMD_KEYSTORE_PASSWORD);
@@ -175,6 +179,7 @@ public class CommonArgParser {
list.add(optional(CMD_SSL_PROTOCOL, "SSL_PROTOCOL[, SSL_PROTOCOL_2,
..., SSL_PROTOCOL_N]"));
list.add(optional(CMD_SSL_CIPHER_SUITES, "SSL_CIPHER_1[, SSL_CIPHER_2,
..., SSL_CIPHER_N]"));
list.add(optional(CMD_SSL_KEY_ALGORITHM, "SSL_KEY_ALGORITHM"));
+ list.add(optional(CMD_SSL_FACTORY, "SSL_FACTORY_PATH"));
list.add(optional(CMD_KEYSTORE_TYPE, "KEYSTORE_TYPE"));
list.add(optional(CMD_KEYSTORE, "KEYSTORE_PATH"));
list.add(optional(CMD_KEYSTORE_PASSWORD, "KEYSTORE_PASSWORD"));
@@ -234,6 +239,8 @@ public class CommonArgParser {
Command<?> command = null;
+ String sslFactoryCfg = null;
+
while (argIter.hasNextArg()) {
String str = argIter.nextArg("").toLowerCase();
@@ -354,6 +361,11 @@ public class CommonArgParser {
experimentalEnabled = true;
break;
+ case CMD_SSL_FACTORY:
+ sslFactoryCfg = argIter.nextArg("Expected SSL factory
config path");
+
+ break;
+
default:
throw new IllegalArgumentException("Unexpected
argument: " + str);
}
@@ -374,7 +386,7 @@ public class CommonArgParser {
pingTimeout, pingInterval, autoConfirmation, verbose,
sslProtocol, sslCipherSuites,
sslKeyAlgorithm, sslKeyStorePath, sslKeyStorePassword,
sslKeyStoreType,
- sslTrustStorePath, sslTrustStorePassword, sslTrustStoreType);
+ sslTrustStorePath, sslTrustStorePassword, sslTrustStoreType,
sslFactoryCfg);
}
/**
diff --git
a/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/ConnectionAndSslParameters.java
b/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/ConnectionAndSslParameters.java
index 68fb8467dbc..c642ed0d5cd 100644
---
a/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/ConnectionAndSslParameters.java
+++
b/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/ConnectionAndSslParameters.java
@@ -74,6 +74,9 @@ public class ConnectionAndSslParameters {
/** Truststore Password. */
private char[] sslTrustStorePassword;
+ /** SSL factory config. */
+ private String sslFactoryCfgPath;
+
/** High-level command. */
private Command command;
@@ -96,12 +99,14 @@ public class ConnectionAndSslParameters {
* @param sslTrustStorePath Truststore.
* @param sslTrustStorePassword Truststore Password.
* @param sslTrustStoreType Truststore Type.
+ * @param sslFactoryCfgPath SSL Factory config.
*/
public ConnectionAndSslParameters(Command command, String host, String
port, String user, String pwd,
Long pingTimeout, Long pingInterval, boolean autoConfirmation, boolean
verbose,
String sslProtocol, String sslCipherSuites, String sslKeyAlgorithm,
String sslKeyStorePath, char[] sslKeyStorePassword, String
sslKeyStoreType,
- String sslTrustStorePath, char[] sslTrustStorePassword, String
sslTrustStoreType
+ String sslTrustStorePath, char[] sslTrustStorePassword, String
sslTrustStoreType,
+ String sslFactoryCfgPath
) {
this.command = command;
this.host = host;
@@ -126,6 +131,8 @@ public class ConnectionAndSslParameters {
this.sslTrustStorePath = sslTrustStorePath;
this.sslTrustStoreType = sslTrustStoreType;
this.sslTrustStorePassword = sslTrustStorePassword;
+
+ this.sslFactoryCfgPath = sslFactoryCfgPath;
}
/**
@@ -283,6 +290,13 @@ public class ConnectionAndSslParameters {
this.sslTrustStorePassword = sslTrustStorePassword;
}
+ /**
+ * @return Predefined SSL Factory config.
+ */
+ public String sslFactoryConfigPath() {
+ return sslFactoryCfgPath;
+ }
+
/**
* Returns {@code true} if verbose mode is enabled.
*
diff --git
a/modules/control-utility/src/test/java/org/apache/ignite/testsuites/IgniteControlUtilityTestSuite.java
b/modules/control-utility/src/test/java/org/apache/ignite/testsuites/IgniteControlUtilityTestSuite.java
index 99caa99e75f..060841b4239 100644
---
a/modules/control-utility/src/test/java/org/apache/ignite/testsuites/IgniteControlUtilityTestSuite.java
+++
b/modules/control-utility/src/test/java/org/apache/ignite/testsuites/IgniteControlUtilityTestSuite.java
@@ -27,6 +27,7 @@ import
org.apache.ignite.util.GridCommandHandlerCheckIndexesInlineSizeTest;
import org.apache.ignite.util.GridCommandHandlerClusterByClassTest;
import org.apache.ignite.util.GridCommandHandlerClusterByClassWithSSLTest;
import
org.apache.ignite.util.GridCommandHandlerConsistencyRepairCorrectnessTransactionalTest;
+import org.apache.ignite.util.GridCommandHandlerIncompatibleSslConfigTest;
import org.apache.ignite.util.GridCommandHandlerIndexingCheckSizeTest;
import org.apache.ignite.util.GridCommandHandlerIndexingClusterByClassTest;
import
org.apache.ignite.util.GridCommandHandlerIndexingClusterByClassWithSSLTest;
@@ -36,7 +37,8 @@ import
org.apache.ignite.util.GridCommandHandlerInterruptCommandTest;
import org.apache.ignite.util.GridCommandHandlerMetadataTest;
import org.apache.ignite.util.GridCommandHandlerSslTest;
import org.apache.ignite.util.GridCommandHandlerTest;
-import org.apache.ignite.util.GridCommandHandlerWithSSLTest;
+import org.apache.ignite.util.GridCommandHandlerWithSslFactoryTest;
+import org.apache.ignite.util.GridCommandHandlerWithSslTest;
import org.apache.ignite.util.KillCommandsControlShTest;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@@ -49,7 +51,9 @@ import org.junit.runners.Suite;
CommandHandlerParsingTest.class,
GridCommandHandlerTest.class,
- GridCommandHandlerWithSSLTest.class,
+ GridCommandHandlerWithSslTest.class,
+ GridCommandHandlerWithSslFactoryTest.class,
+ GridCommandHandlerIncompatibleSslConfigTest.class,
GridCommandHandlerClusterByClassTest.class,
GridCommandHandlerClusterByClassWithSSLTest.class,
GridCommandHandlerSslTest.class,
diff --git
a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerAbstractTest.java
b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerAbstractTest.java
index 02c583d5459..7d74c87c864 100644
---
a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerAbstractTest.java
+++
b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerAbstractTest.java
@@ -31,6 +31,8 @@ import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;
+import javax.cache.configuration.Factory;
+import javax.net.ssl.SSLContext;
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteDataStreamer;
import org.apache.ignite.IgniteLogger;
@@ -80,7 +82,6 @@ import static
org.apache.ignite.events.EventType.EVT_CONSISTENCY_VIOLATION;
import static
org.apache.ignite.internal.encryption.AbstractEncryptionTest.KEYSTORE_PASSWORD;
import static
org.apache.ignite.internal.encryption.AbstractEncryptionTest.KEYSTORE_PATH;
import static
org.apache.ignite.internal.processors.cache.verify.VerifyBackupPartitionsDumpTask.IDLE_DUMP_FILE_PREFIX;
-import static org.apache.ignite.util.GridCommandHandlerTestUtils.addSslParams;
/**
* Common abstract class for testing {@link CommandHandler}.
@@ -267,7 +268,7 @@ public abstract class GridCommandHandlerAbstractTest
extends GridCommonAbstractT
cfg.setConnectorConfiguration(new
ConnectorConfiguration().setSslEnabled(sslEnabled()));
if (sslEnabled())
- cfg.setSslContextFactory(GridTestUtils.sslFactory());
+ cfg.setSslContextFactory(sslFactory());
DataStorageConfiguration dsCfg = new DataStorageConfiguration()
.setWalMode(WALMode.LOG_ONLY)
@@ -393,10 +394,23 @@ public abstract class GridCommandHandlerAbstractTest
extends GridCommonAbstractT
if (sslEnabled()) {
// We shouldn't add extra args for --cache help.
if (args.size() < 2 || !args.get(0).equals("--cache") ||
!args.get(1).equals("help"))
- addSslParams(args);
+ extendSslParams(args);
}
}
+ /** Custom SSL params. */
+ protected void extendSslParams(List<String> params) {
+ params.add("--keystore");
+ params.add(GridTestUtils.keyStorePath("node01"));
+ params.add("--keystore-password");
+ params.add(GridTestUtils.keyStorePassword());
+ }
+
+ /** Custom SSL factory. */
+ protected Factory<SSLContext> sslFactory() {
+ return GridTestUtils.sslFactory();
+ }
+
/** */
protected void injectTestSystemOut() {
System.setOut(new PrintStream(testOut));
diff --git
a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerIncompatibleSslConfigTest.java
b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerIncompatibleSslConfigTest.java
new file mode 100644
index 00000000000..2a3dcf39154
--- /dev/null
+++
b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerIncompatibleSslConfigTest.java
@@ -0,0 +1,54 @@
+/*
+ * 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.util;
+
+import java.util.List;
+import org.junit.Test;
+
+import static
org.apache.ignite.internal.commandline.CommandHandler.EXIT_CODE_UNEXPECTED_ERROR;
+import static org.apache.ignite.testframework.GridTestUtils.assertContains;
+
+/**
+ *
+ */
+public class GridCommandHandlerIncompatibleSslConfigTest extends
GridCommandHandlerClusterPerMethodAbstractTest {
+ /** {@inheritDoc} */
+ @Override protected boolean sslEnabled() {
+ return true;
+ }
+
+ /** {@inheritDoc} */
+ @Override protected void extendSslParams(List<String> params) {
+ params.add("--ssl-factory"); // incompatible
+ params.add("src/test/resources/some-file.xml");
+ params.add("--keystore"); // incompatible
+ params.add("src/test/resources/some-file.jks");
+ }
+
+ /** */
+ @Test
+ public void test() throws Exception {
+ startGrids(1);
+
+ injectTestSystemOut();
+
+ assertEquals(EXIT_CODE_UNEXPECTED_ERROR, execute("--set-state",
"ACTIVE"));
+
+ assertContains(log, testOut.toString(), "Incorrect SSL
configuration.");
+ }
+}
diff --git
a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerSslTest.java
b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerSslTest.java
index ea260fa0752..1e2b61e4573 100644
---
a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerSslTest.java
+++
b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerSslTest.java
@@ -34,7 +34,6 @@ import org.junit.Test;
import static
org.apache.ignite.internal.commandline.CommandHandler.EXIT_CODE_CONNECTION_FAILED;
import static
org.apache.ignite.internal.commandline.CommandHandler.EXIT_CODE_OK;
import static org.apache.ignite.testframework.GridTestUtils.assertContains;
-import static org.apache.ignite.util.GridCommandHandlerTestUtils.addSslParams;
/**
* Command line handler test with SSL.
@@ -86,7 +85,7 @@ public class GridCommandHandlerSslTest extends
GridCommandHandlerClusterPerMetho
List<String> params = new ArrayList<>();
- addSslParams(params);
+ extendSslParams(params);
if (!F.isEmpty(utilityCipherSuite)) {
params.add("--ssl-cipher-suites");
diff --git
a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerTestUtils.java
b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerTestUtils.java
deleted file mode 100644
index a17f7439625..00000000000
---
a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerTestUtils.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * 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.util;
-
-import java.util.List;
-import org.apache.ignite.testframework.GridTestUtils;
-
-/**
- * Utility class for command handler.
- */
-public class GridCommandHandlerTestUtils {
- /** */
- public static void addSslParams(List<String> params) {
- params.add("--keystore");
- params.add(GridTestUtils.keyStorePath("node01"));
- params.add("--keystore-password");
- params.add(GridTestUtils.keyStorePassword());
- }
-
- /** */
- private GridCommandHandlerTestUtils() {
- }
-}
diff --git
a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerWithSslFactoryTest.java
b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerWithSslFactoryTest.java
new file mode 100644
index 00000000000..a8709a8ba7b
--- /dev/null
+++
b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerWithSslFactoryTest.java
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.util;
+
+import java.util.List;
+import javax.cache.configuration.Factory;
+import javax.net.ssl.SSLContext;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.ssl.SslContextFactory;
+import org.apache.ignite.testframework.GridTestUtils;
+import org.junit.AfterClass;
+
+/**
+ *
+ */
+public class GridCommandHandlerWithSslFactoryTest extends
GridCommandHandlerWithSslTest {
+ /** Keystore path. */
+ private static final String KEYSTORE_PATH = "KEYSTORE_PATH";
+
+ /** Keystore password. */
+ private static final String KEYSTORE_PASSWORD = "KEYSTORE_PASSWORD";
+
+ /** Custorm SSL factory used. */
+ protected static volatile boolean factoryUsed;
+
+ /** {@inheritDoc} */
+ @Override protected void beforeTestsStarted() throws Exception {
+ System.setProperty(KEYSTORE_PATH,
GridTestUtils.keyStorePath("node01"));
+ System.setProperty(KEYSTORE_PASSWORD,
GridTestUtils.keyStorePassword());
+
+ super.beforeTestsStarted();
+ }
+
+ /** */
+ @AfterClass
+ public static void tearDown() {
+ System.clearProperty(KEYSTORE_PATH);
+ System.clearProperty(KEYSTORE_PASSWORD);
+ }
+
+ /** {@inheritDoc} */
+ @Override protected void afterTest() throws Exception {
+ super.afterTest();
+
+ assertTrue(factoryUsed);
+
+ factoryUsed = false;
+ }
+
+ /** {@inheritDoc} */
+ @Override protected void extendSslParams(List<String> params) {
+ params.add("--ssl-factory");
+
params.add(U.resolveIgnitePath("modules/control-utility/src/test/resources/ssl-factory-config.xml").getPath());
+ }
+
+ /** {@inheritDoc} */
+ @Override protected Factory<SSLContext> sslFactory() {
+ Factory<SSLContext> factory = super.sslFactory();
+
+ assertFalse(factory instanceof SslFactory);
+
+ return factory;
+ }
+
+ /**
+ * Custom SSL Factory.
+ */
+ public static class SslFactory extends SslContextFactory {
+ /** {@inheritDoc} */
+ @Override public SSLContext create() {
+ factoryUsed = true;
+
+ return super.create();
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override public void
testCleaningGarbageAfterCacheDestroyedAndNodeStop_ControlConsoleUtil() throws
Exception {
+
super.testCleaningGarbageAfterCacheDestroyedAndNodeStop_ControlConsoleUtil();
+
+ factoryUsed = true; // It's an SSL free test. Setting to `true` to
avoid fail on check.
+ }
+}
diff --git
a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerWithSSLTest.java
b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerWithSslTest.java
similarity index 93%
rename from
modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerWithSSLTest.java
rename to
modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerWithSslTest.java
index a0582ab16af..82f35c956a2 100644
---
a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerWithSSLTest.java
+++
b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerWithSslTest.java
@@ -20,7 +20,7 @@ package org.apache.ignite.util;
/**
*
*/
-public class GridCommandHandlerWithSSLTest extends GridCommandHandlerTest {
+public class GridCommandHandlerWithSslTest extends GridCommandHandlerTest {
/** {@inheritDoc} */
@Override protected boolean sslEnabled() {
return true;
diff --git a/modules/control-utility/src/test/resources/ssl-factory-config.xml
b/modules/control-utility/src/test/resources/ssl-factory-config.xml
new file mode 100644
index 00000000000..591ebaae9ec
--- /dev/null
+++ b/modules/control-utility/src/test/resources/ssl-factory-config.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ 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.
+-->
+
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://www.springframework.org/schema/context
+ http://www.springframework.org/schema/context/spring-context.xsd">
+ <context:property-placeholder/>
+ <bean name="mgr"
class="org.apache.ignite.ssl.SslContextFactory.DisabledX509TrustManager"/>
+
+ <bean
class="org.apache.ignite.util.GridCommandHandlerWithSslFactoryTest.SslFactory">
+ <property name="keyStoreFilePath" value="${KEYSTORE_PATH}"/>
+ <property name="keyStorePassword" value="${KEYSTORE_PASSWORD}"/>
+ <property name="trustManagers" ref="mgr"/>
+ </bean>
+</beans>
diff --git
a/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassTest_cache_help.output
b/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassTest_cache_help.output
index fcb323d6377..dd98c8ef8b8 100644
---
a/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassTest_cache_help.output
+++
b/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassTest_cache_help.output
@@ -7,7 +7,7 @@ Arguments: --cache help --yes
--------------------------------------------------------------------------------
The '--cache subcommand' is used to get information about and perform
actions with caches. The command has the following syntax:
- control.(sh|bat) [--host HOST_OR_IP] [--port PORT] [--user USER] [--password
PASSWORD] [--ping-interval PING_INTERVAL] [--ping-timeout PING_TIMEOUT]
[--verbose] [--ssl-protocol SSL_PROTOCOL[, SSL_PROTOCOL_2, ...,
SSL_PROTOCOL_N]] [--ssl-cipher-suites SSL_CIPHER_1[, SSL_CIPHER_2, ...,
SSL_CIPHER_N]] [--ssl-key-algorithm SSL_KEY_ALGORITHM] [--keystore-type
KEYSTORE_TYPE] [--keystore KEYSTORE_PATH] [--keystore-password
KEYSTORE_PASSWORD] [--truststore-type TRUSTSTORE_TYPE] [--truststore T [...]
+ control.(sh|bat) [--host HOST_OR_IP] [--port PORT] [--user USER] [--password
PASSWORD] [--ping-interval PING_INTERVAL] [--ping-timeout PING_TIMEOUT]
[--verbose] [--ssl-protocol SSL_PROTOCOL[, SSL_PROTOCOL_2, ...,
SSL_PROTOCOL_N]] [--ssl-cipher-suites SSL_CIPHER_1[, SSL_CIPHER_2, ...,
SSL_CIPHER_N]] [--ssl-key-algorithm SSL_KEY_ALGORITHM] [--ssl-factory
SSL_FACTORY_PATH] [--keystore-type KEYSTORE_TYPE] [--keystore KEYSTORE_PATH]
[--keystore-password KEYSTORE_PASSWORD] [--truststore-type [...]
The subcommands that take [nodeId] as an argument ('list', 'find_garbage',
'contention' and 'validate_indexes') will be executed on the given node or on
all server nodes if the option is not specified. Other commands will run on a
random server node.
diff --git
a/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassTest_help.output
b/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassTest_help.output
index d19c90f7ec5..3276607bb35 100644
---
a/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassTest_help.output
+++
b/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassTest_help.output
@@ -4,7 +4,7 @@ User: <!any!>
Time: <!any!>
Control utility script is used to execute admin commands on cluster or get
common cluster info. The command has the following syntax:
- control.(sh|bat) [--host HOST_OR_IP] [--port PORT] [--user USER] [--password
PASSWORD] [--ping-interval PING_INTERVAL] [--ping-timeout PING_TIMEOUT]
[--verbose] [--ssl-protocol SSL_PROTOCOL[, SSL_PROTOCOL_2, ...,
SSL_PROTOCOL_N]] [--ssl-cipher-suites SSL_CIPHER_1[, SSL_CIPHER_2, ...,
SSL_CIPHER_N]] [--ssl-key-algorithm SSL_KEY_ALGORITHM] [--keystore-type
KEYSTORE_TYPE] [--keystore KEYSTORE_PATH] [--keystore-password
KEYSTORE_PASSWORD] [--truststore-type TRUSTSTORE_TYPE] [--truststore T [...]
+ control.(sh|bat) [--host HOST_OR_IP] [--port PORT] [--user USER] [--password
PASSWORD] [--ping-interval PING_INTERVAL] [--ping-timeout PING_TIMEOUT]
[--verbose] [--ssl-protocol SSL_PROTOCOL[, SSL_PROTOCOL_2, ...,
SSL_PROTOCOL_N]] [--ssl-cipher-suites SSL_CIPHER_1[, SSL_CIPHER_2, ...,
SSL_CIPHER_N]] [--ssl-key-algorithm SSL_KEY_ALGORITHM] [--ssl-factory
SSL_FACTORY_PATH] [--keystore-type KEYSTORE_TYPE] [--keystore KEYSTORE_PATH]
[--keystore-password KEYSTORE_PASSWORD] [--truststore-type [...]
This utility can do the following commands:
diff --git
a/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassWithSSLTest_cache_help.output
b/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassWithSSLTest_cache_help.output
index fcb323d6377..dd98c8ef8b8 100644
---
a/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassWithSSLTest_cache_help.output
+++
b/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassWithSSLTest_cache_help.output
@@ -7,7 +7,7 @@ Arguments: --cache help --yes
--------------------------------------------------------------------------------
The '--cache subcommand' is used to get information about and perform
actions with caches. The command has the following syntax:
- control.(sh|bat) [--host HOST_OR_IP] [--port PORT] [--user USER] [--password
PASSWORD] [--ping-interval PING_INTERVAL] [--ping-timeout PING_TIMEOUT]
[--verbose] [--ssl-protocol SSL_PROTOCOL[, SSL_PROTOCOL_2, ...,
SSL_PROTOCOL_N]] [--ssl-cipher-suites SSL_CIPHER_1[, SSL_CIPHER_2, ...,
SSL_CIPHER_N]] [--ssl-key-algorithm SSL_KEY_ALGORITHM] [--keystore-type
KEYSTORE_TYPE] [--keystore KEYSTORE_PATH] [--keystore-password
KEYSTORE_PASSWORD] [--truststore-type TRUSTSTORE_TYPE] [--truststore T [...]
+ control.(sh|bat) [--host HOST_OR_IP] [--port PORT] [--user USER] [--password
PASSWORD] [--ping-interval PING_INTERVAL] [--ping-timeout PING_TIMEOUT]
[--verbose] [--ssl-protocol SSL_PROTOCOL[, SSL_PROTOCOL_2, ...,
SSL_PROTOCOL_N]] [--ssl-cipher-suites SSL_CIPHER_1[, SSL_CIPHER_2, ...,
SSL_CIPHER_N]] [--ssl-key-algorithm SSL_KEY_ALGORITHM] [--ssl-factory
SSL_FACTORY_PATH] [--keystore-type KEYSTORE_TYPE] [--keystore KEYSTORE_PATH]
[--keystore-password KEYSTORE_PASSWORD] [--truststore-type [...]
The subcommands that take [nodeId] as an argument ('list', 'find_garbage',
'contention' and 'validate_indexes') will be executed on the given node or on
all server nodes if the option is not specified. Other commands will run on a
random server node.
diff --git
a/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassWithSSLTest_help.output
b/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassWithSSLTest_help.output
index d19c90f7ec5..3276607bb35 100644
---
a/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassWithSSLTest_help.output
+++
b/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassWithSSLTest_help.output
@@ -4,7 +4,7 @@ User: <!any!>
Time: <!any!>
Control utility script is used to execute admin commands on cluster or get
common cluster info. The command has the following syntax:
- control.(sh|bat) [--host HOST_OR_IP] [--port PORT] [--user USER] [--password
PASSWORD] [--ping-interval PING_INTERVAL] [--ping-timeout PING_TIMEOUT]
[--verbose] [--ssl-protocol SSL_PROTOCOL[, SSL_PROTOCOL_2, ...,
SSL_PROTOCOL_N]] [--ssl-cipher-suites SSL_CIPHER_1[, SSL_CIPHER_2, ...,
SSL_CIPHER_N]] [--ssl-key-algorithm SSL_KEY_ALGORITHM] [--keystore-type
KEYSTORE_TYPE] [--keystore KEYSTORE_PATH] [--keystore-password
KEYSTORE_PASSWORD] [--truststore-type TRUSTSTORE_TYPE] [--truststore T [...]
+ control.(sh|bat) [--host HOST_OR_IP] [--port PORT] [--user USER] [--password
PASSWORD] [--ping-interval PING_INTERVAL] [--ping-timeout PING_TIMEOUT]
[--verbose] [--ssl-protocol SSL_PROTOCOL[, SSL_PROTOCOL_2, ...,
SSL_PROTOCOL_N]] [--ssl-cipher-suites SSL_CIPHER_1[, SSL_CIPHER_2, ...,
SSL_CIPHER_N]] [--ssl-key-algorithm SSL_KEY_ALGORITHM] [--ssl-factory
SSL_FACTORY_PATH] [--keystore-type KEYSTORE_TYPE] [--keystore KEYSTORE_PATH]
[--keystore-password KEYSTORE_PASSWORD] [--truststore-type [...]
This utility can do the following commands: