From ed63493875764be15d71a2e3666e1b31d0d2a8e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Tue, 28 May 2019 16:11:22 +0300 Subject: [PATCH] Return valid values for undefined mdbci variables If a variable is not defined in the network configuration, a valid value is returned. --- maxscale-system-test/nodes.cpp | 27 ++++++++++++++------------- maxscale-system-test/nodes.h | 4 ++-- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/maxscale-system-test/nodes.cpp b/maxscale-system-test/nodes.cpp index 68fda7ce6..7c23011a9 100644 --- a/maxscale-system-test/nodes.cpp +++ b/maxscale-system-test/nodes.cpp @@ -322,11 +322,11 @@ int Nodes::read_basic_env() { // reading IPs sprintf(env_name, "%s_%03d_network", prefix, i); - IP[i] = get_nc_item((char*) env_name); + IP[i] = strdup(get_nc_item(env_name).c_str()); // reading private IPs sprintf(env_name, "%s_%03d_private_ip", prefix, i); - IP_private[i] = get_nc_item((char*) env_name); + IP_private[i] = strdup(get_nc_item(env_name).c_str()); if (IP_private[i] == NULL) { IP_private[i] = IP[i]; @@ -335,7 +335,7 @@ int Nodes::read_basic_env() // reading IPv6 sprintf(env_name, "%s_%03d_network6", prefix, i); - IP6[i] = get_nc_item((char*) env_name); + IP6[i] = strdup(get_nc_item(env_name).c_str()); if (IP6[i] == NULL) { IP6[i] = IP[i]; @@ -344,11 +344,11 @@ int Nodes::read_basic_env() //reading sshkey sprintf(env_name, "%s_%03d_keyfile", prefix, i); - sshkey[i] = get_nc_item((char*) env_name); + sshkey[i] = strdup(get_nc_item(env_name).c_str()); sprintf(env_name, "%s_%03d_whoami", prefix, i); - access_user[i] = get_nc_item((char*) env_name); + access_user[i] = strdup(get_nc_item(env_name).c_str()); if (access_user[i] == NULL) { access_user[i] = (char *) "vagrant"; @@ -369,7 +369,7 @@ int Nodes::read_basic_env() } sprintf(env_name, "%s_%03d_hostname", prefix, i); - hostname[i] = get_nc_item((char*) env_name); + hostname[i] = strdup(get_nc_item(env_name).c_str()); if (hostname[i] == NULL) { hostname[i] = IP[i]; @@ -396,13 +396,14 @@ const char* Nodes::ip(int i) const return use_ipv6 ? IP6[i] : IP[i]; } -char * Nodes::get_nc_item(char * item_name) +std::string Nodes::get_nc_item(const char* item_name) { size_t start = network_config.find(item_name); if (start == std::string::npos) { - return NULL; + return ""; } + size_t end = network_config.find("\n", start); size_t equal = network_config.find("=", start); if (end == std::string::npos) @@ -411,14 +412,14 @@ char * Nodes::get_nc_item(char * item_name) } if (equal == std::string::npos) { - return NULL; + return ""; } - char * cstr = new char [end - equal + 1]; - strcpy(cstr, network_config.substr(equal + 1, end - equal - 1).c_str()); - setenv(item_name, cstr, 1); + std::string str = network_config.substr(equal + 1, end - equal - 1); - return (cstr); + setenv(item_name, str.c_str(), 1); + + return str; } int Nodes::get_N() diff --git a/maxscale-system-test/nodes.h b/maxscale-system-test/nodes.h index ba2b26192..5dc45583d 100644 --- a/maxscale-system-test/nodes.h +++ b/maxscale-system-test/nodes.h @@ -181,9 +181,9 @@ public: /** * @brief get_nc_item Find variable in the MDBCI network_config file * @param item_name Name of the variable - * @return value of variable + * @return value of variable or empty value if not found */ - char *get_nc_item(char * item_name); + std::string get_nc_item(const char* item_name); /** * @brief get_N Calculate the number of nodes discribed in the _netoek_config file