int test_tag_filter(void) { BEGIN(); #undef TAG_NAMESPACE #define TAG_NAMESPACE "test" tag_typedef_t tag_a = STRTAG_TYPEDEF(a); #define TAG_A(s) tag_a, tag_str_v((s)) tag_typedef_t tag_b = STRTAG_TYPEDEF(b); #define TAG_B(s) tag_b, tag_str_v((s)) tagi_t filter[2] = {{ URLTAG_ANY() }, { TAG_END() }}; tagi_t *lst, *result; lst = tl_list(TAG_A("X"), TAG_SKIP(2), URLTAG_URL((void *)"urn:foo"), TAG_B("Y"), URLTAG_URL((void *)"urn:bar"), TAG_NULL()); TEST_1(lst); result = tl_afilter(NULL, filter, lst); TEST_1(result); TEST_P(result[0].t_tag, urltag_url); TEST_P(result[1].t_tag, urltag_url); tl_vfree(lst); free(result); END(); }
static int test_notfound(void) { char const haystack[] = "abcabcabcabc"; char const needle[] = "cab"; char const *a; BEGIN(); TEST_P(bm_memmem(haystack, 12, needle, 3, NULL), haystack + 2); TEST_P(bm_memmem(needle, 3, haystack, 12, NULL), NULL); #if HAVE_MEMMEM if (bm_memmem(haystack, 12, "", 0, NULL) == NULL) { fprintf(stderr, "test_memmem.c: " "*** WARNING: system memmem() fails with empty needle ***\n"); } else #endif { TEST_P(bm_memmem(haystack, 12, "", 0, NULL), haystack); TEST_P(bm_memmem(haystack, 12, null, 0, NULL), haystack); TEST_P(bm_memmem(haystack, 0, "", 0, NULL), haystack); TEST_P(bm_memmem(haystack, 0, null, 0, NULL), haystack); } TEST_P(bm_memmem(haystack + 2, 3, needle, 3, NULL), haystack + 2); TEST_P(bm_memmem(haystack + 2, 2, needle, 3, NULL), NULL); a = "a\0bc"; TEST_P(bm_memmem(a, 4, "a\0bc", 4, NULL), a); TEST_P(bm_memmem(a, 4, "\0bc", 3, NULL), a + 1); END(); }
static void do_test (int argc, char *argv[]) { char *fname; int rc; KEYDB_HANDLE hd1; KEYDB_SEARCH_DESC desc1; KBNODE kb1; (void) argc; (void) argv; /* t-keydb-get-keyblock.gpg contains two keys: a modern key followed by a legacy key. If we get the keyblock for the modern key, we shouldn't get - */ fname = prepend_srcdir ("t-keydb-get-keyblock.gpg"); rc = keydb_add_resource (fname, 0); test_free (fname); if (rc) ABORT ("Failed to open keyring."); hd1 = keydb_new (); if (!hd1) ABORT (""); rc = classify_user_id ("8061 5870 F5BA D690 3336 86D0 F2AD 85AC 1E42 B367", &desc1, 0); if (rc) ABORT ("Failed to convert fingerprint for 1E42B367"); rc = keydb_search (hd1, &desc1, 1, NULL); if (rc) ABORT ("Failed to lookup key associated with 1E42B367"); rc = keydb_get_keyblock (hd1, &kb1); TEST_P ("", ! rc); }
/** Test basic memory home operations */ static int test_alloc(void) { exhome_t *h0, *h1, *h2, *h3; su_home_t home[1] = { SU_HOME_INIT(home) }; su_home_t home0[1]; enum { N = 40 }; void *m0[N], *m1[N], *m; char *c, *c0, *p0, *p1; int i; enum { destructed_once = 1 }; int d0, d1a, d1, d2, d3; BEGIN(); /* su_home_init() was not initializing suh_locks */ memset(home0, 0xff, sizeof home0); TEST(su_home_init(home0), 0); TEST_VOID(su_home_deinit(home0)); TEST_1(h0 = su_home_new(sizeof(*h0))); TEST_1(h1 = su_home_clone(h0->home, sizeof(*h1))); d0 = d1a = d1 = d2 = d3 = 0; h0->p = &d0; h1->p = &d1a; TEST(su_home_destructor(h0->home, exdestructor), 0); TEST(su_home_destructor(h1->home, exdestructor), 0); TEST_1(h2 = su_home_ref(h0->home)); su_home_unref(h0->home); TEST(d0, 0); for (i = 0; i < 128; i++) TEST_1(su_alloc(h0->home, 16)); for (i = 0; i < 128; i++) TEST_1(su_alloc(h1->home, 16)); su_home_unref(h1->home); TEST(d1a, destructed_once); TEST_1(h1 = su_home_clone(h0->home, sizeof(*h1))); TEST(su_home_destructor(h1->home, exdestructor), 0); h1->p = &d1; for (i = 0; i < 128; i++) TEST_1(su_alloc(h1->home, 16)); for (i = 0; i < 128; i++) TEST_1(su_alloc(h2->home, 16)); su_home_unref(h2->home); /* Should call destructor of cloned home, too */ TEST(d0, destructed_once); TEST(d1, destructed_once); TEST_1(h0 = su_home_new(sizeof(*h0))); TEST_1(h1 = su_home_clone(h0->home, sizeof(*h1))); TEST_1(h2 = su_home_clone(h1->home, sizeof(*h2))); TEST_1(h3 = su_home_clone(h2->home, sizeof(*h3))); TEST(su_home_threadsafe(h0->home), 0); for (i = 0; i < N; i++) { TEST_1(m0[i] = su_zalloc(h3->home, 20)); TEST_1(m1[i] = su_zalloc(h2->home, 20)); } TEST_1(m = su_zalloc(h2->home, 20)); TEST_1(su_in_home(h2->home, m)); TEST_1(!su_in_home(h2->home, (char *)m + 1)); TEST_1(!su_in_home(h2->home, (void *)(intptr_t)su_in_home)); TEST_1(!su_in_home(h3->home, m)); TEST_1(!su_in_home(NULL, m)); TEST_1(!su_in_home(h3->home, NULL)); TEST(su_home_move(home, NULL), 0); TEST(su_home_move(NULL, home), 0); TEST(su_home_move(home, h3->home), 0); TEST(su_home_move(h2->home, h3->home), 0); TEST(su_home_move(h1->home, h2->home), 0); su_home_preload(home, 1, 1024 + 2 * 8); TEST_1(c = su_zalloc(home, 64)); p0 = c; p1 = c + 1024; c0 = c; TEST_P(c = su_realloc(home, c0, 127), c0); TEST_1(c = c0 = su_zalloc(home, 1024 - 128)); TEST_1(p0 <= c); TEST_1(c < p1); TEST_P(c = su_realloc(home, c, 128), c0); TEST_P(c = su_realloc(home, c, 1023 - 128), c0); TEST_P(c = su_realloc(home, c, 1024 - 128), c0); TEST_1(c = su_realloc(home, c, 1024)); TEST_1(c = su_realloc(home, c, 2 * 1024)); TEST_P(c = su_realloc(home, p0, 126), p0); TEST_1(c = su_realloc(home, p0, 1024)); TEST_P(c = su_realloc(home, c, 0), NULL); su_home_check(home); su_home_deinit(home); su_home_check(h2->home); su_home_zap(h2->home); su_home_check(h0->home); su_home_zap(h0->home); { su_home_t h1[1]; memset(h1, 0, sizeof h1); TEST(su_home_init(h1), 0); TEST(su_home_threadsafe(h1), 0); TEST_1(su_home_ref(h1)); TEST_1(su_home_ref(h1)); TEST(su_home_destructor(h1, test_destructor), 0); TEST_1(!su_home_unref(h1)); TEST_1(!su_home_unref(h1)); TEST_1(su_home_unref(h1)); TEST(h1->suh_size, 13); } /* Test su_home_parent() */ TEST_1(h0 = su_home_new(sizeof *h0)); TEST_1(h1 = su_home_clone(h0->home, sizeof *h1)); TEST_1(h2 = su_home_clone(h1->home, sizeof *h2)); TEST_1(h3 = su_home_clone(h2->home, sizeof *h3)); TEST_P(su_home_parent(h0->home), NULL); TEST_P(su_home_parent(h1->home), h0); TEST_P(su_home_parent(h2->home), h1); TEST_P(su_home_parent(h3->home), h2); TEST(su_home_move(h0->home, h1->home), 0); TEST_P(su_home_parent(h2->home), h0); TEST_P(su_home_parent(h3->home), h2); TEST(su_home_move(h0->home, h2->home), 0); TEST_P(su_home_parent(h3->home), h0); su_home_move(NULL, h0->home); TEST_P(su_home_parent(h0->home), NULL); TEST_P(su_home_parent(h1->home), NULL); TEST_P(su_home_parent(h2->home), NULL); TEST_P(su_home_parent(h3->home), NULL); su_home_unref(h0->home); su_home_unref(h1->home); su_home_unref(h2->home); su_home_unref(h3->home); END(); }
static int test_vectors(void) { su_home_t home[1] = { SU_HOME_INIT(home) }; su_vector_t *v, *w; test_data_t *data1, *data2, *data3, *data4; char foo[] = "foo"; char bar[] = "bar"; char baz[] = "baz"; void **a; int i; BEGIN(); TEST_1(v = su_vector_create(home, NULL)); TEST_1(su_vector_is_empty(v)); TEST(su_vector_append(v, foo), 0); TEST(su_vector_append(v, bar), 0); TEST(su_vector_insert(v, 0, baz), 0); TEST_P(su_vector_item(v, 0), baz); TEST_P(su_vector_item(v, 1), foo); TEST_P(su_vector_item(v, 2), bar); TEST_P(su_vector_item(v, 3), NULL); TEST_P(su_vector_item(v, (unsigned)-1), NULL); TEST_1(!su_vector_is_empty(v)); su_vector_destroy(v); TEST_1(v = su_vector_create(home, NULL)); TEST(su_vector_insert(v, 0, "j"), 0); TEST(su_vector_insert(v, 0, "i"), 0); TEST(su_vector_insert(v, 0, "h"), 0); TEST(su_vector_insert(v, 0, "g"), 0); TEST(su_vector_insert(v, 0, "f"), 0); TEST(su_vector_insert(v, 0, "e"), 0); TEST(su_vector_insert(v, 0, "d"), 0); TEST(su_vector_insert(v, 0, "c"), 0); TEST(su_vector_insert(v, 0, "b"), 0); TEST(su_vector_insert(v, 0, "a"), 0); TEST_SIZE(su_vector_len(v), 10); TEST_1(a = su_vector_get_array(v)); for (i = 0; i < 10; i++) { TEST_S(su_vector_item(v, i), a[i]); } TEST_P(su_vector_item(v, 10), NULL); TEST_P(a[10], NULL); TEST_1(w = su_vector_create(home, NULL)); TEST(su_vector_append(w, "a"), 0); TEST(su_vector_append(w, "b"), 0); TEST(su_vector_append(w, "c"), 0); TEST(su_vector_append(w, "d"), 0); TEST(su_vector_append(w, "e"), 0); TEST(su_vector_append(w, "f"), 0); TEST(su_vector_append(w, "g"), 0); TEST(su_vector_append(w, "h"), 0); TEST(su_vector_append(w, "i"), 0); TEST(su_vector_append(w, "j"), 0); TEST_SIZE(su_vector_len(w), 10); for (i = 0; i < 10; i++) { TEST_S(su_vector_item(v, i), a[i]); } su_vector_empty(w); TEST_1(su_vector_is_empty(w)); su_vector_destroy(v); su_vector_destroy(w); TEST_1(v = su_vector_create(home, test_vector_free)); data1 = su_home_clone(home, sizeof(test_data_t)); data1->data = 1; data2 = su_home_clone(home, sizeof(test_data_t)); data2->data = 2; data3 = su_home_clone(home, sizeof(test_data_t)); data3->data = 3; data4 = su_home_clone(home, sizeof(test_data_t)); data4->data = 4; TEST(su_vector_append(v, data1), 0); TEST(su_vector_append(v, data2), 0); TEST(su_vector_append(v, data3), 0); TEST(su_vector_append(v, data4), 0); TEST_SIZE(su_vector_len(v), 4); TEST_P(su_vector_item(v, 0), data1); TEST_P(su_vector_item(v, 1), data2); TEST_P(su_vector_item(v, 2), data3); TEST_P(su_vector_item(v, 3), data4); TEST(data1->data, 1); TEST(data2->data, 2); TEST(data3->data, 3); TEST(data4->data, 4); TEST(su_vector_remove(v, 2), 0); TEST_SIZE(su_vector_len(v), 3); TEST_P(su_vector_item(v, 0), data1); TEST_P(su_vector_item(v, 1), data2); TEST_P(su_vector_item(v, 2), data4); TEST(data1->data, 1); TEST(data2->data, 2); TEST(data4->data, 4); su_vector_destroy(v); su_home_check(home); su_home_deinit(home); END(); }
static int test_strlst(void) { su_home_t home[1] = { SU_HOME_INIT(home) }; su_strlst_t *l, *l1, *l2; char *s; char foo[] = "foo"; char bar[] = "bar"; char baz[] = "baz"; su_home_stat_t parent[1], kids[2]; BEGIN(); parent->hs_size = (sizeof parent); kids[0].hs_size = (sizeof kids[0]); kids[1].hs_size = (sizeof kids[1]); su_home_init_stats(home); /* Test API for invalid arguments */ TEST_1(l = su_strlst_create(NULL)); TEST_1(l2 = su_strlst_dup(home, l)); TEST_VOID(su_strlst_destroy(l2)); TEST_1(!su_strlst_dup(home, NULL)); TEST_1(l1 = su_strlst_copy(home, l)); TEST_VOID(su_strlst_destroy(l1)); TEST_1(!su_strlst_copy(home, NULL)); TEST_VOID(su_strlst_destroy(NULL)); TEST_VOID(su_strlst_destroy(l)); TEST_1(!su_strlst_dup_append(NULL, "aa")); TEST_1(!su_strlst_append(NULL, "bee")); TEST_1(!su_strlst_item(NULL, 1)); TEST_1(!su_strlst_set_item(NULL, 1, "cee")); TEST_1(!su_strlst_remove(NULL, 1)); TEST_S(s = su_strlst_join(NULL, home, "a"), ""); TEST_VOID(su_free(home, s)); TEST_1(!su_strlst_split(home, NULL, ".")); TEST_1(s = su_strdup(home, "aaa")); TEST_1(l = su_strlst_split(home, s, NULL)); TEST_S(su_strlst_item(l, 0), "aaa"); TEST_VOID(su_strlst_destroy(l)); TEST_VOID(su_free(home, s)); TEST_1(!su_strlst_dup_split(home, NULL, ".")); TEST_1(l1 = su_strlst_dup_split(home, "aaa", "")); TEST_S(su_strlst_item(l1, 0), "aaa"); TEST_VOID(su_strlst_destroy(l1)); TEST_SIZE(su_strlst_len(NULL), 0); TEST_1(!su_strlst_get_array(NULL)); TEST_VOID(su_strlst_free_array(NULL, NULL)); TEST_1(l = su_strlst_create(home)); TEST_VOID(su_strlst_free_array(l, NULL)); TEST_S(su_strlst_dup_append(l, "oh"), "oh"); TEST_VOID(su_strlst_free_array(l, NULL)); TEST_VOID(su_strlst_destroy(l)); /* Test functionality */ TEST_1(l = su_strlst_create(home)); su_home_init_stats(su_strlst_home(l)); TEST_S(su_strlst_join(l, home, "bar"), ""); TEST_S(su_strlst_append(l, foo), "foo"); TEST_S(su_strlst_dup_append(l, bar), "bar"); TEST_S(su_strlst_append(l, baz), "baz"); TEST_S((s = su_strlst_join(l, home, "!")), "foo!bar!baz"); TEST_S(su_strlst_item(l, 0), foo); TEST_S(su_strlst_item(l, 1), bar); TEST_S(su_strlst_item(l, 2), baz); TEST_P(su_strlst_item(l, 3), NULL); TEST_P(su_strlst_item(l, (unsigned)-1), NULL); TEST_1(l1 = su_strlst_copy(su_strlst_home(l), l)); TEST_1(l2 = su_strlst_dup(su_strlst_home(l), l)); strcpy(foo, "hum"); strcpy(bar, "pah"); strcpy(baz, "hah"); TEST_S(su_strlst_dup_append(l1, "kuik"), "kuik"); TEST_S(su_strlst_dup_append(l2, "uik"), "uik"); TEST_S((s = su_strlst_join(l, home, ".")), "hum.bar.hah"); TEST_S((su_strlst_join(l1, home, ".")), "hum.bar.hah.kuik"); TEST_S((su_strlst_join(l2, home, ".")), "foo.bar.baz.uik"); su_strlst_destroy(l2); su_home_get_stats(su_strlst_home(l), 0, kids, sizeof kids); TEST_SIZE(kids->hs_clones, 2); TEST64(kids->hs_allocs.hsa_number, 3); TEST64(kids->hs_frees.hsf_number, 1); su_strlst_destroy(l); TEST_S(s, "hum.bar.hah"); TEST_1(l = su_strlst_create(home)); su_home_init_stats(su_strlst_home(l)); TEST_S(su_strlst_join(l, home, "bar"), ""); TEST_S(su_strlst_append(l, "a"), "a"); TEST_S(su_strlst_append(l, "b"), "b"); TEST_S(su_strlst_append(l, "c"), "c"); TEST_S(su_strlst_append(l, "d"), "d"); TEST_S(su_strlst_append(l, "e"), "e"); TEST_S(su_strlst_append(l, "f"), "f"); TEST_S(su_strlst_append(l, "g"), "g"); TEST_S(su_strlst_append(l, "h"), "h"); TEST_S(su_strlst_append(l, "i"), "i"); TEST_S(su_strlst_append(l, "j"), "j"); TEST_S((s = su_strlst_join(l, home, "")), "abcdefghij"); TEST_S(su_strlst_append(l, "a"), "a"); TEST_S(su_strlst_append(l, "b"), "b"); TEST_S(su_strlst_append(l, "c"), "c"); TEST_S(su_strlst_append(l, "d"), "d"); TEST_S(su_strlst_append(l, "e"), "e"); TEST_S(su_strlst_append(l, "f"), "f"); TEST_S(su_strlst_append(l, "g"), "g"); TEST_S(su_strlst_append(l, "h"), "h"); TEST_S(su_strlst_append(l, "i"), "i"); TEST_S(su_strlst_append(l, "j"), "j"); TEST_S((s = su_strlst_join(l, home, "")), "abcdefghijabcdefghij"); su_home_get_stats(su_strlst_home(l), 0, kids + 1, (sizeof kids[1])); su_home_stat_add(kids, kids + 1); su_strlst_destroy(l); su_home_get_stats(home, 1, parent, (sizeof parent)); su_home_check(home); su_home_deinit(home); su_home_init(home); { char s[] = "foo\nfaa\n"; TEST_1((l = su_strlst_split(home, s, "\n"))); TEST_SIZE(su_strlst_len(l), 3); TEST_1(su_strlst_append(l, "bar")); TEST_S(su_strlst_join(l, home, "\n"), "foo\nfaa\n\nbar"); } { char s[] = "foo"; TEST_1((l = su_strlst_split(home, s, "\n"))); TEST_SIZE(su_strlst_len(l), 1); } { char s[] = "\n\n"; TEST_1((l = su_strlst_split(home, s, "\n"))); TEST_SIZE(su_strlst_len(l), 3); } { char s[] = ""; TEST_1((l = su_strlst_split(home, s, "\n"))); TEST_SIZE(su_strlst_len(l), 1); } { int i; #define S \ "a\nb\nc\nd\ne\nf\ng\nh\ni\nj\nk\nl\nm\n" \ "n\no\np\nq\nr\ns\nt\nu\nv\nw\nx\ny\nz\n" \ "A\nB\nC\nD\nE\nF\nG\nH\nI\nJ\nK\nL\nM\n" \ "N\nO\nP\nQ\nR\nS\nT\nU\nV\nW\nX\nY\nZ\n" char s[] = S; TEST_1((l = su_strlst_split(home, s, "\n"))); TEST_SIZE(su_strlst_len(l), 53); TEST_1(su_strlst_append(l, "bar")); TEST_S(su_strlst_join(l, home, "\n"), S "\nbar"); TEST_1(!su_strlst_remove(l, 54)); for (i = 0; i < 54; i++) { TEST_1(su_strlst_remove(l, 0)); TEST_1(!su_strlst_remove(l, 53 - i)); TEST_SIZE(su_strlst_len(l), 53 - i); } TEST_1(!su_strlst_remove(l, 0)); TEST_SIZE(su_strlst_len(l), 0); } { char const *s0; TEST_1(l = su_strlst_create_with(NULL, s0 = "a", "b", NULL)); TEST_1(su_strlst_item(l, 0) == s0); TEST_S(su_strlst_item(l, 0), "a"); TEST_S(su_strlst_item(l, 1), "b"); TEST_1(su_strlst_item(l, 2) == NULL); TEST_S(su_slprintf(l, "1: %u", 1), "1: 1"); TEST_S(su_slprintf(l, "1.0: %g", 1.0), "1.0: 1"); TEST_1(su_strlst_append(l, "")); TEST_S(su_strlst_join(l, home, "\n"), "a\n" "b\n" "1: 1\n" "1.0: 1\n"); TEST_VOID(su_strlst_destroy(l)); TEST_1(l2 = su_strlst_create_with_dup(NULL, s0 = "0", "1", "2", "3", "4", "5", "6", "7", NULL)); TEST_1(su_strlst_item(l2, 0) != s0); TEST_S(su_strlst_item(l2, 0), "0"); TEST_S(su_strlst_item(l2, 1), "1"); TEST_S(su_strlst_item(l2, 2), "2"); TEST_S(su_strlst_item(l2, 3), "3"); TEST_S(su_strlst_item(l2, 4), "4"); TEST_S(su_strlst_item(l2, 5), "5"); TEST_S(su_strlst_item(l2, 6), "6"); TEST_S(su_strlst_item(l2, 7), "7"); TEST_1(su_strlst_item(l2, 8) == NULL); TEST_S(su_strlst_join(l2, home, ""), "01234567"); TEST_VOID(su_strlst_destroy(l2)); } su_home_check(home); su_home_deinit(home); END(); }
int test_sip(void) { /* sip urls */ su_home_t home[1] = { SU_HOME_INIT(home) }; url_t sip[1] = { URL_INIT_AS(sip) }; url_t *u, url[1]; char *tst, *s; char sipurl0[] = "sip:pekka%2Epessi@nokia%2Ecom;method=%4D%45%53%53%41%47%45" "?body=CANNED%20MSG"; char sipurl[] = "sip:user:pass@host:32;param=1" "?From=foo@bar&To=bar@baz#unf"; char sip2url[] = "sip:user/path;tel-param:pass@host:32;param=1%3d%3d1" "?From=foo@bar&body=CANNED%20MSG&To=bar@baz#unf"; char sip2[sizeof(sipurl) + 32]; char sipsurl[] = "sips:user:pass@host:32;param=1" "?From=foo@bar&To=bar@baz#unf"; size_t i, j; url_t *a, *b; BEGIN(); TEST_S(url_scheme(url_sip), "sip"); TEST_S(url_scheme(url_sips), "sips"); memset(url, 255, sizeof url); TEST(url_d(url, sipurl0), 0); TEST(url->url_type, url_sip); TEST(url->url_root, 0); TEST_S(url->url_scheme, "sip"); TEST_S(url->url_user, "pekka.pessi"); TEST_P(url->url_password, NULL); TEST_S(url->url_host, "nokia.com"); TEST_P(url->url_port, NULL); TEST_P(url->url_path, NULL); TEST_S(url->url_params, "method=MESSAGE"); TEST_S(url->url_headers, "body=CANNED%20MSG"); TEST_P(url->url_fragment, NULL); TEST_S(url_query_as_header_string(home, url->url_headers), "\n\nCANNED MSG"); sip->url_user = "******"; sip->url_password = "******"; sip->url_host = "host"; sip->url_port = "32"; sip->url_params = "param=1"; sip->url_headers = "From=foo@bar&To=bar@baz"; sip->url_fragment = "unf"; memset(url, 255, sizeof url); TEST_1(tst = su_strdup(home, sipurl)); TEST_1(url_d(url, tst) == 0); TEST_1(url_cmp(sip, url) == 0); TEST(url->url_type, url_sip); TEST_1(u = url_hdup(home, url)); TEST(u->url_type, url_sip); TEST_1(url_cmp(sip, u) == 0); TEST(url_e(sip2, sizeof(sip2), u), strlen(sipurl)); TEST_1(strcmp(sip2, sipurl) == 0); TEST_SIZE(snprintf(sip2, sizeof(sip2), URL_PRINT_FORMAT, URL_PRINT_ARGS(sip)), strlen(sipurl)); TEST_1(strcmp(sip2, sipurl) == 0); url_digest(hash1, sizeof(hash1), url, NULL); url_digest(hash2, sizeof(hash2), (url_t const *)sipurl, NULL); TEST(memcmp(hash1, hash2, sizeof(hash1)), 0); TEST_1(tst = su_strdup(home, sip2url)); TEST_1(url_d(url, tst) == 0); TEST_S(url->url_user, "user/path;tel-param"); TEST_S(url->url_params, "param=1%3D%3D1"); TEST_S(url_query_as_header_string(home, url->url_headers), "From:foo@bar\nTo:bar@baz\n\nCANNED MSG"); url_digest(hash1, sizeof(hash1), url, NULL); url_digest(hash2, sizeof(hash2), (url_t *)sip2url, NULL); TEST(memcmp(hash1, hash2, sizeof(hash1)), 0); sip->url_type = url_sips; sip->url_scheme = "sips"; TEST_1(tst = su_strdup(home, sipsurl)); TEST_1(url_d(url, tst) == 0); TEST_1(url_cmp(sip, url) == 0); TEST(url->url_type, url_sips); /* Test url_dup() */ for (i = 0; i <= sizeof(sipsurl); i++) { char buf[sizeof(sipsurl) + 1]; url_t dst[1]; buf[i] = '\377'; TEST_SIZE(url_dup(buf, i, dst, url), sizeof(sipsurl) - 1 - strlen("sips")); TEST(buf[i], '\377'); } url_digest(hash1, sizeof(hash1), url, NULL); url_digest(hash2, sizeof(hash2), (url_t *)sipsurl, NULL); TEST(memcmp(hash1, hash2, sizeof(hash1)), 0); u = url_hdup(home, (url_t*)"SIP:[email protected]:55"); TEST_1(u); TEST(u->url_type, url_sip); u = url_hdup(home, (url_t*)"SIP:[email protected]:"); TEST_1(u); TEST(u->url_type, url_sip); TEST_P(url_hdup(home, (url_t*)"sip:[email protected]::55"), NULL); TEST_P(url_hdup(home, (url_t*)"sip:[email protected]:55:"), NULL); TEST_P(url_hdup(home, (url_t*)"sip:[email protected]:sip"), NULL); u = url_hdup(home, (url_t*)"SIP:#**00**#;foo=/[email protected]"); TEST_1(u); TEST(u->url_type, url_sip); TEST_S(u->url_user, "#**00**#;foo=/bar"); TEST_1(!url_hdup(home, (url_t*)"SIP:#**00**#;foo=/bar@#127.0.0.1")); TEST_1(!url_hdup(home, (url_t*)"SIP:#**00**#;foo=/bar;127.0.0.1")); for (i = 32; i <= 256; i++) { char pu[512]; char param[512]; for (j = 0; j < i; j++) param[j] = 'x'; param[j] = '\0'; memcpy(param, "x=", 2); snprintf(pu, sizeof(pu), "sip:test@host;%s", param); u = url_hdup(home, (url_t*)pu); TEST_1(u); s = url_as_string(home, u); TEST_S(pu, s); } s = su_strdup(home, "ttl;transport=tcp;ttl=15;ttl=;method=INVITE;ttl"); TEST_1(s); s = url_strip_param_string(s, "ttl"); TEST_S(s, "transport=tcp;method=INVITE"); u = url_hdup(home, (void*)"sip:u:p@host:5060;maddr=127.0.0.1;transport=tcp"); TEST_1(u); TEST_1(url_have_transport(u)); TEST_1(url_strip_transport(u)); TEST_P(u->url_params, NULL); TEST_1(!url_have_transport(u)); u = url_hdup(home, (void*)"sip:u:p@host:5060;user=phone;ttl=1;isfocus"); TEST_1(u); TEST_1(url_have_transport(u)); TEST_1(url_strip_transport(u)); TEST_S(u->url_params, "user=phone;isfocus"); TEST_1(!url_have_transport(u)); u = url_hdup(home, (void*)"sip:u:p@host:5060;maddr=127.0.0.1;user=phone"); TEST_1(u); TEST_1(url_have_transport(u)); TEST_1(url_strip_transport(u)); TEST_S(u->url_params, "user=phone"); TEST_1(!url_have_transport(u)); u = url_hdup(home, (void*)"sip:u:p@host:5060;user=phone;transport=tcp"); TEST_1(u); TEST_1(url_have_transport(u)); TEST_1(url_strip_transport(u)); TEST_S(u->url_params, "user=phone"); TEST_1(!url_have_transport(u)); u = url_hdup(home, (void*)"sip:u:p@host;user=phone;;"); TEST_1(u); /* We don't have transport params */ TEST_1(!url_have_transport(u)); /* ...but we still strip empty params */ TEST_1(url_strip_transport(u)); TEST_S(u->url_params, "user=phone"); TEST_1(!url_have_transport(u)); u = url_hdup(home, (void*)"sip:u:p@host:5060;ttl=1;isfocus;transport=udp;"); TEST_1(u); TEST_1(url_have_transport(u)); TEST_1(url_strip_transport(u)); TEST_S(u->url_params, "isfocus"); TEST_1(!url_have_transport(u)); u = url_hdup(home, (void *)"sip:%22foo%[email protected]:5060"); TEST_1(u); TEST_S(u->url_user, "%22foo%22"); a = url_hdup(home, (void *)"sip:172.21.55.55:5060"); b = url_hdup(home, (void *)"sip:172.21.55.55"); TEST_1(a); TEST_1(b); TEST_1(url_cmp(a, b) == 0); TEST(url_cmp_all(a, b), 0); a = url_hdup(home, (void *)"sips:172.21.55.55:5060"); b = url_hdup(home, (void *)"sips:172.21.55.55"); TEST_1(a); TEST_1(b); TEST_1(url_cmp(a, b) != 0); TEST_1(url_cmp_all(a, b) < 0); a = url_hdup(home, (void *)"sips:172.21.55.55:5061"); b = url_hdup(home, (void *)"sips:172.21.55.55"); TEST_1(a); TEST_1(b); TEST_1(url_cmp(a, b) == 0); TEST(url_cmp_all(a, b), 0); a = url_hdup(home, (void *)"sip:my.domain:5060"); b = url_hdup(home, (void *)"sip:my.domain"); TEST_1(a); TEST_1(b); TEST_1(url_cmp(a, b) > 0); TEST_1(url_cmp_all(a, b) > 0); a = url_hdup(home, (void *)"sips:my.domain:5061"); b = url_hdup(home, (void *)"sips:my.domain"); TEST_1(a); TEST_1(b); TEST_1(url_cmp(a, b) > 0); TEST_1(url_cmp_all(a, b) > 0); a = url_hdup(home, (void *)"sip:my.domain"); b = url_hdup(home, (void *)"SIP:MY.DOMAIN"); TEST_1(a); TEST_1(b); TEST_1(url_cmp(a, b) == 0); TEST_1(url_cmp_all(a, b) == 0); su_home_deinit(home); END(); }
static void do_test (int argc, char *argv[]) { int rc; KEYDB_HANDLE hd1, hd2; KEYDB_SEARCH_DESC desc1, desc2; KBNODE kb1, kb2, p; char *uid1; char *uid2; char *fname; (void) argc; (void) argv; fname = prepend_srcdir ("t-keydb-keyring.kbx"); rc = keydb_add_resource (fname, 0); test_free (fname); if (rc) ABORT ("Failed to open keyring."); hd1 = keydb_new (); if (!hd1) ABORT (""); hd2 = keydb_new (); if (!hd2) ABORT (""); rc = classify_user_id ("2689 5E25 E844 6D44 A26D 8FAF 2F79 98F3 DBFC 6AD9", &desc1, 0); if (rc) ABORT ("Failed to convert fingerprint for DBFC6AD9"); rc = keydb_search (hd1, &desc1, 1, NULL); if (rc) ABORT ("Failed to lookup key associated with DBFC6AD9"); classify_user_id ("8061 5870 F5BA D690 3336 86D0 F2AD 85AC 1E42 B367", &desc2, 0); if (rc) ABORT ("Failed to convert fingerprint for 1E42B367"); rc = keydb_search (hd2, &desc2, 1, NULL); if (rc) ABORT ("Failed to lookup key associated with 1E42B367"); rc = keydb_get_keyblock (hd2, &kb2); if (rc) ABORT ("Failed to get keyblock for 1E42B367"); rc = keydb_get_keyblock (hd1, &kb1); if (rc) ABORT ("Failed to get keyblock for DBFC6AD9"); p = kb1; while (p && p->pkt->pkttype != PKT_USER_ID) p = p->next; if (! p) ABORT ("DBFC6AD9 has no user id packet"); uid1 = p->pkt->pkt.user_id->name; p = kb2; while (p && p->pkt->pkttype != PKT_USER_ID) p = p->next; if (! p) ABORT ("1E42B367 has no user id packet"); uid2 = p->pkt->pkt.user_id->name; if (verbose) { printf ("user id for DBFC6AD9: %s\n", uid1); printf ("user id for 1E42B367: %s\n", uid2); } TEST_P ("cache consistency", strcmp (uid1, uid2) != 0); release_kbnode (kb1); release_kbnode (kb2); keydb_release (hd1); keydb_release (hd2); }