From cca8bb90920a2779ef14d2623c6ba2cc94d39ee6 Mon Sep 17 00:00:00 2001 From: Dave Wysochanski Date: Sun, 7 Dec 2008 19:37:07 +0000 Subject: [PATCH] Add liblvm interactive test infrastructure to build. --- WHATS_NEW | 1 + configure | 3 +- configure.in | 1 + include/.symlinks | 1 + lib/lvm2.h | 53 ++++++++++++++++++++ test/api/Makefile.in | 39 +++++++++++++++ test/api/test.c | 116 +++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 213 insertions(+), 1 deletion(-) create mode 100644 lib/lvm2.h create mode 100644 test/api/Makefile.in create mode 100644 test/api/test.c diff --git a/WHATS_NEW b/WHATS_NEW index 769480b7f..228888a93 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.02.44 - ==================================== + Add liblvm interactive test infrastructure to build. Use better random seed value in temp file creation. Add generic function to read /dev/urandom, used in uuid calculation. Use displayable_lvs_in_vg and lv_is_displayable for consistency throughout. diff --git a/configure b/configure index 2fe92fd06..5d2ed2222 100755 --- a/configure +++ b/configure @@ -11720,7 +11720,7 @@ LVM_VERSION="\"`cat VERSION 2>/dev/null || echo Unknown`\"" ################################################################################ -ac_config_files="$ac_config_files Makefile make.tmpl daemons/Makefile daemons/clvmd/Makefile daemons/dmeventd/Makefile daemons/dmeventd/libdevmapper-event.pc daemons/dmeventd/plugins/Makefile daemons/dmeventd/plugins/mirror/Makefile daemons/dmeventd/plugins/snapshot/Makefile doc/Makefile include/Makefile lib/Makefile lib/format1/Makefile lib/format_pool/Makefile lib/locking/Makefile lib/mirror/Makefile lib/snapshot/Makefile libdm/Makefile libdm/libdevmapper.pc man/Makefile po/Makefile scripts/clvmd_init_red_hat scripts/Makefile test/Makefile tools/Makefile tools/version.h" +ac_config_files="$ac_config_files Makefile make.tmpl daemons/Makefile daemons/clvmd/Makefile daemons/dmeventd/Makefile daemons/dmeventd/libdevmapper-event.pc daemons/dmeventd/plugins/Makefile daemons/dmeventd/plugins/mirror/Makefile daemons/dmeventd/plugins/snapshot/Makefile doc/Makefile include/Makefile lib/Makefile lib/format1/Makefile lib/format_pool/Makefile lib/locking/Makefile lib/mirror/Makefile lib/snapshot/Makefile libdm/Makefile libdm/libdevmapper.pc man/Makefile po/Makefile scripts/clvmd_init_red_hat scripts/Makefile test/Makefile test/api/Makefile tools/Makefile tools/version.h" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -12301,6 +12301,7 @@ do "scripts/clvmd_init_red_hat") CONFIG_FILES="$CONFIG_FILES scripts/clvmd_init_red_hat" ;; "scripts/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/Makefile" ;; "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; + "test/api/Makefile") CONFIG_FILES="$CONFIG_FILES test/api/Makefile" ;; "tools/Makefile") CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;; "tools/version.h") CONFIG_FILES="$CONFIG_FILES tools/version.h" ;; diff --git a/configure.in b/configure.in index d18d5fdb7..0a054067a 100644 --- a/configure.in +++ b/configure.in @@ -806,6 +806,7 @@ po/Makefile scripts/clvmd_init_red_hat scripts/Makefile test/Makefile +test/api/Makefile tools/Makefile tools/version.h ]) diff --git a/include/.symlinks b/include/.symlinks index b70b96df3..1a4bd93b9 100644 --- a/include/.symlinks +++ b/include/.symlinks @@ -1,5 +1,6 @@ ../daemons/clvmd/clvm.h ../daemons/dmeventd/libdevmapper-event.h +../lib/lvm2.h ../lib/activate/activate.h ../lib/activate/targets.h ../lib/cache/lvmcache.h diff --git a/lib/lvm2.h b/lib/lvm2.h new file mode 100644 index 000000000..8ddaf68c8 --- /dev/null +++ b/lib/lvm2.h @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved. + * Copyright (C) 2004-2008 Red Hat, Inc. All rights reserved. + * + * This file is part of LVM2. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the GNU Lesser General Public License v.2.1. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#ifndef _LIB_LVM2_H +#define _LIB_LVM2_H + +#include + +/* + * Library Initialisation + * FIXME: For now just #define lvm2_create() and lvm2_destroy() to + * create_toolcontext() and destroy_toolcontext() + */ +struct arg; +struct cmd_context; +struct cmd_context *create_toolcontext(struct arg *the_args, unsigned is_static, unsigned is_long_lived); +void destroy_toolcontext(struct cmd_context *cmd); + +/* + * lvm2_create +lvm_handle_t lvm2_create(void); + * + * Description: Create an LVM2 handle used in many other APIs. + * + * Returns: + * NULL: Fail - unable to initialise handle. + * non-NULL: Success - valid LVM2 handle returned + */ +#define lvm2_create(X) create_toolcontext(NULL,0,1) + +/* + * lvm2_destroy +void lvm2_destroy(lvm_handle_t h); + * + * Description: Destroy an LVM2 handle allocated with lvm2_create + * + * Parameters: + * - h (IN): handle obtained from lvm2_create + */ +#define lvm2_destroy(X) destroy_toolcontext(X) + +#endif diff --git a/test/api/Makefile.in b/test/api/Makefile.in new file mode 100644 index 000000000..4032a7808 --- /dev/null +++ b/test/api/Makefile.in @@ -0,0 +1,39 @@ +# +# Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved. +# Copyright (C) 2004-2008 Red Hat, Inc. All rights reserved. +# +# This file is part of LVM2. +# +# This copyrighted material is made available to anyone wishing to use, +# modify, copy, or redistribute it subject to the terms and conditions +# of the GNU General Public License v.2. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ + +SOURCES = test.c +INCLUDES += -I${top_srcdir}/lib + +ifeq ("@DEBUG@", "yes") + DEFS += -DDEBUG +endif + +TARGETS = test + +LVMLIBS = -llvm -ldevmapper + +DEFS += -D_REENTRANT +CFLAGS += -fno-strict-aliasing + +LDFLAGS += -L$(top_srcdir)/api/lib + +include $(top_srcdir)/make.tmpl + +test: $(OBJECTS) $(top_srcdir)/lib/liblvm.a $(top_srcdir)/libdm/libdevmapper.so + $(CC) -o test $(OBJECTS) $(CFLAGS) $(LDFLAGS) $(LVMLIBS) $(LIBS) + diff --git a/test/api/test.c b/test/api/test.c new file mode 100644 index 000000000..de53c46c4 --- /dev/null +++ b/test/api/test.c @@ -0,0 +1,116 @@ +/* + * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved. + * Copyright (C) 2004-2008 Red Hat, Inc. All rights reserved. + * + * This file is part of LVM2. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the GNU Lesser General Public License v.2.1. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#include +#include +#include +#include +#include "lvm2.h" + +#define MAX_ARGS 64 + +static int lvm_split(char *str, int *argc, char **argv, int max) +{ + char *b = str, *e; + *argc = 0; + + while (*b) { + while (*b && isspace(*b)) + b++; + + if ((!*b) || (*b == '#')) + break; + + e = b; + while (*e && !isspace(*e)) + e++; + + argv[(*argc)++] = b; + if (!*e) + break; + *e++ = '\0'; + b = e; + if (*argc == max) + break; + } + + return *argc; +} + +static int lvmapi_test_shell(void *h) +{ + int argc, i; + char *input = NULL, *args[MAX_ARGS], **argv; + + while (1) { + free(input); + input = readline("lvm> "); + + /* EOF */ + if (!input) { + printf("\n"); + break; + } + + /* empty line */ + if (!*input) + continue; + + argv = args; + + if (lvm_split(input, &argc, argv, MAX_ARGS) == MAX_ARGS) { + printf("Too many arguments, sorry."); + continue; + } + + if (!strcmp(argv[0], "lvm")) { + argv++; + argc--; + } + + if (!argc) + continue; + + if (!strcmp(argv[0], "quit") || !strcmp(argv[0], "exit")) { + printf("Exiting.\n"); + break; + } else if (!strcmp(argv[0], "?") || !strcmp(argv[0], "help")) { + printf("No commands defined\n"); + } else if (!strcmp(argv[0], "scan")) { + for (i=1; i < argc; i++) + printf("Scan a path!\n"); + } + } + + free(input); + return 0; +} + +int main (int argc, char *argv[]) +{ + void *h; + + h = lvm2_create(); + if (!h) { + printf("Unable to open lvm library instance\n"); + return 1; + } + + lvmapi_test_shell(h); + + if (h) + lvm2_destroy(h); + return 0; +} + -- 2.43.5