From b7768a0cb66ffb09f4a7db29533abe32fccc7340 Mon Sep 17 00:00:00 2001 From: Alberto Leiva Popper Date: Mon, 7 Oct 2024 13:25:12 -0600 Subject: [PATCH] Remove outdated unit tests Preparing for the squash. --- test/Makefile.am | 4 - test/cache_test.c | 307 +------------------------------------- test/cachent_test.c | 348 -------------------------------------------- 3 files changed, 3 insertions(+), 656 deletions(-) delete mode 100644 test/cachent_test.c diff --git a/test/Makefile.am b/test/Makefile.am index 496a0f42..afb38338 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -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} diff --git a/test/cache_test.c b/test/cache_test.c index fefc986f..13400070 100644 --- a/test/cache_test.c +++ b/test/cache_test.c @@ -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 index 019482fe..00000000 --- a/test/cachent_test.c +++ /dev/null @@ -1,348 +0,0 @@ -#include - -#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; -} -- 2.47.2