]> git.ipfire.org Git - thirdparty/FORT-validator.git/commitdiff
Remove outdated unit tests issue82
authorAlberto Leiva Popper <ydahhrk@gmail.com>
Mon, 7 Oct 2024 19:25:12 +0000 (13:25 -0600)
committerAlberto Leiva Popper <ydahhrk@gmail.com>
Mon, 7 Oct 2024 19:25:12 +0000 (13:25 -0600)
Preparing for the squash.

test/Makefile.am
test/cache_test.c
test/cachent_test.c [deleted file]

index 496a0f42996b1d5820fc71fda6cbabade981eb8e..afb3833808194ce272e11f033c6f8a32ffc0cc1a 100644 (file)
@@ -23,7 +23,6 @@ MY_LDADD = ${CHECK_LIBS} ${JANSSON_LIBS}
 
 check_PROGRAMS  = address.test
 check_PROGRAMS += base64.test
-check_PROGRAMS += cachent.test
 check_PROGRAMS += cache.test
 check_PROGRAMS += common.test
 check_PROGRAMS += db_table.test
@@ -54,9 +53,6 @@ address_test_LDADD = ${MY_LDADD}
 base64_test_SOURCES = base64_test.c
 base64_test_LDADD = ${MY_LDADD}
 
-cachent_test_SOURCES = cachent_test.c
-cachent_test_LDADD = ${MY_LDADD} ${JANSSON_LIBS}
-
 cache_test_SOURCES = cache_test.c
 cache_test_LDADD = ${MY_LDADD} ${JANSSON_LIBS} ${XML2_LIBS}
 
index fefc986f70b4ae17aa1eeb975bd95a284d470fc8..1340007066e52b8db97a64a8fc597f5e13fc3821 100644 (file)
@@ -674,297 +674,12 @@ START_TEST(test_rrdp_commit)
 }
 END_TEST
 
-START_TEST(test_collisions)
-{
-       /*
-        * Request
-        *
-        * 1. rsync://a.b.c/d/e/f/
-        * 2. https://x.y.z/m/n/o.notification -> rsync://a.b.c/d/e/f/
-        *
-        * - None validates
-        * - rsync validates
-        * - https validates
-        * - Both validate
-        */
-
-       struct sia_uris sias;
-
-       ck_assert_int_eq(0, hash_setup());
-       ck_assert_int_eq(0, relax_ng_init());
-
-       setup_test();
-
-       printf("==== 1 ====\n");
-
-       /* Context: rsync */
-       sias.caRepository = "rsync://a.b.c/mod/rpp1";
-       sias.rpkiManifest = "rsync://a.b.c/mod/rpp1/m.mft";
-       sias.rpkiNotify = NULL;
-
-       rsync_counter = https_counter = 0;
-       ck_assert_int_eq(0, cache_download_alt(&sias, okay, NULL));
-       ck_assert_uint_eq(1, rsync_counter);
-       ck_assert_uint_eq(0, https_counter);
-
-       cache_print();
-
-       /*
-        * Context: notification "https://a.b.c/d/notification.xml".
-        * Both point to the same caRepository (RPP).
-        *
-        * This is either two benign RPPs coexisting (likely because of key
-        * rollover), or one malicious RPP is trying to overwrite the other.
-        *
-        * So they need to be cached separately. We cannot reuse the RPP simply
-        * because the caRepositories are identical.
-        */
-       sias.rpkiNotify = "https://a.b.c/d/notification.xml";
-
-       dls[0] = NHDR("12") NSS("https://a.b.c/d/snapshot.xml",
-           "d880c0e3136695636f73f8fb6340245182f4b19bd4b092679b9002ad427dc380")
-           NTAIL;
-       dls[1] = SHDR("12") PBLSH("rsync://a.b.c/mod/rpp1/m.mft",
-           "ZXhhbXBsZTE=") STAIL;
-       dls[2] = NULL;
-
-       rsync_counter = https_counter = 0;
-       ck_assert_int_eq(0, cache_download_alt(&sias, okay, NULL));
-       ck_assert_uint_eq(0, rsync_counter);
-       ck_assert_uint_eq(2, https_counter);
-
-       cache_print();
-
-       // XXX
-}
-
-START_TEST(test_dots)
-{
-       setup_test();
-
-       run_dl_https("https://a.b.c/d", 0, 1);
-       ck_cache_https(
-               hnode(HE2UP,
-                       hnode(HO2UP("a.b.c"),
-                               hftnode(HO2UP("a.b.c/d"), HFULL, "tmp/tmp/0", NULL), NULL), NULL));
-
-       run_dl_https("https://a.b.c/d/.", 0, 0);
-       ck_cache_https(
-               hnode(HE2UP,
-                       hnode(HO2UP("a.b.c"),
-                               hftnode(HO2UP("a.b.c/d"), HFULL, "tmp/tmp/0", NULL), NULL), NULL));
-
-       run_dl_https("https://a.b.c/d/e/..", 0, 0);
-       ck_cache_https(
-               hnode(HE2UP,
-                       hnode(HO2UP("a.b.c"),
-                               hftnode(HO2UP("a.b.c/d"), HFULL, "tmp/tmp/0", NULL), NULL), NULL));
-
-       run_dl_https("https://a.b.c/./d/../e", 0, 1);
-       ck_cache_https(
-               hnode(HE2UP,
-                       hnode(HO2UP("a.b.c"),
-                               hftnode(HO2UP("a.b.c/d"), HFULL, "tmp/tmp/0", NULL),
-                               hftnode(HO2UP("a.b.c/e"), HFULL, "tmp/tmp/1", NULL), NULL), NULL));
-
-       cleanup_test();
-}
-END_TEST
-
-START_TEST(test_tal_json)
-{
-       json_t *json;
-       char *str;
-
-       setup_test();
-
-       ck_assert_int_eq(0, system("rm -rf tmp/"));
-       ck_assert_int_eq(0, system("mkdir -p tmp"));
-
-       add_node(cache, NODE("rsync://a.b.c/d", 0, 1, 0));
-       add_node(cache, NODE("rsync://a.b.c/e", 1, 0, 0));
-       add_node(cache, NODE("rsync://x.y.z/e", 0, 1, 0));
-       add_node(cache, NODE("https://a/b", 1, 1, 0));
-       add_node(cache, node("https://a/c", 0, 0, 1, 0, 1));
-
-       json = build_tal_json(cache);
-       ck_assert_int_eq(0, json_dump_file(json, "tmp/" TAL_METAFILE, JSON_COMPACT));
-
-       str = json_dumps(json, /* JSON_INDENT(4) */ JSON_COMPACT);
-       json_decref(json);
-
-       ck_assert_str_eq(
-           "[{\"type\":\"RPP\",\"url\":\"rsync://a.b.c/d\",\"attempt-timestamp\":\"1970-01-01T00:00:00Z\",\"attempt-result\":0,\"success-timestamp\":\"1970-01-01T00:00:00Z\"},"
-           "{\"type\":\"RPP\",\"url\":\"rsync://a.b.c/e\",\"attempt-timestamp\":\"1970-01-01T00:00:00Z\",\"attempt-result\":1},"
-           "{\"type\":\"RPP\",\"url\":\"rsync://x.y.z/e\",\"attempt-timestamp\":\"1970-01-01T00:00:00Z\",\"attempt-result\":0,\"success-timestamp\":\"1970-01-01T00:00:00Z\"},"
-           "{\"type\":\"TA (HTTP)\",\"url\":\"https://a/b\",\"attempt-timestamp\":\"1970-01-01T00:00:00Z\",\"attempt-result\":1,\"success-timestamp\":\"1970-01-01T00:00:00Z\"},"
-           "{\"type\":\"RRDP Notification\",\"url\":\"https://a/c\",\"attempt-timestamp\":\"1970-01-01T00:00:00Z\",\"attempt-result\":0,\"success-timestamp\":\"1970-01-01T00:00:00Z\"}]",
-           str);
-       free(str);
-
-       cache_reset(cache);
-
-       load_tal_json(cache);
-       ck_assert_ptr_ne(NULL, cache->ht);
-
-       ck_cache(
-           NODE("rsync://a.b.c/d", 0, 1, 0),
-           NODE("rsync://a.b.c/e", 1, 0, 0),
-           NODE("rsync://x.y.z/e", 0, 1, 0),
-           NODE("https://a/b", 1, 1, 0),
-           NODE("https://a/c", 0, 1, 0),
-           NULL);
-
-       cleanup_test();
-}
-END_TEST
-
-static void
-prepare_map_list(struct map_list *maps, ...)
-{
-       char const *str;
-       enum map_type type;
-       struct cache_mapping *map;
-       va_list args;
-
-       maps_init(maps);
-
-       va_start(args, maps);
-       while ((str = va_arg(args, char const *)) != NULL) {
-               if (url_is_https(str))
-                       type = MAP_HTTP;
-               else if (url_is_rsync(str))
-                       type = MAP_RSYNC;
-               else
-                       ck_abort_msg("Bad protocol: %s", str);
-               ck_assert_int_eq(0, map_create(&map, type, str));
-               maps_add(maps, map);
-       }
-       va_end(args);
-}
-
-#define PREPARE_MAP_LIST(maps, ...) prepare_map_list(maps, ##__VA_ARGS__, NULL)
-
-START_TEST(test_recover)
-{
-       struct map_list maps;
-
-       setup_test();
-
-       /* Query on empty database */
-       PREPARE_MAP_LIST(&maps, "rsync://a.b.c/d", "https://a.b.c/d");
-       ck_assert_ptr_eq(NULL, cache_recover(cache, &maps));
-       maps_cleanup(&maps);
-
-       /* Only first URI is cached */
-       cache_reset(cache);
-       run_cache_download("rsync://a/b/c", 0, 1, 0);
-
-       PREPARE_MAP_LIST(&maps, "rsync://a/b/c", "https://d/e", "https://f");
-       ck_assert_ptr_eq(maps.array[0], cache_recover(cache, &maps));
-       maps_cleanup(&maps);
-
-       /* Only second URI is cached */
-       cache_reset(cache);
-       run_cache_download("https://d/e", 0, 0, 1);
-
-       PREPARE_MAP_LIST(&maps, "rsync://a/b/c", "https://d/e", "https://f");
-       ck_assert_ptr_eq(maps.array[1], cache_recover(cache, &maps));
-       maps_cleanup(&maps);
-
-       /* Only third URI is cached */
-       cache_reset(cache);
-       run_cache_download("https://f", 0, 0, 1);
-
-       PREPARE_MAP_LIST(&maps, "rsync://a/b/c", "https://d/e", "https://f");
-       ck_assert_ptr_eq(maps.array[2], cache_recover(cache, &maps));
-       maps_cleanup(&maps);
-
-       /* None was cached */
-       cache_reset(cache);
-       run_cache_download("rsync://d/e", 0, 1, 0);
-
-       PREPARE_MAP_LIST(&maps, "rsync://a/b/c", "https://d/e", "https://f");
-       ck_assert_ptr_eq(NULL, cache_recover(cache, &maps));
-       maps_cleanup(&maps);
-
-       /*
-        * At present, cache_recover() can only be called after all of a
-        * download's URLs yielded failure.
-        * However, node.error can still be zero. This happens when the download
-        * was successful, but the RRDP code wasn't able to expand the snapshot
-        * or deltas.
-        */
-       cache_reset(cache);
-
-       add_node(cache, node("rsync/a/1", 100, 0, 1, 100, 0));
-       add_node(cache, node("rsync/a/2", 100, 1, 1, 100, 0));
-       add_node(cache, node("rsync/a/3", 200, 0, 1, 100, 0));
-       add_node(cache, node("rsync/a/4", 200, 1, 1, 100, 0));
-       add_node(cache, node("rsync/a/5", 100, 0, 1, 200, 0));
-       add_node(cache, node("rsync/a/6", 100, 1, 1, 200, 0));
-       add_node(cache, node("rsync/b/1", 100, 0, 0, 100, 0));
-       add_node(cache, node("rsync/b/2", 100, 1, 0, 100, 0));
-       add_node(cache, node("rsync/b/3", 200, 0, 0, 100, 0));
-       add_node(cache, node("rsync/b/4", 200, 1, 0, 100, 0));
-       add_node(cache, node("rsync/b/5", 100, 0, 0, 200, 0));
-       add_node(cache, node("rsync/b/6", 100, 1, 0, 200, 0));
-
-       /* Multiple successful caches: Prioritize the most recent one */
-       PREPARE_MAP_LIST(&maps, "rsync://a/1", "rsync://a/3", "rsync://a/5");
-       ck_assert_ptr_eq(maps.array[2], cache_recover(cache, &maps));
-       maps_cleanup(&maps);
-
-       PREPARE_MAP_LIST(&maps, "rsync://a/5", "rsync://a/1", "rsync://a/3");
-       ck_assert_ptr_eq(maps.array[0], cache_recover(cache, &maps));
-       maps_cleanup(&maps);
-
-       /* No successful caches: No viable candidates */
-       PREPARE_MAP_LIST(&maps, "rsync://b/2", "rsync://b/4", "rsync://b/6");
-       ck_assert_ptr_eq(NULL, cache_recover(cache, &maps));
-       maps_cleanup(&maps);
-
-       /* Status: CNF_SUCCESS is better than 0. */
-       PREPARE_MAP_LIST(&maps, "rsync://b/1", "rsync://a/1");
-       ck_assert_ptr_eq(maps.array[1], cache_recover(cache, &maps));
-       maps_cleanup(&maps);
-
-       /*
-        * If CNF_SUCCESS && error, Fort will probably run into a problem
-        * reading the cached directory, because it's either outdated or
-        * recently corrupted.
-        * But it should still TRY to read it, as there's a chance the
-        * outdatedness is not that severe.
-        */
-       PREPARE_MAP_LIST(&maps, "rsync://a/2", "rsync://b/2");
-       ck_assert_ptr_eq(maps.array[0], cache_recover(cache, &maps));
-       maps_cleanup(&maps);
-
-       /* Parents of downloaded nodes */
-       PREPARE_MAP_LIST(&maps, "rsync://a", "rsync://b");
-       ck_assert_ptr_eq(NULL, cache_recover(cache, &maps));
-       maps_cleanup(&maps);
-
-       /* Try them all at the same time */
-       PREPARE_MAP_LIST(&maps,
-           "rsync://a", "rsync://a/1", "rsync://a/2", "rsync://a/3",
-           "rsync://a/4", "rsync://a/5", "rsync://a/6",
-           "rsync://b", "rsync://b/1", "rsync://b/2", "rsync://b/3",
-           "rsync://b/4", "rsync://b/5", "rsync://b/6",
-           "rsync://e/1");
-       ck_assert_ptr_eq(maps.array[5], cache_recover(cache, &maps));
-       maps_cleanup(&maps);
-
-       cleanup_test();
-}
-END_TEST
-
 /* Boilerplate */
 
-static Suite *thread_pool_suite(void)
+static Suite *cache_suite(void)
 {
        Suite *suite;
-       TCase *rsync, *https, *rrdp, *mix, *dot, *meta, *recover;
+       TCase *rsync, *https, *rrdp;
 
        rsync = tcase_create("rsync");
        tcase_add_test(rsync, test_cache_download_rsync);
@@ -979,26 +694,10 @@ static Suite *thread_pool_suite(void)
        rrdp = tcase_create("rrdp");
        tcase_add_test(rrdp, test_rrdp_commit);
 
-       mix = tcase_create("mix");
-       tcase_add_test(https, test_collisions);
-
-       dot = tcase_create("dot");
-       tcase_add_test(dot, test_dots);
-
-       meta = tcase_create(TAL_METAFILE);
-       tcase_add_test(meta, test_tal_json);
-
-       recover = tcase_create("recover");
-       tcase_add_test(recover, test_recover);
-
        suite = suite_create("local-cache");
        suite_add_tcase(suite, rsync);
        suite_add_tcase(suite, https);
        suite_add_tcase(suite, rrdp);
-       suite_add_tcase(suite, mix);
-       suite_add_tcase(suite, dot);
-       suite_add_tcase(suite, meta);
-       suite_add_tcase(suite, recover);
 
        return suite;
 }
@@ -1009,7 +708,7 @@ int main(void)
        SRunner *runner;
        int tests_failed;
 
-       suite = thread_pool_suite();
+       suite = cache_suite();
        dls[0] = "Fort\n";
 
        runner = srunner_create(suite);
diff --git a/test/cachent_test.c b/test/cachent_test.c
deleted file mode 100644 (file)
index 019482f..0000000
+++ /dev/null
@@ -1,348 +0,0 @@
-#include <check.h>
-
-#include "alloc.c"
-#include "mock.c"
-#include "types/path.c"
-#include "types/url.c"
-
-static char deleted[16][6];
-static unsigned int dn;
-
-static void
-__delete_node_cb(struct cache_node const *node)
-{
-       strcpy(deleted[dn++], node->name);
-}
-
-START_TEST(test_delete)
-{
-       struct cache_node *root, *a, *b;
-
-       a = rnode(RO2UP("a"), NULL);
-       dn = 0;
-       cachent_delete(a);
-       ck_assert_uint_eq(1, dn);
-       ck_assert_str_eq("a", deleted[0]);
-
-       a = rnode(RO2UP("a"), NULL);
-       root = rnode(RE2UP, a, NULL);
-       dn = 0;
-       cachent_delete(a);
-       ck_assert_ptr_eq(NULL, root->children);
-       ck_assert_uint_eq(1, dn);
-       ck_assert_str_eq("a", deleted[0]);
-
-       dn = 0;
-       cachent_delete(root);
-       ck_assert_uint_eq(1, dn);
-       ck_assert_str_eq("rsync", deleted[0]);
-
-       b = rnode(RO2UP("a/b"),
-               rnode(RO2UP("a/b/c"), NULL),
-               rnode(RO2UP("a/b/d"), NULL),
-               rnode(RO2UP("a/b/e"), NULL),
-               rnode(RO2UP("a/b/f"), NULL), NULL);
-       a = rnode(RO2UP("a"),
-               b,
-               rnode(RO2UP("a/g"),
-                       rnode(RO2UP("a/g/h"),
-                               rnode(RO2UP("a/g/h/i"), NULL), NULL),
-                       rnode(RO2UP("a/g/j"),
-                               rnode(RO2UP("a/g/j/k"), NULL), NULL),
-                       rnode(RO2UP("a/g/l"),
-                               rnode(RO2UP("a/g/l/m"), NULL), NULL),
-                       rnode(RO2UP("a/g/n"),
-                               rnode(RO2UP("a/g/n/o"), NULL), NULL), NULL), NULL);
-       root = rnode(RE2UP, a, NULL);
-
-       dn = 0;
-       cachent_delete(b);
-       ck_assert_int_eq(1, HASH_COUNT(a->children));
-       ck_assert_str_eq("c", deleted[0]);
-       ck_assert_str_eq("d", deleted[1]);
-       ck_assert_str_eq("e", deleted[2]);
-       ck_assert_str_eq("f", deleted[3]);
-       ck_assert_str_eq("b", deleted[4]);
-
-       dn = 0;
-       cachent_delete(a);
-       ck_assert_int_eq(0, HASH_COUNT(root->children));
-       ck_assert_str_eq("i", deleted[0]);
-       ck_assert_str_eq("h", deleted[1]);
-       ck_assert_str_eq("k", deleted[2]);
-       ck_assert_str_eq("j", deleted[3]);
-       ck_assert_str_eq("m", deleted[4]);
-       ck_assert_str_eq("l", deleted[5]);
-       ck_assert_str_eq("o", deleted[6]);
-       ck_assert_str_eq("n", deleted[7]);
-       ck_assert_str_eq("g", deleted[8]);
-       ck_assert_str_eq("a", deleted[9]);
-
-       dn = 0;
-       cachent_delete(root);
-       ck_assert_uint_eq(1, dn);
-       ck_assert_str_eq("rsync", deleted[0]);
-}
-END_TEST
-
-static char const *expected[32];
-static unsigned int e;
-
-static bool
-ck_traverse_cb(struct cache_node *node)
-{
-       ck_assert_str_eq(expected[e++], node->path);
-       return true;
-}
-
-static void
-ck_traverse(struct cache_node *root, ...)
-{
-       char const *path;
-       unsigned int p = 0;
-       va_list args;
-
-       va_start(args, root);
-       while ((path = va_arg(args, char const *)) != NULL)
-               expected[p++] = path;
-       va_end(args);
-       expected[p] = NULL;
-
-       e = 0;
-       cachent_traverse(root, ck_traverse_cb);
-       ck_assert_uint_eq(p, e);
-
-       cachent_delete(root);
-}
-
-START_TEST(test_traverse)
-{
-       struct cache_node *root;
-
-       root = NULL;
-       ck_traverse(root, NULL);
-
-       root =  rnode(RO2UP("a"), NULL);
-       ck_traverse(root, "tmp/rsync/a", NULL);
-
-       root =  rnode(RO2UP("a"),
-                       rnode(RO2UP("a/b"), NULL), NULL);
-       ck_traverse(root, "tmp/rsync/a", "tmp/rsync/a/b", NULL);
-
-       root =  rnode(RO2UP("a"),
-                       rnode(RO2UP("a/b"),
-                               rnode(RO2UP("a/b/c"), NULL), NULL), NULL);
-       ck_traverse(root,
-               "tmp/rsync/a",
-               "tmp/rsync/a/b",
-               "tmp/rsync/a/b/c", NULL);
-
-       root =  rnode(RO2UP("a"),
-                       rnode(RO2UP("a/b"),
-                               rnode(RO2UP("a/b/c"), NULL),
-                               rnode(RO2UP("a/b/d"), NULL), NULL), NULL);
-       ck_traverse(root,
-               "tmp/rsync/a",
-               "tmp/rsync/a/b",
-               "tmp/rsync/a/b/c",
-               "tmp/rsync/a/b/d", NULL);
-
-       root =  rnode(RO2UP("a"),
-                       rnode(RO2UP("a/b"),
-                               rnode(RO2UP("a/b/c"), NULL),
-                               rnode(RO2UP("a/b/d"), NULL), NULL),
-                       rnode(RO2UP("a/e"), NULL), NULL);
-       ck_traverse(root,
-               "tmp/rsync/a",
-               "tmp/rsync/a/b",
-               "tmp/rsync/a/b/c",
-               "tmp/rsync/a/b/d",
-               "tmp/rsync/a/e", NULL);
-
-       root =  rnode(RO2UP("a"),
-                       rnode(RO2UP("a/b"), NULL),
-                       rnode(RO2UP("a/c"),
-                               rnode(RO2UP("a/c/d"), NULL),
-                               rnode(RO2UP("a/c/e"), NULL), NULL), NULL);
-       ck_traverse(root,
-               "tmp/rsync/a",
-               "tmp/rsync/a/b",
-               "tmp/rsync/a/c",
-               "tmp/rsync/a/c/d",
-               "tmp/rsync/a/c/e", NULL);
-
-       root =  rnode(RO2UP("a"),
-                       rnode(RO2UP("a/b"),
-                               rnode(RO2UP("a/b/c"), NULL),
-                               rnode(RO2UP("a/b/d"), NULL), NULL),
-                       rnode(RO2UP("a/e"),
-                               rnode(RO2UP("a/e/f"), NULL),
-                               rnode(RO2UP("a/e/g"), NULL), NULL), NULL);
-       ck_traverse(root,
-               "tmp/rsync/a",
-               "tmp/rsync/a/b",
-               "tmp/rsync/a/b/c",
-               "tmp/rsync/a/b/d",
-               "tmp/rsync/a/e",
-               "tmp/rsync/a/e/f",
-               "tmp/rsync/a/e/g", NULL);
-
-       root =  rnode(RO2UP("a"),
-                       rnode(RO2UP("a/b"),
-                               rnode(RO2UP("a/b/c"), NULL),
-                               rnode(RO2UP("a/b/d"), NULL),
-                               rnode(RO2UP("a/b/e"), NULL),
-                               rnode(RO2UP("a/b/f"), NULL), NULL),
-                       rnode(RO2UP("a/g"),
-                               rnode(RO2UP("a/g/h"),
-                                       rnode(RO2UP("a/g/h/i"), NULL), NULL),
-                               rnode(RO2UP("a/g/j"),
-                                       rnode(RO2UP("a/g/j/k"), NULL), NULL),
-                               rnode(RO2UP("a/g/l"),
-                                       rnode(RO2UP("a/g/l/m"), NULL), NULL),
-                               rnode(RO2UP("a/g/n"),
-                                       rnode(RO2UP("a/g/n/o"), NULL), NULL), NULL), NULL);
-       ck_traverse(root,
-               "tmp/rsync/a",
-               "tmp/rsync/a/b",
-               "tmp/rsync/a/b/c",
-               "tmp/rsync/a/b/d",
-               "tmp/rsync/a/b/e",
-               "tmp/rsync/a/b/f",
-               "tmp/rsync/a/g",
-               "tmp/rsync/a/g/h",
-               "tmp/rsync/a/g/h/i",
-               "tmp/rsync/a/g/j",
-               "tmp/rsync/a/g/j/k",
-               "tmp/rsync/a/g/l",
-               "tmp/rsync/a/g/l/m",
-               "tmp/rsync/a/g/n",
-               "tmp/rsync/a/g/n/o", NULL);
-}
-END_TEST
-
-START_TEST(test_provide)
-{
-       struct cache_node *rsync, *abc, *d, *e, *f, *g, *h, *ee;
-
-       rsync = cachent_root_rsync();
-       ck_assert_ptr_ne(NULL, rsync);
-       ck_assert_ptr_eq(NULL, rsync->parent);
-       ck_assert_str_eq("rsync://", rsync->url);
-       ck_assert_str_eq("tmp/rsync", rsync->path);
-       ck_assert_str_eq("rsync", rsync->name);
-
-       /* Create branch chain from root */
-       e = cachent_provide(rsync, "rsync://a.b.c/d/e");
-       ck_assert_ptr_ne(NULL, e);
-       ck_assert_str_eq("rsync://a.b.c/d/e", e->url);
-       ck_assert_str_eq("tmp/rsync/a.b.c/d/e", e->path);
-       ck_assert_str_eq("e", e->name);
-
-       d = e->parent;
-       ck_assert_ptr_ne(NULL, d);
-       ck_assert_str_eq("rsync://a.b.c/d", d->url);
-       ck_assert_str_eq("tmp/rsync/a.b.c/d", d->path);
-       ck_assert_str_eq("d", d->name);
-
-       abc = d->parent;
-       ck_assert_ptr_ne(NULL, abc);
-       ck_assert_str_eq("rsync://a.b.c", abc->url);
-       ck_assert_str_eq("tmp/rsync/a.b.c", abc->path);
-       ck_assert_str_eq("a.b.c", abc->name);
-
-       ck_assert_ptr_eq(rsync, abc->parent);
-
-       /* Find leaf from root */
-       ck_assert_ptr_eq(e, cachent_provide(rsync, "rsync://a.b.c/d/e"));
-       /* Find branch from root */
-       ck_assert_ptr_eq(d, cachent_provide(rsync, "rsync://a.b.c/d"));
-       /* Find leaf from non-root ancestor */
-       ck_assert_ptr_eq(e, cachent_provide(abc, "rsync://a.b.c/d/e"));
-       /* Find branch from non-root ancestor */
-       ck_assert_ptr_eq(d, cachent_provide(abc, "rsync://a.b.c/d"));
-       /* Find selves */
-       ck_assert_ptr_eq(NULL, cachent_provide(rsync, "rsync://")); /* Illegal */
-       ck_assert_ptr_eq(abc, cachent_provide(abc, "rsync://a.b.c"));
-       ck_assert_ptr_eq(e, cachent_provide(e, "rsync://a.b.c/d/e"));
-
-       /* Some not normalized noise */
-       ck_assert_ptr_eq(e, cachent_provide(e, "rsync://a.b.c/d/e////"));
-       ck_assert_ptr_eq(e, cachent_provide(e, "rsync://a.b.c///d/./e//"));
-       ck_assert_ptr_eq(e, cachent_provide(e, "rsync://a.b.c/d/f/../e/"));
-
-       /* Create sibling from root */
-       f = cachent_provide(rsync, "rsync://a.b.c/f");
-       ck_assert_ptr_ne(NULL, f);
-       ck_assert_ptr_eq(abc, f->parent);
-       ck_assert_str_eq("rsync://a.b.c/f", f->url);
-       ck_assert_str_eq("tmp/rsync/a.b.c/f", f->path);
-       ck_assert_str_eq("f", f->name);
-
-       /* Create more than one descendant from root */
-       h = cachent_provide(rsync, "rsync://a.b.c/f/g/h");
-       ck_assert_ptr_ne(NULL, h);
-       ck_assert_str_eq("rsync://a.b.c/f/g/h", h->url);
-       ck_assert_str_eq("tmp/rsync/a.b.c/f/g/h", h->path);
-       ck_assert_str_eq("h", h->name);
-
-       g = h->parent;
-       ck_assert_ptr_ne(NULL, g);
-       ck_assert_ptr_eq(f, g->parent);
-       ck_assert_str_eq("rsync://a.b.c/f/g", g->url);
-       ck_assert_str_eq("tmp/rsync/a.b.c/f/g", g->path);
-       ck_assert_str_eq("g", g->name);
-
-       /* Try to create a conflict by prefix */
-       ee = cachent_provide(rsync, "rsync://a.b.c/d/ee");
-       ck_assert_ptr_ne(e, ee);
-       ck_assert_ptr_eq(d, ee->parent);
-       ck_assert_str_eq("rsync://a.b.c/d/ee", ee->url);
-       ck_assert_str_eq("tmp/rsync/a.b.c/d/ee", ee->path);
-       ck_assert_str_eq("ee", ee->name);
-       ck_assert_ptr_eq(e, cachent_provide(abc, "rsync://a.b.c/d/e"));
-       ck_assert_ptr_eq(ee, cachent_provide(abc, "rsync://a.b.c/d/ee"));
-
-       /* Prefixes don't match */
-       ck_assert_ptr_eq(NULL, cachent_provide(d, "rsync://a.b.c/dd"));
-       ck_assert_ptr_eq(NULL, cachent_provide(d, "rsync://a.b.c/f"));
-       ck_assert_ptr_eq(NULL, cachent_provide(d, "rsync://a.b.c/d/../f"));
-
-       cachent_delete(rsync);
-}
-END_TEST
-
-static Suite *thread_pool_suite(void)
-{
-       Suite *suite;
-       TCase *traverses, *provide;
-
-       traverses = tcase_create("traverses");
-       tcase_add_test(traverses, test_delete);
-       tcase_add_test(traverses, test_traverse);
-
-       provide = tcase_create("provide");
-       tcase_add_test(provide, test_provide);
-
-       suite = suite_create("cachent");
-       suite_add_tcase(suite, traverses);
-       suite_add_tcase(suite, provide);
-
-       return suite;
-}
-
-int main(void)
-{
-       Suite *suite;
-       SRunner *runner;
-       int tests_failed;
-
-       suite = thread_pool_suite();
-
-       runner = srunner_create(suite);
-       srunner_run_all(runner, CK_NORMAL);
-       tests_failed = srunner_ntests_failed(runner);
-       srunner_free(runner);
-
-       return (tests_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}