]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libfdisk: add stuff for unit tests
authorKarel Zak <kzak@redhat.com>
Mon, 28 Jan 2013 09:09:03 +0000 (10:09 +0100)
committerKarel Zak <kzak@redhat.com>
Mon, 11 Mar 2013 12:00:54 +0000 (13:00 +0100)
Signed-off-by: Karel Zak <kzak@redhat.com>
libfdisk/src/Makemodule.am
libfdisk/src/fdiskP.h
libfdisk/src/test.c [new file with mode: 0644]

index 20d4e4e6609b892579e8ada5664e14f3d9476af3..eb40a3f1af4cfdceb358186bbfa9dc5b864a82d7 100644 (file)
@@ -7,8 +7,10 @@
 noinst_LTLIBRARIES += libfdisk.la
 libfdisk_la_SOURCES = \
        libfdisk/src/libfdisk.h \
+       libfdisk/src/fdiskP.h \
        \
        libfdisk/src/init.c \
+       libfdisk/src/test.c \
        libfdisk/src/alignment.c \
        libfdisk/src/label.c \
        libfdisk/src/utils.c \
@@ -35,5 +37,16 @@ libfdisk_la_LIBADD += libuuid.la
 libfdisk_la_CFLAGS += -I$(ul_libuuid_incdir)
 endif
 
-
 libfdisk_la_DEPENDENCIES = $(libfdisk_la_LIBADD)
+
+libfdisk_tests_cflags  = -DTEST_PROGRAM $(libfdisk_la_CFLAGS)
+libfdisk_tests_ldflags = -static
+libfdisk_tests_ldadd   = libfdisk.la
+
+if BUILD_LIBBLKID
+libfdisk_tests_ldflags += libblkid.la
+endif
+
+if BUILD_LIBUUID
+libfdisk_tests_ldflags += libuuid.la
+endif
index cef03fc203ca5ea15009bd7c78e22bd7e6336d05..3a40bb449a59420f28eaa648497417e85afb6734 100644 (file)
@@ -86,6 +86,19 @@ extern int fdisk_debug_mask;
 # define DBG_FLUSH do { ; } while(0)
 #endif
 
+
+#ifdef TEST_PROGRAM
+struct fdisk_test {
+       const char      *name;
+       int             (*body)(struct fdisk_test *ts, int argc, char *argv[]);
+       const char      *usage;
+};
+
+/* test.c */
+extern int fdisk_run_test(struct fdisk_test *tests, int argc, char *argv[]);
+#endif
+
+
 typedef unsigned long long sector_t;
 
 /*
@@ -221,6 +234,7 @@ struct fdisk_context {
                                         * FIXME: use any enum rather than hardcoded number */
 };
 
+
 /* context.c */
 extern int __fdisk_context_switch_label(struct fdisk_context *cxt,
                                    struct fdisk_label *lb);
diff --git a/libfdisk/src/test.c b/libfdisk/src/test.c
new file mode 100644 (file)
index 0000000..31ed7e0
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2008-2009 Karel Zak <kzak@redhat.com>
+ *
+ * This file may be redistributed under the terms of the
+ * GNU Lesser General Public License.
+ *
+ * Routines for TEST_PROGRAMs
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+#ifndef TEST_PROGRAM
+#define TEST_PROGRAM
+#endif
+
+#include "fdiskP.h"
+
+int fdisk_run_test(struct fdisk_test *tests, int argc, char *argv[])
+{
+       int rc = -1;
+       struct fdisk_test *ts;
+
+       assert(tests);
+       assert(argc);
+       assert(argv);
+
+       if (argc < 2 ||
+           strcmp(argv[1], "--help") == 0 ||
+           strcmp(argv[1], "-h") == 0)
+               goto usage;
+
+       fdisk_init_debug(0);
+
+       for (ts = tests; ts->name; ts++) {
+               if (strcmp(ts->name, argv[1]) == 0) {
+                       rc = ts->body(ts, argc - 1, argv + 1);
+                       if (rc)
+                               printf("FAILED [rc=%d]", rc);
+                       break;
+               }
+       }
+
+       if (rc < 0 && ts->name == NULL)
+               goto usage;
+
+       return rc == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
+usage:
+       printf("\nUsage:\n\t%s <test> [testoptions]\nTests:\n",
+                       program_invocation_short_name);
+       for (ts = tests; ts->name; ts++) {
+               printf("\t%-15s", ts->name);
+               if (ts->usage)
+                       printf(" %s\n", ts->usage);
+       }
+       printf("\n");
+       return EXIT_FAILURE;
+}