add per folder and per test env file loading to TAP tests

pull/4238/head
Miro Stauder 3 years ago
parent 3efa344a8b
commit 06a1d5a9fe

@ -14,11 +14,15 @@ SQLITE3_DIR=$(DEPS_PATH)/sqlite3/sqlite3
SQLITE3_IDIR=$(SQLITE3_DIR)
SQLITE3_LDIR=$(SQLITE3_DIR)
DOTENV_DIR=./cpp-dotenv/cpp-dotenv
DOTENV_IDIR=$(DOTENV_DIR)/include
DOTENV_LDIR=$(DOTENV_DIR)
IDIR=../../../include
LDIR=../../../lib
LIBPROXYSQLAR=$(LDIR)/libproxysql.a
INCLUDEDIRS=-I$(IDIR) -I$(JSON_IDIR) -I$(MARIADB_IDIR) -I${CURL_IDIR} -I${SQLITE3_IDIR}
INCLUDEDIRS=-I$(IDIR) -I$(JSON_IDIR) -I$(MARIADB_IDIR) -I${CURL_IDIR} -I${SQLITE3_IDIR} -I$(DOTENV_IDIR)
.PHONY: all
all: libtap.a
@ -26,12 +30,20 @@ all: libtap.a
.PHONY: clean
clean:
rm -f *.o libtap.a || true
find cpp-dotenv/cpp-dotenv/ -name '*.o' -or -name '*.a' -delete || true
OPT=-O2
debug: OPT = -O0 -DDEBUG -ggdb
debug: libtap.a
libtap.a: tap.cpp tap.h command_line.cpp command_line.h utils.cpp utils.h
libtap.a: tap.cpp tap.h command_line.cpp command_line.h utils.cpp utils.h cpp-dotenv
g++ -c tap.cpp command_line.cpp utils.cpp -std=c++11 $(INCLUDEDIRS) $(OPT)
ar rcs libtap.a tap.o command_line.o utils.o
ar rcs libtap.a tap.o command_line.o utils.o $$(find $(DOTENV_DIR)/ -name '*.o')
cpp-dotenv/cpp-dotenv/libcpp_dotenv.a:
cd cpp-dotenv && rm -rf cpp-dotenv-*/ || true
cd cpp-dotenv && tar -zxf cpp-dotenv-*.tar.gz
cd cpp-dotenv/cpp-dotenv && cmake . -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Debug
cd cpp-dotenv/cpp-dotenv && CC=${CC} CXX=${CXX} ${MAKE}
cpp-dotenv: cpp-dotenv/cpp-dotenv/libcpp_dotenv.a

@ -11,7 +11,11 @@
#include "command_line.h"
#include "json.hpp"
#include "dotenv.h"
using nlohmann::json;
using dotenv::env;
//using namespace dotenv;
CommandLine::CommandLine() {}
@ -100,6 +104,25 @@ int CommandLine::getEnv() {
*field = strdup(value);
};
{
// char dir_name[256]
// getcwd(dir_name, sizeof(dir_name);
// strcat(dir_name,".env")
// env.load_dotenv(".env", true).load_dotenv(dir_name, true);
char temp[PATH_MAX];
std::string dir_name = getcwd(temp, sizeof(temp)) ? std::string( temp ) : std::string("");
env.load_dotenv(".env", true);
env.load_dotenv((dir_name.substr(dir_name.find_last_of('/') + 1) + ".env").c_str(), true);
fprintf(stdout, ">>> %s %s <<<\n", (dir_name + ".env").c_str(), (dir_name.substr(dir_name.find_last_of('/') + 1) + ".env").c_str());
std::string exe_name;
std::ifstream("/proc/self/comm") >> exe_name;
env.load_dotenv((exe_name + ".env").c_str(), true);
env.load_dotenv((exe_name.substr(0, exe_name.size() - 2) + ".env").c_str(), true);
fprintf(stdout, ">>> %s %s <<<\n", (exe_name + ".env").c_str(), (exe_name.substr(0, exe_name.size() - 2) + ".env").c_str());
}
value=getenv("TAP_HOST");
if(!value) return -1;
replace_str_field(&this->host, value);

@ -0,0 +1 @@
cpp-dotenv-1.0.0-alpha

@ -10,7 +10,7 @@
#include <unistd.h>
#include <sys/wait.h>
#include <mysql.h>
#include "mysql.h"
#include "tap.h"
#include "utils.h"

@ -0,0 +1 @@
TAP_ENV_VAR1=.env

@ -65,6 +65,10 @@ COREDUMPER_DIR=$(DEPS_PATH)/coredumper/coredumper
COREDUMPER_IDIR=$(COREDUMPER_DIR)/include
COREDUMPER_LDIR=$(COREDUMPER_DIR)/src
DOTENV_DIR=../tap/cpp-dotenv/cpp-dotenv
DOTENV_IDIR=$(DOTENV_DIR)/include
DOTENV_LDIR=$(DOTENV_DIR)
IDIR=../../../include
LDIR=../../../lib
TAP_LIBDIR=../tap
@ -77,7 +81,7 @@ EXECUTABLE=proxysql
OBJ=../../../src/obj/proxysql_global.o ../../../src/obj/main.o ../../../src/obj/proxy_tls.o
INCLUDEDIRS=-I../tap -I$(RE2_PATH) -I$(IDIR) -I$(JEMALLOC_IDIR) -I$(SQLITE3_DIR) -I$(MICROHTTPD_IDIR) -I$(LIBHTTPSERVER_IDIR) -I$(CURL_IDIR) -I$(DAEMONPATH_IDIR) -I$(MARIADB_IDIR) -I$(SSL_IDIR) -I$(JSON_IDIR) -I$(LIBCONFIG_IDIR) -I$(PROMETHEUS_IDIR) -I$(EV_IDIR)
INCLUDEDIRS=-I../tap -I$(RE2_PATH) -I$(IDIR) -I$(JEMALLOC_IDIR) -I$(SQLITE3_DIR) -I$(MICROHTTPD_IDIR) -I$(LIBHTTPSERVER_IDIR) -I$(CURL_IDIR) -I$(DAEMONPATH_IDIR) -I$(MARIADB_IDIR) -I$(SSL_IDIR) -I$(JSON_IDIR) -I$(LIBCONFIG_IDIR) -I$(PROMETHEUS_IDIR) -I$(EV_IDIR) -I$(DOTENV_IDIR)
LDIRS=-L$(TAP_LIBDIR) -L$(LDIR) -L$(JEMALLOC_LDIR) $(LIBCONFIG_LDIR) -L$(RE2_PATH)/obj -L$(MARIADB_LDIR) -L$(DAEMONPATH_LDIR) -L$(PCRE_LDIR) -L$(MICROHTTPD_LDIR) -L$(LIBHTTPSERVER_LDIR) -L$(LIBINJECTION_LDIR) -L$(CURL_LDIR) -L$(EV_LDIR) -L$(SSL_LDIR) -L$(PROMETHEUS_LDIR)
UNAME_S := $(shell uname -s)

@ -0,0 +1,44 @@
#include <stdlib.h>
#include <cstring>
#include "tap.h"
#include "command_line.h"
int main() {
CommandLine cl;
char* value = NULL;
// this test checks the env file loading mechanism implemented in tap/command_line.cpp:CommandLine::getEnv()
// foldername/foldername.env - enviroment vars for whole folder
// foldername/testname-t.env - enviroment vars only for testname-t
// create
// echo 'TAP_ENV_VAR1=.env' > .env
// echo 'TAP_ENV_VAR2=tests.env' > tests.env
// echo 'TAP_ENV_VAR3=envvars-t.env' > envvars-t.env
// echo 'TAP_ENV_VAR4=envvars.env' > envvars.env
// if (cl.getEnv()) {
// diag("Failed to get the required environmental variables.");
// return -1;
// }
cl.getEnv();
plan(4);
value = getenv("TAP_ENV_VAR1");
ok((value != NULL) and (strcmp(value, ".env") == 0), "Env variable 'TAP_ENV_VAR1' from '.env' Expected: '.env' Actual: '%s'", value); // ok_1
value = getenv("TAP_ENV_VAR2");
ok((value != NULL) and (strcmp(value, "tests.env") == 0), "Env variable 'TAP_ENV_VAR2' from 'tests.env' Expected: 'tests.env' Actual: '%s'", value); // ok_2
value = getenv("TAP_ENV_VAR3");
ok((value != NULL) and (strcmp(value, "envvars-t.env") == 0), "Env variable 'TAP_ENV_VAR3' from 'envvars-t.env' Expected: 'envvars-t.env' Actual: '%s'", value); // ok_3
value = getenv("TAP_ENV_VAR4");
ok((value != NULL) and (strcmp(value, "envvars.env") == 0), "Env variable 'TAP_ENV_VAR4' from 'envvars.env' Expected: 'envvars.env' Actual: '%s'", value); // ok_4
return exit_status();
}

@ -0,0 +1 @@
TAP_ENV_VAR3=envvars-t.env

@ -0,0 +1 @@
TAP_ENV_VAR4=envvars.env

@ -0,0 +1 @@
TAP_ENV_VAR2=tests.env
Loading…
Cancel
Save