From df97cf5323fcce2a9b556adbdb03a73bba40a76f Mon Sep 17 00:00:00 2001 From: "norbert.bizet" Date: Wed, 23 Feb 2022 06:19:06 -0500 Subject: [PATCH] Windows: windows-env_test created to exercice env var support --- bacula/src/tools/windows-env-test.c | 142 ++++++++++++++++++++++++++++ bacula/src/win32/tools/Makefile | 9 +- 2 files changed, 149 insertions(+), 2 deletions(-) create mode 100644 bacula/src/tools/windows-env-test.c diff --git a/bacula/src/tools/windows-env-test.c b/bacula/src/tools/windows-env-test.c new file mode 100644 index 000000000..944f9dd78 --- /dev/null +++ b/bacula/src/tools/windows-env-test.c @@ -0,0 +1,142 @@ +/* + Bacula(R) - The Network Backup Solution + + Copyright (C) 2000-2023 Kern Sibbald + + The original author of Bacula is Kern Sibbald, with contributions + from many others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. + + This notice must be preserved when any source code is + conveyed and/or propagated. + + Bacula(R) is a registered trademark of Kern Sibbald. +*/ + +#include "bacula.h" +#include "lib/unittests.h" + + +char *run_cmd(char *command, POOLMEM **out, char *env[]) +{ + **out=0; + if (run_program_full_output(command, 0, *out, env) != 0) { + berrno be; + Dmsg1(0, "run_program_full_output done. %s", *out); + Jmsg(NULL, M_ERROR, 0, _("Can't run command %s. ERR=%s\n"), + command, be.bstrerror(errno)); + if (**out) { + Dmsg1(0, "%s", *out); + } + return NULL; + } + + strip_trailing_junk(*out); + + return *out; +} + +void *test1(char *env[]) +{ + const char *ret; + POOLMEM *q = get_pool_memory(PM_FNAME); + + run_cmd((char *)"set HY_ENV_VM_NAME", &q, env); + Dmsg1(0, "test1 returns %s\n", q); + if (strcmp(q, "HY_ENV_VM_NAME=NULL") == 0) { + ret = "ok"; + } else { + ret = "not ok"; + } + free_pool_memory(q); + return (void *)ret; +} + + +void *test2(char *env[]) +{ + const char *ret; + POOLMEM *q = get_pool_memory(PM_FNAME); + + run_cmd((char *)"set HY_ENV_JOB_NAME", &q, env); + Dmsg1(0, "test2 returns %s\n", q); + if (strcmp(q, "HY_ENV_JOB_NAME=hyperv-backup.2022-02-18_13.42.54_15") == 0) { + ret = "ok"; + } else { + ret = "not ok"; + } + free_pool_memory(q); + return (void *)ret; +} + +void *test3(char *env[]) +{ + const char *ret; + POOLMEM *q = get_pool_memory(PM_FNAME); + + run_cmd((char *)"set HY_ENV_REF_JOB_NAME", &q, env); + Dmsg1(0, "test3 returns %s\n", q); + if (strcmp(q, "HY_ENV_REF_JOB_NAME=hyperv-backup.2022-02-17_17.58.09_21") == 0) { + ret = "ok"; + } else { + ret = "not ok"; + } + free_pool_memory(q); + return (void *)ret; +} + +int main(int argc, char **argv) +{ + void *ret; + Unittests t("windows_env_test", true, true); + t.configure(TEST_QUIET); + init_stack_dump(); + my_name_is(argc, argv, "windows_env_test"); + init_msg(NULL, NULL); + daemon_start_time = time(NULL); + setup_daemon_message_queue(); + + start_watchdog(); + + debug_level = 500; + + char *_env[4]; + + POOLMEM *env_item1 = get_pool_memory(PM_FNAME); + Mmsg(env_item1, "HY_ENV_VM_NAME=NULL"); + _env[0] = env_item1; + + POOLMEM *env_item2 = get_pool_memory(PM_FNAME); + Mmsg(env_item2, "HY_ENV_JOB_NAME=hyperv-backup.2022-02-18_13.42.54_15"); + _env[1] = env_item2; + + POOLMEM *env_item3 = get_pool_memory(PM_FNAME); + Mmsg(env_item3, "HY_ENV_REF_JOB_NAME=hyperv-backup.2022-02-17_17.58.09_21"); + _env[2] = env_item3; + + _env[3] = NULL; + + ret = test1(_env); + Dmsg1(0, "test1. ret = %s\n", (char *)ret); + ok(strcmp((char *)ret, "ok") == 0, "Checking test1"); + + ret = test2(_env); + ok(strcmp((char *)ret, "ok") == 0, "Checking test2"); + + ret = test3(_env); + ok(strcmp((char *)ret, "ok") == 0, "Checking test3"); + + free_pool_memory(env_item3); + free_pool_memory(env_item2); + free_pool_memory(env_item1); + + free_daemon_message_queue(); + stop_watchdog(); + term_msg(); + close_memory_pool(); + return report(); +} \ No newline at end of file diff --git a/bacula/src/win32/tools/Makefile b/bacula/src/win32/tools/Makefile index 8659d8ffd..ff05222e8 100644 --- a/bacula/src/win32/tools/Makefile +++ b/bacula/src/win32/tools/Makefile @@ -46,7 +46,8 @@ ALL_OBJS = \ $(OBJDIR)/testls.o \ $(OBJDIR)/bregex.o \ $(OBJDIR)/bwild.o \ - $(OBJDIR)/bpipe-test.o + $(OBJDIR)/bpipe-test.o\ + $(OBJDIR)/windows-env-test.o ########################################################################## @@ -79,9 +80,10 @@ clean: $(call clean_exe,$(BINDIR)/thread.exe) $(call clean_exe,$(BINDIR)/cdp-client.exe) $(call clean_exe,$(BINDIR)/bpipe-test.exe) + $(call clean_exe,$(BINDIR)/windows-env-test.exe) $(ECHO_CMD)rm -rf $(OBJDIRS) -tests: $(BINDIR)/bpipe-test.exe $(BINDIR)/bsock_meeting_test.exe $(BINDIR)/thread.exe +tests: $(BINDIR)/bpipe-test.exe $(BINDIR)/windows-env-test.exe $(BINDIR)/bsock_meeting_test.exe $(BINDIR)/thread.exe # @@ -136,6 +138,9 @@ $(BINDIR)/bsock_meeting_test.exe: $(OBJDIR)/bsock_meeting_test.o $(OBJDIR)/unitt $(BINDIR)/bpipe-test.exe: $(OBJDIR)/bpipe-test.o $(OBJDIR)/unittests.o $(LIBS_BACULA) $(call link_conapp,$(TEST_LIBS)) +$(BINDIR)/windows-env-test.exe: $(OBJDIR)/windows-env-test.o $(OBJDIR)/unittests.o $(LIBS_BACULA) + $(call link_conapp,$(TEST_LIBS)) + $(BINDIR)/cdp-client.exe: $(OBJDIR)/cdp-client.o $(OBJDIR)/backupservice.o $(OBJDIR)/folderwatcher.o $(OBJDIR)/journal.o $(LIBS_BACULA) $(call link_conapp,$(LIBS_PTHREADS)) -- 2.47.3