blob: 1170fe6a4c8f01bffd03e724a36fcdad58a3e111 [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.
*/
#pragma once
#ifndef INTEGRATION_TEST_FRAMEWORK_GFSH_H
#define INTEGRATION_TEST_FRAMEWORK_GFSH_H
#include <string>
#include <vector>
class Gfsh {
public:
Gfsh() = default;
virtual ~Gfsh() = default;
class Start;
Start start();
class Stop;
Stop stop();
class Create;
Create create();
class Connect;
Connect connect();
class Shutdown;
Shutdown shutdown();
class Deploy;
Deploy deploy();
class ExecuteFunction;
ExecuteFunction executeFunction();
class Verb {
public:
protected:
explicit Verb(Gfsh &gfsh);
Gfsh &gfsh_;
};
template <class Result>
class Command {
public:
virtual Result execute(const std::string &user, const std::string &password,
const std::string &keyStorePath,
const std::string &trustStorePath,
const std::string &keyStorePassword,
const std::string &trustStorePassword) {
Result{gfsh_}.parse(gfsh_.execute(command_, user, password, keyStorePath,
trustStorePath, keyStorePassword,
trustStorePassword));
}
virtual Result execute() {
Result{gfsh_}.parse(gfsh_.execute(command_, "", "", "", "", "", ""));
}
virtual std::string toString() { return command_; }
protected:
Command(Gfsh &gfsh, std::string command)
: gfsh_(gfsh), command_(std::move(command)) {}
Gfsh &gfsh_;
std::string command_;
};
class Start {
public:
explicit Start(Gfsh &gfsh);
class Server;
Server server();
class Locator;
Locator locator();
class Locator : public Command<void> {
public:
explicit Locator(Gfsh &gfsh);
Locator &withName(const std::string &name);
Locator &withDir(const std::string &dir);
Locator &withBindAddress(const std::string &bindAddress);
Locator &withPort(const uint16_t &port);
Locator &withRemoteLocators(const std::vector<uint16_t> &locatorPorts);
Locator &withDistributedSystemId(const uint16_t &dsId);
Locator &withJmxManagerPort(const uint16_t &jmxManagerPort);
Locator &withHttpServicePort(const uint16_t &httpServicePort);
Locator &withLogLevel(const std::string &logLevel);
Locator &withMaxHeap(const std::string &maxHeap);
Locator &withClasspath(const std::string classpath);
Locator &withSecurityManager(const std::string securityManager);
Locator &withConnect(const std::string connect);
Locator &withPreferIPv6(bool useIPv6);
Locator &withSslEnabledComponents(const std::string &components);
Locator &withSslKeystore(const std::string &keystore);
Locator &withSslTruststore(const std::string &truststore);
Locator &withSslKeystorePassword(const std::string &keystorePassword);
Locator &withSslTruststorePassword(const std::string &truststorePassword);
Locator &withConnect(const bool connect);
Locator &withJmxManagerStart(const bool startJmxManager);
Locator &withSslRequireAuthentication(const bool require);
Locator &withPropertiesFile(const std::string file);
Locator &withSecurityPropertiesFile(const std::string file);
Locator &withHostNameForClients(const std::string hostName);
};
class Server : public Command<void> {
public:
explicit Server(Gfsh &gfsh);
Server &withName(const std::string &name);
Server &withDir(const std::string &dir);
Server &withBindAddress(const std::string &bindAddress);
Server &withPort(const uint16_t &serverPort);
Server &withLocators(const std::string &locators);
Server &withLogLevel(const std::string &logLevel);
Server &withMaxHeap(const std::string &maxHeap);
Server &withClasspath(const std::string classpath);
Server &withSecurityManager(const std::string securityManager);
Server &withUser(const std::string user);
Server &withPassword(const std::string password);
Server &withCacheXMLFile(const std::string file);
Server &withPreferIPv6(bool useIPv6);
Server &withSslEnabledComponents(const std::string &components);
Server &withSslKeystore(const std::string &keystore);
Server &withSslTruststore(const std::string &truststore);
Server &withSslKeystorePassword(const std::string &keystorePassword);
Server &withSslTruststorePassword(const std::string &truststorePassword);
Server &withSslRquireAuthentication(const bool require);
Server &withPropertiesFile(const std::string file);
Server &withSecurityPropertiesFile(const std::string file);
Server &withHostNameForClients(const std::string hostName);
};
private:
Gfsh &gfsh_;
};
class Stop {
public:
explicit Stop(Gfsh &gfsh);
class Server;
Server server();
class Locator;
Locator locator();
class Locator : public Command<void> {
public:
explicit Locator(Gfsh &gfsh);
Locator &withName(const std::string &name);
Locator &withDir(const std::string &dir);
};
class Server : public Command<void> {
public:
explicit Server(Gfsh &gfsh);
Server &withName(const std::string &name);
Server &withDir(const std::string &dir);
};
private:
Gfsh &gfsh_;
};
class Create : public Verb {
public:
explicit Create(Gfsh &gfsh);
class Region;
Region region();
class GatewaySender;
GatewaySender gatewaySender();
class GatewayReceiver;
GatewayReceiver gatewayReceiver();
class Region : public Command<void> {
public:
explicit Region(Gfsh &gfsh);
Region &withName(const std::string &name);
Region &withType(const std::string &type);
Region &withRedundantCopies(const std::string &copies);
Region &withBuckets(const std::string &totalNumBuckets);
Region &withGatewaySenderId(const std::string &gatewaySenderId);
};
class GatewaySender : public Command<void> {
public:
explicit GatewaySender(Gfsh &gfsh);
GatewaySender &withId(const std::string &id);
GatewaySender &withRemoteDSId(const std::string &remoteDSId);
};
class GatewayReceiver : public Command<void> {
public:
explicit GatewayReceiver(Gfsh &gfsh);
};
};
class Connect : public Command<void> {
public:
explicit Connect(Gfsh &gfsh);
Connect &withJmxManager(const std::string &jmxManager);
Connect &withUser(const std::string &user);
Connect &withPassword(const std::string &password);
Connect &withUseSsl(const bool useSsl);
Connect &withKeystore(const std::string &keystore);
Connect &withTruststore(const std::string &truststore);
Connect &withKeystorePassword(const std::string &keystorePassword);
Connect &withTruststorePassword(const std::string &truststorePassword);
};
class Shutdown : public Command<void> {
public:
explicit Shutdown(Gfsh &gfsh);
Shutdown &withIncludeLocators(bool includeLocators);
};
class Deploy : public Command<void> {
public:
explicit Deploy(Gfsh &gfsh);
Deploy &jar(const std::string &jarFile);
};
class ExecuteFunction : public Command<void> {
public:
explicit ExecuteFunction(Gfsh &gfsh);
ExecuteFunction &withId(const std::string &functionName);
ExecuteFunction &withMember(const std::string &withMember);
};
protected:
virtual void execute(const std::string &command, const std::string &user,
const std::string &password,
const std::string &keyStorePath,
const std::string &trustStorePath,
const std::string &keyStorePassword,
const std::string &trustStorePassword) = 0;
};
template <>
void Gfsh::Command<void>::execute(const std::string &user,
const std::string &password,
const std::string &keyStorePath,
const std::string &trustStorePath,
const std::string &keyStorePassword,
const std::string &trustStorePassword);
template <>
void Gfsh::Command<void>::execute();
#endif // INTEGRATION_TEST_FRAMEWORK_GFSH_H