Files
MaxScale/maxscale-system-test/rds_vpc.h
Markus Mäkelä d7d4ec29bb Add tests from develop
Added tests from develop. The test results need to be modified for 2.0.
2017-05-26 15:40:40 +03:00

264 lines
8.1 KiB
C++

#ifndef RDS_VPC_H
#define RDS_VPC_H
#include <iostream>
#include <unistd.h>
#include "testconnections.h"
#include <jansson.h>
using namespace std;
class RDS
{
public:
/**
* @brief RDS Constructor
* @param cluster Name of cluster to create/destroy
*/
RDS(char * cluster);
const char * get_instance_name(json_t * instance);
/**
* @brief get_cluster Executes 'rds describe-bd-clusters' and creates json object with info on cluster
* Finds cluster with ID 'cluster_name_intern'.
* Does not set any internal variables
* @return JSON describption of cluster
*/
json_t * get_cluster();
/**
* @brief get_cluster_descr Creates JSON cluster describtion from string representation
* @param json String representation of cluster description
* Does not set any internal variables
* @return JSON describption of cluster
*/
json_t * get_cluster_descr(char * json);
/**
* @brief get_subnets_group_descr
* @param json String representation of subnets grop description
* Does not set any internal variables
* @return JSON description of subnets group
*/
json_t * get_subnets_group_descr(char * json);
/**
* @brief get_cluster_nodes Extract list of nodes names from cluster JSON description
* Uses 'cluster_intern'
* Does not set any internal variables
* @return JSON array of node names strings
*/
json_t * get_cluster_nodes();
/**
* @brief get_cluster_nodes Extract list of nodes names from cluster JSON description
* Does not set any internal variables
* @param cluster JSON cluster description
* @return JSON array of nodes names strings
*/
json_t * get_cluster_nodes(json_t * cluster);
/**
* @brief get_endpoints Gets list of endpoint (URLs) of cluster nodes
* Sets 'cluster_intern'
* @return JSON array of nodes endpoints (objects contaning Address and Port)
*/
json_t * get_endpoints();
/**
* @brief get_subnets Extracts subnets IDs from subnets group
* Uses 'subnets_group_name_intern'
* Sets 'vpc_id_intern' and 'subnets_intern'
* @return JSON array of node names strings
*/
json_t * get_subnets();
/**
* @brief get_subnetgroup_name Extracts subnets grop ID from cluster description
* Uses 'cluster_intern'
* Sets 'subnets_group_name_intern'
* If 'cluster_intern' is NULL function returns 'subnets_group_name_intern' value
* @return name of subnets group
*/
const char * get_subnetgroup_name();
/**
* @brief destroy_nodes Destroys nodes
* @param node_names JSON array with nodes names
* @return 0 in case of success
*/
int destroy_nodes(json_t * node_names);
/**
* @brief destroy_subnets Destoys subnets
* Uses 'subnets_intern' to get subnets list
* If 'subnets_intern' is not set it is needed to run:
* - clustr_intern=get_cluster()
* - get_subnetgroup_name()
* - get_subnets()
* @return 0 in case of success
*/
int destroy_subnets();
/**
* @brief destroy_subnets_group Destroys subnets group
* Uses 'subnets_group_name_intern'
* If 'subnets_group_name_intern' it is needed to run:
* - clustr_intern=get_cluster()
* - get_subnetgroup_name()
* @return 0 in case of success
*/
int destroy_subnets_group();
/**
* @brief destroy_route_tables Destroys route tabele
* Not needed to executed directly, route table is destroyed by destroy_vpc
* Uses 'vpc_id_intern'
* If 'vpc_id_intern' is not set it is needed to run:
* - clustr_intern=get_cluster()
* - get_subnetgroup_name()
* - get_subnets()
* @return 0 in case of success
*/
int destroy_route_tables(); // is needed?
/**
* @brief destroy_vpc Destroys VPC
* Uses 'vpc_id_intern'
* if 'vpc_id_intern' is not set it is needed to run:
* - clustr_intern=get_cluster()
* - get_subnetgroup_name()
* - get_subnets()
* @return 0 in case of success
*/
int destroy_vpc();
/**
* @brief destroy_cluster Destroys RDS cluster
* Uses 'cluster_name_intern'
* @return 0 in case of success
*/
int destroy_cluster();
/**
* @brief detach_and_destroy_gw Finds, detach and destroys internet gateways attached to VPC
* Uses 'vpc_id_intern'
* if 'vpc_id_intern' is not set it is needed to run:
* - clustr_intern=get_cluster()
* - get_subnetgroup_name()
* - get_subnets()
* @return 0 in case of success
*/
int detach_and_destroy_gw();
/**
* @brief create_vpc Creates VPC
* Sets 'vpc_id_intern'
* @param vpc_id Pointer to variable to place VpcID
* @return 0 in case of success
*/
int create_vpc(const char **vpc_id);
/**
* @brief create_subnet Creates subnet inside VPC
* Adds element to 'subnets_intern' JSON array (creates it if it does not exist)
* @param az Availability zone ID (e.g. 'eu-west-1a')
* @param cidr CIDR block (e.g. '172.30.1.0/24')
* @param subnet_id Pointer to variable to place SubnetID
* @return 0 in case of success
*/
int create_subnet(const char *az, const char *cidr, const char **subnet_id);
/**
* @brief create_subnet_group Creates subnets group for RDS
* Uses 'subnets_intern'
* Sets 'subnets_group_name_intern'
* @return 0 in case of success
*/
int create_subnet_group();
/**
* @brief create_gw Creates internet gateway for vpc_id_intern
* Uses 'vpc_id_intern'
* Sests 'gw_intern'
* @param gw_id Pointer to variable to place gateway ID
* @return 0 in case of success
*/
int create_gw(const char **gw_id);
/**
* @brief configure_route_table Adds route to route tabele attched to VPC
* Finds route table attached to VPC and adds route from internet to internet gateway
* Uses 'vpc_id_intern' and 'gw_intern'
* @param rt Pointer to variable to place route table ID which was found ond modified
* @return 0 in case of success
*/
int configure_route_table(const char **rt);
/**
* @brief create_cluster Creates RDS cluster and instances
* Also configures security group (opens port 3306)
* Uses 'cluster_name_intern', 'N_intern'
* Sets cluster_intern, sg_intern
* @return 0 in case of success
*/
int create_cluster();
/**
* @brief get_writer Find instance which have 'write' attribute
* Uses cluster_name_intern
* Calls 'aws rds describe-db-clusters' and does not use 'cluster_intern'
* (but does not update 'cluster_intern')
* @param writer_name Pointer to variable to place name of writer node
* @return 0 in case of success
*/
int get_writer(const char **writer_name);
/**
* @brief create_rds_db Creates RDS DB cluster and all needed stuff (vpc, subnets, gateway, route table, ...)
* If case of error tries to destry all created stuff
* @param cluster_name Name of DB cluster
* @param N Number of nodes
* @return 0 in case if success
*/
int create_rds_db(int N);
/**
* @brief delete_rds_cluster Destroys RDS cluster, instances and VPC in which RDS cluster was located
* Uses 'cluster_name_intern'
* Tries to get all items IDs
* @return 0 in case if success
*/
int delete_rds_cluster();
/**
* @brief wait_for_nodes Waits until N nodes are in 'avalable' state
* Uses 'cluster_name_intern'
* Sets 'cluster_intern'
* @param N Number of nodes expected to be active (can be less than number of nodes in cluster)
* @return 0 in case if success
*/
int wait_for_nodes(size_t N);
/**
* @brief do_failover Does failover for RDS cluster
* @return 0 in case if success
*/
int do_failover();
const char * cluster_name_intern;
size_t N_intern;
json_t * cluster_intern;
const char * vpc_id_intern;
json_t * subnets_intern;
const char * subnets_group_name_intern;
const char * rt_intern;
const char * gw_intern;
const char * sg_intern;
};
#endif // RDS_VPC_H