diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2013-03-28 20:17:24 -0400 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2013-03-28 23:45:59 -0400 |
commit | 844ec79b3c2f246114ea316ebe1f36044bdb688e (patch) | |
tree | 6e937c3738ee75fdd2c22e5f9bec72d789d6e13b /src/journal/test-catalog.c | |
parent | 18cd5fe99f70a55a2d6f2303d6ee0624942695b1 (diff) |
catalog: open up catalog internals
In order to write tests for the catalog functions, they
are made non-static and start taking a 'database' parameter,
which is the name of a file with the preprocessed catalog
entries.
This makes it possible to make test-catalog part of the
normal test suite, since it now only operates on files
in /tmp.
Some more tests are added.
Diffstat (limited to 'src/journal/test-catalog.c')
-rw-r--r-- | src/journal/test-catalog.c | 99 |
1 files changed, 92 insertions, 7 deletions
diff --git a/src/journal/test-catalog.c b/src/journal/test-catalog.c index c75b1464fe..21149f18a5 100644 --- a/src/journal/test-catalog.c +++ b/src/journal/test-catalog.c @@ -4,6 +4,7 @@ This file is part of systemd. Copyright 2012 Lennart Poettering + Copyright 2013 Zbigniew Jędrzejewski-Szmek systemd is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -20,31 +21,115 @@ ***/ #include <locale.h> +#include <stdlib.h> +#include <unistd.h> +#include <errno.h> #include "util.h" #include "log.h" -#include "catalog.h" +#include "macro.h" #include "sd-messages.h" +#include "catalog.h" -int main(int argc, char *argv[]) { +static void test_import(Hashmap *h, struct strbuf *sb, + const char* contents, ssize_t size, int code) { + int r; + char name[] = "/tmp/test-catalog.XXXXXX"; + int _cleanup_close_ fd = mkstemp(name); + assert(fd >= 0); + assert_se(write(fd, contents, size) == size); + + r = catalog_import_file(h, sb, name); + assert(r == code); + + unlink(name); +} + +static void test_catalog_importing(void) { + Hashmap *h; + struct strbuf *sb; + + assert_se(h = hashmap_new(catalog_hash_func, catalog_compare_func)); + assert_se(sb = strbuf_new()); + +#define BUF "xxx" + test_import(h, sb, BUF, sizeof(BUF), -EINVAL); +#undef BUF + assert(hashmap_isempty(h)); + log_debug("----------------------------------------"); + +#define BUF \ +"-- 0027229ca0644181a76c4e92458afaff dededededededededededededededede\n" \ +"Subject: message\n" \ +"\n" \ +"payload\n" + test_import(h, sb, BUF, sizeof(BUF), -EINVAL); +#undef BUF + + log_debug("----------------------------------------"); + +#define BUF \ +"-- 0027229ca0644181a76c4e92458afaff dededededededededededededededed\n" \ +"Subject: message\n" \ +"\n" \ +"payload\n" + test_import(h, sb, BUF, sizeof(BUF), 0); +#undef BUF + + assert(hashmap_size(h) == 1); + log_debug("----------------------------------------"); + + hashmap_free_free(h); + strbuf_cleanup(sb); +} + + +static const char* database = NULL; + +static void test_catalog_update(void) { + int r; + char _cleanup_free_ *path = NULL; + + static char name[] = "/tmp/test-catalog.XXXXXX"; + r = mkstemp(name); + assert(r >= 0); + + database = name; + + /* Test what happens if there are no files. */ + r = catalog_update(database, NULL, NULL); + assert(r >= 0); + + /* Note: this might actually not find anything, if systemd was + * not installed before. That should be fine too. */ + r = catalog_update(database, NULL, catalog_file_dirs); + assert(r >= 0); +} + +int main(int argc, char *argv[]) { _cleanup_free_ char *text = NULL; + int r; setlocale(LC_ALL, "de_DE.UTF-8"); log_set_max_level(LOG_DEBUG); - assert_se(catalog_update() >= 0); + test_catalog_importing(); - assert_se(catalog_list(stdout, true) >= 0); + test_catalog_update(); - assert_se(catalog_list(stdout, false) >= 0); + r = catalog_list(stdout, database, true); + assert_se(r >= 0); - assert_se(catalog_get(SD_MESSAGE_COREDUMP, &text) >= 0); + r = catalog_list(stdout, database, false); + assert_se(r >= 0); + assert_se(catalog_get(database, SD_MESSAGE_COREDUMP, &text) >= 0); printf(">>>%s<<<\n", text); - fflush(stdout); + if (database) + unlink(database); return 0; } |