summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorKarel Zak2010-05-24 14:13:33 +0200
committerKarel Zak2010-06-01 11:06:49 +0200
commit125b6a9191a1b09dbeaa1a068e7b0a966fca03fa (patch)
tree5422bff2d9a42ec6b10371881f05918335f1300b /lib
parenttaskset: move bitmap routines to lib/cpuset.c (diff)
downloadkernel-qcow2-util-linux-125b6a9191a1b09dbeaa1a068e7b0a966fca03fa.tar.gz
kernel-qcow2-util-linux-125b6a9191a1b09dbeaa1a068e7b0a966fca03fa.tar.xz
kernel-qcow2-util-linux-125b6a9191a1b09dbeaa1a068e7b0a966fca03fa.zip
tests: add cpuset regression test
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/Makefile.am3
-rw-r--r--lib/cpuset.c70
2 files changed, 72 insertions, 1 deletions
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 0f008b302..93b79a5a7 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -3,13 +3,14 @@ include $(top_srcdir)/config/include-Makefile.am
AM_CPPFLAGS += -DTEST_PROGRAM
noinst_PROGRAMS = test_blkdev test_ismounted test_wholedisk test_mangle \
- test_strtosize
+ test_strtosize test_cpuset
test_blkdev_SOURCES = blkdev.c
test_ismounted_SOURCES = ismounted.c
test_wholedisk_SOURCES = wholedisk.c
test_mangle_SOURCES = mangle.c
test_strtosize_SOURCES = strtosize.c
+test_cpuset_SOURCES = cpuset.c
if LINUX
test_blkdev_SOURCES += linux_version.c
diff --git a/lib/cpuset.c b/lib/cpuset.c
index abdd40901..92ed73043 100644
--- a/lib/cpuset.c
+++ b/lib/cpuset.c
@@ -239,3 +239,73 @@ int cstr_to_cpuset(struct bitmask *mask, const char* str)
return 0;
}
+
+#ifdef TEST_PROGRAM
+
+#include <err.h>
+#include <getopt.h>
+
+int main(int argc, char *argv[])
+{
+ struct bitmask *set;
+ char *buf, *mask = NULL, *range = NULL;
+ int ncpus = 2048, rc, c;
+
+ struct option longopts[] = {
+ { "ncpus", 1, 0, 'n' },
+ { "mask", 1, 0, 'm' },
+ { "range", 1, 0, 'r' },
+ { NULL, 0, 0, 0 }
+ };
+
+ while ((c = getopt_long(argc, argv, "n:m:r:", longopts, NULL)) != -1) {
+ switch(c) {
+ case 'n':
+ ncpus = atoi(optarg);
+ break;
+ case 'm':
+ mask = strdup(optarg);
+ break;
+ case 'r':
+ range = strdup(optarg);
+ break;
+ default:
+ goto usage_err;
+ }
+ }
+
+ if (!mask && !range)
+ goto usage_err;
+
+ set = bitmask_alloc(ncpus);
+ if (!set)
+ err(EXIT_FAILURE, "failed to allocate cpu set");
+
+ buf = malloc(7 * ncpus);
+ if (!buf)
+ err(EXIT_FAILURE, "failed to allocate cpu set buffer");
+
+ if (mask)
+ rc = str_to_cpuset(set, mask);
+ else
+ rc = cstr_to_cpuset(set, range);
+
+ if (rc)
+ errx(EXIT_FAILURE, "failed to parse string: %s", mask ? : range);
+
+ printf("%-15s = %15s ", mask ? : range, cpuset_to_str(set, buf));
+ printf("[%s]\n", cpuset_to_cstr(set, buf));
+
+ free(buf);
+ free(set->maskp);
+ free(set);
+
+ return EXIT_SUCCESS;
+
+usage_err:
+ fprintf(stderr,
+ "usage: %s [--ncpus <num>] --mask <mask> | --range <list>",
+ program_invocation_short_name);
+ exit(EXIT_FAILURE);
+}
+#endif