blob: 7c8e379cbbf379b211d24b817fc5ca4d47010813 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.ignite.internal.rest;
import static org.apache.ignite.internal.testframework.IgniteTestUtils.escapeWindowsPath;
import static org.apache.ignite.internal.testframework.IgniteTestUtils.getResourcePath;
import java.nio.file.Path;
import java.util.concurrent.CompletableFuture;
import org.apache.ignite.Ignite;
import org.apache.ignite.IgnitionManager;
import org.apache.ignite.internal.rest.ssl.ItRestSslTest;
import org.apache.ignite.internal.testframework.TestIgnitionManager;
/** Presentation of Ignite node for tests. */
public class RestNode {
private final String keyStorePath;
private final String keyStorePassword;
private final String trustStorePath;
private final String trustStorePassword;
private final Path workDir;
private final String name;
private final int networkPort;
private final int httpPort;
private final int httpsPort;
private final boolean sslEnabled;
private final boolean sslClientAuthEnabled;
private final boolean dualProtocol;
private final String ciphers;
private CompletableFuture<Ignite> igniteNodeFuture;
/** Constructor. */
public RestNode(
String keyStorePath,
String keyStorePassword,
String trustStorePath,
String trustStorePassword,
Path workDir,
String name,
int networkPort,
int httpPort,
int httpsPort,
boolean sslEnabled,
boolean sslClientAuthEnabled,
boolean dualProtocol,
String ciphers
) {
this.keyStorePath = keyStorePath;
this.keyStorePassword = keyStorePassword;
this.trustStorePath = trustStorePath;
this.trustStorePassword = trustStorePassword;
this.workDir = workDir;
this.name = name;
this.networkPort = networkPort;
this.httpPort = httpPort;
this.httpsPort = httpsPort;
this.sslEnabled = sslEnabled;
this.sslClientAuthEnabled = sslClientAuthEnabled;
this.dualProtocol = dualProtocol;
this.ciphers = ciphers;
}
public static RestNodeBuilder builder() {
return new RestNodeBuilder();
}
/** Starts the node. */
public CompletableFuture<Ignite> start() {
igniteNodeFuture = TestIgnitionManager.start(name, bootstrapCfg(), workDir.resolve(name));
return igniteNodeFuture;
}
/** Restarts the node. */
public CompletableFuture<Ignite> restart() {
stop();
igniteNodeFuture = TestIgnitionManager.start(name, null, workDir.resolve(name));
return igniteNodeFuture;
}
/** Stops the node. */
public void stop() {
IgnitionManager.stop(name);
}
/** Returns the node name. */
public String name() {
return name;
}
/** Returns HTTP address of the node. Uses the port that was used in the config. */
public String httpAddress() {
return "http://localhost:" + httpPort;
}
/** Returns HTTPS address of the node. Uses the port that was used in the config. */
public String httpsAddress() {
return "https://localhost:" + httpsPort;
}
/** Returns future of the node. */
public CompletableFuture<Ignite> igniteNodeFuture() {
return igniteNodeFuture;
}
private String bootstrapCfg() {
String keyStoreFilePath = escapeWindowsPath(getResourcePath(ItRestSslTest.class, keyStorePath));
String trustStoreFilePath = escapeWindowsPath(getResourcePath(ItRestSslTest.class, trustStorePath));
return "{\n"
+ " network: {\n"
+ " port: " + networkPort + ",\n"
+ " nodeFinder: {\n"
+ " netClusterNodes: [ \"localhost:3344\", \"localhost:3345\", \"localhost:3346\" ]\n"
+ " }\n"
+ " },\n"
+ " clientConnector.port: " + (httpPort + 1000) + ",\n"
+ " rest: {\n"
+ " port: " + httpPort + ",\n"
+ " dualProtocol: " + dualProtocol + ",\n"
+ " ssl: {\n"
+ " enabled: " + sslEnabled + ",\n"
+ " clientAuth: " + (sslClientAuthEnabled ? "require" : "none") + ",\n"
+ " ciphers: \"" + ciphers + "\",\n"
+ " port: " + httpsPort + ",\n"
+ " keyStore: {\n"
+ " path: \"" + keyStoreFilePath + "\",\n"
+ " password: " + keyStorePassword + "\n"
+ " }, \n"
+ " trustStore: {\n"
+ " type: JKS,\n"
+ " path: \"" + trustStoreFilePath + "\",\n"
+ " password: " + trustStorePassword + "\n"
+ " }\n"
+ " }\n"
+ " }\n"
+ "}";
}
}