[or-cvs] r8796: fix unittests; add more tests for smartlist stuff; make test (in tor/trunk: . src/or)

nickm at seul.org nickm at seul.org
Mon Oct 23 03:48:59 UTC 2006


Author: nickm
Date: 2006-10-22 23:48:58 -0400 (Sun, 22 Oct 2006)
New Revision: 8796

Modified:
   tor/trunk/
   tor/trunk/src/or/test.c
Log:
 r9320 at Kushana:  nickm | 2006-10-22 15:56:27 -0400
 fix unittests; add more tests for smartlist stuff; make tests cache generated RSA keys (to speed up unittest run time by 30% and encourage people to run them more).



Property changes on: tor/trunk
___________________________________________________________________
 svk:merge ticket from /tor/trunk [r9320] on c95137ef-5f19-0410-b913-86e773d04f59

Modified: tor/trunk/src/or/test.c
===================================================================
--- tor/trunk/src/or/test.c	2006-10-23 03:48:52 UTC (rev 8795)
+++ tor/trunk/src/or/test.c	2006-10-23 03:48:58 UTC (rev 8796)
@@ -30,8 +30,6 @@
 int have_failed = 0;
 
 /* These functions are file-local, but are exposed so we can test. */
-void add_fingerprint_to_dir(const char *nickname, const char *fp,
-                            smartlist_t *list);
 void get_platform_str(char *platform, size_t len);
 size_t read_escaped_data(const char *data, size_t len, int translate_newlines,
                          char **out);
@@ -93,6 +91,18 @@
   rmdir(temp_dir);
 }
 
+static crypto_pk_env_t *
+pk_generate(int idx)
+{
+  static crypto_pk_env_t *pregen[3] = {NULL, NULL, NULL};
+  tor_assert(idx < (int)(sizeof(pregen)/sizeof(pregen[0])));
+  if (! pregen[idx]) {
+    pregen[idx] = crypto_new_pk_env();
+    tor_assert(!crypto_pk_generate_key(pregen[idx]));
+  }
+  return crypto_pk_dup_key(pregen[idx]);
+}
+
 static void
 test_buffers(void)
 {
@@ -401,10 +411,9 @@
              "\x50\xC2\x6C\x9C\xD0\xD8\x9D", 20);
 
   /* Public-key ciphers */
-  pk1 = crypto_new_pk_env();
+  pk1 = pk_generate(0);
   pk2 = crypto_new_pk_env();
   test_assert(pk1 && pk2);
-  test_assert(! crypto_pk_generate_key(pk1));
   test_assert(! crypto_pk_write_public_key_to_string(pk1, &cp, &size));
   test_assert(! crypto_pk_read_public_key_from_string(pk2, cp, size));
   test_eq(0, crypto_pk_cmp_keys(pk1, pk2));
@@ -777,13 +786,9 @@
   smartlist_t *sl;
   char *cp;
 
-  /* XXXX test add_all, remove, string_remove, isin, string_isin,
-   * string_num_isin, overlap, intersect, subtract,
-   * sort_strings, sort_digests, uniq_strings, uniq_digests, bsearch,
-   * join_strings2
-   */
+  /* XXXX test sort_strings, sort_digests, uniq_strings, uniq_digests */
 
-  /* Test smartlist */
+  /* Test smartlist add, del_keeporder, insert, get. */
   sl = smartlist_create();
   smartlist_add(sl, (void*)1);
   smartlist_add(sl, (void*)2);
@@ -806,6 +811,10 @@
   smartlist_del(sl, 4);
   test_eq(4, smartlist_len(sl));
 
+  /* test isin. */
+  test_assert(smartlist_isin(sl, (void*)3));
+  test_assert(!smartlist_isin(sl, (void*)99));
+
   /* Test split and join */
   smartlist_clear(sl);
   test_eq(0, smartlist_len(sl));
@@ -935,16 +944,89 @@
 
   /* Test uniq() */
   smartlist_split_string(sl,
-                         "noon,radar,a,man,a,plan,a,canal,panama,radar,noon",
-                         ",", 0, 0);
+                     "50,noon,radar,a,man,a,plan,a,canal,panama,radar,noon,50",
+                     ",", 0, 0);
   smartlist_sort(sl, _compare_strs);
   smartlist_uniq(sl, _compare_strs, NULL);
   cp = smartlist_join_strings(sl, ",", 0, NULL);
-  test_streq(cp, "a,canal,man,noon,panama,plan,radar");
+  test_streq(cp, "50,a,canal,man,noon,panama,plan,radar");
   tor_free(cp);
+
+  /* Test string_isin. */
+  test_assert(smartlist_string_isin(sl, "noon"));
+  test_assert(!smartlist_string_isin(sl, "noonoon"));
+  test_assert(smartlist_string_num_isin(sl, 50));
+  test_assert(!smartlist_string_num_isin(sl, 60));
   SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
   smartlist_clear(sl);
 
+  /* Test string_remove and remove and join_strings2 */
+  smartlist_split_string(sl,
+                    "Some say the Earth will end in ice and some in fire",
+                    " ", 0, 0);
+  cp = smartlist_get(sl, 4);
+  test_streq(cp, "will");
+  smartlist_add(sl, cp);
+  smartlist_remove(sl, cp);
+  cp = smartlist_join_strings(sl, ",", 0, NULL);
+  test_streq(cp, "Some,say,the,Earth,fire,end,in,ice,and,some,in");
+  tor_free(cp);
+  smartlist_string_remove(sl, "in");
+  cp = smartlist_join_strings2(sl, "+XX", 1, 0, NULL);
+  test_streq(cp, "Some+say+the+Earth+fire+end+some+ice+and");
+  tor_free(cp);
+
+  SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
+  smartlist_clear(sl);
+
+  {
+    smartlist_t *ints = smartlist_create();
+    smartlist_t *odds = smartlist_create();
+    smartlist_t *evens = smartlist_create();
+    smartlist_t *primes = smartlist_create();
+    int i;
+    for (i=1; i < 10; i += 2)
+      smartlist_add(odds, (void*)i);
+    for (i=0; i < 10; i += 2)
+      smartlist_add(evens, (void*)i);
+
+    /* add_all */
+    smartlist_add_all(ints, odds);
+    smartlist_add_all(ints, evens);
+    test_eq(smartlist_len(ints), 10);
+
+    smartlist_add(primes, (void*)2);
+    smartlist_add(primes, (void*)3);
+    smartlist_add(primes, (void*)5);
+    smartlist_add(primes, (void*)7);
+
+    /* overlap */
+    test_assert(smartlist_overlap(ints, odds));
+    test_assert(smartlist_overlap(odds, primes));
+    test_assert(smartlist_overlap(evens, primes));
+    test_assert(!smartlist_overlap(odds, evens));
+
+    /* intersect */
+    smartlist_add_all(sl, odds);
+    smartlist_intersect(sl, primes);
+    test_eq(smartlist_len(sl), 3);
+    test_assert(smartlist_isin(sl, (void*)3));
+    test_assert(smartlist_isin(sl, (void*)5));
+    test_assert(smartlist_isin(sl, (void*)7));
+
+    /* subtract */
+    smartlist_add_all(sl, primes);
+    smartlist_subtract(sl, odds);
+    test_eq(smartlist_len(sl), 1);
+    test_assert(smartlist_isin(sl, (void*)2));
+
+    smartlist_free(odds);
+    smartlist_free(evens);
+    smartlist_free(ints);
+    smartlist_free(primes);
+    smartlist_clear(sl);
+  }
+
   smartlist_free(sl);
 }
 
@@ -1276,8 +1358,7 @@
   /* shared */
   crypto_pk_env_t *pk = NULL;
 
-  pk = crypto_new_pk_env();
-  test_assert(! crypto_pk_generate_key(pk));
+  pk = pk_generate(0);
 
   /* client handshake 1. */
   memset(c_buf, 0, ONIONSKIN_CHALLENGE_LEN);
@@ -1323,12 +1404,9 @@
   tor_version_t ver1;
   char *bw_lines = NULL;
 
-  test_assert( (pk1 = crypto_new_pk_env()) );
-  test_assert( (pk2 = crypto_new_pk_env()) );
-  test_assert( (pk3 = crypto_new_pk_env()) );
-  test_assert(! crypto_pk_generate_key(pk1));
-  test_assert(! crypto_pk_generate_key(pk2));
-  test_assert(! crypto_pk_generate_key(pk3));
+  pk1 = pk_generate(0);
+  pk2 = pk_generate(1);
+  pk3 = pk_generate(2);
 
   test_assert( is_legal_nickname("a"));
   test_assert(!is_legal_nickname(""));
@@ -1497,7 +1575,6 @@
   test_streq(rp2->exit_policy->next->address, "18.*");
   test_streq(rp2->exit_policy->next->port, "24");
   test_assert(rp2->exit_policy->next->next == NULL);
-#endif
 
   /* Okay, now for the directories. */
   {
@@ -1507,7 +1584,7 @@
     crypto_pk_get_fingerprint(pk1, buf, 1);
     add_fingerprint_to_dir("Fred", buf, fingerprint_list);
   }
-#if 0
+
   {
   char d[DIGEST_LEN];
   const char *m;
@@ -1682,10 +1759,8 @@
   size_t len;
   crypto_pk_env_t *pk1, *pk2;
   time_t now;
-  pk1 = crypto_new_pk_env();
-  pk2 = crypto_new_pk_env();
-  test_assert(!crypto_pk_generate_key(pk1));
-  test_assert(!crypto_pk_generate_key(pk2));
+  pk1 = pk_generate(0);
+  pk2 = pk_generate(1);
 
   /* Test unversioned descriptor */
   d1 = tor_malloc_zero(sizeof(rend_service_descriptor_t));



More information about the tor-commits mailing list