Use coccinelle scripts to clean up our unit tests

This should get rid of most of the users of the old test_*
functions.  Some are in macros and will need manual cleanup, though.

This patch is for 13119, and was automatically generated with these
scripts.  The perl scripts are there because coccinelle hates
operators as macro arguments.

------------------------------

s/==,/_X_EQ_,/g;
s/!=,/_X_NE_,/g;
s/<,/_X_LT_,/g;
s/>,/_X_GT_,/g;
s/>=,/_X_GEQ_,/g;
s/<=,/_X_LEQ_,/g;

------------------------------
@@
expression a;
identifier func;
@@
 func (...) {
<...
-test_fail_msg
+TT_DIE
 (
+(
 a
+)
 )
 ...>
 }

@@
identifier func;
@@
 func (...) {
<...
-test_fail()
+TT_DIE(("Assertion failed."))
 ...>
 }

@@
expression a;
identifier func;
@@
 func (...) {
<...
-test_assert
+tt_assert
	(a)
 ...>
 }

@@
expression a, b;
identifier func;
@@
 func (...) {
<...
-test_eq
+tt_int_op
 (a,
+_X_EQ_,
  b)
 ...>
 }

@@
expression a, b;
identifier func;
@@
 func (...) {
<...
-test_neq
+tt_int_op
 (a,
+_X_NEQ_,
  b)
 ...>
 }

@@
expression a, b;
identifier func;
@@
 func (...) {
<...
-test_streq
+tt_str_op
 (a,
+_X_EQ_,
  b)
 ...>
 }

@@
expression a, b;
identifier func;
@@
 func (...) {
<...
-test_strneq
+tt_str_op
 (a,
+_X_NEQ_,
  b)
 ...>
 }

@@
expression a, b;
identifier func;
@@
 func (...) {
<...
-test_eq_ptr
+tt_ptr_op
 (a,
+_X_EQ_,
  b)
 ...>
 }

@@
expression a, b;
identifier func;
@@
 func() {
<...
-test_neq_ptr
+tt_ptr_op
 (a,
+_X_NEQ_,
  b)
 ...>
 }

@@
expression a, b, len;
identifier func;
@@
 func (...) {
<...
-test_memeq
+tt_mem_op
 (a,
+_X_EQ_,
  b, len)
 ...>
 }

@@
expression a, b, len;
identifier func;
@@
 func (...) {
<...
-test_memneq
+tt_mem_op
 (a,
+_X_NEQ_,
  b, len)
 ...>
 }

------------------------------
@@
char a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_int_op
 (
-a == b
+a, _X_EQ_, b
 )
 ...>
}

@@
int a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_int_op
 (
-a == b
+a, _X_EQ_, b
 )
 ...>
}

@@
long a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_int_op
 (
-a == b
+a, _X_EQ_, b
 )
 ...>
}

@@
unsigned int a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_uint_op
 (
-a == b
+a, _X_EQ_, b
 )
 ...>
}

@@
unsigned long a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_uint_op
 (
-a == b
+a, _X_EQ_, b
 )
 ...>
}

@@
char a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_int_op
 (
-a != b
+a, _X_NEQ_, b
 )
 ...>
}

@@
int a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_int_op
 (
-a != b
+a, _X_NEQ_, b
 )
 ...>
}

@@
long a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_int_op
 (
-a != b
+a, _X_NEQ_, b
 )
 ...>
}

@@
unsigned int a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_uint_op
 (
-a != b
+a, _X_NEQ_, b
 )
 ...>
}

@@
unsigned long a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_uint_op
 (
-a != b
+a, _X_NEQ_, b
 )
 ...>
}

@@
char a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_int_op
 (
-a >= b
+a, _X_GEQ_, b
 )
 ...>
}

@@
int a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_int_op
 (
-a >= b
+a, _X_GEQ_, b
 )
 ...>
}

@@
long a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_int_op
 (
-a >= b
+a, _X_GEQ_, b
 )
 ...>
}

@@
unsigned int a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_uint_op
 (
-a >= b
+a, _X_GEQ_, b
 )
 ...>
}

@@
unsigned long a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_uint_op
 (
-a >= b
+a, _X_GEQ_, b
 )
 ...>
}

@@
char a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_int_op
 (
-a <= b
+a, _X_LEQ_, b
 )
 ...>
}

@@
int a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_int_op
 (
-a <= b
+a, _X_LEQ_, b
 )
 ...>
}

@@
long a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_int_op
 (
-a <= b
+a, _X_LEQ_, b
 )
 ...>
}

@@
unsigned int a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_uint_op
 (
-a <= b
+a, _X_LEQ_, b
 )
 ...>
}

@@
unsigned long a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_uint_op
 (
-a <= b
+a, _X_LEQ_, b
 )
 ...>
}

@@
char a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_int_op
 (
-a > b
+a, _X_GT_, b
 )
 ...>
}

@@
int a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_int_op
 (
-a > b
+a, _X_GT_, b
 )
 ...>
}

@@
long a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_int_op
 (
-a > b
+a, _X_GT_, b
 )
 ...>
}

@@
unsigned int a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_uint_op
 (
-a > b
+a, _X_GT_, b
 )
 ...>
}

@@
unsigned long a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_uint_op
 (
-a > b
+a, _X_GT_, b
 )
 ...>
}

@@
char a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_int_op
 (
-a < b
+a, _X_LT_, b
 )
 ...>
}

@@
int a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_int_op
 (
-a < b
+a, _X_LT_, b
 )
 ...>
}

@@
long a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_int_op
 (
-a < b
+a, _X_LT_, b
 )
 ...>
}

@@
unsigned int a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_uint_op
 (
-a < b
+a, _X_LT_, b
 )
 ...>
}

@@
unsigned long a, b;
identifier func;
@@
 func (...) {
<...
-tt_assert
+tt_uint_op
 (
-a < b
+a, _X_LT_, b
 )
 ...>
}

------------------------------

s/_X_NEQ_/!=/g;
s/_X_NE_/!=/g;
s/_X_EQ_/==/g;
s/_X_GT_/>/g;
s/_X_LT_/</g;
s/_X_GEQ_/>=/g;
s/_X_LEQ_/<=/g;

s/test_mem_op\(/tt_mem_op\(/g;
This commit is contained in:
Nick Mathewson 2014-09-15 21:18:21 -04:00
parent 0bd220adcb
commit 0243895792
22 changed files with 2492 additions and 2492 deletions

View File

@ -250,7 +250,7 @@ test_onion_handshake(void)
/* client handshake 1. */ /* client handshake 1. */
memset(c_buf, 0, TAP_ONIONSKIN_CHALLENGE_LEN); memset(c_buf, 0, TAP_ONIONSKIN_CHALLENGE_LEN);
test_assert(! onion_skin_TAP_create(pk, &c_dh, c_buf)); tt_assert(! onion_skin_TAP_create(pk, &c_dh, c_buf));
for (i = 1; i <= 3; ++i) { for (i = 1; i <= 3; ++i) {
crypto_pk_t *k1, *k2; crypto_pk_t *k1, *k2;
@ -267,16 +267,16 @@ test_onion_handshake(void)
memset(s_buf, 0, TAP_ONIONSKIN_REPLY_LEN); memset(s_buf, 0, TAP_ONIONSKIN_REPLY_LEN);
memset(s_keys, 0, 40); memset(s_keys, 0, 40);
test_assert(! onion_skin_TAP_server_handshake(c_buf, k1, k2, tt_assert(! onion_skin_TAP_server_handshake(c_buf, k1, k2,
s_buf, s_keys, 40)); s_buf, s_keys, 40));
/* client handshake 2 */ /* client handshake 2 */
memset(c_keys, 0, 40); memset(c_keys, 0, 40);
test_assert(! onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys, 40)); tt_assert(! onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys, 40));
test_memeq(c_keys, s_keys, 40); tt_mem_op(c_keys,==, s_keys, 40);
memset(s_buf, 0, 40); memset(s_buf, 0, 40);
test_memneq(c_keys, s_buf, 40); tt_mem_op(c_keys,!=, s_buf, 40);
} }
done: done:
crypto_dh_free(c_dh); crypto_dh_free(c_dh);
@ -323,7 +323,7 @@ test_bad_onion_handshake(void *arg)
/* client handshake 1: do it straight. */ /* client handshake 1: do it straight. */
memset(c_buf, 0, TAP_ONIONSKIN_CHALLENGE_LEN); memset(c_buf, 0, TAP_ONIONSKIN_CHALLENGE_LEN);
test_assert(! onion_skin_TAP_create(pk, &c_dh, c_buf)); tt_assert(! onion_skin_TAP_create(pk, &c_dh, c_buf));
/* Server: Case 3: we just don't have the right key. */ /* Server: Case 3: we just don't have the right key. */
tt_int_op(-1, ==, tt_int_op(-1, ==,
@ -351,7 +351,7 @@ test_bad_onion_handshake(void *arg)
/* Let the client finish; make sure it can. */ /* Let the client finish; make sure it can. */
tt_int_op(0, ==, tt_int_op(0, ==,
onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys, 40)); onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys, 40));
test_memeq(s_keys, c_keys, 40); tt_mem_op(s_keys,==, c_keys, 40);
/* Client: Case 2: The server sent back a degenerate DH. */ /* Client: Case 2: The server sent back a degenerate DH. */
memset(s_buf, 0, sizeof(s_buf)); memset(s_buf, 0, sizeof(s_buf));
@ -408,9 +408,9 @@ test_ntor_handshake(void *arg)
tt_int_op(0, ==, onion_skin_ntor_client_handshake(c_state, s_buf, tt_int_op(0, ==, onion_skin_ntor_client_handshake(c_state, s_buf,
c_keys, 400)); c_keys, 400));
test_memeq(c_keys, s_keys, 400); tt_mem_op(c_keys,==, s_keys, 400);
memset(s_buf, 0, 40); memset(s_buf, 0, 40);
test_memneq(c_keys, s_buf, 40); tt_mem_op(c_keys,!=, s_buf, 40);
done: done:
ntor_handshake_state_free(c_state); ntor_handshake_state_free(c_state);
@ -438,24 +438,24 @@ test_onion_queues(void)
create_cell_init(create2, CELL_CREATE, ONION_HANDSHAKE_TYPE_NTOR, create_cell_init(create2, CELL_CREATE, ONION_HANDSHAKE_TYPE_NTOR,
NTOR_ONIONSKIN_LEN, buf2); NTOR_ONIONSKIN_LEN, buf2);
test_eq(0, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP)); tt_int_op(0,==, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP));
test_eq(0, onion_pending_add(circ1, create1)); tt_int_op(0,==, onion_pending_add(circ1, create1));
create1 = NULL; create1 = NULL;
test_eq(1, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP)); tt_int_op(1,==, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP));
test_eq(0, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR)); tt_int_op(0,==, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR));
test_eq(0, onion_pending_add(circ2, create2)); tt_int_op(0,==, onion_pending_add(circ2, create2));
create2 = NULL; create2 = NULL;
test_eq(1, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR)); tt_int_op(1,==, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR));
test_eq_ptr(circ2, onion_next_task(&onionskin)); tt_ptr_op(circ2,==, onion_next_task(&onionskin));
test_eq(1, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP)); tt_int_op(1,==, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP));
test_eq(0, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR)); tt_int_op(0,==, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR));
tt_ptr_op(onionskin, ==, create2_ptr); tt_ptr_op(onionskin, ==, create2_ptr);
clear_pending_onions(); clear_pending_onions();
test_eq(0, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP)); tt_int_op(0,==, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP));
test_eq(0, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR)); tt_int_op(0,==, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR));
done: done:
circuit_free(TO_CIRCUIT(circ1)); circuit_free(TO_CIRCUIT(circ1));
@ -518,11 +518,11 @@ test_circuit_timeout(void)
} while (fabs(circuit_build_times_cdf(&initial, timeout0) - } while (fabs(circuit_build_times_cdf(&initial, timeout0) -
circuit_build_times_cdf(&initial, timeout1)) > 0.02); circuit_build_times_cdf(&initial, timeout1)) > 0.02);
test_assert(estimate.total_build_times <= CBT_NCIRCUITS_TO_OBSERVE); tt_assert(estimate.total_build_times <= CBT_NCIRCUITS_TO_OBSERVE);
circuit_build_times_update_state(&estimate, state); circuit_build_times_update_state(&estimate, state);
circuit_build_times_free_timeouts(&final); circuit_build_times_free_timeouts(&final);
test_assert(circuit_build_times_parse_state(&final, state) == 0); tt_assert(circuit_build_times_parse_state(&final, state) == 0);
circuit_build_times_update_alpha(&final); circuit_build_times_update_alpha(&final);
timeout2 = circuit_build_times_calculate_timeout(&final, timeout2 = circuit_build_times_calculate_timeout(&final,
@ -532,7 +532,7 @@ test_circuit_timeout(void)
log_notice(LD_CIRC, "Timeout2 is %f, Xm is %d", timeout2, final.Xm); log_notice(LD_CIRC, "Timeout2 is %f, Xm is %d", timeout2, final.Xm);
/* 5% here because some accuracy is lost due to histogram conversion */ /* 5% here because some accuracy is lost due to histogram conversion */
test_assert(fabs(circuit_build_times_cdf(&initial, timeout0) - tt_assert(fabs(circuit_build_times_cdf(&initial, timeout0) -
circuit_build_times_cdf(&initial, timeout2)) < 0.05); circuit_build_times_cdf(&initial, timeout2)) < 0.05);
for (runs = 0; runs < 50; runs++) { for (runs = 0; runs < 50; runs++) {
@ -555,8 +555,8 @@ test_circuit_timeout(void)
CBT_DEFAULT_QUANTILE_CUTOFF/100.0)); CBT_DEFAULT_QUANTILE_CUTOFF/100.0));
} }
test_assert(!circuit_build_times_network_check_changed(&estimate)); tt_assert(!circuit_build_times_network_check_changed(&estimate));
test_assert(!circuit_build_times_network_check_changed(&final)); tt_assert(!circuit_build_times_network_check_changed(&final));
/* Reset liveness to be non-live */ /* Reset liveness to be non-live */
final.liveness.network_last_live = 0; final.liveness.network_last_live = 0;
@ -565,27 +565,27 @@ test_circuit_timeout(void)
build_times_idx = estimate.build_times_idx; build_times_idx = estimate.build_times_idx;
total_build_times = estimate.total_build_times; total_build_times = estimate.total_build_times;
test_assert(circuit_build_times_network_check_live(&estimate)); tt_assert(circuit_build_times_network_check_live(&estimate));
test_assert(circuit_build_times_network_check_live(&final)); tt_assert(circuit_build_times_network_check_live(&final));
circuit_build_times_count_close(&estimate, 0, circuit_build_times_count_close(&estimate, 0,
(time_t)(approx_time()-estimate.close_ms/1000.0-1)); (time_t)(approx_time()-estimate.close_ms/1000.0-1));
circuit_build_times_count_close(&final, 0, circuit_build_times_count_close(&final, 0,
(time_t)(approx_time()-final.close_ms/1000.0-1)); (time_t)(approx_time()-final.close_ms/1000.0-1));
test_assert(!circuit_build_times_network_check_live(&estimate)); tt_assert(!circuit_build_times_network_check_live(&estimate));
test_assert(!circuit_build_times_network_check_live(&final)); tt_assert(!circuit_build_times_network_check_live(&final));
log_info(LD_CIRC, "idx: %d %d, tot: %d %d", log_info(LD_CIRC, "idx: %d %d, tot: %d %d",
build_times_idx, estimate.build_times_idx, build_times_idx, estimate.build_times_idx,
total_build_times, estimate.total_build_times); total_build_times, estimate.total_build_times);
/* Check rollback index. Should match top of loop. */ /* Check rollback index. Should match top of loop. */
test_assert(build_times_idx == estimate.build_times_idx); tt_assert(build_times_idx == estimate.build_times_idx);
// This can fail if estimate.total_build_times == 1000, because // This can fail if estimate.total_build_times == 1000, because
// in that case, rewind actually causes us to lose timeouts // in that case, rewind actually causes us to lose timeouts
if (total_build_times != CBT_NCIRCUITS_TO_OBSERVE) if (total_build_times != CBT_NCIRCUITS_TO_OBSERVE)
test_assert(total_build_times == estimate.total_build_times); tt_assert(total_build_times == estimate.total_build_times);
/* Now simulate that the network has become live and we need /* Now simulate that the network has become live and we need
* a change */ * a change */
@ -600,12 +600,12 @@ test_circuit_timeout(void)
} }
} }
test_assert(estimate.liveness.after_firsthop_idx == 0); tt_assert(estimate.liveness.after_firsthop_idx == 0);
test_assert(final.liveness.after_firsthop_idx == tt_assert(final.liveness.after_firsthop_idx ==
CBT_DEFAULT_MAX_RECENT_TIMEOUT_COUNT-1); CBT_DEFAULT_MAX_RECENT_TIMEOUT_COUNT-1);
test_assert(circuit_build_times_network_check_live(&estimate)); tt_assert(circuit_build_times_network_check_live(&estimate));
test_assert(circuit_build_times_network_check_live(&final)); tt_assert(circuit_build_times_network_check_live(&final));
circuit_build_times_count_timeout(&final, 1); circuit_build_times_count_timeout(&final, 1);
} }
@ -642,16 +642,16 @@ test_rend_fns(void)
char address6[] = "foo.bar.abcdefghijklmnop.onion"; char address6[] = "foo.bar.abcdefghijklmnop.onion";
char address7[] = ".abcdefghijklmnop.onion"; char address7[] = ".abcdefghijklmnop.onion";
test_assert(BAD_HOSTNAME == parse_extended_hostname(address1)); tt_assert(BAD_HOSTNAME == parse_extended_hostname(address1));
test_assert(ONION_HOSTNAME == parse_extended_hostname(address2)); tt_assert(ONION_HOSTNAME == parse_extended_hostname(address2));
test_streq(address2, "aaaaaaaaaaaaaaaa"); tt_str_op(address2,==, "aaaaaaaaaaaaaaaa");
test_assert(EXIT_HOSTNAME == parse_extended_hostname(address3)); tt_assert(EXIT_HOSTNAME == parse_extended_hostname(address3));
test_assert(NORMAL_HOSTNAME == parse_extended_hostname(address4)); tt_assert(NORMAL_HOSTNAME == parse_extended_hostname(address4));
test_assert(ONION_HOSTNAME == parse_extended_hostname(address5)); tt_assert(ONION_HOSTNAME == parse_extended_hostname(address5));
test_streq(address5, "abcdefghijklmnop"); tt_str_op(address5,==, "abcdefghijklmnop");
test_assert(ONION_HOSTNAME == parse_extended_hostname(address6)); tt_assert(ONION_HOSTNAME == parse_extended_hostname(address6));
test_streq(address6, "abcdefghijklmnop"); tt_str_op(address6,==, "abcdefghijklmnop");
test_assert(BAD_HOSTNAME == parse_extended_hostname(address7)); tt_assert(BAD_HOSTNAME == parse_extended_hostname(address7));
pk1 = pk_generate(0); pk1 = pk_generate(0);
pk2 = pk_generate(1); pk2 = pk_generate(1);
@ -684,40 +684,40 @@ test_rend_fns(void)
intro->intro_key = crypto_pk_dup_key(pk2); intro->intro_key = crypto_pk_dup_key(pk2);
smartlist_add(generated->intro_nodes, intro); smartlist_add(generated->intro_nodes, intro);
} }
test_assert(rend_encode_v2_descriptors(descs, generated, now, 0, tt_assert(rend_encode_v2_descriptors(descs, generated, now, 0,
REND_NO_AUTH, NULL, NULL) > 0); REND_NO_AUTH, NULL, NULL) > 0);
test_assert(rend_compute_v2_desc_id(computed_desc_id, service_id_base32, tt_assert(rend_compute_v2_desc_id(computed_desc_id, service_id_base32,
NULL, now, 0) == 0); NULL, now, 0) == 0);
test_memeq(((rend_encoded_v2_service_descriptor_t *) tt_mem_op(((rend_encoded_v2_service_descriptor_t *)
smartlist_get(descs, 0))->desc_id, computed_desc_id, DIGEST_LEN); smartlist_get(descs, 0))->desc_id,==, computed_desc_id, DIGEST_LEN);
test_assert(rend_parse_v2_service_descriptor(&parsed, parsed_desc_id, tt_assert(rend_parse_v2_service_descriptor(&parsed, parsed_desc_id,
&intro_points_encrypted, &intro_points_encrypted,
&intro_points_size, &intro_points_size,
&encoded_size, &encoded_size,
&next_desc, &next_desc,
((rend_encoded_v2_service_descriptor_t *) ((rend_encoded_v2_service_descriptor_t *)
smartlist_get(descs, 0))->desc_str) == 0); smartlist_get(descs, 0))->desc_str) == 0);
test_assert(parsed); tt_assert(parsed);
test_memeq(((rend_encoded_v2_service_descriptor_t *) tt_mem_op(((rend_encoded_v2_service_descriptor_t *)
smartlist_get(descs, 0))->desc_id, parsed_desc_id, DIGEST_LEN); smartlist_get(descs, 0))->desc_id,==, parsed_desc_id, DIGEST_LEN);
test_eq(rend_parse_introduction_points(parsed, intro_points_encrypted, tt_int_op(rend_parse_introduction_points(parsed, intro_points_encrypted,
intro_points_size), 3); intro_points_size),==, 3);
test_assert(!crypto_pk_cmp_keys(generated->pk, parsed->pk)); tt_assert(!crypto_pk_cmp_keys(generated->pk, parsed->pk));
test_eq(parsed->timestamp, now); tt_int_op(parsed->timestamp,==, now);
test_eq(parsed->version, 2); tt_int_op(parsed->version,==, 2);
test_eq(parsed->protocols, 42); tt_int_op(parsed->protocols,==, 42);
test_eq(smartlist_len(parsed->intro_nodes), 3); tt_int_op(smartlist_len(parsed->intro_nodes),==, 3);
for (i = 0; i < smartlist_len(parsed->intro_nodes); i++) { for (i = 0; i < smartlist_len(parsed->intro_nodes); i++) {
rend_intro_point_t *par_intro = smartlist_get(parsed->intro_nodes, i), rend_intro_point_t *par_intro = smartlist_get(parsed->intro_nodes, i),
*gen_intro = smartlist_get(generated->intro_nodes, i); *gen_intro = smartlist_get(generated->intro_nodes, i);
extend_info_t *par_info = par_intro->extend_info; extend_info_t *par_info = par_intro->extend_info;
extend_info_t *gen_info = gen_intro->extend_info; extend_info_t *gen_info = gen_intro->extend_info;
test_assert(!crypto_pk_cmp_keys(gen_info->onion_key, par_info->onion_key)); tt_assert(!crypto_pk_cmp_keys(gen_info->onion_key, par_info->onion_key));
test_memeq(gen_info->identity_digest, par_info->identity_digest, tt_mem_op(gen_info->identity_digest,==, par_info->identity_digest,
DIGEST_LEN); DIGEST_LEN);
test_streq(gen_info->nickname, par_info->nickname); tt_str_op(gen_info->nickname,==, par_info->nickname);
test_assert(tor_addr_eq(&gen_info->addr, &par_info->addr)); tt_assert(tor_addr_eq(&gen_info->addr, &par_info->addr));
test_eq(gen_info->port, par_info->port); tt_int_op(gen_info->port,==, par_info->port);
} }
rend_service_descriptor_free(parsed); rend_service_descriptor_free(parsed);
@ -825,23 +825,23 @@ test_geoip(void)
/* Populate the DB a bit. Add these in order, since we can't do the final /* Populate the DB a bit. Add these in order, since we can't do the final
* 'sort' step. These aren't very good IP addresses, but they're perfectly * 'sort' step. These aren't very good IP addresses, but they're perfectly
* fine uint32_t values. */ * fine uint32_t values. */
test_eq(0, geoip_parse_entry("10,50,AB", AF_INET)); tt_int_op(0,==, geoip_parse_entry("10,50,AB", AF_INET));
test_eq(0, geoip_parse_entry("52,90,XY", AF_INET)); tt_int_op(0,==, geoip_parse_entry("52,90,XY", AF_INET));
test_eq(0, geoip_parse_entry("95,100,AB", AF_INET)); tt_int_op(0,==, geoip_parse_entry("95,100,AB", AF_INET));
test_eq(0, geoip_parse_entry("\"105\",\"140\",\"ZZ\"", AF_INET)); tt_int_op(0,==, geoip_parse_entry("\"105\",\"140\",\"ZZ\"", AF_INET));
test_eq(0, geoip_parse_entry("\"150\",\"190\",\"XY\"", AF_INET)); tt_int_op(0,==, geoip_parse_entry("\"150\",\"190\",\"XY\"", AF_INET));
test_eq(0, geoip_parse_entry("\"200\",\"250\",\"AB\"", AF_INET)); tt_int_op(0,==, geoip_parse_entry("\"200\",\"250\",\"AB\"", AF_INET));
/* Populate the IPv6 DB equivalently with fake IPs in the same range */ /* Populate the IPv6 DB equivalently with fake IPs in the same range */
test_eq(0, geoip_parse_entry("::a,::32,AB", AF_INET6)); tt_int_op(0,==, geoip_parse_entry("::a,::32,AB", AF_INET6));
test_eq(0, geoip_parse_entry("::34,::5a,XY", AF_INET6)); tt_int_op(0,==, geoip_parse_entry("::34,::5a,XY", AF_INET6));
test_eq(0, geoip_parse_entry("::5f,::64,AB", AF_INET6)); tt_int_op(0,==, geoip_parse_entry("::5f,::64,AB", AF_INET6));
test_eq(0, geoip_parse_entry("::69,::8c,ZZ", AF_INET6)); tt_int_op(0,==, geoip_parse_entry("::69,::8c,ZZ", AF_INET6));
test_eq(0, geoip_parse_entry("::96,::be,XY", AF_INET6)); tt_int_op(0,==, geoip_parse_entry("::96,::be,XY", AF_INET6));
test_eq(0, geoip_parse_entry("::c8,::fa,AB", AF_INET6)); tt_int_op(0,==, geoip_parse_entry("::c8,::fa,AB", AF_INET6));
/* We should have 4 countries: ??, ab, xy, zz. */ /* We should have 4 countries: ??, ab, xy, zz. */
test_eq(4, geoip_get_n_countries()); tt_int_op(4,==, geoip_get_n_countries());
memset(&in6, 0, sizeof(in6)); memset(&in6, 0, sizeof(in6));
CHECK_COUNTRY("??", 3); CHECK_COUNTRY("??", 3);
@ -852,9 +852,9 @@ test_geoip(void)
CHECK_COUNTRY("xy", 190); CHECK_COUNTRY("xy", 190);
CHECK_COUNTRY("??", 2000); CHECK_COUNTRY("??", 2000);
test_eq(0, geoip_get_country_by_ipv4(3)); tt_int_op(0,==, geoip_get_country_by_ipv4(3));
SET_TEST_IPV6(3); SET_TEST_IPV6(3);
test_eq(0, geoip_get_country_by_ipv6(&in6)); tt_int_op(0,==, geoip_get_country_by_ipv6(&in6));
get_options_mutable()->BridgeRelay = 1; get_options_mutable()->BridgeRelay = 1;
get_options_mutable()->BridgeRecordUsageByCountry = 1; get_options_mutable()->BridgeRecordUsageByCountry = 1;
@ -877,41 +877,41 @@ test_geoip(void)
geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now); geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now);
} }
geoip_get_client_history(GEOIP_CLIENT_CONNECT, &s, &v); geoip_get_client_history(GEOIP_CLIENT_CONNECT, &s, &v);
test_assert(s); tt_assert(s);
test_assert(v); tt_assert(v);
test_streq("zz=24,ab=16,xy=8", s); tt_str_op("zz=24,ab=16,xy=8",==, s);
test_streq("v4=16,v6=16", v); tt_str_op("v4=16,v6=16",==, v);
tor_free(s); tor_free(s);
tor_free(v); tor_free(v);
/* Now clear out all the AB observations. */ /* Now clear out all the AB observations. */
geoip_remove_old_clients(now-6000); geoip_remove_old_clients(now-6000);
geoip_get_client_history(GEOIP_CLIENT_CONNECT, &s, &v); geoip_get_client_history(GEOIP_CLIENT_CONNECT, &s, &v);
test_assert(s); tt_assert(s);
test_assert(v); tt_assert(v);
test_streq("zz=24,xy=8", s); tt_str_op("zz=24,xy=8",==, s);
test_streq("v4=16,v6=16", v); tt_str_op("v4=16,v6=16",==, v);
tor_free(s); tor_free(s);
tor_free(v); tor_free(v);
/* Start testing bridge statistics by making sure that we don't output /* Start testing bridge statistics by making sure that we don't output
* bridge stats without initializing them. */ * bridge stats without initializing them. */
s = geoip_format_bridge_stats(now + 86400); s = geoip_format_bridge_stats(now + 86400);
test_assert(!s); tt_assert(!s);
/* Initialize stats and generate the bridge-stats history string out of /* Initialize stats and generate the bridge-stats history string out of
* the connecting clients added above. */ * the connecting clients added above. */
geoip_bridge_stats_init(now); geoip_bridge_stats_init(now);
s = geoip_format_bridge_stats(now + 86400); s = geoip_format_bridge_stats(now + 86400);
test_assert(s); tt_assert(s);
test_streq(bridge_stats_1, s); tt_str_op(bridge_stats_1,==, s);
tor_free(s); tor_free(s);
/* Stop collecting bridge stats and make sure we don't write a history /* Stop collecting bridge stats and make sure we don't write a history
* string anymore. */ * string anymore. */
geoip_bridge_stats_term(); geoip_bridge_stats_term();
s = geoip_format_bridge_stats(now + 86400); s = geoip_format_bridge_stats(now + 86400);
test_assert(!s); tt_assert(!s);
/* Stop being a bridge and start being a directory mirror that gathers /* Stop being a bridge and start being a directory mirror that gathers
* directory request statistics. */ * directory request statistics. */
@ -925,7 +925,7 @@ test_geoip(void)
SET_TEST_ADDRESS(100); SET_TEST_ADDRESS(100);
geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, NULL, now); geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, NULL, now);
s = geoip_format_dirreq_stats(now + 86400); s = geoip_format_dirreq_stats(now + 86400);
test_assert(!s); tt_assert(!s);
/* Initialize stats, note one connecting client, and generate the /* Initialize stats, note one connecting client, and generate the
* dirreq-stats history string. */ * dirreq-stats history string. */
@ -933,7 +933,7 @@ test_geoip(void)
SET_TEST_ADDRESS(100); SET_TEST_ADDRESS(100);
geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, NULL, now); geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, NULL, now);
s = geoip_format_dirreq_stats(now + 86400); s = geoip_format_dirreq_stats(now + 86400);
test_streq(dirreq_stats_1, s); tt_str_op(dirreq_stats_1,==, s);
tor_free(s); tor_free(s);
/* Stop collecting stats, add another connecting client, and ensure we /* Stop collecting stats, add another connecting client, and ensure we
@ -942,7 +942,7 @@ test_geoip(void)
SET_TEST_ADDRESS(101); SET_TEST_ADDRESS(101);
geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, NULL, now); geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, NULL, now);
s = geoip_format_dirreq_stats(now + 86400); s = geoip_format_dirreq_stats(now + 86400);
test_assert(!s); tt_assert(!s);
/* Re-start stats, add a connecting client, reset stats, and make sure /* Re-start stats, add a connecting client, reset stats, and make sure
* that we get an all empty history string. */ * that we get an all empty history string. */
@ -951,20 +951,20 @@ test_geoip(void)
geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, NULL, now); geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, NULL, now);
geoip_reset_dirreq_stats(now); geoip_reset_dirreq_stats(now);
s = geoip_format_dirreq_stats(now + 86400); s = geoip_format_dirreq_stats(now + 86400);
test_streq(dirreq_stats_2, s); tt_str_op(dirreq_stats_2,==, s);
tor_free(s); tor_free(s);
/* Note a successful network status response and make sure that it /* Note a successful network status response and make sure that it
* appears in the history string. */ * appears in the history string. */
geoip_note_ns_response(GEOIP_SUCCESS); geoip_note_ns_response(GEOIP_SUCCESS);
s = geoip_format_dirreq_stats(now + 86400); s = geoip_format_dirreq_stats(now + 86400);
test_streq(dirreq_stats_3, s); tt_str_op(dirreq_stats_3,==, s);
tor_free(s); tor_free(s);
/* Start a tunneled directory request. */ /* Start a tunneled directory request. */
geoip_start_dirreq((uint64_t) 1, 1024, DIRREQ_TUNNELED); geoip_start_dirreq((uint64_t) 1, 1024, DIRREQ_TUNNELED);
s = geoip_format_dirreq_stats(now + 86400); s = geoip_format_dirreq_stats(now + 86400);
test_streq(dirreq_stats_4, s); tt_str_op(dirreq_stats_4,==, s);
tor_free(s); tor_free(s);
/* Stop collecting directory request statistics and start gathering /* Stop collecting directory request statistics and start gathering
@ -978,7 +978,7 @@ test_geoip(void)
SET_TEST_ADDRESS(100); SET_TEST_ADDRESS(100);
geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now); geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now);
s = geoip_format_entry_stats(now + 86400); s = geoip_format_entry_stats(now + 86400);
test_assert(!s); tt_assert(!s);
/* Initialize stats, note one connecting client, and generate the /* Initialize stats, note one connecting client, and generate the
* entry-stats history string. */ * entry-stats history string. */
@ -986,7 +986,7 @@ test_geoip(void)
SET_TEST_ADDRESS(100); SET_TEST_ADDRESS(100);
geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now); geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now);
s = geoip_format_entry_stats(now + 86400); s = geoip_format_entry_stats(now + 86400);
test_streq(entry_stats_1, s); tt_str_op(entry_stats_1,==, s);
tor_free(s); tor_free(s);
/* Stop collecting stats, add another connecting client, and ensure we /* Stop collecting stats, add another connecting client, and ensure we
@ -995,7 +995,7 @@ test_geoip(void)
SET_TEST_ADDRESS(101); SET_TEST_ADDRESS(101);
geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now); geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now);
s = geoip_format_entry_stats(now + 86400); s = geoip_format_entry_stats(now + 86400);
test_assert(!s); tt_assert(!s);
/* Re-start stats, add a connecting client, reset stats, and make sure /* Re-start stats, add a connecting client, reset stats, and make sure
* that we get an all empty history string. */ * that we get an all empty history string. */
@ -1004,7 +1004,7 @@ test_geoip(void)
geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now); geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now);
geoip_reset_entry_stats(now); geoip_reset_entry_stats(now);
s = geoip_format_entry_stats(now + 86400); s = geoip_format_entry_stats(now + 86400);
test_streq(entry_stats_2, s); tt_str_op(entry_stats_2,==, s);
tor_free(s); tor_free(s);
/* Stop collecting entry statistics. */ /* Stop collecting entry statistics. */
@ -1076,7 +1076,7 @@ test_geoip_with_pt(void)
/* Test the transport history string. */ /* Test the transport history string. */
s = geoip_get_transport_history(); s = geoip_get_transport_history();
tor_assert(s); tor_assert(s);
test_streq(s, "<OR>=8,alpha=16,beta=8,charlie=16,ddr=136," tt_str_op(s,==, "<OR>=8,alpha=16,beta=8,charlie=16,ddr=136,"
"entropy=8,fire=8,google=8"); "entropy=8,fire=8,google=8");
/* Stop collecting entry statistics. */ /* Stop collecting entry statistics. */
@ -1104,7 +1104,7 @@ test_stats(void)
rep_hist_note_exit_stream_opened(80); rep_hist_note_exit_stream_opened(80);
rep_hist_note_exit_bytes(80, 100, 10000); rep_hist_note_exit_bytes(80, 100, 10000);
s = rep_hist_format_exit_stats(now + 86400); s = rep_hist_format_exit_stats(now + 86400);
test_assert(!s); tt_assert(!s);
/* Initialize stats, note some streams and bytes, and generate history /* Initialize stats, note some streams and bytes, and generate history
* string. */ * string. */
@ -1115,10 +1115,10 @@ test_stats(void)
rep_hist_note_exit_bytes(443, 100, 10000); rep_hist_note_exit_bytes(443, 100, 10000);
rep_hist_note_exit_bytes(443, 100, 10000); rep_hist_note_exit_bytes(443, 100, 10000);
s = rep_hist_format_exit_stats(now + 86400); s = rep_hist_format_exit_stats(now + 86400);
test_streq("exit-stats-end 2010-08-12 13:27:30 (86400 s)\n" tt_str_op("exit-stats-end 2010-08-12 13:27:30 (86400 s)\n"
"exit-kibibytes-written 80=1,443=1,other=0\n" "exit-kibibytes-written 80=1,443=1,other=0\n"
"exit-kibibytes-read 80=10,443=20,other=0\n" "exit-kibibytes-read 80=10,443=20,other=0\n"
"exit-streams-opened 80=4,443=4,other=0\n", s); "exit-streams-opened 80=4,443=4,other=0\n",==, s);
tor_free(s); tor_free(s);
/* Add a few bytes on 10 more ports and ensure that only the top 10 /* Add a few bytes on 10 more ports and ensure that only the top 10
@ -1128,13 +1128,13 @@ test_stats(void)
rep_hist_note_exit_stream_opened(i); rep_hist_note_exit_stream_opened(i);
} }
s = rep_hist_format_exit_stats(now + 86400); s = rep_hist_format_exit_stats(now + 86400);
test_streq("exit-stats-end 2010-08-12 13:27:30 (86400 s)\n" tt_str_op("exit-stats-end 2010-08-12 13:27:30 (86400 s)\n"
"exit-kibibytes-written 52=1,53=1,54=1,55=1,56=1,57=1,58=1," "exit-kibibytes-written 52=1,53=1,54=1,55=1,56=1,57=1,58=1,"
"59=1,80=1,443=1,other=1\n" "59=1,80=1,443=1,other=1\n"
"exit-kibibytes-read 52=1,53=1,54=1,55=1,56=1,57=1,58=1," "exit-kibibytes-read 52=1,53=1,54=1,55=1,56=1,57=1,58=1,"
"59=1,80=10,443=20,other=1\n" "59=1,80=10,443=20,other=1\n"
"exit-streams-opened 52=4,53=4,54=4,55=4,56=4,57=4,58=4," "exit-streams-opened 52=4,53=4,54=4,55=4,56=4,57=4,58=4,"
"59=4,80=4,443=4,other=4\n", s); "59=4,80=4,443=4,other=4\n",==, s);
tor_free(s); tor_free(s);
/* Stop collecting stats, add some bytes, and ensure we don't generate /* Stop collecting stats, add some bytes, and ensure we don't generate
@ -1142,7 +1142,7 @@ test_stats(void)
rep_hist_exit_stats_term(); rep_hist_exit_stats_term();
rep_hist_note_exit_bytes(80, 100, 10000); rep_hist_note_exit_bytes(80, 100, 10000);
s = rep_hist_format_exit_stats(now + 86400); s = rep_hist_format_exit_stats(now + 86400);
test_assert(!s); tt_assert(!s);
/* Re-start stats, add some bytes, reset stats, and see what history we /* Re-start stats, add some bytes, reset stats, and see what history we
* get when observing no streams or bytes at all. */ * get when observing no streams or bytes at all. */
@ -1151,17 +1151,17 @@ test_stats(void)
rep_hist_note_exit_bytes(80, 100, 10000); rep_hist_note_exit_bytes(80, 100, 10000);
rep_hist_reset_exit_stats(now); rep_hist_reset_exit_stats(now);
s = rep_hist_format_exit_stats(now + 86400); s = rep_hist_format_exit_stats(now + 86400);
test_streq("exit-stats-end 2010-08-12 13:27:30 (86400 s)\n" tt_str_op("exit-stats-end 2010-08-12 13:27:30 (86400 s)\n"
"exit-kibibytes-written other=0\n" "exit-kibibytes-written other=0\n"
"exit-kibibytes-read other=0\n" "exit-kibibytes-read other=0\n"
"exit-streams-opened other=0\n", s); "exit-streams-opened other=0\n",==, s);
tor_free(s); tor_free(s);
/* Continue with testing connection statistics; we shouldn't collect /* Continue with testing connection statistics; we shouldn't collect
* conn stats without initializing them. */ * conn stats without initializing them. */
rep_hist_note_or_conn_bytes(1, 20, 400, now); rep_hist_note_or_conn_bytes(1, 20, 400, now);
s = rep_hist_format_conn_stats(now + 86400); s = rep_hist_format_conn_stats(now + 86400);
test_assert(!s); tt_assert(!s);
/* Initialize stats, note bytes, and generate history string. */ /* Initialize stats, note bytes, and generate history string. */
rep_hist_conn_stats_init(now); rep_hist_conn_stats_init(now);
@ -1170,7 +1170,7 @@ test_stats(void)
rep_hist_note_or_conn_bytes(2, 400000, 30000, now + 10); rep_hist_note_or_conn_bytes(2, 400000, 30000, now + 10);
rep_hist_note_or_conn_bytes(2, 400000, 30000, now + 15); rep_hist_note_or_conn_bytes(2, 400000, 30000, now + 15);
s = rep_hist_format_conn_stats(now + 86400); s = rep_hist_format_conn_stats(now + 86400);
test_streq("conn-bi-direct 2010-08-12 13:27:30 (86400 s) 0,0,1,0\n", s); tt_str_op("conn-bi-direct 2010-08-12 13:27:30 (86400 s) 0,0,1,0\n",==, s);
tor_free(s); tor_free(s);
/* Stop collecting stats, add some bytes, and ensure we don't generate /* Stop collecting stats, add some bytes, and ensure we don't generate
@ -1178,7 +1178,7 @@ test_stats(void)
rep_hist_conn_stats_term(); rep_hist_conn_stats_term();
rep_hist_note_or_conn_bytes(2, 400000, 30000, now + 15); rep_hist_note_or_conn_bytes(2, 400000, 30000, now + 15);
s = rep_hist_format_conn_stats(now + 86400); s = rep_hist_format_conn_stats(now + 86400);
test_assert(!s); tt_assert(!s);
/* Re-start stats, add some bytes, reset stats, and see what history we /* Re-start stats, add some bytes, reset stats, and see what history we
* get when observing no bytes at all. */ * get when observing no bytes at all. */
@ -1189,26 +1189,26 @@ test_stats(void)
rep_hist_note_or_conn_bytes(2, 400000, 30000, now + 15); rep_hist_note_or_conn_bytes(2, 400000, 30000, now + 15);
rep_hist_reset_conn_stats(now); rep_hist_reset_conn_stats(now);
s = rep_hist_format_conn_stats(now + 86400); s = rep_hist_format_conn_stats(now + 86400);
test_streq("conn-bi-direct 2010-08-12 13:27:30 (86400 s) 0,0,0,0\n", s); tt_str_op("conn-bi-direct 2010-08-12 13:27:30 (86400 s) 0,0,0,0\n",==, s);
tor_free(s); tor_free(s);
/* Continue with testing buffer statistics; we shouldn't collect buffer /* Continue with testing buffer statistics; we shouldn't collect buffer
* stats without initializing them. */ * stats without initializing them. */
rep_hist_add_buffer_stats(2.0, 2.0, 20); rep_hist_add_buffer_stats(2.0, 2.0, 20);
s = rep_hist_format_buffer_stats(now + 86400); s = rep_hist_format_buffer_stats(now + 86400);
test_assert(!s); tt_assert(!s);
/* Initialize stats, add statistics for a single circuit, and generate /* Initialize stats, add statistics for a single circuit, and generate
* the history string. */ * the history string. */
rep_hist_buffer_stats_init(now); rep_hist_buffer_stats_init(now);
rep_hist_add_buffer_stats(2.0, 2.0, 20); rep_hist_add_buffer_stats(2.0, 2.0, 20);
s = rep_hist_format_buffer_stats(now + 86400); s = rep_hist_format_buffer_stats(now + 86400);
test_streq("cell-stats-end 2010-08-12 13:27:30 (86400 s)\n" tt_str_op("cell-stats-end 2010-08-12 13:27:30 (86400 s)\n"
"cell-processed-cells 20,0,0,0,0,0,0,0,0,0\n" "cell-processed-cells 20,0,0,0,0,0,0,0,0,0\n"
"cell-queued-cells 2.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00," "cell-queued-cells 2.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,"
"0.00,0.00\n" "0.00,0.00\n"
"cell-time-in-queue 2,0,0,0,0,0,0,0,0,0\n" "cell-time-in-queue 2,0,0,0,0,0,0,0,0,0\n"
"cell-circuits-per-decile 1\n", s); "cell-circuits-per-decile 1\n",==, s);
tor_free(s); tor_free(s);
/* Add nineteen more circuit statistics to the one that's already in the /* Add nineteen more circuit statistics to the one that's already in the
@ -1218,12 +1218,12 @@ test_stats(void)
for (i = 20; i < 30; i++) for (i = 20; i < 30; i++)
rep_hist_add_buffer_stats(3.5, 3.5, i); rep_hist_add_buffer_stats(3.5, 3.5, i);
s = rep_hist_format_buffer_stats(now + 86400); s = rep_hist_format_buffer_stats(now + 86400);
test_streq("cell-stats-end 2010-08-12 13:27:30 (86400 s)\n" tt_str_op("cell-stats-end 2010-08-12 13:27:30 (86400 s)\n"
"cell-processed-cells 29,28,27,26,25,24,23,22,21,20\n" "cell-processed-cells 29,28,27,26,25,24,23,22,21,20\n"
"cell-queued-cells 2.75,2.75,2.75,2.75,2.75,2.75,2.75,2.75," "cell-queued-cells 2.75,2.75,2.75,2.75,2.75,2.75,2.75,2.75,"
"2.75,2.75\n" "2.75,2.75\n"
"cell-time-in-queue 3,3,3,3,3,3,3,3,3,3\n" "cell-time-in-queue 3,3,3,3,3,3,3,3,3,3\n"
"cell-circuits-per-decile 2\n", s); "cell-circuits-per-decile 2\n",==, s);
tor_free(s); tor_free(s);
/* Stop collecting stats, add statistics for one circuit, and ensure we /* Stop collecting stats, add statistics for one circuit, and ensure we
@ -1231,7 +1231,7 @@ test_stats(void)
rep_hist_buffer_stats_term(); rep_hist_buffer_stats_term();
rep_hist_add_buffer_stats(2.0, 2.0, 20); rep_hist_add_buffer_stats(2.0, 2.0, 20);
s = rep_hist_format_buffer_stats(now + 86400); s = rep_hist_format_buffer_stats(now + 86400);
test_assert(!s); tt_assert(!s);
/* Re-start stats, add statistics for one circuit, reset stats, and make /* Re-start stats, add statistics for one circuit, reset stats, and make
* sure that the history has all zeros. */ * sure that the history has all zeros. */
@ -1239,12 +1239,12 @@ test_stats(void)
rep_hist_add_buffer_stats(2.0, 2.0, 20); rep_hist_add_buffer_stats(2.0, 2.0, 20);
rep_hist_reset_buffer_stats(now); rep_hist_reset_buffer_stats(now);
s = rep_hist_format_buffer_stats(now + 86400); s = rep_hist_format_buffer_stats(now + 86400);
test_streq("cell-stats-end 2010-08-12 13:27:30 (86400 s)\n" tt_str_op("cell-stats-end 2010-08-12 13:27:30 (86400 s)\n"
"cell-processed-cells 0,0,0,0,0,0,0,0,0,0\n" "cell-processed-cells 0,0,0,0,0,0,0,0,0,0\n"
"cell-queued-cells 0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00," "cell-queued-cells 0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,"
"0.00,0.00\n" "0.00,0.00\n"
"cell-time-in-queue 0,0,0,0,0,0,0,0,0,0\n" "cell-time-in-queue 0,0,0,0,0,0,0,0,0,0\n"
"cell-circuits-per-decile 0\n", s); "cell-circuits-per-decile 0\n",==, s);
done: done:
tor_free(s); tor_free(s);

View File

@ -18,41 +18,41 @@ test_addr_basic(void)
/* Test addr_port_lookup */ /* Test addr_port_lookup */
cp = NULL; u32 = 3; u16 = 3; cp = NULL; u32 = 3; u16 = 3;
test_assert(!addr_port_lookup(LOG_WARN, "1.2.3.4", &cp, &u32, &u16)); tt_assert(!addr_port_lookup(LOG_WARN, "1.2.3.4", &cp, &u32, &u16));
test_streq(cp, "1.2.3.4"); tt_str_op(cp,==, "1.2.3.4");
test_eq(u32, 0x01020304u); tt_int_op(u32,==, 0x01020304u);
test_eq(u16, 0); tt_int_op(u16,==, 0);
tor_free(cp); tor_free(cp);
test_assert(!addr_port_lookup(LOG_WARN, "4.3.2.1:99", &cp, &u32, &u16)); tt_assert(!addr_port_lookup(LOG_WARN, "4.3.2.1:99", &cp, &u32, &u16));
test_streq(cp, "4.3.2.1"); tt_str_op(cp,==, "4.3.2.1");
test_eq(u32, 0x04030201u); tt_int_op(u32,==, 0x04030201u);
test_eq(u16, 99); tt_int_op(u16,==, 99);
tor_free(cp); tor_free(cp);
test_assert(!addr_port_lookup(LOG_WARN, "nonexistent.address:4040", tt_assert(!addr_port_lookup(LOG_WARN, "nonexistent.address:4040",
&cp, NULL, &u16)); &cp, NULL, &u16));
test_streq(cp, "nonexistent.address"); tt_str_op(cp,==, "nonexistent.address");
test_eq(u16, 4040); tt_int_op(u16,==, 4040);
tor_free(cp); tor_free(cp);
test_assert(!addr_port_lookup(LOG_WARN, "localhost:9999", &cp, &u32, &u16)); tt_assert(!addr_port_lookup(LOG_WARN, "localhost:9999", &cp, &u32, &u16));
test_streq(cp, "localhost"); tt_str_op(cp,==, "localhost");
test_eq(u32, 0x7f000001u); tt_int_op(u32,==, 0x7f000001u);
test_eq(u16, 9999); tt_int_op(u16,==, 9999);
tor_free(cp); tor_free(cp);
u32 = 3; u32 = 3;
test_assert(!addr_port_lookup(LOG_WARN, "localhost", NULL, &u32, &u16)); tt_assert(!addr_port_lookup(LOG_WARN, "localhost", NULL, &u32, &u16));
test_eq_ptr(cp, NULL); tt_ptr_op(cp,==, NULL);
test_eq(u32, 0x7f000001u); tt_int_op(u32,==, 0x7f000001u);
test_eq(u16, 0); tt_int_op(u16,==, 0);
tor_free(cp); tor_free(cp);
test_assert(addr_port_lookup(LOG_WARN, "localhost:3", &cp, &u32, NULL)); tt_assert(addr_port_lookup(LOG_WARN, "localhost:3", &cp, &u32, NULL));
tor_free(cp); tor_free(cp);
test_eq(0, addr_mask_get_bits(0x0u)); tt_int_op(0,==, addr_mask_get_bits(0x0u));
test_eq(32, addr_mask_get_bits(0xFFFFFFFFu)); tt_int_op(32,==, addr_mask_get_bits(0xFFFFFFFFu));
test_eq(16, addr_mask_get_bits(0xFFFF0000u)); tt_int_op(16,==, addr_mask_get_bits(0xFFFF0000u));
test_eq(31, addr_mask_get_bits(0xFFFFFFFEu)); tt_int_op(31,==, addr_mask_get_bits(0xFFFFFFFEu));
test_eq(1, addr_mask_get_bits(0x80000000u)); tt_int_op(1,==, addr_mask_get_bits(0x80000000u));
/* Test inet_ntop */ /* Test inet_ntop */
{ {
@ -61,15 +61,15 @@ test_addr_basic(void)
struct in_addr in; struct in_addr in;
/* good round trip */ /* good round trip */
test_eq(tor_inet_pton(AF_INET, ip, &in), 1); tt_int_op(tor_inet_pton(AF_INET, ip, &in),==, 1);
test_eq_ptr(tor_inet_ntop(AF_INET, &in, tmpbuf, sizeof(tmpbuf)), &tmpbuf); tt_ptr_op(tor_inet_ntop(AF_INET, &in, tmpbuf, sizeof(tmpbuf)),==, &tmpbuf);
test_streq(tmpbuf, ip); tt_str_op(tmpbuf,==, ip);
/* just enough buffer length */ /* just enough buffer length */
test_streq(tor_inet_ntop(AF_INET, &in, tmpbuf, strlen(ip) + 1), ip); tt_str_op(tor_inet_ntop(AF_INET, &in, tmpbuf, strlen(ip) + 1),==, ip);
/* too short buffer */ /* too short buffer */
test_eq_ptr(tor_inet_ntop(AF_INET, &in, tmpbuf, strlen(ip)), NULL); tt_ptr_op(tor_inet_ntop(AF_INET, &in, tmpbuf, strlen(ip)),==, NULL);
} }
done: done:
@ -199,23 +199,23 @@ test_addr_ip6_helpers(void)
const char *ip_ffff = "::ffff:192.168.1.2"; const char *ip_ffff = "::ffff:192.168.1.2";
/* good round trip */ /* good round trip */
test_eq(tor_inet_pton(AF_INET6, ip, &a1), 1); tt_int_op(tor_inet_pton(AF_INET6, ip, &a1),==, 1);
test_eq_ptr(tor_inet_ntop(AF_INET6, &a1, buf, sizeof(buf)), &buf); tt_ptr_op(tor_inet_ntop(AF_INET6, &a1, buf, sizeof(buf)),==, &buf);
test_streq(buf, ip); tt_str_op(buf,==, ip);
/* good round trip - ::ffff:0:0 style */ /* good round trip - ::ffff:0:0 style */
test_eq(tor_inet_pton(AF_INET6, ip_ffff, &a2), 1); tt_int_op(tor_inet_pton(AF_INET6, ip_ffff, &a2),==, 1);
test_eq_ptr(tor_inet_ntop(AF_INET6, &a2, buf, sizeof(buf)), &buf); tt_ptr_op(tor_inet_ntop(AF_INET6, &a2, buf, sizeof(buf)),==, &buf);
test_streq(buf, ip_ffff); tt_str_op(buf,==, ip_ffff);
/* just long enough buffer (remember \0) */ /* just long enough buffer (remember \0) */
test_streq(tor_inet_ntop(AF_INET6, &a1, buf, strlen(ip)+1), ip); tt_str_op(tor_inet_ntop(AF_INET6, &a1, buf, strlen(ip)+1),==, ip);
test_streq(tor_inet_ntop(AF_INET6, &a2, buf, strlen(ip_ffff)+1), tt_str_op(tor_inet_ntop(AF_INET6, &a2, buf, strlen(ip_ffff)+1),==,
ip_ffff); ip_ffff);
/* too short buffer (remember \0) */ /* too short buffer (remember \0) */
test_eq_ptr(tor_inet_ntop(AF_INET6, &a1, buf, strlen(ip)), NULL); tt_ptr_op(tor_inet_ntop(AF_INET6, &a1, buf, strlen(ip)),==, NULL);
test_eq_ptr(tor_inet_ntop(AF_INET6, &a2, buf, strlen(ip_ffff)), NULL); tt_ptr_op(tor_inet_ntop(AF_INET6, &a2, buf, strlen(ip_ffff)),==, NULL);
} }
/* ==== Converting to and from sockaddr_t. */ /* ==== Converting to and from sockaddr_t. */
@ -224,16 +224,16 @@ test_addr_ip6_helpers(void)
sin->sin_port = htons(9090); sin->sin_port = htons(9090);
sin->sin_addr.s_addr = htonl(0x7f7f0102); /*127.127.1.2*/ sin->sin_addr.s_addr = htonl(0x7f7f0102); /*127.127.1.2*/
tor_addr_from_sockaddr(&t1, (struct sockaddr *)sin, &port1); tor_addr_from_sockaddr(&t1, (struct sockaddr *)sin, &port1);
test_eq(tor_addr_family(&t1), AF_INET); tt_int_op(tor_addr_family(&t1),==, AF_INET);
test_eq(tor_addr_to_ipv4h(&t1), 0x7f7f0102); tt_int_op(tor_addr_to_ipv4h(&t1),==, 0x7f7f0102);
tt_int_op(port1, ==, 9090); tt_int_op(port1, ==, 9090);
memset(&sa_storage, 0, sizeof(sa_storage)); memset(&sa_storage, 0, sizeof(sa_storage));
test_eq(sizeof(struct sockaddr_in), tt_int_op(sizeof(struct sockaddr_in),==,
tor_addr_to_sockaddr(&t1, 1234, (struct sockaddr *)&sa_storage, tor_addr_to_sockaddr(&t1, 1234, (struct sockaddr *)&sa_storage,
sizeof(sa_storage))); sizeof(sa_storage)));
test_eq(1234, ntohs(sin->sin_port)); tt_int_op(1234,==, ntohs(sin->sin_port));
test_eq(0x7f7f0102, ntohl(sin->sin_addr.s_addr)); tt_int_op(0x7f7f0102,==, ntohl(sin->sin_addr.s_addr));
memset(&sa_storage, 0, sizeof(sa_storage)); memset(&sa_storage, 0, sizeof(sa_storage));
sin6 = (struct sockaddr_in6 *)&sa_storage; sin6 = (struct sockaddr_in6 *)&sa_storage;
@ -241,37 +241,37 @@ test_addr_ip6_helpers(void)
sin6->sin6_port = htons(7070); sin6->sin6_port = htons(7070);
sin6->sin6_addr.s6_addr[0] = 128; sin6->sin6_addr.s6_addr[0] = 128;
tor_addr_from_sockaddr(&t1, (struct sockaddr *)sin6, &port1); tor_addr_from_sockaddr(&t1, (struct sockaddr *)sin6, &port1);
test_eq(tor_addr_family(&t1), AF_INET6); tt_int_op(tor_addr_family(&t1),==, AF_INET6);
tt_int_op(port1, ==, 7070); tt_int_op(port1, ==, 7070);
p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 0); p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 0);
test_streq(p1, "8000::"); tt_str_op(p1,==, "8000::");
memset(&sa_storage, 0, sizeof(sa_storage)); memset(&sa_storage, 0, sizeof(sa_storage));
test_eq(sizeof(struct sockaddr_in6), tt_int_op(sizeof(struct sockaddr_in6),==,
tor_addr_to_sockaddr(&t1, 9999, (struct sockaddr *)&sa_storage, tor_addr_to_sockaddr(&t1, 9999, (struct sockaddr *)&sa_storage,
sizeof(sa_storage))); sizeof(sa_storage)));
test_eq(AF_INET6, sin6->sin6_family); tt_int_op(AF_INET6,==, sin6->sin6_family);
test_eq(9999, ntohs(sin6->sin6_port)); tt_int_op(9999,==, ntohs(sin6->sin6_port));
test_eq(0x80000000, ntohl(S6_ADDR32(sin6->sin6_addr)[0])); tt_int_op(0x80000000,==, ntohl(S6_ADDR32(sin6->sin6_addr)[0]));
/* ==== tor_addr_lookup: static cases. (Can't test dns without knowing we /* ==== tor_addr_lookup: static cases. (Can't test dns without knowing we
* have a good resolver. */ * have a good resolver. */
test_eq(0, tor_addr_lookup("127.128.129.130", AF_UNSPEC, &t1)); tt_int_op(0,==, tor_addr_lookup("127.128.129.130", AF_UNSPEC, &t1));
test_eq(AF_INET, tor_addr_family(&t1)); tt_int_op(AF_INET,==, tor_addr_family(&t1));
test_eq(tor_addr_to_ipv4h(&t1), 0x7f808182); tt_int_op(tor_addr_to_ipv4h(&t1),==, 0x7f808182);
test_eq(0, tor_addr_lookup("9000::5", AF_UNSPEC, &t1)); tt_int_op(0,==, tor_addr_lookup("9000::5", AF_UNSPEC, &t1));
test_eq(AF_INET6, tor_addr_family(&t1)); tt_int_op(AF_INET6,==, tor_addr_family(&t1));
test_eq(0x90, tor_addr_to_in6_addr8(&t1)[0]); tt_int_op(0x90,==, tor_addr_to_in6_addr8(&t1)[0]);
test_assert(tor_mem_is_zero((char*)tor_addr_to_in6_addr8(&t1)+1, 14)); tt_assert(tor_mem_is_zero((char*)tor_addr_to_in6_addr8(&t1)+1, 14));
test_eq(0x05, tor_addr_to_in6_addr8(&t1)[15]); tt_int_op(0x05,==, tor_addr_to_in6_addr8(&t1)[15]);
/* === Test pton: valid af_inet6 */ /* === Test pton: valid af_inet6 */
/* Simple, valid parsing. */ /* Simple, valid parsing. */
r = tor_inet_pton(AF_INET6, r = tor_inet_pton(AF_INET6,
"0102:0304:0506:0708:090A:0B0C:0D0E:0F10", &a1); "0102:0304:0506:0708:090A:0B0C:0D0E:0F10", &a1);
test_assert(r==1); tt_int_op(r, ==, 1);
for (i=0;i<16;++i) { test_eq(i+1, (int)a1.s6_addr[i]); } for (i=0;i<16;++i) { tt_int_op(i+1,==, (int)a1.s6_addr[i]); }
/* ipv4 ending. */ /* ipv4 ending. */
test_pton6_same("0102:0304:0506:0708:090A:0B0C:0D0E:0F10", test_pton6_same("0102:0304:0506:0708:090A:0B0C:0D0E:0F10",
"0102:0304:0506:0708:090A:0B0C:13.14.15.16"); "0102:0304:0506:0708:090A:0B0C:13.14.15.16");
@ -311,7 +311,7 @@ test_addr_ip6_helpers(void)
"1000:1:0:7::"); "1000:1:0:7::");
/* Bad af param */ /* Bad af param */
test_eq(tor_inet_pton(AF_UNSPEC, 0, 0), -1); tt_int_op(tor_inet_pton(AF_UNSPEC, 0, 0),==, -1);
/* === Test pton: invalid in6. */ /* === Test pton: invalid in6. */
test_pton6_bad("foobar."); test_pton6_bad("foobar.");
@ -414,10 +414,10 @@ test_addr_ip6_helpers(void)
test_addr_compare("0::ffff:5.2.2.1", <, "::ffff:6.0.0.0"); /* XXXX wrong. */ test_addr_compare("0::ffff:5.2.2.1", <, "::ffff:6.0.0.0"); /* XXXX wrong. */
tor_addr_parse_mask_ports("[::ffff:2.3.4.5]", 0, &t1, NULL, NULL, NULL); tor_addr_parse_mask_ports("[::ffff:2.3.4.5]", 0, &t1, NULL, NULL, NULL);
tor_addr_parse_mask_ports("2.3.4.5", 0, &t2, NULL, NULL, NULL); tor_addr_parse_mask_ports("2.3.4.5", 0, &t2, NULL, NULL, NULL);
test_assert(tor_addr_compare(&t1, &t2, CMP_SEMANTIC) == 0); tt_assert(tor_addr_compare(&t1, &t2, CMP_SEMANTIC) == 0);
tor_addr_parse_mask_ports("[::ffff:2.3.4.4]", 0, &t1, NULL, NULL, NULL); tor_addr_parse_mask_ports("[::ffff:2.3.4.4]", 0, &t1, NULL, NULL, NULL);
tor_addr_parse_mask_ports("2.3.4.5", 0, &t2, NULL, NULL, NULL); tor_addr_parse_mask_ports("2.3.4.5", 0, &t2, NULL, NULL, NULL);
test_assert(tor_addr_compare(&t1, &t2, CMP_SEMANTIC) < 0); tt_assert(tor_addr_compare(&t1, &t2, CMP_SEMANTIC) < 0);
/* test compare_masked */ /* test compare_masked */
test_addr_compare_masked("ffff::", ==, "ffff::0", 128); test_addr_compare_masked("ffff::", ==, "ffff::0", 128);
@ -426,113 +426,113 @@ test_addr_ip6_helpers(void)
test_addr_compare_masked("0::2:2:1", ==, "0::8000:2:1", 80); test_addr_compare_masked("0::2:2:1", ==, "0::8000:2:1", 80);
/* Test undecorated tor_addr_to_str */ /* Test undecorated tor_addr_to_str */
test_eq(AF_INET6, tor_addr_parse(&t1, "[123:45:6789::5005:11]")); tt_int_op(AF_INET6,==, tor_addr_parse(&t1, "[123:45:6789::5005:11]"));
p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 0); p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 0);
test_streq(p1, "123:45:6789::5005:11"); tt_str_op(p1,==, "123:45:6789::5005:11");
test_eq(AF_INET, tor_addr_parse(&t1, "18.0.0.1")); tt_int_op(AF_INET,==, tor_addr_parse(&t1, "18.0.0.1"));
p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 0); p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 0);
test_streq(p1, "18.0.0.1"); tt_str_op(p1,==, "18.0.0.1");
/* Test decorated tor_addr_to_str */ /* Test decorated tor_addr_to_str */
test_eq(AF_INET6, tor_addr_parse(&t1, "[123:45:6789::5005:11]")); tt_int_op(AF_INET6,==, tor_addr_parse(&t1, "[123:45:6789::5005:11]"));
p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 1); p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 1);
test_streq(p1, "[123:45:6789::5005:11]"); tt_str_op(p1,==, "[123:45:6789::5005:11]");
test_eq(AF_INET, tor_addr_parse(&t1, "18.0.0.1")); tt_int_op(AF_INET,==, tor_addr_parse(&t1, "18.0.0.1"));
p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 1); p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 1);
test_streq(p1, "18.0.0.1"); tt_str_op(p1,==, "18.0.0.1");
/* Test buffer bounds checking of tor_addr_to_str */ /* Test buffer bounds checking of tor_addr_to_str */
test_eq(AF_INET6, tor_addr_parse(&t1, "::")); /* 2 + \0 */ tt_int_op(AF_INET6,==, tor_addr_parse(&t1, "::")); /* 2 + \0 */
test_eq_ptr(tor_addr_to_str(buf, &t1, 2, 0), NULL); /* too short buf */ tt_ptr_op(tor_addr_to_str(buf, &t1, 2, 0),==, NULL); /* too short buf */
test_streq(tor_addr_to_str(buf, &t1, 3, 0), "::"); tt_str_op(tor_addr_to_str(buf, &t1, 3, 0),==, "::");
test_eq_ptr(tor_addr_to_str(buf, &t1, 4, 1), NULL); /* too short buf */ tt_ptr_op(tor_addr_to_str(buf, &t1, 4, 1),==, NULL); /* too short buf */
test_streq(tor_addr_to_str(buf, &t1, 5, 1), "[::]"); tt_str_op(tor_addr_to_str(buf, &t1, 5, 1),==, "[::]");
test_eq(AF_INET6, tor_addr_parse(&t1, "2000::1337")); /* 10 + \0 */ tt_int_op(AF_INET6,==, tor_addr_parse(&t1, "2000::1337")); /* 10 + \0 */
test_eq_ptr(tor_addr_to_str(buf, &t1, 10, 0), NULL); /* too short buf */ tt_ptr_op(tor_addr_to_str(buf, &t1, 10, 0),==, NULL); /* too short buf */
test_streq(tor_addr_to_str(buf, &t1, 11, 0), "2000::1337"); tt_str_op(tor_addr_to_str(buf, &t1, 11, 0),==, "2000::1337");
test_eq_ptr(tor_addr_to_str(buf, &t1, 12, 1), NULL); /* too short buf */ tt_ptr_op(tor_addr_to_str(buf, &t1, 12, 1),==, NULL); /* too short buf */
test_streq(tor_addr_to_str(buf, &t1, 13, 1), "[2000::1337]"); tt_str_op(tor_addr_to_str(buf, &t1, 13, 1),==, "[2000::1337]");
test_eq(AF_INET, tor_addr_parse(&t1, "1.2.3.4")); /* 7 + \0 */ tt_int_op(AF_INET,==, tor_addr_parse(&t1, "1.2.3.4")); /* 7 + \0 */
test_eq_ptr(tor_addr_to_str(buf, &t1, 7, 0), NULL); /* too short buf */ tt_ptr_op(tor_addr_to_str(buf, &t1, 7, 0),==, NULL); /* too short buf */
test_streq(tor_addr_to_str(buf, &t1, 8, 0), "1.2.3.4"); tt_str_op(tor_addr_to_str(buf, &t1, 8, 0),==, "1.2.3.4");
test_eq(AF_INET, tor_addr_parse(&t1, "255.255.255.255")); /* 15 + \0 */ tt_int_op(AF_INET,==, tor_addr_parse(&t1, "255.255.255.255")); /* 15 + \0 */
test_eq_ptr(tor_addr_to_str(buf, &t1, 15, 0), NULL); /* too short buf */ tt_ptr_op(tor_addr_to_str(buf, &t1, 15, 0),==, NULL); /* too short buf */
test_streq(tor_addr_to_str(buf, &t1, 16, 0), "255.255.255.255"); tt_str_op(tor_addr_to_str(buf, &t1, 16, 0),==, "255.255.255.255");
test_eq_ptr(tor_addr_to_str(buf, &t1, 15, 1), NULL); /* too short buf */ tt_ptr_op(tor_addr_to_str(buf, &t1, 15, 1),==, NULL); /* too short buf */
test_streq(tor_addr_to_str(buf, &t1, 16, 1), "255.255.255.255"); tt_str_op(tor_addr_to_str(buf, &t1, 16, 1),==, "255.255.255.255");
t1.family = AF_UNSPEC; t1.family = AF_UNSPEC;
test_eq_ptr(tor_addr_to_str(buf, &t1, sizeof(buf), 0), NULL); tt_ptr_op(tor_addr_to_str(buf, &t1, sizeof(buf), 0),==, NULL);
/* Test tor_addr_parse_PTR_name */ /* Test tor_addr_parse_PTR_name */
i = tor_addr_parse_PTR_name(&t1, "Foobar.baz", AF_UNSPEC, 0); i = tor_addr_parse_PTR_name(&t1, "Foobar.baz", AF_UNSPEC, 0);
test_eq(0, i); tt_int_op(0,==, i);
i = tor_addr_parse_PTR_name(&t1, "Foobar.baz", AF_UNSPEC, 1); i = tor_addr_parse_PTR_name(&t1, "Foobar.baz", AF_UNSPEC, 1);
test_eq(0, i); tt_int_op(0,==, i);
i = tor_addr_parse_PTR_name(&t1, "9999999999999999999999999999.in-addr.arpa", i = tor_addr_parse_PTR_name(&t1, "9999999999999999999999999999.in-addr.arpa",
AF_UNSPEC, 1); AF_UNSPEC, 1);
test_eq(-1, i); tt_int_op(-1,==, i);
i = tor_addr_parse_PTR_name(&t1, "1.0.168.192.in-addr.arpa", i = tor_addr_parse_PTR_name(&t1, "1.0.168.192.in-addr.arpa",
AF_UNSPEC, 1); AF_UNSPEC, 1);
test_eq(1, i); tt_int_op(1,==, i);
test_eq(tor_addr_family(&t1), AF_INET); tt_int_op(tor_addr_family(&t1),==, AF_INET);
p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 1); p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 1);
test_streq(p1, "192.168.0.1"); tt_str_op(p1,==, "192.168.0.1");
i = tor_addr_parse_PTR_name(&t1, "192.168.0.99", AF_UNSPEC, 0); i = tor_addr_parse_PTR_name(&t1, "192.168.0.99", AF_UNSPEC, 0);
test_eq(0, i); tt_int_op(0,==, i);
i = tor_addr_parse_PTR_name(&t1, "192.168.0.99", AF_UNSPEC, 1); i = tor_addr_parse_PTR_name(&t1, "192.168.0.99", AF_UNSPEC, 1);
test_eq(1, i); tt_int_op(1,==, i);
p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 1); p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 1);
test_streq(p1, "192.168.0.99"); tt_str_op(p1,==, "192.168.0.99");
memset(&t1, 0, sizeof(t1)); memset(&t1, 0, sizeof(t1));
i = tor_addr_parse_PTR_name(&t1, i = tor_addr_parse_PTR_name(&t1,
"0.1.2.3.4.5.6.7.8.9.a.b.c.d.e.f." "0.1.2.3.4.5.6.7.8.9.a.b.c.d.e.f."
"f.e.e.b.1.e.b.e.e.f.f.e.e.e.d.9." "f.e.e.b.1.e.b.e.e.f.f.e.e.e.d.9."
"ip6.ARPA", "ip6.ARPA",
AF_UNSPEC, 0); AF_UNSPEC, 0);
test_eq(1, i); tt_int_op(1,==, i);
p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 1); p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 1);
test_streq(p1, "[9dee:effe:ebe1:beef:fedc:ba98:7654:3210]"); tt_str_op(p1,==, "[9dee:effe:ebe1:beef:fedc:ba98:7654:3210]");
/* Failing cases. */ /* Failing cases. */
i = tor_addr_parse_PTR_name(&t1, i = tor_addr_parse_PTR_name(&t1,
"6.7.8.9.a.b.c.d.e.f." "6.7.8.9.a.b.c.d.e.f."
"f.e.e.b.1.e.b.e.e.f.f.e.e.e.d.9." "f.e.e.b.1.e.b.e.e.f.f.e.e.e.d.9."
"ip6.ARPA", "ip6.ARPA",
AF_UNSPEC, 0); AF_UNSPEC, 0);
test_eq(i, -1); tt_int_op(i,==, -1);
i = tor_addr_parse_PTR_name(&t1, i = tor_addr_parse_PTR_name(&t1,
"6.7.8.9.a.b.c.d.e.f.a.b.c.d.e.f.0." "6.7.8.9.a.b.c.d.e.f.a.b.c.d.e.f.0."
"f.e.e.b.1.e.b.e.e.f.f.e.e.e.d.9." "f.e.e.b.1.e.b.e.e.f.f.e.e.e.d.9."
"ip6.ARPA", "ip6.ARPA",
AF_UNSPEC, 0); AF_UNSPEC, 0);
test_eq(i, -1); tt_int_op(i,==, -1);
i = tor_addr_parse_PTR_name(&t1, i = tor_addr_parse_PTR_name(&t1,
"6.7.8.9.a.b.c.d.e.f.X.0.0.0.0.9." "6.7.8.9.a.b.c.d.e.f.X.0.0.0.0.9."
"f.e.e.b.1.e.b.e.e.f.f.e.e.e.d.9." "f.e.e.b.1.e.b.e.e.f.f.e.e.e.d.9."
"ip6.ARPA", "ip6.ARPA",
AF_UNSPEC, 0); AF_UNSPEC, 0);
test_eq(i, -1); tt_int_op(i,==, -1);
i = tor_addr_parse_PTR_name(&t1, "32.1.1.in-addr.arpa", i = tor_addr_parse_PTR_name(&t1, "32.1.1.in-addr.arpa",
AF_UNSPEC, 0); AF_UNSPEC, 0);
test_eq(i, -1); tt_int_op(i,==, -1);
i = tor_addr_parse_PTR_name(&t1, ".in-addr.arpa", i = tor_addr_parse_PTR_name(&t1, ".in-addr.arpa",
AF_UNSPEC, 0); AF_UNSPEC, 0);
test_eq(i, -1); tt_int_op(i,==, -1);
i = tor_addr_parse_PTR_name(&t1, "1.2.3.4.5.in-addr.arpa", i = tor_addr_parse_PTR_name(&t1, "1.2.3.4.5.in-addr.arpa",
AF_UNSPEC, 0); AF_UNSPEC, 0);
test_eq(i, -1); tt_int_op(i,==, -1);
i = tor_addr_parse_PTR_name(&t1, "1.2.3.4.5.in-addr.arpa", i = tor_addr_parse_PTR_name(&t1, "1.2.3.4.5.in-addr.arpa",
AF_INET6, 0); AF_INET6, 0);
test_eq(i, -1); tt_int_op(i,==, -1);
i = tor_addr_parse_PTR_name(&t1, i = tor_addr_parse_PTR_name(&t1,
"6.7.8.9.a.b.c.d.e.f.a.b.c.d.e.0." "6.7.8.9.a.b.c.d.e.f.a.b.c.d.e.0."
"f.e.e.b.1.e.b.e.e.f.f.e.e.e.d.9." "f.e.e.b.1.e.b.e.e.f.f.e.e.e.d.9."
"ip6.ARPA", "ip6.ARPA",
AF_INET, 0); AF_INET, 0);
test_eq(i, -1); tt_int_op(i,==, -1);
/* === Test tor_addr_to_PTR_name */ /* === Test tor_addr_to_PTR_name */
@ -544,19 +544,19 @@ test_addr_ip6_helpers(void)
tor_addr_from_sockaddr(&t1, (struct sockaddr *)sin, NULL); tor_addr_from_sockaddr(&t1, (struct sockaddr *)sin, NULL);
/* Check IPv4 PTR - too short buffer */ /* Check IPv4 PTR - too short buffer */
test_eq(tor_addr_to_PTR_name(rbuf, 1, &t1), -1); tt_int_op(tor_addr_to_PTR_name(rbuf, 1, &t1),==, -1);
test_eq(tor_addr_to_PTR_name(rbuf, tt_int_op(tor_addr_to_PTR_name(rbuf,
strlen("3.2.1.127.in-addr.arpa") - 1, strlen("3.2.1.127.in-addr.arpa") - 1,
&t1), -1); &t1),==, -1);
/* Check IPv4 PTR - valid addr */ /* Check IPv4 PTR - valid addr */
test_eq(tor_addr_to_PTR_name(rbuf, sizeof(rbuf), &t1), tt_int_op(tor_addr_to_PTR_name(rbuf, sizeof(rbuf), &t1),==,
strlen("3.2.1.127.in-addr.arpa")); strlen("3.2.1.127.in-addr.arpa"));
test_streq(rbuf, "3.2.1.127.in-addr.arpa"); tt_str_op(rbuf,==, "3.2.1.127.in-addr.arpa");
/* Invalid addr family */ /* Invalid addr family */
t1.family = AF_UNSPEC; t1.family = AF_UNSPEC;
test_eq(tor_addr_to_PTR_name(rbuf, sizeof(rbuf), &t1), -1); tt_int_op(tor_addr_to_PTR_name(rbuf, sizeof(rbuf), &t1),==, -1);
/* Stage IPv6 addr */ /* Stage IPv6 addr */
memset(&sa_storage, 0, sizeof(sa_storage)); memset(&sa_storage, 0, sizeof(sa_storage));
@ -573,81 +573,81 @@ test_addr_ip6_helpers(void)
"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.ip6.arpa"; "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.ip6.arpa";
/* Check IPv6 PTR - too short buffer */ /* Check IPv6 PTR - too short buffer */
test_eq(tor_addr_to_PTR_name(rbuf, 0, &t1), -1); tt_int_op(tor_addr_to_PTR_name(rbuf, 0, &t1),==, -1);
test_eq(tor_addr_to_PTR_name(rbuf, strlen(addr_PTR) - 1, &t1), -1); tt_int_op(tor_addr_to_PTR_name(rbuf, strlen(addr_PTR) - 1, &t1),==, -1);
/* Check IPv6 PTR - valid addr */ /* Check IPv6 PTR - valid addr */
test_eq(tor_addr_to_PTR_name(rbuf, sizeof(rbuf), &t1), tt_int_op(tor_addr_to_PTR_name(rbuf, sizeof(rbuf), &t1),==,
strlen(addr_PTR)); strlen(addr_PTR));
test_streq(rbuf, addr_PTR); tt_str_op(rbuf,==, addr_PTR);
} }
/* XXXX turn this into a separate function; it's not all IPv6. */ /* XXXX turn this into a separate function; it's not all IPv6. */
/* test tor_addr_parse_mask_ports */ /* test tor_addr_parse_mask_ports */
test_addr_mask_ports_parse("[::f]/17:47-95", AF_INET6, test_addr_mask_ports_parse("[::f]/17:47-95", AF_INET6,
0, 0, 0, 0x0000000f, 17, 47, 95); 0, 0, 0, 0x0000000f, 17, 47, 95);
test_streq(p1, "::f"); tt_str_op(p1,==, "::f");
//test_addr_parse("[::fefe:4.1.1.7/120]:999-1000"); //test_addr_parse("[::fefe:4.1.1.7/120]:999-1000");
//test_addr_parse_check("::fefe:401:107", 120, 999, 1000); //test_addr_parse_check("::fefe:401:107", 120, 999, 1000);
test_addr_mask_ports_parse("[::ffff:4.1.1.7]/120:443", AF_INET6, test_addr_mask_ports_parse("[::ffff:4.1.1.7]/120:443", AF_INET6,
0, 0, 0x0000ffff, 0x04010107, 120, 443, 443); 0, 0, 0x0000ffff, 0x04010107, 120, 443, 443);
test_streq(p1, "::ffff:4.1.1.7"); tt_str_op(p1,==, "::ffff:4.1.1.7");
test_addr_mask_ports_parse("[abcd:2::44a:0]:2-65000", AF_INET6, test_addr_mask_ports_parse("[abcd:2::44a:0]:2-65000", AF_INET6,
0xabcd0002, 0, 0, 0x044a0000, 128, 2, 65000); 0xabcd0002, 0, 0, 0x044a0000, 128, 2, 65000);
test_streq(p1, "abcd:2::44a:0"); tt_str_op(p1,==, "abcd:2::44a:0");
/* Try some long addresses. */ /* Try some long addresses. */
r=tor_addr_parse_mask_ports("[ffff:1111:1111:1111:1111:1111:1111:1111]", r=tor_addr_parse_mask_ports("[ffff:1111:1111:1111:1111:1111:1111:1111]",
0, &t1, NULL, NULL, NULL); 0, &t1, NULL, NULL, NULL);
test_assert(r == AF_INET6); tt_assert(r == AF_INET6);
r=tor_addr_parse_mask_ports("[ffff:1111:1111:1111:1111:1111:1111:11111]", r=tor_addr_parse_mask_ports("[ffff:1111:1111:1111:1111:1111:1111:11111]",
0, &t1, NULL, NULL, NULL); 0, &t1, NULL, NULL, NULL);
test_assert(r == -1); tt_int_op(r, ==, -1);
r=tor_addr_parse_mask_ports("[ffff:1111:1111:1111:1111:1111:1111:1111:1]", r=tor_addr_parse_mask_ports("[ffff:1111:1111:1111:1111:1111:1111:1111:1]",
0, &t1, NULL, NULL, NULL); 0, &t1, NULL, NULL, NULL);
test_assert(r == -1); tt_int_op(r, ==, -1);
r=tor_addr_parse_mask_ports( r=tor_addr_parse_mask_ports(
"[ffff:1111:1111:1111:1111:1111:1111:ffff:" "[ffff:1111:1111:1111:1111:1111:1111:ffff:"
"ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:" "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:"
"ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:" "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:"
"ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]", "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]",
0, &t1, NULL, NULL, NULL); 0, &t1, NULL, NULL, NULL);
test_assert(r == -1); tt_int_op(r, ==, -1);
/* Try some failing cases. */ /* Try some failing cases. */
r=tor_addr_parse_mask_ports("[fefef::]/112", 0, &t1, NULL, NULL, NULL); r=tor_addr_parse_mask_ports("[fefef::]/112", 0, &t1, NULL, NULL, NULL);
test_assert(r == -1); tt_int_op(r, ==, -1);
r=tor_addr_parse_mask_ports("[fefe::/112", 0, &t1, NULL, NULL, NULL); r=tor_addr_parse_mask_ports("[fefe::/112", 0, &t1, NULL, NULL, NULL);
test_assert(r == -1); tt_int_op(r, ==, -1);
r=tor_addr_parse_mask_ports("[fefe::", 0, &t1, NULL, NULL, NULL); r=tor_addr_parse_mask_ports("[fefe::", 0, &t1, NULL, NULL, NULL);
test_assert(r == -1); tt_int_op(r, ==, -1);
r=tor_addr_parse_mask_ports("[fefe::X]", 0, &t1, NULL, NULL, NULL); r=tor_addr_parse_mask_ports("[fefe::X]", 0, &t1, NULL, NULL, NULL);
test_assert(r == -1); tt_int_op(r, ==, -1);
r=tor_addr_parse_mask_ports("efef::/112", 0, &t1, NULL, NULL, NULL); r=tor_addr_parse_mask_ports("efef::/112", 0, &t1, NULL, NULL, NULL);
test_assert(r == -1); tt_int_op(r, ==, -1);
r=tor_addr_parse_mask_ports("[f:f:f:f:f:f:f:f::]",0,&t1, NULL, NULL, NULL); r=tor_addr_parse_mask_ports("[f:f:f:f:f:f:f:f::]",0,&t1, NULL, NULL, NULL);
test_assert(r == -1); tt_int_op(r, ==, -1);
r=tor_addr_parse_mask_ports("[::f:f:f:f:f:f:f:f]",0,&t1, NULL, NULL, NULL); r=tor_addr_parse_mask_ports("[::f:f:f:f:f:f:f:f]",0,&t1, NULL, NULL, NULL);
test_assert(r == -1); tt_int_op(r, ==, -1);
r=tor_addr_parse_mask_ports("[f:f:f:f:f:f:f:f:f]",0,&t1, NULL, NULL, NULL); r=tor_addr_parse_mask_ports("[f:f:f:f:f:f:f:f:f]",0,&t1, NULL, NULL, NULL);
test_assert(r == -1); tt_int_op(r, ==, -1);
r=tor_addr_parse_mask_ports("[f:f:f:f:f::]/fred",0,&t1,&mask, NULL, NULL); r=tor_addr_parse_mask_ports("[f:f:f:f:f::]/fred",0,&t1,&mask, NULL, NULL);
test_assert(r == -1); tt_int_op(r, ==, -1);
r=tor_addr_parse_mask_ports("[f:f:f:f:f::]/255.255.0.0", r=tor_addr_parse_mask_ports("[f:f:f:f:f::]/255.255.0.0",
0,&t1, NULL, NULL, NULL); 0,&t1, NULL, NULL, NULL);
test_assert(r == -1); tt_int_op(r, ==, -1);
/* This one will get rejected because it isn't a pure prefix. */ /* This one will get rejected because it isn't a pure prefix. */
r=tor_addr_parse_mask_ports("1.1.2.3/255.255.64.0",0,&t1, &mask,NULL,NULL); r=tor_addr_parse_mask_ports("1.1.2.3/255.255.64.0",0,&t1, &mask,NULL,NULL);
test_assert(r == -1); tt_int_op(r, ==, -1);
/* Test for V4-mapped address with mask < 96. (arguably not valid) */ /* Test for V4-mapped address with mask < 96. (arguably not valid) */
r=tor_addr_parse_mask_ports("[::ffff:1.1.2.2/33]",0,&t1, &mask, NULL, NULL); r=tor_addr_parse_mask_ports("[::ffff:1.1.2.2/33]",0,&t1, &mask, NULL, NULL);
test_assert(r == -1); tt_int_op(r, ==, -1);
r=tor_addr_parse_mask_ports("1.1.2.2/33",0,&t1, &mask, NULL, NULL); r=tor_addr_parse_mask_ports("1.1.2.2/33",0,&t1, &mask, NULL, NULL);
test_assert(r == -1); tt_int_op(r, ==, -1);
/* Try extended wildcard addresses with out TAPMP_EXTENDED_STAR*/ /* Try extended wildcard addresses with out TAPMP_EXTENDED_STAR*/
r=tor_addr_parse_mask_ports("*4",0,&t1, &mask, NULL, NULL); r=tor_addr_parse_mask_ports("*4",0,&t1, &mask, NULL, NULL);
test_assert(r == -1); tt_int_op(r, ==, -1);
r=tor_addr_parse_mask_ports("*6",0,&t1, &mask, NULL, NULL); r=tor_addr_parse_mask_ports("*6",0,&t1, &mask, NULL, NULL);
test_assert(r == -1); tt_int_op(r, ==, -1);
#if 0 #if 0
/* Try a mask with a wildcard. */ /* Try a mask with a wildcard. */
r=tor_addr_parse_mask_ports("*/16",0,&t1, &mask, NULL, NULL); r=tor_addr_parse_mask_ports("*/16",0,&t1, &mask, NULL, NULL);
@ -661,26 +661,26 @@ test_addr_ip6_helpers(void)
#endif #endif
/* Basic mask tests*/ /* Basic mask tests*/
r=tor_addr_parse_mask_ports("1.1.2.2/31",0,&t1, &mask, NULL, NULL); r=tor_addr_parse_mask_ports("1.1.2.2/31",0,&t1, &mask, NULL, NULL);
test_assert(r == AF_INET); tt_assert(r == AF_INET);
tt_int_op(mask,==,31); tt_int_op(mask,==,31);
tt_int_op(tor_addr_family(&t1),==,AF_INET); tt_int_op(tor_addr_family(&t1),==,AF_INET);
tt_int_op(tor_addr_to_ipv4h(&t1),==,0x01010202); tt_int_op(tor_addr_to_ipv4h(&t1),==,0x01010202);
r=tor_addr_parse_mask_ports("3.4.16.032:1-2",0,&t1, &mask, &port1, &port2); r=tor_addr_parse_mask_ports("3.4.16.032:1-2",0,&t1, &mask, &port1, &port2);
test_assert(r == AF_INET); tt_assert(r == AF_INET);
tt_int_op(mask,==,32); tt_int_op(mask,==,32);
tt_int_op(tor_addr_family(&t1),==,AF_INET); tt_int_op(tor_addr_family(&t1),==,AF_INET);
tt_int_op(tor_addr_to_ipv4h(&t1),==,0x03041020); tt_int_op(tor_addr_to_ipv4h(&t1),==,0x03041020);
test_assert(port1 == 1); tt_assert(port1 == 1);
test_assert(port2 == 2); tt_assert(port2 == 2);
r=tor_addr_parse_mask_ports("1.1.2.3/255.255.128.0",0,&t1, &mask,NULL,NULL); r=tor_addr_parse_mask_ports("1.1.2.3/255.255.128.0",0,&t1, &mask,NULL,NULL);
test_assert(r == AF_INET); tt_assert(r == AF_INET);
tt_int_op(mask,==,17); tt_int_op(mask,==,17);
tt_int_op(tor_addr_family(&t1),==,AF_INET); tt_int_op(tor_addr_family(&t1),==,AF_INET);
tt_int_op(tor_addr_to_ipv4h(&t1),==,0x01010203); tt_int_op(tor_addr_to_ipv4h(&t1),==,0x01010203);
r=tor_addr_parse_mask_ports("[efef::]/112",0,&t1, &mask, &port1, &port2); r=tor_addr_parse_mask_ports("[efef::]/112",0,&t1, &mask, &port1, &port2);
test_assert(r == AF_INET6); tt_assert(r == AF_INET6);
test_assert(port1 == 1); tt_assert(port1 == 1);
test_assert(port2 == 65535); tt_assert(port2 == 65535);
/* Try regular wildcard behavior without TAPMP_EXTENDED_STAR */ /* Try regular wildcard behavior without TAPMP_EXTENDED_STAR */
r=tor_addr_parse_mask_ports("*:80-443",0,&t1,&mask,&port1,&port2); r=tor_addr_parse_mask_ports("*:80-443",0,&t1,&mask,&port1,&port2);
tt_int_op(r,==,AF_INET); /* Old users of this always get inet */ tt_int_op(r,==,AF_INET); /* Old users of this always get inet */
@ -715,11 +715,11 @@ test_addr_ip6_helpers(void)
tt_int_op(port2,==,65535); tt_int_op(port2,==,65535);
/* make sure inet address lengths >= max */ /* make sure inet address lengths >= max */
test_assert(INET_NTOA_BUF_LEN >= sizeof("255.255.255.255")); tt_assert(INET_NTOA_BUF_LEN >= sizeof("255.255.255.255"));
test_assert(TOR_ADDR_BUF_LEN >= tt_assert(TOR_ADDR_BUF_LEN >=
sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")); sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"));
test_assert(sizeof(tor_addr_t) >= sizeof(struct in6_addr)); tt_assert(sizeof(tor_addr_t) >= sizeof(struct in6_addr));
/* get interface addresses */ /* get interface addresses */
r = get_interface_address6(LOG_DEBUG, AF_INET, &t1); r = get_interface_address6(LOG_DEBUG, AF_INET, &t1);
@ -747,86 +747,86 @@ test_addr_parse(void)
r= tor_addr_port_parse(LOG_DEBUG, r= tor_addr_port_parse(LOG_DEBUG,
"192.0.2.1:1234", "192.0.2.1:1234",
&addr, &port, -1); &addr, &port, -1);
test_assert(r == 0); tt_int_op(r, ==, 0);
tor_addr_to_str(buf, &addr, sizeof(buf), 0); tor_addr_to_str(buf, &addr, sizeof(buf), 0);
test_streq(buf, "192.0.2.1"); tt_str_op(buf,==, "192.0.2.1");
test_eq(port, 1234); tt_int_op(port,==, 1234);
r= tor_addr_port_parse(LOG_DEBUG, r= tor_addr_port_parse(LOG_DEBUG,
"[::1]:1234", "[::1]:1234",
&addr, &port, -1); &addr, &port, -1);
test_assert(r == 0); tt_int_op(r, ==, 0);
tor_addr_to_str(buf, &addr, sizeof(buf), 0); tor_addr_to_str(buf, &addr, sizeof(buf), 0);
test_streq(buf, "::1"); tt_str_op(buf,==, "::1");
test_eq(port, 1234); tt_int_op(port,==, 1234);
/* Domain name. */ /* Domain name. */
r= tor_addr_port_parse(LOG_DEBUG, r= tor_addr_port_parse(LOG_DEBUG,
"torproject.org:1234", "torproject.org:1234",
&addr, &port, -1); &addr, &port, -1);
test_assert(r == -1); tt_int_op(r, ==, -1);
/* Only IP. */ /* Only IP. */
r= tor_addr_port_parse(LOG_DEBUG, r= tor_addr_port_parse(LOG_DEBUG,
"192.0.2.2", "192.0.2.2",
&addr, &port, -1); &addr, &port, -1);
test_assert(r == -1); tt_int_op(r, ==, -1);
r= tor_addr_port_parse(LOG_DEBUG, r= tor_addr_port_parse(LOG_DEBUG,
"192.0.2.2", "192.0.2.2",
&addr, &port, 200); &addr, &port, 200);
test_assert(r == 0); tt_int_op(r, ==, 0);
tt_int_op(port,==,200); tt_int_op(port,==,200);
r= tor_addr_port_parse(LOG_DEBUG, r= tor_addr_port_parse(LOG_DEBUG,
"[::1]", "[::1]",
&addr, &port, -1); &addr, &port, -1);
test_assert(r == -1); tt_int_op(r, ==, -1);
r= tor_addr_port_parse(LOG_DEBUG, r= tor_addr_port_parse(LOG_DEBUG,
"[::1]", "[::1]",
&addr, &port, 400); &addr, &port, 400);
test_assert(r == 0); tt_int_op(r, ==, 0);
tt_int_op(port,==,400); tt_int_op(port,==,400);
/* Bad port. */ /* Bad port. */
r= tor_addr_port_parse(LOG_DEBUG, r= tor_addr_port_parse(LOG_DEBUG,
"192.0.2.2:66666", "192.0.2.2:66666",
&addr, &port, -1); &addr, &port, -1);
test_assert(r == -1); tt_int_op(r, ==, -1);
r= tor_addr_port_parse(LOG_DEBUG, r= tor_addr_port_parse(LOG_DEBUG,
"192.0.2.2:66666", "192.0.2.2:66666",
&addr, &port, 200); &addr, &port, 200);
test_assert(r == -1); tt_int_op(r, ==, -1);
/* Only domain name */ /* Only domain name */
r= tor_addr_port_parse(LOG_DEBUG, r= tor_addr_port_parse(LOG_DEBUG,
"torproject.org", "torproject.org",
&addr, &port, -1); &addr, &port, -1);
test_assert(r == -1); tt_int_op(r, ==, -1);
r= tor_addr_port_parse(LOG_DEBUG, r= tor_addr_port_parse(LOG_DEBUG,
"torproject.org", "torproject.org",
&addr, &port, 200); &addr, &port, 200);
test_assert(r == -1); tt_int_op(r, ==, -1);
/* Bad IP address */ /* Bad IP address */
r= tor_addr_port_parse(LOG_DEBUG, r= tor_addr_port_parse(LOG_DEBUG,
"192.0.2:1234", "192.0.2:1234",
&addr, &port, -1); &addr, &port, -1);
test_assert(r == -1); tt_int_op(r, ==, -1);
/* Make sure that the default port has lower priority than the real /* Make sure that the default port has lower priority than the real
one */ one */
r= tor_addr_port_parse(LOG_DEBUG, r= tor_addr_port_parse(LOG_DEBUG,
"192.0.2.2:1337", "192.0.2.2:1337",
&addr, &port, 200); &addr, &port, 200);
test_assert(r == 0); tt_int_op(r, ==, 0);
tt_int_op(port,==,1337); tt_int_op(port,==,1337);
r= tor_addr_port_parse(LOG_DEBUG, r= tor_addr_port_parse(LOG_DEBUG,
"[::1]:1369", "[::1]:1369",
&addr, &port, 200); &addr, &port, 200);
test_assert(r == 0); tt_int_op(r, ==, 0);
tt_int_op(port,==,1369); tt_int_op(port,==,1369);
done: done:

View File

@ -27,10 +27,10 @@ test_buffers_basic(void *arg)
* buf_new * buf_new
****/ ****/
if (!(buf = buf_new())) if (!(buf = buf_new()))
test_fail(); TT_DIE(("Assertion failed."));
//test_eq(buf_capacity(buf), 4096); //test_eq(buf_capacity(buf), 4096);
test_eq(buf_datalen(buf), 0); tt_int_op(buf_datalen(buf),==, 0);
/**** /****
* General pointer frobbing * General pointer frobbing
@ -40,16 +40,16 @@ test_buffers_basic(void *arg)
} }
write_to_buf(str, 256, buf); write_to_buf(str, 256, buf);
write_to_buf(str, 256, buf); write_to_buf(str, 256, buf);
test_eq(buf_datalen(buf), 512); tt_int_op(buf_datalen(buf),==, 512);
fetch_from_buf(str2, 200, buf); fetch_from_buf(str2, 200, buf);
test_memeq(str, str2, 200); tt_mem_op(str,==, str2, 200);
test_eq(buf_datalen(buf), 312); tt_int_op(buf_datalen(buf),==, 312);
memset(str2, 0, sizeof(str2)); memset(str2, 0, sizeof(str2));
fetch_from_buf(str2, 256, buf); fetch_from_buf(str2, 256, buf);
test_memeq(str+200, str2, 56); tt_mem_op(str+200,==, str2, 56);
test_memeq(str, str2+56, 200); tt_mem_op(str,==, str2+56, 200);
test_eq(buf_datalen(buf), 56); tt_int_op(buf_datalen(buf),==, 56);
memset(str2, 0, sizeof(str2)); memset(str2, 0, sizeof(str2));
/* Okay, now we should be 512 bytes into the 4096-byte buffer. If we add /* Okay, now we should be 512 bytes into the 4096-byte buffer. If we add
* another 3584 bytes, we hit the end. */ * another 3584 bytes, we hit the end. */
@ -57,16 +57,16 @@ test_buffers_basic(void *arg)
write_to_buf(str, 256, buf); write_to_buf(str, 256, buf);
} }
assert_buf_ok(buf); assert_buf_ok(buf);
test_eq(buf_datalen(buf), 3896); tt_int_op(buf_datalen(buf),==, 3896);
fetch_from_buf(str2, 56, buf); fetch_from_buf(str2, 56, buf);
test_eq(buf_datalen(buf), 3840); tt_int_op(buf_datalen(buf),==, 3840);
test_memeq(str+200, str2, 56); tt_mem_op(str+200,==, str2, 56);
for (j=0;j<15;++j) { for (j=0;j<15;++j) {
memset(str2, 0, sizeof(str2)); memset(str2, 0, sizeof(str2));
fetch_from_buf(str2, 256, buf); fetch_from_buf(str2, 256, buf);
test_memeq(str, str2, 256); tt_mem_op(str,==, str2, 256);
} }
test_eq(buf_datalen(buf), 0); tt_int_op(buf_datalen(buf),==, 0);
buf_free(buf); buf_free(buf);
buf = NULL; buf = NULL;
@ -76,7 +76,7 @@ test_buffers_basic(void *arg)
write_to_buf(str+1, 255, buf); write_to_buf(str+1, 255, buf);
//test_eq(buf_capacity(buf), 256); //test_eq(buf_capacity(buf), 256);
fetch_from_buf(str2, 254, buf); fetch_from_buf(str2, 254, buf);
test_memeq(str+1, str2, 254); tt_mem_op(str+1,==, str2, 254);
//test_eq(buf_capacity(buf), 256); //test_eq(buf_capacity(buf), 256);
assert_buf_ok(buf); assert_buf_ok(buf);
write_to_buf(str, 32, buf); write_to_buf(str, 32, buf);
@ -85,15 +85,15 @@ test_buffers_basic(void *arg)
write_to_buf(str, 256, buf); write_to_buf(str, 256, buf);
assert_buf_ok(buf); assert_buf_ok(buf);
//test_eq(buf_capacity(buf), 512); //test_eq(buf_capacity(buf), 512);
test_eq(buf_datalen(buf), 33+256); tt_int_op(buf_datalen(buf),==, 33+256);
fetch_from_buf(str2, 33, buf); fetch_from_buf(str2, 33, buf);
test_eq(*str2, str[255]); tt_int_op(*str2,==, str[255]);
test_memeq(str2+1, str, 32); tt_mem_op(str2+1,==, str, 32);
//test_eq(buf_capacity(buf), 512); //test_eq(buf_capacity(buf), 512);
test_eq(buf_datalen(buf), 256); tt_int_op(buf_datalen(buf),==, 256);
fetch_from_buf(str2, 256, buf); fetch_from_buf(str2, 256, buf);
test_memeq(str, str2, 256); tt_mem_op(str,==, str2, 256);
/* now try shrinking: case 1. */ /* now try shrinking: case 1. */
buf_free(buf); buf_free(buf);
@ -102,10 +102,10 @@ test_buffers_basic(void *arg)
write_to_buf(str,255, buf); write_to_buf(str,255, buf);
} }
//test_eq(buf_capacity(buf), 33668); //test_eq(buf_capacity(buf), 33668);
test_eq(buf_datalen(buf), 17085); tt_int_op(buf_datalen(buf),==, 17085);
for (j=0; j < 40; ++j) { for (j=0; j < 40; ++j) {
fetch_from_buf(str2, 255,buf); fetch_from_buf(str2, 255,buf);
test_memeq(str2, str, 255); tt_mem_op(str2,==, str, 255);
} }
/* now try shrinking: case 2. */ /* now try shrinking: case 2. */
@ -116,7 +116,7 @@ test_buffers_basic(void *arg)
} }
for (j=0; j < 20; ++j) { for (j=0; j < 20; ++j) {
fetch_from_buf(str2, 255,buf); fetch_from_buf(str2, 255,buf);
test_memeq(str2, str, 255); tt_mem_op(str2,==, str, 255);
} }
for (j=0;j<80;++j) { for (j=0;j<80;++j) {
write_to_buf(str,255, buf); write_to_buf(str,255, buf);
@ -124,7 +124,7 @@ test_buffers_basic(void *arg)
//test_eq(buf_capacity(buf),33668); //test_eq(buf_capacity(buf),33668);
for (j=0; j < 120; ++j) { for (j=0; j < 120; ++j) {
fetch_from_buf(str2, 255,buf); fetch_from_buf(str2, 255,buf);
test_memeq(str2, str, 255); tt_mem_op(str2,==, str, 255);
} }
/* Move from buf to buf. */ /* Move from buf to buf. */
@ -133,27 +133,27 @@ test_buffers_basic(void *arg)
buf2 = buf_new_with_capacity(4096); buf2 = buf_new_with_capacity(4096);
for (j=0;j<100;++j) for (j=0;j<100;++j)
write_to_buf(str, 255, buf); write_to_buf(str, 255, buf);
test_eq(buf_datalen(buf), 25500); tt_int_op(buf_datalen(buf),==, 25500);
for (j=0;j<100;++j) { for (j=0;j<100;++j) {
r = 10; r = 10;
move_buf_to_buf(buf2, buf, &r); move_buf_to_buf(buf2, buf, &r);
test_eq(r, 0); tt_int_op(r,==, 0);
} }
test_eq(buf_datalen(buf), 24500); tt_int_op(buf_datalen(buf),==, 24500);
test_eq(buf_datalen(buf2), 1000); tt_int_op(buf_datalen(buf2),==, 1000);
for (j=0;j<3;++j) { for (j=0;j<3;++j) {
fetch_from_buf(str2, 255, buf2); fetch_from_buf(str2, 255, buf2);
test_memeq(str2, str, 255); tt_mem_op(str2,==, str, 255);
} }
r = 8192; /*big move*/ r = 8192; /*big move*/
move_buf_to_buf(buf2, buf, &r); move_buf_to_buf(buf2, buf, &r);
test_eq(r, 0); tt_int_op(r,==, 0);
r = 30000; /* incomplete move */ r = 30000; /* incomplete move */
move_buf_to_buf(buf2, buf, &r); move_buf_to_buf(buf2, buf, &r);
test_eq(r, 13692); tt_int_op(r,==, 13692);
for (j=0;j<97;++j) { for (j=0;j<97;++j) {
fetch_from_buf(str2, 255, buf2); fetch_from_buf(str2, 255, buf2);
test_memeq(str2, str, 255); tt_mem_op(str2,==, str, 255);
} }
buf_free(buf); buf_free(buf);
buf_free(buf2); buf_free(buf2);
@ -163,16 +163,16 @@ test_buffers_basic(void *arg)
cp = "Testing. This is a moderately long Testing string."; cp = "Testing. This is a moderately long Testing string.";
for (j = 0; cp[j]; j++) for (j = 0; cp[j]; j++)
write_to_buf(cp+j, 1, buf); write_to_buf(cp+j, 1, buf);
test_eq(0, buf_find_string_offset(buf, "Testing", 7)); tt_int_op(0,==, buf_find_string_offset(buf, "Testing", 7));
test_eq(1, buf_find_string_offset(buf, "esting", 6)); tt_int_op(1,==, buf_find_string_offset(buf, "esting", 6));
test_eq(1, buf_find_string_offset(buf, "est", 3)); tt_int_op(1,==, buf_find_string_offset(buf, "est", 3));
test_eq(39, buf_find_string_offset(buf, "ing str", 7)); tt_int_op(39,==, buf_find_string_offset(buf, "ing str", 7));
test_eq(35, buf_find_string_offset(buf, "Testing str", 11)); tt_int_op(35,==, buf_find_string_offset(buf, "Testing str", 11));
test_eq(32, buf_find_string_offset(buf, "ng ", 3)); tt_int_op(32,==, buf_find_string_offset(buf, "ng ", 3));
test_eq(43, buf_find_string_offset(buf, "string.", 7)); tt_int_op(43,==, buf_find_string_offset(buf, "string.", 7));
test_eq(-1, buf_find_string_offset(buf, "shrdlu", 6)); tt_int_op(-1,==, buf_find_string_offset(buf, "shrdlu", 6));
test_eq(-1, buf_find_string_offset(buf, "Testing thing", 13)); tt_int_op(-1,==, buf_find_string_offset(buf, "Testing thing", 13));
test_eq(-1, buf_find_string_offset(buf, "ngx", 3)); tt_int_op(-1,==, buf_find_string_offset(buf, "ngx", 3));
buf_free(buf); buf_free(buf);
buf = NULL; buf = NULL;
@ -240,16 +240,16 @@ test_buffer_pullup(void *arg)
/* Make room for 3000 bytes in the first chunk, so that the pullup-move code /* Make room for 3000 bytes in the first chunk, so that the pullup-move code
* can get tested. */ * can get tested. */
tt_int_op(fetch_from_buf(tmp, 3000, buf), ==, 3000); tt_int_op(fetch_from_buf(tmp, 3000, buf), ==, 3000);
test_memeq(tmp, stuff, 3000); tt_mem_op(tmp,==, stuff, 3000);
buf_pullup(buf, 2048, 0); buf_pullup(buf, 2048, 0);
assert_buf_ok(buf); assert_buf_ok(buf);
buf_get_first_chunk_data(buf, &cp, &sz); buf_get_first_chunk_data(buf, &cp, &sz);
tt_ptr_op(cp, !=, NULL); tt_ptr_op(cp, !=, NULL);
tt_int_op(sz, >=, 2048); tt_int_op(sz, >=, 2048);
test_memeq(cp, stuff+3000, 2048); tt_mem_op(cp,==, stuff+3000, 2048);
tt_int_op(3000, ==, buf_datalen(buf)); tt_int_op(3000, ==, buf_datalen(buf));
tt_int_op(fetch_from_buf(tmp, 3000, buf), ==, 0); tt_int_op(fetch_from_buf(tmp, 3000, buf), ==, 0);
test_memeq(tmp, stuff+3000, 2048); tt_mem_op(tmp,==, stuff+3000, 2048);
buf_free(buf); buf_free(buf);
@ -269,16 +269,16 @@ test_buffer_pullup(void *arg)
buf_get_first_chunk_data(buf, &cp, &sz); buf_get_first_chunk_data(buf, &cp, &sz);
tt_ptr_op(cp, !=, NULL); tt_ptr_op(cp, !=, NULL);
tt_int_op(sz, >=, 12500); tt_int_op(sz, >=, 12500);
test_memeq(cp, stuff, 12500); tt_mem_op(cp,==, stuff, 12500);
tt_int_op(buf_datalen(buf), ==, 16000); tt_int_op(buf_datalen(buf), ==, 16000);
fetch_from_buf(tmp, 12400, buf); fetch_from_buf(tmp, 12400, buf);
test_memeq(tmp, stuff, 12400); tt_mem_op(tmp,==, stuff, 12400);
tt_int_op(buf_datalen(buf), ==, 3600); tt_int_op(buf_datalen(buf), ==, 3600);
fetch_from_buf(tmp, 3500, buf); fetch_from_buf(tmp, 3500, buf);
test_memeq(tmp, stuff+12400, 3500); tt_mem_op(tmp,==, stuff+12400, 3500);
fetch_from_buf(tmp, 100, buf); fetch_from_buf(tmp, 100, buf);
test_memeq(tmp, stuff+15900, 10); tt_mem_op(tmp,==, stuff+15900, 10);
buf_free(buf); buf_free(buf);
@ -292,7 +292,7 @@ test_buffer_pullup(void *arg)
buf_get_first_chunk_data(buf, &cp, &sz); buf_get_first_chunk_data(buf, &cp, &sz);
tt_ptr_op(cp, !=, NULL); tt_ptr_op(cp, !=, NULL);
tt_int_op(sz, ==, 7900); tt_int_op(sz, ==, 7900);
test_memeq(cp, stuff+100, 7900); tt_mem_op(cp,==, stuff+100, 7900);
buf_free(buf); buf_free(buf);
buf = NULL; buf = NULL;
@ -335,14 +335,14 @@ test_buffer_copy(void *arg)
tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf)); tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf));
tt_int_op(len, ==, generic_buffer_len(buf2)); tt_int_op(len, ==, generic_buffer_len(buf2));
generic_buffer_get(buf2, b, len); generic_buffer_get(buf2, b, len);
test_mem_op(b, ==, s, len); tt_mem_op(b, ==, s, len);
/* Now free buf2 and retry so we can test allocating */ /* Now free buf2 and retry so we can test allocating */
generic_buffer_free(buf2); generic_buffer_free(buf2);
buf2 = NULL; buf2 = NULL;
tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf)); tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf));
tt_int_op(len, ==, generic_buffer_len(buf2)); tt_int_op(len, ==, generic_buffer_len(buf2));
generic_buffer_get(buf2, b, len); generic_buffer_get(buf2, b, len);
test_mem_op(b, ==, s, len); tt_mem_op(b, ==, s, len);
/* Clear buf for next test */ /* Clear buf for next test */
generic_buffer_get(buf, b, len); generic_buffer_get(buf, b, len);
tt_int_op(generic_buffer_len(buf),==,0); tt_int_op(generic_buffer_len(buf),==,0);
@ -362,7 +362,7 @@ test_buffer_copy(void *arg)
for (i = 0; i < 256; ++i) { for (i = 0; i < 256; ++i) {
generic_buffer_get(buf2, b, len+1); generic_buffer_get(buf2, b, len+1);
tt_int_op((unsigned char)b[0],==,i); tt_int_op((unsigned char)b[0],==,i);
test_mem_op(b+1, ==, s, len); tt_mem_op(b+1, ==, s, len);
} }
done: done:
@ -410,7 +410,7 @@ test_buffer_ext_or_cmd(void *arg)
tt_ptr_op(NULL, !=, cmd); tt_ptr_op(NULL, !=, cmd);
tt_int_op(0x1021, ==, cmd->cmd); tt_int_op(0x1021, ==, cmd->cmd);
tt_int_op(6, ==, cmd->len); tt_int_op(6, ==, cmd->len);
test_mem_op("abcdef", ==, cmd->body, 6); tt_mem_op("abcdef", ==, cmd->body, 6);
tt_int_op(0, ==, generic_buffer_len(buf)); tt_int_op(0, ==, generic_buffer_len(buf));
ext_or_cmd_free(cmd); ext_or_cmd_free(cmd);
cmd = NULL; cmd = NULL;
@ -422,7 +422,7 @@ test_buffer_ext_or_cmd(void *arg)
tt_ptr_op(NULL, !=, cmd); tt_ptr_op(NULL, !=, cmd);
tt_int_op(0xffff, ==, cmd->cmd); tt_int_op(0xffff, ==, cmd->cmd);
tt_int_op(10, ==, cmd->len); tt_int_op(10, ==, cmd->len);
test_mem_op("loremipsum", ==, cmd->body, 10); tt_mem_op("loremipsum", ==, cmd->body, 10);
tt_int_op(4, ==, generic_buffer_len(buf)); tt_int_op(4, ==, generic_buffer_len(buf));
ext_or_cmd_free(cmd); ext_or_cmd_free(cmd);
cmd = NULL; cmd = NULL;
@ -436,7 +436,7 @@ test_buffer_ext_or_cmd(void *arg)
tt_ptr_op(NULL, !=, cmd); tt_ptr_op(NULL, !=, cmd);
tt_int_op(0x1000, ==, cmd->cmd); tt_int_op(0x1000, ==, cmd->cmd);
tt_int_op(0xffff, ==, cmd->len); tt_int_op(0xffff, ==, cmd->len);
test_mem_op(tmp, ==, cmd->body, 65535); tt_mem_op(tmp, ==, cmd->body, 65535);
tt_int_op(0, ==, generic_buffer_len(buf)); tt_int_op(0, ==, generic_buffer_len(buf));
ext_or_cmd_free(cmd); ext_or_cmd_free(cmd);
cmd = NULL; cmd = NULL;

View File

@ -35,11 +35,11 @@ test_cfmt_relay_header(void *arg)
tt_int_op(rh.command, ==, 3); tt_int_op(rh.command, ==, 3);
tt_int_op(rh.recognized, ==, 0); tt_int_op(rh.recognized, ==, 0);
tt_int_op(rh.stream_id, ==, 0x2122); tt_int_op(rh.stream_id, ==, 0x2122);
test_mem_op(rh.integrity, ==, "ABCD", 4); tt_mem_op(rh.integrity, ==, "ABCD", 4);
tt_int_op(rh.length, ==, 0x103); tt_int_op(rh.length, ==, 0x103);
relay_header_pack(hdr_out, &rh); relay_header_pack(hdr_out, &rh);
test_mem_op(hdr_out, ==, hdr_1, RELAY_HEADER_SIZE); tt_mem_op(hdr_out, ==, hdr_1, RELAY_HEADER_SIZE);
done: done:
; ;
@ -402,10 +402,10 @@ test_cfmt_create_cells(void *arg)
tt_int_op(CELL_CREATE, ==, cc.cell_type); tt_int_op(CELL_CREATE, ==, cc.cell_type);
tt_int_op(ONION_HANDSHAKE_TYPE_TAP, ==, cc.handshake_type); tt_int_op(ONION_HANDSHAKE_TYPE_TAP, ==, cc.handshake_type);
tt_int_op(TAP_ONIONSKIN_CHALLENGE_LEN, ==, cc.handshake_len); tt_int_op(TAP_ONIONSKIN_CHALLENGE_LEN, ==, cc.handshake_len);
test_memeq(cc.onionskin, b, TAP_ONIONSKIN_CHALLENGE_LEN + 10); tt_mem_op(cc.onionskin,==, b, TAP_ONIONSKIN_CHALLENGE_LEN + 10);
tt_int_op(0, ==, create_cell_format(&cell2, &cc)); tt_int_op(0, ==, create_cell_format(&cell2, &cc));
tt_int_op(cell.command, ==, cell2.command); tt_int_op(cell.command, ==, cell2.command);
test_memeq(cell.payload, cell2.payload, CELL_PAYLOAD_SIZE); tt_mem_op(cell.payload,==, cell2.payload, CELL_PAYLOAD_SIZE);
/* A valid create_fast cell. */ /* A valid create_fast cell. */
memset(&cell, 0, sizeof(cell)); memset(&cell, 0, sizeof(cell));
@ -417,10 +417,10 @@ test_cfmt_create_cells(void *arg)
tt_int_op(CELL_CREATE_FAST, ==, cc.cell_type); tt_int_op(CELL_CREATE_FAST, ==, cc.cell_type);
tt_int_op(ONION_HANDSHAKE_TYPE_FAST, ==, cc.handshake_type); tt_int_op(ONION_HANDSHAKE_TYPE_FAST, ==, cc.handshake_type);
tt_int_op(CREATE_FAST_LEN, ==, cc.handshake_len); tt_int_op(CREATE_FAST_LEN, ==, cc.handshake_len);
test_memeq(cc.onionskin, b, CREATE_FAST_LEN + 10); tt_mem_op(cc.onionskin,==, b, CREATE_FAST_LEN + 10);
tt_int_op(0, ==, create_cell_format(&cell2, &cc)); tt_int_op(0, ==, create_cell_format(&cell2, &cc));
tt_int_op(cell.command, ==, cell2.command); tt_int_op(cell.command, ==, cell2.command);
test_memeq(cell.payload, cell2.payload, CELL_PAYLOAD_SIZE); tt_mem_op(cell.payload,==, cell2.payload, CELL_PAYLOAD_SIZE);
/* A valid create2 cell with a TAP payload */ /* A valid create2 cell with a TAP payload */
memset(&cell, 0, sizeof(cell)); memset(&cell, 0, sizeof(cell));
@ -433,10 +433,10 @@ test_cfmt_create_cells(void *arg)
tt_int_op(CELL_CREATE2, ==, cc.cell_type); tt_int_op(CELL_CREATE2, ==, cc.cell_type);
tt_int_op(ONION_HANDSHAKE_TYPE_TAP, ==, cc.handshake_type); tt_int_op(ONION_HANDSHAKE_TYPE_TAP, ==, cc.handshake_type);
tt_int_op(TAP_ONIONSKIN_CHALLENGE_LEN, ==, cc.handshake_len); tt_int_op(TAP_ONIONSKIN_CHALLENGE_LEN, ==, cc.handshake_len);
test_memeq(cc.onionskin, b, TAP_ONIONSKIN_CHALLENGE_LEN + 10); tt_mem_op(cc.onionskin,==, b, TAP_ONIONSKIN_CHALLENGE_LEN + 10);
tt_int_op(0, ==, create_cell_format(&cell2, &cc)); tt_int_op(0, ==, create_cell_format(&cell2, &cc));
tt_int_op(cell.command, ==, cell2.command); tt_int_op(cell.command, ==, cell2.command);
test_memeq(cell.payload, cell2.payload, CELL_PAYLOAD_SIZE); tt_mem_op(cell.payload,==, cell2.payload, CELL_PAYLOAD_SIZE);
/* A valid create2 cell with an ntor payload */ /* A valid create2 cell with an ntor payload */
memset(&cell, 0, sizeof(cell)); memset(&cell, 0, sizeof(cell));
@ -450,10 +450,10 @@ test_cfmt_create_cells(void *arg)
tt_int_op(CELL_CREATE2, ==, cc.cell_type); tt_int_op(CELL_CREATE2, ==, cc.cell_type);
tt_int_op(ONION_HANDSHAKE_TYPE_NTOR, ==, cc.handshake_type); tt_int_op(ONION_HANDSHAKE_TYPE_NTOR, ==, cc.handshake_type);
tt_int_op(NTOR_ONIONSKIN_LEN, ==, cc.handshake_len); tt_int_op(NTOR_ONIONSKIN_LEN, ==, cc.handshake_len);
test_memeq(cc.onionskin, b, NTOR_ONIONSKIN_LEN + 10); tt_mem_op(cc.onionskin,==, b, NTOR_ONIONSKIN_LEN + 10);
tt_int_op(0, ==, create_cell_format(&cell2, &cc)); tt_int_op(0, ==, create_cell_format(&cell2, &cc));
tt_int_op(cell.command, ==, cell2.command); tt_int_op(cell.command, ==, cell2.command);
test_memeq(cell.payload, cell2.payload, CELL_PAYLOAD_SIZE); tt_mem_op(cell.payload,==, cell2.payload, CELL_PAYLOAD_SIZE);
#else #else
tt_int_op(-1, ==, create_cell_parse(&cc, &cell)); tt_int_op(-1, ==, create_cell_parse(&cc, &cell));
#endif #endif
@ -470,10 +470,10 @@ test_cfmt_create_cells(void *arg)
tt_int_op(CELL_CREATE, ==, cc.cell_type); tt_int_op(CELL_CREATE, ==, cc.cell_type);
tt_int_op(ONION_HANDSHAKE_TYPE_NTOR, ==, cc.handshake_type); tt_int_op(ONION_HANDSHAKE_TYPE_NTOR, ==, cc.handshake_type);
tt_int_op(NTOR_ONIONSKIN_LEN, ==, cc.handshake_len); tt_int_op(NTOR_ONIONSKIN_LEN, ==, cc.handshake_len);
test_memeq(cc.onionskin, b, NTOR_ONIONSKIN_LEN + 10); tt_mem_op(cc.onionskin,==, b, NTOR_ONIONSKIN_LEN + 10);
tt_int_op(0, ==, create_cell_format(&cell2, &cc)); tt_int_op(0, ==, create_cell_format(&cell2, &cc));
tt_int_op(cell.command, ==, cell2.command); tt_int_op(cell.command, ==, cell2.command);
test_memeq(cell.payload, cell2.payload, CELL_PAYLOAD_SIZE); tt_mem_op(cell.payload,==, cell2.payload, CELL_PAYLOAD_SIZE);
#else #else
tt_int_op(-1, ==, create_cell_parse(&cc, &cell)); tt_int_op(-1, ==, create_cell_parse(&cc, &cell));
#endif #endif
@ -527,10 +527,10 @@ test_cfmt_created_cells(void *arg)
tt_int_op(0, ==, created_cell_parse(&cc, &cell)); tt_int_op(0, ==, created_cell_parse(&cc, &cell));
tt_int_op(CELL_CREATED, ==, cc.cell_type); tt_int_op(CELL_CREATED, ==, cc.cell_type);
tt_int_op(TAP_ONIONSKIN_REPLY_LEN, ==, cc.handshake_len); tt_int_op(TAP_ONIONSKIN_REPLY_LEN, ==, cc.handshake_len);
test_memeq(cc.reply, b, TAP_ONIONSKIN_REPLY_LEN + 10); tt_mem_op(cc.reply,==, b, TAP_ONIONSKIN_REPLY_LEN + 10);
tt_int_op(0, ==, created_cell_format(&cell2, &cc)); tt_int_op(0, ==, created_cell_format(&cell2, &cc));
tt_int_op(cell.command, ==, cell2.command); tt_int_op(cell.command, ==, cell2.command);
test_memeq(cell.payload, cell2.payload, CELL_PAYLOAD_SIZE); tt_mem_op(cell.payload,==, cell2.payload, CELL_PAYLOAD_SIZE);
/* A good CREATED_FAST cell */ /* A good CREATED_FAST cell */
memset(&cell, 0, sizeof(cell)); memset(&cell, 0, sizeof(cell));
@ -541,10 +541,10 @@ test_cfmt_created_cells(void *arg)
tt_int_op(0, ==, created_cell_parse(&cc, &cell)); tt_int_op(0, ==, created_cell_parse(&cc, &cell));
tt_int_op(CELL_CREATED_FAST, ==, cc.cell_type); tt_int_op(CELL_CREATED_FAST, ==, cc.cell_type);
tt_int_op(CREATED_FAST_LEN, ==, cc.handshake_len); tt_int_op(CREATED_FAST_LEN, ==, cc.handshake_len);
test_memeq(cc.reply, b, CREATED_FAST_LEN + 10); tt_mem_op(cc.reply,==, b, CREATED_FAST_LEN + 10);
tt_int_op(0, ==, created_cell_format(&cell2, &cc)); tt_int_op(0, ==, created_cell_format(&cell2, &cc));
tt_int_op(cell.command, ==, cell2.command); tt_int_op(cell.command, ==, cell2.command);
test_memeq(cell.payload, cell2.payload, CELL_PAYLOAD_SIZE); tt_mem_op(cell.payload,==, cell2.payload, CELL_PAYLOAD_SIZE);
/* A good CREATED2 cell with short reply */ /* A good CREATED2 cell with short reply */
memset(&cell, 0, sizeof(cell)); memset(&cell, 0, sizeof(cell));
@ -556,10 +556,10 @@ test_cfmt_created_cells(void *arg)
tt_int_op(0, ==, created_cell_parse(&cc, &cell)); tt_int_op(0, ==, created_cell_parse(&cc, &cell));
tt_int_op(CELL_CREATED2, ==, cc.cell_type); tt_int_op(CELL_CREATED2, ==, cc.cell_type);
tt_int_op(64, ==, cc.handshake_len); tt_int_op(64, ==, cc.handshake_len);
test_memeq(cc.reply, b, 80); tt_mem_op(cc.reply,==, b, 80);
tt_int_op(0, ==, created_cell_format(&cell2, &cc)); tt_int_op(0, ==, created_cell_format(&cell2, &cc));
tt_int_op(cell.command, ==, cell2.command); tt_int_op(cell.command, ==, cell2.command);
test_memeq(cell.payload, cell2.payload, CELL_PAYLOAD_SIZE); tt_mem_op(cell.payload,==, cell2.payload, CELL_PAYLOAD_SIZE);
/* A good CREATED2 cell with maximal reply */ /* A good CREATED2 cell with maximal reply */
memset(&cell, 0, sizeof(cell)); memset(&cell, 0, sizeof(cell));
@ -571,10 +571,10 @@ test_cfmt_created_cells(void *arg)
tt_int_op(0, ==, created_cell_parse(&cc, &cell)); tt_int_op(0, ==, created_cell_parse(&cc, &cell));
tt_int_op(CELL_CREATED2, ==, cc.cell_type); tt_int_op(CELL_CREATED2, ==, cc.cell_type);
tt_int_op(496, ==, cc.handshake_len); tt_int_op(496, ==, cc.handshake_len);
test_memeq(cc.reply, b, 496); tt_mem_op(cc.reply,==, b, 496);
tt_int_op(0, ==, created_cell_format(&cell2, &cc)); tt_int_op(0, ==, created_cell_format(&cell2, &cc));
tt_int_op(cell.command, ==, cell2.command); tt_int_op(cell.command, ==, cell2.command);
test_memeq(cell.payload, cell2.payload, CELL_PAYLOAD_SIZE); tt_mem_op(cell.payload,==, cell2.payload, CELL_PAYLOAD_SIZE);
/* Bogus CREATED2 cell: too long! */ /* Bogus CREATED2 cell: too long! */
memset(&cell, 0, sizeof(cell)); memset(&cell, 0, sizeof(cell));
@ -620,15 +620,15 @@ test_cfmt_extend_cells(void *arg)
tt_str_op("18.244.0.1", ==, fmt_addr(&ec.orport_ipv4.addr)); tt_str_op("18.244.0.1", ==, fmt_addr(&ec.orport_ipv4.addr));
tt_int_op(258, ==, ec.orport_ipv4.port); tt_int_op(258, ==, ec.orport_ipv4.port);
tt_int_op(AF_UNSPEC, ==, tor_addr_family(&ec.orport_ipv6.addr)); tt_int_op(AF_UNSPEC, ==, tor_addr_family(&ec.orport_ipv6.addr));
test_memeq(ec.node_id, "electroencephalogram", 20); tt_mem_op(ec.node_id,==, "electroencephalogram", 20);
tt_int_op(cc->cell_type, ==, CELL_CREATE); tt_int_op(cc->cell_type, ==, CELL_CREATE);
tt_int_op(cc->handshake_type, ==, ONION_HANDSHAKE_TYPE_TAP); tt_int_op(cc->handshake_type, ==, ONION_HANDSHAKE_TYPE_TAP);
tt_int_op(cc->handshake_len, ==, TAP_ONIONSKIN_CHALLENGE_LEN); tt_int_op(cc->handshake_len, ==, TAP_ONIONSKIN_CHALLENGE_LEN);
test_memeq(cc->onionskin, b, TAP_ONIONSKIN_CHALLENGE_LEN+20); tt_mem_op(cc->onionskin,==, b, TAP_ONIONSKIN_CHALLENGE_LEN+20);
tt_int_op(0, ==, extend_cell_format(&p2_cmd, &p2_len, p2, &ec)); tt_int_op(0, ==, extend_cell_format(&p2_cmd, &p2_len, p2, &ec));
tt_int_op(p2_cmd, ==, RELAY_COMMAND_EXTEND); tt_int_op(p2_cmd, ==, RELAY_COMMAND_EXTEND);
tt_int_op(p2_len, ==, 26+TAP_ONIONSKIN_CHALLENGE_LEN); tt_int_op(p2_len, ==, 26+TAP_ONIONSKIN_CHALLENGE_LEN);
test_memeq(p2, p, RELAY_PAYLOAD_SIZE); tt_mem_op(p2,==, p, RELAY_PAYLOAD_SIZE);
/* Let's do an ntor stuffed in a legacy EXTEND cell */ /* Let's do an ntor stuffed in a legacy EXTEND cell */
memset(p, 0, sizeof(p)); memset(p, 0, sizeof(p));
@ -644,15 +644,15 @@ test_cfmt_extend_cells(void *arg)
tt_str_op("18.244.0.1", ==, fmt_addr(&ec.orport_ipv4.addr)); tt_str_op("18.244.0.1", ==, fmt_addr(&ec.orport_ipv4.addr));
tt_int_op(258, ==, ec.orport_ipv4.port); tt_int_op(258, ==, ec.orport_ipv4.port);
tt_int_op(AF_UNSPEC, ==, tor_addr_family(&ec.orport_ipv6.addr)); tt_int_op(AF_UNSPEC, ==, tor_addr_family(&ec.orport_ipv6.addr));
test_memeq(ec.node_id, "electroencephalogram", 20); tt_mem_op(ec.node_id,==, "electroencephalogram", 20);
tt_int_op(cc->cell_type, ==, CELL_CREATE2); tt_int_op(cc->cell_type, ==, CELL_CREATE2);
tt_int_op(cc->handshake_type, ==, ONION_HANDSHAKE_TYPE_NTOR); tt_int_op(cc->handshake_type, ==, ONION_HANDSHAKE_TYPE_NTOR);
tt_int_op(cc->handshake_len, ==, NTOR_ONIONSKIN_LEN); tt_int_op(cc->handshake_len, ==, NTOR_ONIONSKIN_LEN);
test_memeq(cc->onionskin, b, NTOR_ONIONSKIN_LEN+20); tt_mem_op(cc->onionskin,==, b, NTOR_ONIONSKIN_LEN+20);
tt_int_op(0, ==, extend_cell_format(&p2_cmd, &p2_len, p2, &ec)); tt_int_op(0, ==, extend_cell_format(&p2_cmd, &p2_len, p2, &ec));
tt_int_op(p2_cmd, ==, RELAY_COMMAND_EXTEND); tt_int_op(p2_cmd, ==, RELAY_COMMAND_EXTEND);
tt_int_op(p2_len, ==, 26+TAP_ONIONSKIN_CHALLENGE_LEN); tt_int_op(p2_len, ==, 26+TAP_ONIONSKIN_CHALLENGE_LEN);
test_memeq(p2, p, RELAY_PAYLOAD_SIZE); tt_mem_op(p2,==, p, RELAY_PAYLOAD_SIZE);
tt_int_op(0, ==, create_cell_format_relayed(&cell, cc)); tt_int_op(0, ==, create_cell_format_relayed(&cell, cc));
/* Now let's do a minimal ntor EXTEND2 cell. */ /* Now let's do a minimal ntor EXTEND2 cell. */
@ -673,15 +673,15 @@ test_cfmt_extend_cells(void *arg)
tt_str_op("18.244.0.1", ==, fmt_addr(&ec.orport_ipv4.addr)); tt_str_op("18.244.0.1", ==, fmt_addr(&ec.orport_ipv4.addr));
tt_int_op(61681, ==, ec.orport_ipv4.port); tt_int_op(61681, ==, ec.orport_ipv4.port);
tt_int_op(AF_UNSPEC, ==, tor_addr_family(&ec.orport_ipv6.addr)); tt_int_op(AF_UNSPEC, ==, tor_addr_family(&ec.orport_ipv6.addr));
test_memeq(ec.node_id, "anarchoindividualist", 20); tt_mem_op(ec.node_id,==, "anarchoindividualist", 20);
tt_int_op(cc->cell_type, ==, CELL_CREATE2); tt_int_op(cc->cell_type, ==, CELL_CREATE2);
tt_int_op(cc->handshake_type, ==, ONION_HANDSHAKE_TYPE_NTOR); tt_int_op(cc->handshake_type, ==, ONION_HANDSHAKE_TYPE_NTOR);
tt_int_op(cc->handshake_len, ==, NTOR_ONIONSKIN_LEN); tt_int_op(cc->handshake_len, ==, NTOR_ONIONSKIN_LEN);
test_memeq(cc->onionskin, b, NTOR_ONIONSKIN_LEN+20); tt_mem_op(cc->onionskin,==, b, NTOR_ONIONSKIN_LEN+20);
tt_int_op(0, ==, extend_cell_format(&p2_cmd, &p2_len, p2, &ec)); tt_int_op(0, ==, extend_cell_format(&p2_cmd, &p2_len, p2, &ec));
tt_int_op(p2_cmd, ==, RELAY_COMMAND_EXTEND2); tt_int_op(p2_cmd, ==, RELAY_COMMAND_EXTEND2);
tt_int_op(p2_len, ==, 35+NTOR_ONIONSKIN_LEN); tt_int_op(p2_len, ==, 35+NTOR_ONIONSKIN_LEN);
test_memeq(p2, p, RELAY_PAYLOAD_SIZE); tt_mem_op(p2,==, p, RELAY_PAYLOAD_SIZE);
/* Now let's do a fanciful EXTEND2 cell. */ /* Now let's do a fanciful EXTEND2 cell. */
memset(&ec, 0xff, sizeof(ec)); memset(&ec, 0xff, sizeof(ec));
@ -706,11 +706,11 @@ test_cfmt_extend_cells(void *arg)
tt_int_op(61681, ==, ec.orport_ipv4.port); tt_int_op(61681, ==, ec.orport_ipv4.port);
tt_str_op("2002::f0:c51e", ==, fmt_addr(&ec.orport_ipv6.addr)); tt_str_op("2002::f0:c51e", ==, fmt_addr(&ec.orport_ipv6.addr));
tt_int_op(4370, ==, ec.orport_ipv6.port); tt_int_op(4370, ==, ec.orport_ipv6.port);
test_memeq(ec.node_id, "anthropomorphization", 20); tt_mem_op(ec.node_id,==, "anthropomorphization", 20);
tt_int_op(cc->cell_type, ==, CELL_CREATE2); tt_int_op(cc->cell_type, ==, CELL_CREATE2);
tt_int_op(cc->handshake_type, ==, 0x105); tt_int_op(cc->handshake_type, ==, 0x105);
tt_int_op(cc->handshake_len, ==, 99); tt_int_op(cc->handshake_len, ==, 99);
test_memeq(cc->onionskin, b, 99+20); tt_mem_op(cc->onionskin,==, b, 99+20);
tt_int_op(0, ==, extend_cell_format(&p2_cmd, &p2_len, p2, &ec)); tt_int_op(0, ==, extend_cell_format(&p2_cmd, &p2_len, p2, &ec));
tt_int_op(p2_cmd, ==, RELAY_COMMAND_EXTEND2); tt_int_op(p2_cmd, ==, RELAY_COMMAND_EXTEND2);
/* We'll generate it minus the IPv6 address and minus the konami code */ /* We'll generate it minus the IPv6 address and minus the konami code */
@ -722,7 +722,7 @@ test_cfmt_extend_cells(void *arg)
"0214616e7468726f706f6d6f727068697a6174696f6e" "0214616e7468726f706f6d6f727068697a6174696f6e"
/* Now the handshake prologue */ /* Now the handshake prologue */
"01050063"); "01050063");
test_memeq(p2+1+8+22+4, b, 99+20); tt_mem_op(p2+1+8+22+4,==, b, 99+20);
tt_int_op(0, ==, create_cell_format_relayed(&cell, cc)); tt_int_op(0, ==, create_cell_format_relayed(&cell, cc));
/* == Now try parsing some junk */ /* == Now try parsing some junk */
@ -836,11 +836,11 @@ test_cfmt_extended_cells(void *arg)
tt_int_op(RELAY_COMMAND_EXTENDED, ==, ec.cell_type); tt_int_op(RELAY_COMMAND_EXTENDED, ==, ec.cell_type);
tt_int_op(cc->cell_type, ==, CELL_CREATED); tt_int_op(cc->cell_type, ==, CELL_CREATED);
tt_int_op(cc->handshake_len, ==, TAP_ONIONSKIN_REPLY_LEN); tt_int_op(cc->handshake_len, ==, TAP_ONIONSKIN_REPLY_LEN);
test_memeq(cc->reply, b, TAP_ONIONSKIN_REPLY_LEN); tt_mem_op(cc->reply,==, b, TAP_ONIONSKIN_REPLY_LEN);
tt_int_op(0, ==, extended_cell_format(&p2_cmd, &p2_len, p2, &ec)); tt_int_op(0, ==, extended_cell_format(&p2_cmd, &p2_len, p2, &ec));
tt_int_op(RELAY_COMMAND_EXTENDED, ==, p2_cmd); tt_int_op(RELAY_COMMAND_EXTENDED, ==, p2_cmd);
tt_int_op(TAP_ONIONSKIN_REPLY_LEN, ==, p2_len); tt_int_op(TAP_ONIONSKIN_REPLY_LEN, ==, p2_len);
test_memeq(p2, p, sizeof(p2)); tt_mem_op(p2,==, p, sizeof(p2));
/* Try an EXTENDED2 cell */ /* Try an EXTENDED2 cell */
memset(&ec, 0xff, sizeof(ec)); memset(&ec, 0xff, sizeof(ec));
@ -853,11 +853,11 @@ test_cfmt_extended_cells(void *arg)
tt_int_op(RELAY_COMMAND_EXTENDED2, ==, ec.cell_type); tt_int_op(RELAY_COMMAND_EXTENDED2, ==, ec.cell_type);
tt_int_op(cc->cell_type, ==, CELL_CREATED2); tt_int_op(cc->cell_type, ==, CELL_CREATED2);
tt_int_op(cc->handshake_len, ==, 42); tt_int_op(cc->handshake_len, ==, 42);
test_memeq(cc->reply, b, 42+10); tt_mem_op(cc->reply,==, b, 42+10);
tt_int_op(0, ==, extended_cell_format(&p2_cmd, &p2_len, p2, &ec)); tt_int_op(0, ==, extended_cell_format(&p2_cmd, &p2_len, p2, &ec));
tt_int_op(RELAY_COMMAND_EXTENDED2, ==, p2_cmd); tt_int_op(RELAY_COMMAND_EXTENDED2, ==, p2_cmd);
tt_int_op(2+42, ==, p2_len); tt_int_op(2+42, ==, p2_len);
test_memeq(p2, p, sizeof(p2)); tt_mem_op(p2,==, p, sizeof(p2));
/* Try an almost-too-long EXTENDED2 cell */ /* Try an almost-too-long EXTENDED2 cell */
memcpy(p, "\x01\xf0", 2); memcpy(p, "\x01\xf0", 2);

View File

@ -69,15 +69,15 @@ test_cq_manip(void *arg)
pc_tmp = cell_queue_pop(&cq); pc_tmp = cell_queue_pop(&cq);
tt_int_op(cq.n, ==, 1); tt_int_op(cq.n, ==, 1);
tt_ptr_op(pc_tmp, !=, NULL); tt_ptr_op(pc_tmp, !=, NULL);
test_mem_op(pc_tmp->body, ==, "\x12\x34\x56\x78\x0a", 5); tt_mem_op(pc_tmp->body, ==, "\x12\x34\x56\x78\x0a", 5);
test_mem_op(pc_tmp->body+5, ==, cell.payload, sizeof(cell.payload)); tt_mem_op(pc_tmp->body+5, ==, cell.payload, sizeof(cell.payload));
packed_cell_free(pc_tmp); packed_cell_free(pc_tmp);
pc_tmp = cell_queue_pop(&cq); pc_tmp = cell_queue_pop(&cq);
tt_int_op(cq.n, ==, 0); tt_int_op(cq.n, ==, 0);
tt_ptr_op(pc_tmp, !=, NULL); tt_ptr_op(pc_tmp, !=, NULL);
test_mem_op(pc_tmp->body, ==, "\x20\x13\x0a", 3); tt_mem_op(pc_tmp->body, ==, "\x20\x13\x0a", 3);
test_mem_op(pc_tmp->body+3, ==, cell.payload, sizeof(cell.payload)); tt_mem_op(pc_tmp->body+3, ==, cell.payload, sizeof(cell.payload));
packed_cell_free(pc_tmp); packed_cell_free(pc_tmp);
pc_tmp = NULL; pc_tmp = NULL;

View File

@ -251,7 +251,7 @@ test_rend_token_maps(void *arg)
tt_ptr_op(c3->rendinfo, ==, NULL); tt_ptr_op(c3->rendinfo, ==, NULL);
tt_ptr_op(c4->rendinfo, !=, NULL); tt_ptr_op(c4->rendinfo, !=, NULL);
test_mem_op(c4->rendinfo, ==, tok3, REND_TOKEN_LEN); tt_mem_op(c4->rendinfo, ==, tok3, REND_TOKEN_LEN);
/* Now clear c4's cookie. */ /* Now clear c4's cookie. */
circuit_set_intro_point_digest(c4, NULL); circuit_set_intro_point_digest(c4, NULL);

View File

@ -65,7 +65,7 @@ test_cmux_destroy_cell_queue(void *arg)
pc = cell_queue_pop(cq); pc = cell_queue_pop(cq);
tt_assert(pc); tt_assert(pc);
test_mem_op(pc->body, ==, "\x00\x00\x00\x64\x04\x0a\x00\x00\x00", 9); tt_mem_op(pc->body, ==, "\x00\x00\x00\x64\x04\x0a\x00\x00\x00", 9);
packed_cell_free(pc); packed_cell_free(pc);
pc = NULL; pc = NULL;

View File

@ -53,57 +53,57 @@ test_config_addressmap(void *arg)
/* MapAddress .invalidwildcard.com .torserver.exit - no match */ /* MapAddress .invalidwildcard.com .torserver.exit - no match */
strlcpy(address, "www.invalidwildcard.com", sizeof(address)); strlcpy(address, "www.invalidwildcard.com", sizeof(address));
test_assert(!addressmap_rewrite(address, sizeof(address), &expires, NULL)); tt_assert(!addressmap_rewrite(address, sizeof(address), &expires, NULL));
/* MapAddress *invalidasterisk.com .torserver.exit - no match */ /* MapAddress *invalidasterisk.com .torserver.exit - no match */
strlcpy(address, "www.invalidasterisk.com", sizeof(address)); strlcpy(address, "www.invalidasterisk.com", sizeof(address));
test_assert(!addressmap_rewrite(address, sizeof(address), &expires, NULL)); tt_assert(!addressmap_rewrite(address, sizeof(address), &expires, NULL));
/* Where no mapping for FQDN match on top-level domain */ /* Where no mapping for FQDN match on top-level domain */
/* MapAddress .google.com .torserver.exit */ /* MapAddress .google.com .torserver.exit */
strlcpy(address, "reader.google.com", sizeof(address)); strlcpy(address, "reader.google.com", sizeof(address));
test_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
test_streq(address, "reader.torserver.exit"); tt_str_op(address,==, "reader.torserver.exit");
/* MapAddress *.yahoo.com *.google.com.torserver.exit */ /* MapAddress *.yahoo.com *.google.com.torserver.exit */
strlcpy(address, "reader.yahoo.com", sizeof(address)); strlcpy(address, "reader.yahoo.com", sizeof(address));
test_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
test_streq(address, "reader.google.com.torserver.exit"); tt_str_op(address,==, "reader.google.com.torserver.exit");
/*MapAddress *.cnn.com www.cnn.com */ /*MapAddress *.cnn.com www.cnn.com */
strlcpy(address, "cnn.com", sizeof(address)); strlcpy(address, "cnn.com", sizeof(address));
test_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
test_streq(address, "www.cnn.com"); tt_str_op(address,==, "www.cnn.com");
/* MapAddress .cn.com www.cnn.com */ /* MapAddress .cn.com www.cnn.com */
strlcpy(address, "www.cn.com", sizeof(address)); strlcpy(address, "www.cn.com", sizeof(address));
test_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
test_streq(address, "www.cnn.com"); tt_str_op(address,==, "www.cnn.com");
/* MapAddress ex.com www.cnn.com - no match */ /* MapAddress ex.com www.cnn.com - no match */
strlcpy(address, "www.ex.com", sizeof(address)); strlcpy(address, "www.ex.com", sizeof(address));
test_assert(!addressmap_rewrite(address, sizeof(address), &expires, NULL)); tt_assert(!addressmap_rewrite(address, sizeof(address), &expires, NULL));
/* MapAddress ey.com *.cnn.com - invalid expression */ /* MapAddress ey.com *.cnn.com - invalid expression */
strlcpy(address, "ey.com", sizeof(address)); strlcpy(address, "ey.com", sizeof(address));
test_assert(!addressmap_rewrite(address, sizeof(address), &expires, NULL)); tt_assert(!addressmap_rewrite(address, sizeof(address), &expires, NULL));
/* Where mapping for FQDN match on FQDN */ /* Where mapping for FQDN match on FQDN */
strlcpy(address, "www.google.com", sizeof(address)); strlcpy(address, "www.google.com", sizeof(address));
test_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
test_streq(address, "3.3.3.3"); tt_str_op(address,==, "3.3.3.3");
strlcpy(address, "www.torproject.org", sizeof(address)); strlcpy(address, "www.torproject.org", sizeof(address));
test_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
test_streq(address, "1.1.1.1"); tt_str_op(address,==, "1.1.1.1");
strlcpy(address, "other.torproject.org", sizeof(address)); strlcpy(address, "other.torproject.org", sizeof(address));
test_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
test_streq(address, "this.torproject.org.otherserver.exit"); tt_str_op(address,==, "this.torproject.org.otherserver.exit");
strlcpy(address, "test.torproject.org", sizeof(address)); strlcpy(address, "test.torproject.org", sizeof(address));
test_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
test_streq(address, "2.2.2.2"); tt_str_op(address,==, "2.2.2.2");
/* Test a chain of address mappings and the order in which they were added: /* Test a chain of address mappings and the order in which they were added:
"MapAddress www.example.org 4.4.4.4" "MapAddress www.example.org 4.4.4.4"
@ -111,17 +111,17 @@ test_config_addressmap(void *arg)
"MapAddress 4.4.4.4 5.5.5.5" "MapAddress 4.4.4.4 5.5.5.5"
*/ */
strlcpy(address, "www.example.org", sizeof(address)); strlcpy(address, "www.example.org", sizeof(address));
test_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
test_streq(address, "5.5.5.5"); tt_str_op(address,==, "5.5.5.5");
/* Test infinite address mapping results in no change */ /* Test infinite address mapping results in no change */
strlcpy(address, "www.infiniteloop.org", sizeof(address)); strlcpy(address, "www.infiniteloop.org", sizeof(address));
test_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
test_streq(address, "www.infiniteloop.org"); tt_str_op(address,==, "www.infiniteloop.org");
/* Test we don't find false positives */ /* Test we don't find false positives */
strlcpy(address, "www.example.com", sizeof(address)); strlcpy(address, "www.example.com", sizeof(address));
test_assert(!addressmap_rewrite(address, sizeof(address), &expires, NULL)); tt_assert(!addressmap_rewrite(address, sizeof(address), &expires, NULL));
/* Test top-level-domain matching a bit harder */ /* Test top-level-domain matching a bit harder */
config_free_lines(get_options_mutable()->AddressMap); config_free_lines(get_options_mutable()->AddressMap);
@ -134,24 +134,24 @@ test_config_addressmap(void *arg)
config_register_addressmaps(get_options()); config_register_addressmaps(get_options());
strlcpy(address, "www.abc.com", sizeof(address)); strlcpy(address, "www.abc.com", sizeof(address));
test_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
test_streq(address, "www.abc.torserver.exit"); tt_str_op(address,==, "www.abc.torserver.exit");
strlcpy(address, "www.def.com", sizeof(address)); strlcpy(address, "www.def.com", sizeof(address));
test_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
test_streq(address, "www.def.torserver.exit"); tt_str_op(address,==, "www.def.torserver.exit");
strlcpy(address, "www.torproject.org", sizeof(address)); strlcpy(address, "www.torproject.org", sizeof(address));
test_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
test_streq(address, "1.1.1.1"); tt_str_op(address,==, "1.1.1.1");
strlcpy(address, "test.torproject.org", sizeof(address)); strlcpy(address, "test.torproject.org", sizeof(address));
test_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
test_streq(address, "1.1.1.1"); tt_str_op(address,==, "1.1.1.1");
strlcpy(address, "torproject.net", sizeof(address)); strlcpy(address, "torproject.net", sizeof(address));
test_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL));
test_streq(address, "2.2.2.2"); tt_str_op(address,==, "2.2.2.2");
/* We don't support '*' as a mapping directive */ /* We don't support '*' as a mapping directive */
config_free_lines(get_options_mutable()->AddressMap); config_free_lines(get_options_mutable()->AddressMap);
@ -161,13 +161,13 @@ test_config_addressmap(void *arg)
config_register_addressmaps(get_options()); config_register_addressmaps(get_options());
strlcpy(address, "www.abc.com", sizeof(address)); strlcpy(address, "www.abc.com", sizeof(address));
test_assert(!addressmap_rewrite(address, sizeof(address), &expires, NULL)); tt_assert(!addressmap_rewrite(address, sizeof(address), &expires, NULL));
strlcpy(address, "www.def.net", sizeof(address)); strlcpy(address, "www.def.net", sizeof(address));
test_assert(!addressmap_rewrite(address, sizeof(address), &expires, NULL)); tt_assert(!addressmap_rewrite(address, sizeof(address), &expires, NULL));
strlcpy(address, "www.torproject.org", sizeof(address)); strlcpy(address, "www.torproject.org", sizeof(address));
test_assert(!addressmap_rewrite(address, sizeof(address), &expires, NULL)); tt_assert(!addressmap_rewrite(address, sizeof(address), &expires, NULL));
#undef addressmap_rewrite #undef addressmap_rewrite
@ -220,13 +220,13 @@ test_config_check_or_create_data_subdir(void *arg)
// The subdirectory shouldn't exist yet, // The subdirectory shouldn't exist yet,
// but should be created by the call to check_or_create_data_subdir. // but should be created by the call to check_or_create_data_subdir.
test_assert(r && (errno == ENOENT)); tt_assert(r && (errno == ENOENT));
test_assert(!check_or_create_data_subdir(subdir)); tt_assert(!check_or_create_data_subdir(subdir));
test_assert(is_private_dir(subpath)); tt_assert(is_private_dir(subpath));
// The check should return 0, if the directory already exists // The check should return 0, if the directory already exists
// and is private to the user. // and is private to the user.
test_assert(!check_or_create_data_subdir(subdir)); tt_assert(!check_or_create_data_subdir(subdir));
r = stat(subpath, &st); r = stat(subpath, &st);
if (r) { if (r) {
@ -243,9 +243,9 @@ test_config_check_or_create_data_subdir(void *arg)
// If the directory exists, but its mode is too permissive // If the directory exists, but its mode is too permissive
// a call to check_or_create_data_subdir should reset the mode. // a call to check_or_create_data_subdir should reset the mode.
test_assert(!is_private_dir(subpath)); tt_assert(!is_private_dir(subpath));
test_assert(!check_or_create_data_subdir(subdir)); tt_assert(!check_or_create_data_subdir(subdir));
test_assert(is_private_dir(subpath)); tt_assert(is_private_dir(subpath));
#endif #endif
done: done:
@ -291,20 +291,20 @@ test_config_write_to_data_subdir(void *arg)
#endif #endif
// Write attempt shoudl fail, if subdirectory doesn't exist. // Write attempt shoudl fail, if subdirectory doesn't exist.
test_assert(write_to_data_subdir(subdir, fname, str, NULL)); tt_assert(write_to_data_subdir(subdir, fname, str, NULL));
test_assert(! check_or_create_data_subdir(subdir)); tt_assert(! check_or_create_data_subdir(subdir));
// Content of file after write attempt should be // Content of file after write attempt should be
// equal to the original string. // equal to the original string.
test_assert(!write_to_data_subdir(subdir, fname, str, NULL)); tt_assert(!write_to_data_subdir(subdir, fname, str, NULL));
cp = read_file_to_str(filepath, 0, NULL); cp = read_file_to_str(filepath, 0, NULL);
test_streq(cp, str); tt_str_op(cp,==, str);
tor_free(cp); tor_free(cp);
// A second write operation should overwrite the old content. // A second write operation should overwrite the old content.
test_assert(!write_to_data_subdir(subdir, fname, str, NULL)); tt_assert(!write_to_data_subdir(subdir, fname, str, NULL));
cp = read_file_to_str(filepath, 0, NULL); cp = read_file_to_str(filepath, 0, NULL);
test_streq(cp, str); tt_str_op(cp,==, str);
tor_free(cp); tor_free(cp);
done: done:
@ -325,48 +325,48 @@ good_bridge_line_test(const char *string, const char *test_addrport,
{ {
char *tmp = NULL; char *tmp = NULL;
bridge_line_t *bridge_line = parse_bridge_line(string); bridge_line_t *bridge_line = parse_bridge_line(string);
test_assert(bridge_line); tt_assert(bridge_line);
/* test addrport */ /* test addrport */
tmp = tor_strdup(fmt_addrport(&bridge_line->addr, bridge_line->port)); tmp = tor_strdup(fmt_addrport(&bridge_line->addr, bridge_line->port));
test_streq(test_addrport, tmp); tt_str_op(test_addrport,==, tmp);
tor_free(tmp); tor_free(tmp);
/* If we were asked to validate a digest, but we did not get a /* If we were asked to validate a digest, but we did not get a
digest after parsing, we failed. */ digest after parsing, we failed. */
if (test_digest && tor_digest_is_zero(bridge_line->digest)) if (test_digest && tor_digest_is_zero(bridge_line->digest))
test_assert(0); tt_assert(0);
/* If we were not asked to validate a digest, and we got a digest /* If we were not asked to validate a digest, and we got a digest
after parsing, we failed again. */ after parsing, we failed again. */
if (!test_digest && !tor_digest_is_zero(bridge_line->digest)) if (!test_digest && !tor_digest_is_zero(bridge_line->digest))
test_assert(0); tt_assert(0);
/* If we were asked to validate a digest, and we got a digest after /* If we were asked to validate a digest, and we got a digest after
parsing, make sure it's correct. */ parsing, make sure it's correct. */
if (test_digest) { if (test_digest) {
tmp = tor_strdup(hex_str(bridge_line->digest, DIGEST_LEN)); tmp = tor_strdup(hex_str(bridge_line->digest, DIGEST_LEN));
tor_strlower(tmp); tor_strlower(tmp);
test_streq(test_digest, tmp); tt_str_op(test_digest,==, tmp);
tor_free(tmp); tor_free(tmp);
} }
/* If we were asked to validate a transport name, make sure tha it /* If we were asked to validate a transport name, make sure tha it
matches with the transport name that was parsed. */ matches with the transport name that was parsed. */
if (test_transport && !bridge_line->transport_name) if (test_transport && !bridge_line->transport_name)
test_assert(0); tt_assert(0);
if (!test_transport && bridge_line->transport_name) if (!test_transport && bridge_line->transport_name)
test_assert(0); tt_assert(0);
if (test_transport) if (test_transport)
test_streq(test_transport, bridge_line->transport_name); tt_str_op(test_transport,==, bridge_line->transport_name);
/* Validate the SOCKS argument smartlist. */ /* Validate the SOCKS argument smartlist. */
if (test_socks_args && !bridge_line->socks_args) if (test_socks_args && !bridge_line->socks_args)
test_assert(0); tt_assert(0);
if (!test_socks_args && bridge_line->socks_args) if (!test_socks_args && bridge_line->socks_args)
test_assert(0); tt_assert(0);
if (test_socks_args) if (test_socks_args)
test_assert(smartlist_strings_eq(test_socks_args, tt_assert(smartlist_strings_eq(test_socks_args,
bridge_line->socks_args)); bridge_line->socks_args));
done: done:
@ -382,7 +382,7 @@ bad_bridge_line_test(const char *string)
bridge_line_t *bridge_line = parse_bridge_line(string); bridge_line_t *bridge_line = parse_bridge_line(string);
if (bridge_line) if (bridge_line)
TT_FAIL(("%s was supposed to fail, but it didn't.", string)); TT_FAIL(("%s was supposed to fail, but it didn't.", string));
test_assert(!bridge_line); tt_assert(!bridge_line);
done: done:
bridge_line_free(bridge_line); bridge_line_free(bridge_line);
@ -490,18 +490,18 @@ test_config_parse_transport_options_line(void *arg)
{ /* too small line */ { /* too small line */
options_sl = get_options_from_transport_options_line("valley", NULL); options_sl = get_options_from_transport_options_line("valley", NULL);
test_assert(!options_sl); tt_assert(!options_sl);
} }
{ /* no k=v values */ { /* no k=v values */
options_sl = get_options_from_transport_options_line("hit it!", NULL); options_sl = get_options_from_transport_options_line("hit it!", NULL);
test_assert(!options_sl); tt_assert(!options_sl);
} }
{ /* correct line, but wrong transport specified */ { /* correct line, but wrong transport specified */
options_sl = options_sl =
get_options_from_transport_options_line("trebuchet k=v", "rook"); get_options_from_transport_options_line("trebuchet k=v", "rook");
test_assert(!options_sl); tt_assert(!options_sl);
} }
{ /* correct -- no transport specified */ { /* correct -- no transport specified */
@ -512,8 +512,8 @@ test_config_parse_transport_options_line(void *arg)
options_sl = options_sl =
get_options_from_transport_options_line("rook ladi=dadi weliketo=party", get_options_from_transport_options_line("rook ladi=dadi weliketo=party",
NULL); NULL);
test_assert(options_sl); tt_assert(options_sl);
test_assert(smartlist_strings_eq(options_sl, sl_tmp)); tt_assert(smartlist_strings_eq(options_sl, sl_tmp));
SMARTLIST_FOREACH(sl_tmp, char *, s, tor_free(s)); SMARTLIST_FOREACH(sl_tmp, char *, s, tor_free(s));
smartlist_free(sl_tmp); smartlist_free(sl_tmp);
@ -531,8 +531,8 @@ test_config_parse_transport_options_line(void *arg)
options_sl = options_sl =
get_options_from_transport_options_line("rook ladi=dadi weliketo=party", get_options_from_transport_options_line("rook ladi=dadi weliketo=party",
"rook"); "rook");
test_assert(options_sl); tt_assert(options_sl);
test_assert(smartlist_strings_eq(options_sl, sl_tmp)); tt_assert(smartlist_strings_eq(options_sl, sl_tmp));
SMARTLIST_FOREACH(sl_tmp, char *, s, tor_free(s)); SMARTLIST_FOREACH(sl_tmp, char *, s, tor_free(s));
smartlist_free(sl_tmp); smartlist_free(sl_tmp);
sl_tmp = NULL; sl_tmp = NULL;
@ -576,7 +576,7 @@ test_config_fix_my_family(void *arg)
TT_FAIL(("options_validate failed: %s", err)); TT_FAIL(("options_validate failed: %s", err));
} }
test_streq(options->MyFamily, "$1111111111111111111111111111111111111111, " tt_str_op(options->MyFamily,==, "$1111111111111111111111111111111111111111, "
"$1111111111111111111111111111111111111112, " "$1111111111111111111111111111111111111112, "
"$1111111111111111111111111111111111111113"); "$1111111111111111111111111111111111111113");

View File

@ -61,22 +61,22 @@ test_container_smartlist_basic(void)
smartlist_insert(sl, 1, v22); smartlist_insert(sl, 1, v22);
smartlist_insert(sl, 0, v0); smartlist_insert(sl, 0, v0);
smartlist_insert(sl, 5, v555); smartlist_insert(sl, 5, v555);
test_eq_ptr(v0, smartlist_get(sl,0)); tt_ptr_op(v0,==, smartlist_get(sl,0));
test_eq_ptr(v1, smartlist_get(sl,1)); tt_ptr_op(v1,==, smartlist_get(sl,1));
test_eq_ptr(v22, smartlist_get(sl,2)); tt_ptr_op(v22,==, smartlist_get(sl,2));
test_eq_ptr(v3, smartlist_get(sl,3)); tt_ptr_op(v3,==, smartlist_get(sl,3));
test_eq_ptr(v4, smartlist_get(sl,4)); tt_ptr_op(v4,==, smartlist_get(sl,4));
test_eq_ptr(v555, smartlist_get(sl,5)); tt_ptr_op(v555,==, smartlist_get(sl,5));
/* Try deleting in the middle. */ /* Try deleting in the middle. */
smartlist_del(sl, 1); smartlist_del(sl, 1);
test_eq_ptr(v555, smartlist_get(sl, 1)); tt_ptr_op(v555,==, smartlist_get(sl, 1));
/* Try deleting at the end. */ /* Try deleting at the end. */
smartlist_del(sl, 4); smartlist_del(sl, 4);
test_eq(4, smartlist_len(sl)); tt_int_op(4,==, smartlist_len(sl));
/* test isin. */ /* test isin. */
test_assert(smartlist_contains(sl, v3)); tt_assert(smartlist_contains(sl, v3));
test_assert(!smartlist_contains(sl, v99)); tt_assert(!smartlist_contains(sl, v99));
done: done:
smartlist_free(sl); smartlist_free(sl);
@ -99,191 +99,191 @@ test_container_smartlist_strings(void)
size_t sz; size_t sz;
/* Test split and join */ /* Test split and join */
test_eq(0, smartlist_len(sl)); tt_int_op(0,==, smartlist_len(sl));
smartlist_split_string(sl, "abc", ":", 0, 0); smartlist_split_string(sl, "abc", ":", 0, 0);
test_eq(1, smartlist_len(sl)); tt_int_op(1,==, smartlist_len(sl));
test_streq("abc", smartlist_get(sl, 0)); tt_str_op("abc",==, smartlist_get(sl, 0));
smartlist_split_string(sl, "a::bc::", "::", 0, 0); smartlist_split_string(sl, "a::bc::", "::", 0, 0);
test_eq(4, smartlist_len(sl)); tt_int_op(4,==, smartlist_len(sl));
test_streq("a", smartlist_get(sl, 1)); tt_str_op("a",==, smartlist_get(sl, 1));
test_streq("bc", smartlist_get(sl, 2)); tt_str_op("bc",==, smartlist_get(sl, 2));
test_streq("", smartlist_get(sl, 3)); tt_str_op("",==, smartlist_get(sl, 3));
cp_alloc = smartlist_join_strings(sl, "", 0, NULL); cp_alloc = smartlist_join_strings(sl, "", 0, NULL);
test_streq(cp_alloc, "abcabc"); tt_str_op(cp_alloc,==, "abcabc");
tor_free(cp_alloc); tor_free(cp_alloc);
cp_alloc = smartlist_join_strings(sl, "!", 0, NULL); cp_alloc = smartlist_join_strings(sl, "!", 0, NULL);
test_streq(cp_alloc, "abc!a!bc!"); tt_str_op(cp_alloc,==, "abc!a!bc!");
tor_free(cp_alloc); tor_free(cp_alloc);
cp_alloc = smartlist_join_strings(sl, "XY", 0, NULL); cp_alloc = smartlist_join_strings(sl, "XY", 0, NULL);
test_streq(cp_alloc, "abcXYaXYbcXY"); tt_str_op(cp_alloc,==, "abcXYaXYbcXY");
tor_free(cp_alloc); tor_free(cp_alloc);
cp_alloc = smartlist_join_strings(sl, "XY", 1, NULL); cp_alloc = smartlist_join_strings(sl, "XY", 1, NULL);
test_streq(cp_alloc, "abcXYaXYbcXYXY"); tt_str_op(cp_alloc,==, "abcXYaXYbcXYXY");
tor_free(cp_alloc); tor_free(cp_alloc);
cp_alloc = smartlist_join_strings(sl, "", 1, NULL); cp_alloc = smartlist_join_strings(sl, "", 1, NULL);
test_streq(cp_alloc, "abcabc"); tt_str_op(cp_alloc,==, "abcabc");
tor_free(cp_alloc); tor_free(cp_alloc);
smartlist_split_string(sl, "/def/ /ghijk", "/", 0, 0); smartlist_split_string(sl, "/def/ /ghijk", "/", 0, 0);
test_eq(8, smartlist_len(sl)); tt_int_op(8,==, smartlist_len(sl));
test_streq("", smartlist_get(sl, 4)); tt_str_op("",==, smartlist_get(sl, 4));
test_streq("def", smartlist_get(sl, 5)); tt_str_op("def",==, smartlist_get(sl, 5));
test_streq(" ", smartlist_get(sl, 6)); tt_str_op(" ",==, smartlist_get(sl, 6));
test_streq("ghijk", smartlist_get(sl, 7)); tt_str_op("ghijk",==, smartlist_get(sl, 7));
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp)); SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
smartlist_clear(sl); smartlist_clear(sl);
smartlist_split_string(sl, "a,bbd,cdef", ",", SPLIT_SKIP_SPACE, 0); smartlist_split_string(sl, "a,bbd,cdef", ",", SPLIT_SKIP_SPACE, 0);
test_eq(3, smartlist_len(sl)); tt_int_op(3,==, smartlist_len(sl));
test_streq("a", smartlist_get(sl,0)); tt_str_op("a",==, smartlist_get(sl,0));
test_streq("bbd", smartlist_get(sl,1)); tt_str_op("bbd",==, smartlist_get(sl,1));
test_streq("cdef", smartlist_get(sl,2)); tt_str_op("cdef",==, smartlist_get(sl,2));
smartlist_split_string(sl, " z <> zhasd <> <> bnud<> ", "<>", smartlist_split_string(sl, " z <> zhasd <> <> bnud<> ", "<>",
SPLIT_SKIP_SPACE, 0); SPLIT_SKIP_SPACE, 0);
test_eq(8, smartlist_len(sl)); tt_int_op(8,==, smartlist_len(sl));
test_streq("z", smartlist_get(sl,3)); tt_str_op("z",==, smartlist_get(sl,3));
test_streq("zhasd", smartlist_get(sl,4)); tt_str_op("zhasd",==, smartlist_get(sl,4));
test_streq("", smartlist_get(sl,5)); tt_str_op("",==, smartlist_get(sl,5));
test_streq("bnud", smartlist_get(sl,6)); tt_str_op("bnud",==, smartlist_get(sl,6));
test_streq("", smartlist_get(sl,7)); tt_str_op("",==, smartlist_get(sl,7));
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp)); SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
smartlist_clear(sl); smartlist_clear(sl);
smartlist_split_string(sl, " ab\tc \td ef ", NULL, smartlist_split_string(sl, " ab\tc \td ef ", NULL,
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0); SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
test_eq(4, smartlist_len(sl)); tt_int_op(4,==, smartlist_len(sl));
test_streq("ab", smartlist_get(sl,0)); tt_str_op("ab",==, smartlist_get(sl,0));
test_streq("c", smartlist_get(sl,1)); tt_str_op("c",==, smartlist_get(sl,1));
test_streq("d", smartlist_get(sl,2)); tt_str_op("d",==, smartlist_get(sl,2));
test_streq("ef", smartlist_get(sl,3)); tt_str_op("ef",==, smartlist_get(sl,3));
smartlist_split_string(sl, "ghi\tj", NULL, smartlist_split_string(sl, "ghi\tj", NULL,
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0); SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
test_eq(6, smartlist_len(sl)); tt_int_op(6,==, smartlist_len(sl));
test_streq("ghi", smartlist_get(sl,4)); tt_str_op("ghi",==, smartlist_get(sl,4));
test_streq("j", smartlist_get(sl,5)); tt_str_op("j",==, smartlist_get(sl,5));
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp)); SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
smartlist_clear(sl); smartlist_clear(sl);
cp_alloc = smartlist_join_strings(sl, "XY", 0, NULL); cp_alloc = smartlist_join_strings(sl, "XY", 0, NULL);
test_streq(cp_alloc, ""); tt_str_op(cp_alloc,==, "");
tor_free(cp_alloc); tor_free(cp_alloc);
cp_alloc = smartlist_join_strings(sl, "XY", 1, NULL); cp_alloc = smartlist_join_strings(sl, "XY", 1, NULL);
test_streq(cp_alloc, "XY"); tt_str_op(cp_alloc,==, "XY");
tor_free(cp_alloc); tor_free(cp_alloc);
smartlist_split_string(sl, " z <> zhasd <> <> bnud<> ", "<>", smartlist_split_string(sl, " z <> zhasd <> <> bnud<> ", "<>",
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0); SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
test_eq(3, smartlist_len(sl)); tt_int_op(3,==, smartlist_len(sl));
test_streq("z", smartlist_get(sl, 0)); tt_str_op("z",==, smartlist_get(sl, 0));
test_streq("zhasd", smartlist_get(sl, 1)); tt_str_op("zhasd",==, smartlist_get(sl, 1));
test_streq("bnud", smartlist_get(sl, 2)); tt_str_op("bnud",==, smartlist_get(sl, 2));
smartlist_split_string(sl, " z <> zhasd <> <> bnud<> ", "<>", smartlist_split_string(sl, " z <> zhasd <> <> bnud<> ", "<>",
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 2); SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 2);
test_eq(5, smartlist_len(sl)); tt_int_op(5,==, smartlist_len(sl));
test_streq("z", smartlist_get(sl, 3)); tt_str_op("z",==, smartlist_get(sl, 3));
test_streq("zhasd <> <> bnud<>", smartlist_get(sl, 4)); tt_str_op("zhasd <> <> bnud<>",==, smartlist_get(sl, 4));
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp)); SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
smartlist_clear(sl); smartlist_clear(sl);
smartlist_split_string(sl, "abcd\n", "\n", smartlist_split_string(sl, "abcd\n", "\n",
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0); SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
test_eq(1, smartlist_len(sl)); tt_int_op(1,==, smartlist_len(sl));
test_streq("abcd", smartlist_get(sl, 0)); tt_str_op("abcd",==, smartlist_get(sl, 0));
smartlist_split_string(sl, "efgh", "\n", smartlist_split_string(sl, "efgh", "\n",
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0); SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
test_eq(2, smartlist_len(sl)); tt_int_op(2,==, smartlist_len(sl));
test_streq("efgh", smartlist_get(sl, 1)); tt_str_op("efgh",==, smartlist_get(sl, 1));
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp)); SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
smartlist_clear(sl); smartlist_clear(sl);
/* Test swapping, shuffling, and sorting. */ /* Test swapping, shuffling, and sorting. */
smartlist_split_string(sl, "the,onion,router,by,arma,and,nickm", ",", 0, 0); smartlist_split_string(sl, "the,onion,router,by,arma,and,nickm", ",", 0, 0);
test_eq(7, smartlist_len(sl)); tt_int_op(7,==, smartlist_len(sl));
smartlist_sort(sl, compare_strs_); smartlist_sort(sl, compare_strs_);
cp_alloc = smartlist_join_strings(sl, ",", 0, NULL); cp_alloc = smartlist_join_strings(sl, ",", 0, NULL);
test_streq(cp_alloc,"and,arma,by,nickm,onion,router,the"); tt_str_op(cp_alloc,==, "and,arma,by,nickm,onion,router,the");
tor_free(cp_alloc); tor_free(cp_alloc);
smartlist_swap(sl, 1, 5); smartlist_swap(sl, 1, 5);
cp_alloc = smartlist_join_strings(sl, ",", 0, NULL); cp_alloc = smartlist_join_strings(sl, ",", 0, NULL);
test_streq(cp_alloc,"and,router,by,nickm,onion,arma,the"); tt_str_op(cp_alloc,==, "and,router,by,nickm,onion,arma,the");
tor_free(cp_alloc); tor_free(cp_alloc);
smartlist_shuffle(sl); smartlist_shuffle(sl);
test_eq(7, smartlist_len(sl)); tt_int_op(7,==, smartlist_len(sl));
test_assert(smartlist_contains_string(sl, "and")); tt_assert(smartlist_contains_string(sl, "and"));
test_assert(smartlist_contains_string(sl, "router")); tt_assert(smartlist_contains_string(sl, "router"));
test_assert(smartlist_contains_string(sl, "by")); tt_assert(smartlist_contains_string(sl, "by"));
test_assert(smartlist_contains_string(sl, "nickm")); tt_assert(smartlist_contains_string(sl, "nickm"));
test_assert(smartlist_contains_string(sl, "onion")); tt_assert(smartlist_contains_string(sl, "onion"));
test_assert(smartlist_contains_string(sl, "arma")); tt_assert(smartlist_contains_string(sl, "arma"));
test_assert(smartlist_contains_string(sl, "the")); tt_assert(smartlist_contains_string(sl, "the"));
/* Test bsearch. */ /* Test bsearch. */
smartlist_sort(sl, compare_strs_); smartlist_sort(sl, compare_strs_);
test_streq("nickm", smartlist_bsearch(sl, "zNicKM", tt_str_op("nickm",==, smartlist_bsearch(sl, "zNicKM",
compare_without_first_ch_)); compare_without_first_ch_));
test_streq("and", smartlist_bsearch(sl, " AND", compare_without_first_ch_)); tt_str_op("and",==, smartlist_bsearch(sl, " AND", compare_without_first_ch_));
test_eq_ptr(NULL, smartlist_bsearch(sl, " ANz", compare_without_first_ch_)); tt_ptr_op(NULL,==, smartlist_bsearch(sl, " ANz", compare_without_first_ch_));
/* Test bsearch_idx */ /* Test bsearch_idx */
{ {
int f; int f;
smartlist_t *tmp = NULL; smartlist_t *tmp = NULL;
test_eq(0, smartlist_bsearch_idx(sl," aaa",compare_without_first_ch_,&f)); tt_int_op(0,==, smartlist_bsearch_idx(sl," aaa",compare_without_first_ch_,&f));
test_eq(f, 0); tt_int_op(f,==, 0);
test_eq(0, smartlist_bsearch_idx(sl," and",compare_without_first_ch_,&f)); tt_int_op(0,==, smartlist_bsearch_idx(sl," and",compare_without_first_ch_,&f));
test_eq(f, 1); tt_int_op(f,==, 1);
test_eq(1, smartlist_bsearch_idx(sl," arm",compare_without_first_ch_,&f)); tt_int_op(1,==, smartlist_bsearch_idx(sl," arm",compare_without_first_ch_,&f));
test_eq(f, 0); tt_int_op(f,==, 0);
test_eq(1, smartlist_bsearch_idx(sl," arma",compare_without_first_ch_,&f)); tt_int_op(1,==, smartlist_bsearch_idx(sl," arma",compare_without_first_ch_,&f));
test_eq(f, 1); tt_int_op(f,==, 1);
test_eq(2, smartlist_bsearch_idx(sl," armb",compare_without_first_ch_,&f)); tt_int_op(2,==, smartlist_bsearch_idx(sl," armb",compare_without_first_ch_,&f));
test_eq(f, 0); tt_int_op(f,==, 0);
test_eq(7, smartlist_bsearch_idx(sl," zzzz",compare_without_first_ch_,&f)); tt_int_op(7,==, smartlist_bsearch_idx(sl," zzzz",compare_without_first_ch_,&f));
test_eq(f, 0); tt_int_op(f,==, 0);
/* Test trivial cases for list of length 0 or 1 */ /* Test trivial cases for list of length 0 or 1 */
tmp = smartlist_new(); tmp = smartlist_new();
test_eq(0, smartlist_bsearch_idx(tmp, "foo", tt_int_op(0,==, smartlist_bsearch_idx(tmp, "foo",
compare_strs_for_bsearch_, &f)); compare_strs_for_bsearch_, &f));
test_eq(f, 0); tt_int_op(f,==, 0);
smartlist_insert(tmp, 0, (void *)("bar")); smartlist_insert(tmp, 0, (void *)("bar"));
test_eq(1, smartlist_bsearch_idx(tmp, "foo", tt_int_op(1,==, smartlist_bsearch_idx(tmp, "foo",
compare_strs_for_bsearch_, &f)); compare_strs_for_bsearch_, &f));
test_eq(f, 0); tt_int_op(f,==, 0);
test_eq(0, smartlist_bsearch_idx(tmp, "aaa", tt_int_op(0,==, smartlist_bsearch_idx(tmp, "aaa",
compare_strs_for_bsearch_, &f)); compare_strs_for_bsearch_, &f));
test_eq(f, 0); tt_int_op(f,==, 0);
test_eq(0, smartlist_bsearch_idx(tmp, "bar", tt_int_op(0,==, smartlist_bsearch_idx(tmp, "bar",
compare_strs_for_bsearch_, &f)); compare_strs_for_bsearch_, &f));
test_eq(f, 1); tt_int_op(f,==, 1);
/* ... and one for length 2 */ /* ... and one for length 2 */
smartlist_insert(tmp, 1, (void *)("foo")); smartlist_insert(tmp, 1, (void *)("foo"));
test_eq(1, smartlist_bsearch_idx(tmp, "foo", tt_int_op(1,==, smartlist_bsearch_idx(tmp, "foo",
compare_strs_for_bsearch_, &f)); compare_strs_for_bsearch_, &f));
test_eq(f, 1); tt_int_op(f,==, 1);
test_eq(2, smartlist_bsearch_idx(tmp, "goo", tt_int_op(2,==, smartlist_bsearch_idx(tmp, "goo",
compare_strs_for_bsearch_, &f)); compare_strs_for_bsearch_, &f));
test_eq(f, 0); tt_int_op(f,==, 0);
smartlist_free(tmp); smartlist_free(tmp);
} }
/* Test reverse() and pop_last() */ /* Test reverse() and pop_last() */
smartlist_reverse(sl); smartlist_reverse(sl);
cp_alloc = smartlist_join_strings(sl, ",", 0, NULL); cp_alloc = smartlist_join_strings(sl, ",", 0, NULL);
test_streq(cp_alloc,"the,router,onion,nickm,by,arma,and"); tt_str_op(cp_alloc,==, "the,router,onion,nickm,by,arma,and");
tor_free(cp_alloc); tor_free(cp_alloc);
cp_alloc = smartlist_pop_last(sl); cp_alloc = smartlist_pop_last(sl);
test_streq(cp_alloc, "and"); tt_str_op(cp_alloc,==, "and");
tor_free(cp_alloc); tor_free(cp_alloc);
test_eq(smartlist_len(sl), 6); tt_int_op(smartlist_len(sl),==, 6);
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp)); SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
smartlist_clear(sl); smartlist_clear(sl);
cp_alloc = smartlist_pop_last(sl); cp_alloc = smartlist_pop_last(sl);
test_eq_ptr(cp_alloc, NULL); tt_ptr_op(cp_alloc,==, NULL);
/* Test uniq() */ /* Test uniq() */
smartlist_split_string(sl, smartlist_split_string(sl,
@ -292,16 +292,16 @@ test_container_smartlist_strings(void)
smartlist_sort(sl, compare_strs_); smartlist_sort(sl, compare_strs_);
smartlist_uniq(sl, compare_strs_, tor_free_); smartlist_uniq(sl, compare_strs_, tor_free_);
cp_alloc = smartlist_join_strings(sl, ",", 0, NULL); cp_alloc = smartlist_join_strings(sl, ",", 0, NULL);
test_streq(cp_alloc, "50,a,canal,man,noon,panama,plan,radar"); tt_str_op(cp_alloc,==, "50,a,canal,man,noon,panama,plan,radar");
tor_free(cp_alloc); tor_free(cp_alloc);
/* Test contains_string, contains_string_case and contains_int_as_string */ /* Test contains_string, contains_string_case and contains_int_as_string */
test_assert(smartlist_contains_string(sl, "noon")); tt_assert(smartlist_contains_string(sl, "noon"));
test_assert(!smartlist_contains_string(sl, "noonoon")); tt_assert(!smartlist_contains_string(sl, "noonoon"));
test_assert(smartlist_contains_string_case(sl, "nOOn")); tt_assert(smartlist_contains_string_case(sl, "nOOn"));
test_assert(!smartlist_contains_string_case(sl, "nooNooN")); tt_assert(!smartlist_contains_string_case(sl, "nooNooN"));
test_assert(smartlist_contains_int_as_string(sl, 50)); tt_assert(smartlist_contains_int_as_string(sl, 50));
test_assert(!smartlist_contains_int_as_string(sl, 60)); tt_assert(!smartlist_contains_int_as_string(sl, 60));
/* Test smartlist_choose */ /* Test smartlist_choose */
{ {
@ -309,7 +309,7 @@ test_container_smartlist_strings(void)
int allsame = 1; int allsame = 1;
int allin = 1; int allin = 1;
void *first = smartlist_choose(sl); void *first = smartlist_choose(sl);
test_assert(smartlist_contains(sl, first)); tt_assert(smartlist_contains(sl, first));
for (i = 0; i < 100; ++i) { for (i = 0; i < 100; ++i) {
void *second = smartlist_choose(sl); void *second = smartlist_choose(sl);
if (second != first) if (second != first)
@ -317,8 +317,8 @@ test_container_smartlist_strings(void)
if (!smartlist_contains(sl, second)) if (!smartlist_contains(sl, second))
allin = 0; allin = 0;
} }
test_assert(!allsame); tt_assert(!allsame);
test_assert(allin); tt_assert(allin);
} }
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp)); SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
smartlist_clear(sl); smartlist_clear(sl);
@ -328,17 +328,17 @@ test_container_smartlist_strings(void)
"Some say the Earth will end in ice and some in fire", "Some say the Earth will end in ice and some in fire",
" ", 0, 0); " ", 0, 0);
cp = smartlist_get(sl, 4); cp = smartlist_get(sl, 4);
test_streq(cp, "will"); tt_str_op(cp,==, "will");
smartlist_add(sl, cp); smartlist_add(sl, cp);
smartlist_remove(sl, cp); smartlist_remove(sl, cp);
tor_free(cp); tor_free(cp);
cp_alloc = smartlist_join_strings(sl, ",", 0, NULL); cp_alloc = smartlist_join_strings(sl, ",", 0, NULL);
test_streq(cp_alloc, "Some,say,the,Earth,fire,end,in,ice,and,some,in"); tt_str_op(cp_alloc,==, "Some,say,the,Earth,fire,end,in,ice,and,some,in");
tor_free(cp_alloc); tor_free(cp_alloc);
smartlist_string_remove(sl, "in"); smartlist_string_remove(sl, "in");
cp_alloc = smartlist_join_strings2(sl, "+XX", 1, 0, &sz); cp_alloc = smartlist_join_strings2(sl, "+XX", 1, 0, &sz);
test_streq(cp_alloc, "Some+say+the+Earth+fire+end+some+ice+and"); tt_str_op(cp_alloc,==, "Some+say+the+Earth+fire+end+some+ice+and");
test_eq((int)sz, 40); tt_int_op((int)sz,==, 40);
done: done:
@ -365,7 +365,7 @@ test_container_smartlist_overlap(void)
/* add_all */ /* add_all */
smartlist_add_all(ints, odds); smartlist_add_all(ints, odds);
smartlist_add_all(ints, evens); smartlist_add_all(ints, evens);
test_eq(smartlist_len(ints), 10); tt_int_op(smartlist_len(ints),==, 10);
smartlist_add(primes, (void*)2); smartlist_add(primes, (void*)2);
smartlist_add(primes, (void*)3); smartlist_add(primes, (void*)3);
@ -373,24 +373,24 @@ test_container_smartlist_overlap(void)
smartlist_add(primes, (void*)7); smartlist_add(primes, (void*)7);
/* overlap */ /* overlap */
test_assert(smartlist_overlap(ints, odds)); tt_assert(smartlist_overlap(ints, odds));
test_assert(smartlist_overlap(odds, primes)); tt_assert(smartlist_overlap(odds, primes));
test_assert(smartlist_overlap(evens, primes)); tt_assert(smartlist_overlap(evens, primes));
test_assert(!smartlist_overlap(odds, evens)); tt_assert(!smartlist_overlap(odds, evens));
/* intersect */ /* intersect */
smartlist_add_all(sl, odds); smartlist_add_all(sl, odds);
smartlist_intersect(sl, primes); smartlist_intersect(sl, primes);
test_eq(smartlist_len(sl), 3); tt_int_op(smartlist_len(sl),==, 3);
test_assert(smartlist_contains(sl, (void*)3)); tt_assert(smartlist_contains(sl, (void*)3));
test_assert(smartlist_contains(sl, (void*)5)); tt_assert(smartlist_contains(sl, (void*)5));
test_assert(smartlist_contains(sl, (void*)7)); tt_assert(smartlist_contains(sl, (void*)7));
/* subtract */ /* subtract */
smartlist_add_all(sl, primes); smartlist_add_all(sl, primes);
smartlist_subtract(sl, odds); smartlist_subtract(sl, odds);
test_eq(smartlist_len(sl), 1); tt_int_op(smartlist_len(sl),==, 1);
test_assert(smartlist_contains(sl, (void*)2)); tt_assert(smartlist_contains(sl, (void*)2));
done: done:
smartlist_free(odds); smartlist_free(odds);
@ -410,23 +410,23 @@ test_container_smartlist_digests(void)
smartlist_add(sl, tor_memdup("AAAAAAAAAAAAAAAAAAAA", DIGEST_LEN)); smartlist_add(sl, tor_memdup("AAAAAAAAAAAAAAAAAAAA", DIGEST_LEN));
smartlist_add(sl, tor_memdup("\00090AAB2AAAAaasdAAAAA", DIGEST_LEN)); smartlist_add(sl, tor_memdup("\00090AAB2AAAAaasdAAAAA", DIGEST_LEN));
smartlist_add(sl, tor_memdup("\00090AAB2AAAAaasdAAAAA", DIGEST_LEN)); smartlist_add(sl, tor_memdup("\00090AAB2AAAAaasdAAAAA", DIGEST_LEN));
test_eq(0, smartlist_contains_digest(NULL, "AAAAAAAAAAAAAAAAAAAA")); tt_int_op(0,==, smartlist_contains_digest(NULL, "AAAAAAAAAAAAAAAAAAAA"));
test_assert(smartlist_contains_digest(sl, "AAAAAAAAAAAAAAAAAAAA")); tt_assert(smartlist_contains_digest(sl, "AAAAAAAAAAAAAAAAAAAA"));
test_assert(smartlist_contains_digest(sl, "\00090AAB2AAAAaasdAAAAA")); tt_assert(smartlist_contains_digest(sl, "\00090AAB2AAAAaasdAAAAA"));
test_eq(0, smartlist_contains_digest(sl, "\00090AAB2AAABaasdAAAAA")); tt_int_op(0,==, smartlist_contains_digest(sl, "\00090AAB2AAABaasdAAAAA"));
/* sort digests */ /* sort digests */
smartlist_sort_digests(sl); smartlist_sort_digests(sl);
test_memeq(smartlist_get(sl, 0), "\00090AAB2AAAAaasdAAAAA", DIGEST_LEN); tt_mem_op(smartlist_get(sl, 0),==, "\00090AAB2AAAAaasdAAAAA", DIGEST_LEN);
test_memeq(smartlist_get(sl, 1), "\00090AAB2AAAAaasdAAAAA", DIGEST_LEN); tt_mem_op(smartlist_get(sl, 1),==, "\00090AAB2AAAAaasdAAAAA", DIGEST_LEN);
test_memeq(smartlist_get(sl, 2), "AAAAAAAAAAAAAAAAAAAA", DIGEST_LEN); tt_mem_op(smartlist_get(sl, 2),==, "AAAAAAAAAAAAAAAAAAAA", DIGEST_LEN);
test_eq(3, smartlist_len(sl)); tt_int_op(3,==, smartlist_len(sl));
/* uniq_digests */ /* uniq_digests */
smartlist_uniq_digests(sl); smartlist_uniq_digests(sl);
test_eq(2, smartlist_len(sl)); tt_int_op(2,==, smartlist_len(sl));
test_memeq(smartlist_get(sl, 0), "\00090AAB2AAAAaasdAAAAA", DIGEST_LEN); tt_mem_op(smartlist_get(sl, 0),==, "\00090AAB2AAAAaasdAAAAA", DIGEST_LEN);
test_memeq(smartlist_get(sl, 1), "AAAAAAAAAAAAAAAAAAAA", DIGEST_LEN); tt_mem_op(smartlist_get(sl, 1),==, "AAAAAAAAAAAAAAAAAAAA", DIGEST_LEN);
done: done:
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp)); SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
@ -457,21 +457,21 @@ test_container_smartlist_join(void)
sl2, char *, cp2, sl2, char *, cp2,
strcmp(cp1,cp2), strcmp(cp1,cp2),
smartlist_add(sl3, cp2)) { smartlist_add(sl3, cp2)) {
test_streq(cp1, cp2); tt_str_op(cp1,==, cp2);
smartlist_add(sl4, cp1); smartlist_add(sl4, cp1);
} SMARTLIST_FOREACH_JOIN_END(cp1, cp2); } SMARTLIST_FOREACH_JOIN_END(cp1, cp2);
SMARTLIST_FOREACH(sl3, const char *, cp, SMARTLIST_FOREACH(sl3, const char *, cp,
test_assert(smartlist_contains(sl2, cp) && tt_assert(smartlist_contains(sl2, cp) &&
!smartlist_contains_string(sl, cp))); !smartlist_contains_string(sl, cp)));
SMARTLIST_FOREACH(sl4, const char *, cp, SMARTLIST_FOREACH(sl4, const char *, cp,
test_assert(smartlist_contains(sl, cp) && tt_assert(smartlist_contains(sl, cp) &&
smartlist_contains_string(sl2, cp))); smartlist_contains_string(sl2, cp)));
joined = smartlist_join_strings(sl3, ",", 0, NULL); joined = smartlist_join_strings(sl3, ",", 0, NULL);
test_streq(joined, "Anemias,Anemias,Crossbowmen,Work"); tt_str_op(joined,==, "Anemias,Anemias,Crossbowmen,Work");
tor_free(joined); tor_free(joined);
joined = smartlist_join_strings(sl4, ",", 0, NULL); joined = smartlist_join_strings(sl4, ",", 0, NULL);
test_streq(joined, "Ambush,Anchorman,Anchorman,Bacon,Inhumane,Insurance," tt_str_op(joined,==, "Ambush,Anchorman,Anchorman,Bacon,Inhumane,Insurance,"
"Knish,Know,Manners,Manners,Maraschinos,Wombats,Wombats"); "Knish,Know,Manners,Manners,Maraschinos,Wombats,Wombats");
tor_free(joined); tor_free(joined);
@ -538,12 +538,12 @@ test_container_bitarray(void)
int i, j, ok=1; int i, j, ok=1;
ba = bitarray_init_zero(1); ba = bitarray_init_zero(1);
test_assert(ba); tt_assert(ba);
test_assert(! bitarray_is_set(ba, 0)); tt_assert(! bitarray_is_set(ba, 0));
bitarray_set(ba, 0); bitarray_set(ba, 0);
test_assert(bitarray_is_set(ba, 0)); tt_assert(bitarray_is_set(ba, 0));
bitarray_clear(ba, 0); bitarray_clear(ba, 0);
test_assert(! bitarray_is_set(ba, 0)); tt_assert(! bitarray_is_set(ba, 0));
bitarray_free(ba); bitarray_free(ba);
ba = bitarray_init_zero(1023); ba = bitarray_init_zero(1023);
@ -558,7 +558,7 @@ test_container_bitarray(void)
if (!bool_eq(bitarray_is_set(ba, j), j%i)) if (!bool_eq(bitarray_is_set(ba, j), j%i))
ok = 0; ok = 0;
} }
test_assert(ok); tt_assert(ok);
if (i < 7) if (i < 7)
++i; ++i;
else if (i == 28) else if (i == 28)
@ -592,19 +592,19 @@ test_container_digestset(void)
SMARTLIST_FOREACH(included, const char *, cp, SMARTLIST_FOREACH(included, const char *, cp,
if (digestset_contains(set, cp)) if (digestset_contains(set, cp))
ok = 0); ok = 0);
test_assert(ok); tt_assert(ok);
SMARTLIST_FOREACH(included, const char *, cp, SMARTLIST_FOREACH(included, const char *, cp,
digestset_add(set, cp)); digestset_add(set, cp));
SMARTLIST_FOREACH(included, const char *, cp, SMARTLIST_FOREACH(included, const char *, cp,
if (!digestset_contains(set, cp)) if (!digestset_contains(set, cp))
ok = 0); ok = 0);
test_assert(ok); tt_assert(ok);
for (i = 0; i < 1000; ++i) { for (i = 0; i < 1000; ++i) {
crypto_rand(d, DIGEST_LEN); crypto_rand(d, DIGEST_LEN);
if (digestset_contains(set, d)) if (digestset_contains(set, d))
++false_positives; ++false_positives;
} }
test_assert(false_positives < 50); /* Should be far lower. */ tt_int_op(50, >, false_positives); /* Should be far lower. */
done: done:
if (set) if (set)
@ -665,31 +665,31 @@ test_container_pqueue(void)
OK(); OK();
test_eq(smartlist_len(sl), 11); tt_int_op(smartlist_len(sl),==, 11);
test_eq_ptr(smartlist_get(sl, 0), &apples); tt_ptr_op(smartlist_get(sl, 0),==, &apples);
test_eq_ptr(smartlist_pqueue_pop(sl, cmp, offset), &apples); tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &apples);
test_eq(smartlist_len(sl), 10); tt_int_op(smartlist_len(sl),==, 10);
OK(); OK();
test_eq_ptr(smartlist_pqueue_pop(sl, cmp, offset), &cows); tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &cows);
test_eq_ptr(smartlist_pqueue_pop(sl, cmp, offset), &daschunds); tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &daschunds);
smartlist_pqueue_add(sl, cmp, offset, &chinchillas); smartlist_pqueue_add(sl, cmp, offset, &chinchillas);
OK(); OK();
smartlist_pqueue_add(sl, cmp, offset, &fireflies); smartlist_pqueue_add(sl, cmp, offset, &fireflies);
OK(); OK();
test_eq_ptr(smartlist_pqueue_pop(sl, cmp, offset), &chinchillas); tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &chinchillas);
test_eq_ptr(smartlist_pqueue_pop(sl, cmp, offset), &eggplants); tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &eggplants);
test_eq_ptr(smartlist_pqueue_pop(sl, cmp, offset), &fireflies); tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &fireflies);
OK(); OK();
test_eq_ptr(smartlist_pqueue_pop(sl, cmp, offset), &fish); tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &fish);
test_eq_ptr(smartlist_pqueue_pop(sl, cmp, offset), &frogs); tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &frogs);
test_eq_ptr(smartlist_pqueue_pop(sl, cmp, offset), &lobsters); tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &lobsters);
test_eq_ptr(smartlist_pqueue_pop(sl, cmp, offset), &roquefort); tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &roquefort);
OK(); OK();
test_eq(smartlist_len(sl), 3); tt_int_op(smartlist_len(sl),==, 3);
test_eq_ptr(smartlist_pqueue_pop(sl, cmp, offset), &squid); tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &squid);
test_eq_ptr(smartlist_pqueue_pop(sl, cmp, offset), &weissbier); tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &weissbier);
test_eq_ptr(smartlist_pqueue_pop(sl, cmp, offset), &zebras); tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &zebras);
test_eq(smartlist_len(sl), 0); tt_int_op(smartlist_len(sl),==, 0);
OK(); OK();
/* Now test remove. */ /* Now test remove. */
@ -699,21 +699,21 @@ test_container_pqueue(void)
smartlist_pqueue_add(sl, cmp, offset, &apples); smartlist_pqueue_add(sl, cmp, offset, &apples);
smartlist_pqueue_add(sl, cmp, offset, &squid); smartlist_pqueue_add(sl, cmp, offset, &squid);
smartlist_pqueue_add(sl, cmp, offset, &zebras); smartlist_pqueue_add(sl, cmp, offset, &zebras);
test_eq(smartlist_len(sl), 6); tt_int_op(smartlist_len(sl),==, 6);
OK(); OK();
smartlist_pqueue_remove(sl, cmp, offset, &zebras); smartlist_pqueue_remove(sl, cmp, offset, &zebras);
test_eq(smartlist_len(sl), 5); tt_int_op(smartlist_len(sl),==, 5);
OK(); OK();
smartlist_pqueue_remove(sl, cmp, offset, &cows); smartlist_pqueue_remove(sl, cmp, offset, &cows);
test_eq(smartlist_len(sl), 4); tt_int_op(smartlist_len(sl),==, 4);
OK(); OK();
smartlist_pqueue_remove(sl, cmp, offset, &apples); smartlist_pqueue_remove(sl, cmp, offset, &apples);
test_eq(smartlist_len(sl), 3); tt_int_op(smartlist_len(sl),==, 3);
OK(); OK();
test_eq_ptr(smartlist_pqueue_pop(sl, cmp, offset), &fish); tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &fish);
test_eq_ptr(smartlist_pqueue_pop(sl, cmp, offset), &frogs); tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &frogs);
test_eq_ptr(smartlist_pqueue_pop(sl, cmp, offset), &squid); tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &squid);
test_eq(smartlist_len(sl), 0); tt_int_op(smartlist_len(sl),==, 0);
OK(); OK();
#undef OK #undef OK
@ -743,31 +743,31 @@ test_container_strmap(void)
char *v105 = tor_strdup("v105"); char *v105 = tor_strdup("v105");
map = strmap_new(); map = strmap_new();
test_assert(map); tt_assert(map);
test_eq(strmap_size(map), 0); tt_int_op(strmap_size(map),==, 0);
test_assert(strmap_isempty(map)); tt_assert(strmap_isempty(map));
v = strmap_set(map, "K1", v99); v = strmap_set(map, "K1", v99);
test_eq_ptr(v, NULL); tt_ptr_op(v,==, NULL);
test_assert(!strmap_isempty(map)); tt_assert(!strmap_isempty(map));
v = strmap_set(map, "K2", v101); v = strmap_set(map, "K2", v101);
test_eq_ptr(v, NULL); tt_ptr_op(v,==, NULL);
v = strmap_set(map, "K1", v100); v = strmap_set(map, "K1", v100);
test_eq_ptr(v, v99); tt_ptr_op(v,==, v99);
test_eq_ptr(strmap_get(map,"K1"), v100); tt_ptr_op(strmap_get(map,"K1"),==, v100);
test_eq_ptr(strmap_get(map,"K2"), v101); tt_ptr_op(strmap_get(map,"K2"),==, v101);
test_eq_ptr(strmap_get(map,"K-not-there"), NULL); tt_ptr_op(strmap_get(map,"K-not-there"),==, NULL);
strmap_assert_ok(map); strmap_assert_ok(map);
v = strmap_remove(map,"K2"); v = strmap_remove(map,"K2");
strmap_assert_ok(map); strmap_assert_ok(map);
test_eq_ptr(v, v101); tt_ptr_op(v,==, v101);
test_eq_ptr(strmap_get(map,"K2"), NULL); tt_ptr_op(strmap_get(map,"K2"),==, NULL);
test_eq_ptr(strmap_remove(map,"K2"), NULL); tt_ptr_op(strmap_remove(map,"K2"),==, NULL);
strmap_set(map, "K2", v101); strmap_set(map, "K2", v101);
strmap_set(map, "K3", v102); strmap_set(map, "K3", v102);
strmap_set(map, "K4", v103); strmap_set(map, "K4", v103);
test_eq(strmap_size(map), 4); tt_int_op(strmap_size(map),==, 4);
strmap_assert_ok(map); strmap_assert_ok(map);
strmap_set(map, "K5", v104); strmap_set(map, "K5", v104);
strmap_set(map, "K6", v105); strmap_set(map, "K6", v105);
@ -779,7 +779,7 @@ test_container_strmap(void)
while (!strmap_iter_done(iter)) { while (!strmap_iter_done(iter)) {
strmap_iter_get(iter,&k,&v); strmap_iter_get(iter,&k,&v);
smartlist_add(found_keys, tor_strdup(k)); smartlist_add(found_keys, tor_strdup(k));
test_eq_ptr(v, strmap_get(map, k)); tt_ptr_op(v,==, strmap_get(map, k));
if (!strcmp(k, "K2")) { if (!strcmp(k, "K2")) {
iter = strmap_iter_next_rmv(map,iter); iter = strmap_iter_next_rmv(map,iter);
@ -789,12 +789,12 @@ test_container_strmap(void)
} }
/* Make sure we removed K2, but not the others. */ /* Make sure we removed K2, but not the others. */
test_eq_ptr(strmap_get(map, "K2"), NULL); tt_ptr_op(strmap_get(map, "K2"),==, NULL);
test_eq_ptr(strmap_get(map, "K5"), v104); tt_ptr_op(strmap_get(map, "K5"),==, v104);
/* Make sure we visited everyone once */ /* Make sure we visited everyone once */
smartlist_sort_strings(found_keys); smartlist_sort_strings(found_keys);
visited = smartlist_join_strings(found_keys, ":", 0, NULL); visited = smartlist_join_strings(found_keys, ":", 0, NULL);
test_streq(visited, "K1:K2:K3:K4:K5:K6"); tt_str_op(visited,==, "K1:K2:K3:K4:K5:K6");
strmap_assert_ok(map); strmap_assert_ok(map);
/* Clean up after ourselves. */ /* Clean up after ourselves. */
@ -804,13 +804,13 @@ test_container_strmap(void)
/* Now try some lc functions. */ /* Now try some lc functions. */
map = strmap_new(); map = strmap_new();
strmap_set_lc(map,"Ab.C", v1); strmap_set_lc(map,"Ab.C", v1);
test_eq_ptr(strmap_get(map,"ab.c"), v1); tt_ptr_op(strmap_get(map,"ab.c"),==, v1);
strmap_assert_ok(map); strmap_assert_ok(map);
test_eq_ptr(strmap_get_lc(map,"AB.C"), v1); tt_ptr_op(strmap_get_lc(map,"AB.C"),==, v1);
test_eq_ptr(strmap_get(map,"AB.C"), NULL); tt_ptr_op(strmap_get(map,"AB.C"),==, NULL);
test_eq_ptr(strmap_remove_lc(map,"aB.C"), v1); tt_ptr_op(strmap_remove_lc(map,"aB.C"),==, v1);
strmap_assert_ok(map); strmap_assert_ok(map);
test_eq_ptr(strmap_get_lc(map,"AB.C"), NULL); tt_ptr_op(strmap_get_lc(map,"AB.C"),==, NULL);
done: done:
if (map) if (map)
@ -841,41 +841,41 @@ test_container_order_functions(void)
#define median() median_int(lst, n) #define median() median_int(lst, n)
lst[n++] = 12; lst[n++] = 12;
test_eq(12, median()); /* 12 */ tt_int_op(12,==, median()); /* 12 */
lst[n++] = 77; lst[n++] = 77;
//smartlist_shuffle(sl); //smartlist_shuffle(sl);
test_eq(12, median()); /* 12, 77 */ tt_int_op(12,==, median()); /* 12, 77 */
lst[n++] = 77; lst[n++] = 77;
//smartlist_shuffle(sl); //smartlist_shuffle(sl);
test_eq(77, median()); /* 12, 77, 77 */ tt_int_op(77,==, median()); /* 12, 77, 77 */
lst[n++] = 24; lst[n++] = 24;
test_eq(24, median()); /* 12,24,77,77 */ tt_int_op(24,==, median()); /* 12,24,77,77 */
lst[n++] = 60; lst[n++] = 60;
lst[n++] = 12; lst[n++] = 12;
lst[n++] = 25; lst[n++] = 25;
//smartlist_shuffle(sl); //smartlist_shuffle(sl);
test_eq(25, median()); /* 12,12,24,25,60,77,77 */ tt_int_op(25,==, median()); /* 12,12,24,25,60,77,77 */
#undef median #undef median
#define third_quartile() third_quartile_uint32(lst2, n) #define third_quartile() third_quartile_uint32(lst2, n)
n = 0; n = 0;
lst2[n++] = 1; lst2[n++] = 1;
test_eq(1, third_quartile()); /* ~1~ */ tt_int_op(1,==, third_quartile()); /* ~1~ */
lst2[n++] = 2; lst2[n++] = 2;
test_eq(2, third_quartile()); /* 1, ~2~ */ tt_int_op(2,==, third_quartile()); /* 1, ~2~ */
lst2[n++] = 3; lst2[n++] = 3;
lst2[n++] = 4; lst2[n++] = 4;
lst2[n++] = 5; lst2[n++] = 5;
test_eq(4, third_quartile()); /* 1, 2, 3, ~4~, 5 */ tt_int_op(4,==, third_quartile()); /* 1, 2, 3, ~4~, 5 */
lst2[n++] = 6; lst2[n++] = 6;
lst2[n++] = 7; lst2[n++] = 7;
lst2[n++] = 8; lst2[n++] = 8;
lst2[n++] = 9; lst2[n++] = 9;
test_eq(7, third_quartile()); /* 1, 2, 3, 4, 5, 6, ~7~, 8, 9 */ tt_int_op(7,==, third_quartile()); /* 1, 2, 3, 4, 5, 6, ~7~, 8, 9 */
lst2[n++] = 10; lst2[n++] = 10;
lst2[n++] = 11; lst2[n++] = 11;
test_eq(9, third_quartile()); /* 1, 2, 3, 4, 5, 6, 7, 8, ~9~, 10, 11 */ tt_int_op(9,==, third_quartile()); /* 1, 2, 3, 4, 5, 6, 7, 8, ~9~, 10, 11 */
#undef third_quartile #undef third_quartile
@ -945,9 +945,9 @@ test_container_fp_pair_map(void)
char *v105 = tor_strdup("v105"); char *v105 = tor_strdup("v105");
map = fp_pair_map_new(); map = fp_pair_map_new();
test_assert(map); tt_assert(map);
test_eq(fp_pair_map_size(map), 0); tt_int_op(fp_pair_map_size(map),==, 0);
test_assert(fp_pair_map_isempty(map)); tt_assert(fp_pair_map_isempty(map));
memset(fp1.first, 0x11, DIGEST_LEN); memset(fp1.first, 0x11, DIGEST_LEN);
memset(fp1.second, 0x12, DIGEST_LEN); memset(fp1.second, 0x12, DIGEST_LEN);
@ -964,26 +964,26 @@ test_container_fp_pair_map(void)
v = fp_pair_map_set(map, &fp1, v99); v = fp_pair_map_set(map, &fp1, v99);
tt_ptr_op(v, ==, NULL); tt_ptr_op(v, ==, NULL);
test_assert(!fp_pair_map_isempty(map)); tt_assert(!fp_pair_map_isempty(map));
v = fp_pair_map_set(map, &fp2, v101); v = fp_pair_map_set(map, &fp2, v101);
tt_ptr_op(v, ==, NULL); tt_ptr_op(v, ==, NULL);
v = fp_pair_map_set(map, &fp1, v100); v = fp_pair_map_set(map, &fp1, v100);
tt_ptr_op(v, ==, v99); tt_ptr_op(v, ==, v99);
test_eq_ptr(fp_pair_map_get(map, &fp1), v100); tt_ptr_op(fp_pair_map_get(map, &fp1),==, v100);
test_eq_ptr(fp_pair_map_get(map, &fp2), v101); tt_ptr_op(fp_pair_map_get(map, &fp2),==, v101);
test_eq_ptr(fp_pair_map_get(map, &fp3), NULL); tt_ptr_op(fp_pair_map_get(map, &fp3),==, NULL);
fp_pair_map_assert_ok(map); fp_pair_map_assert_ok(map);
v = fp_pair_map_remove(map, &fp2); v = fp_pair_map_remove(map, &fp2);
fp_pair_map_assert_ok(map); fp_pair_map_assert_ok(map);
test_eq_ptr(v, v101); tt_ptr_op(v,==, v101);
test_eq_ptr(fp_pair_map_get(map, &fp2), NULL); tt_ptr_op(fp_pair_map_get(map, &fp2),==, NULL);
test_eq_ptr(fp_pair_map_remove(map, &fp2), NULL); tt_ptr_op(fp_pair_map_remove(map, &fp2),==, NULL);
fp_pair_map_set(map, &fp2, v101); fp_pair_map_set(map, &fp2, v101);
fp_pair_map_set(map, &fp3, v102); fp_pair_map_set(map, &fp3, v102);
fp_pair_map_set(map, &fp4, v103); fp_pair_map_set(map, &fp4, v103);
test_eq(fp_pair_map_size(map), 4); tt_int_op(fp_pair_map_size(map),==, 4);
fp_pair_map_assert_ok(map); fp_pair_map_assert_ok(map);
fp_pair_map_set(map, &fp5, v104); fp_pair_map_set(map, &fp5, v104);
fp_pair_map_set(map, &fp6, v105); fp_pair_map_set(map, &fp6, v105);
@ -993,7 +993,7 @@ test_container_fp_pair_map(void)
iter = fp_pair_map_iter_init(map); iter = fp_pair_map_iter_init(map);
while (!fp_pair_map_iter_done(iter)) { while (!fp_pair_map_iter_done(iter)) {
fp_pair_map_iter_get(iter, &k, &v); fp_pair_map_iter_get(iter, &k, &v);
test_eq_ptr(v, fp_pair_map_get(map, &k)); tt_ptr_op(v,==, fp_pair_map_get(map, &k));
if (tor_memeq(&fp2, &k, sizeof(fp2))) { if (tor_memeq(&fp2, &k, sizeof(fp2))) {
iter = fp_pair_map_iter_next_rmv(map, iter); iter = fp_pair_map_iter_next_rmv(map, iter);
@ -1003,8 +1003,8 @@ test_container_fp_pair_map(void)
} }
/* Make sure we removed fp2, but not the others. */ /* Make sure we removed fp2, but not the others. */
test_eq_ptr(fp_pair_map_get(map, &fp2), NULL); tt_ptr_op(fp_pair_map_get(map, &fp2),==, NULL);
test_eq_ptr(fp_pair_map_get(map, &fp5), v104); tt_ptr_op(fp_pair_map_get(map, &fp5),==, v104);
fp_pair_map_assert_ok(map); fp_pair_map_assert_ok(map);
/* Clean up after ourselves. */ /* Clean up after ourselves. */

View File

@ -30,24 +30,24 @@ test_crypto_dh(void)
char s2[DH_BYTES]; char s2[DH_BYTES];
ssize_t s1len, s2len; ssize_t s1len, s2len;
test_eq(crypto_dh_get_bytes(dh1), DH_BYTES); tt_int_op(crypto_dh_get_bytes(dh1),==, DH_BYTES);
test_eq(crypto_dh_get_bytes(dh2), DH_BYTES); tt_int_op(crypto_dh_get_bytes(dh2),==, DH_BYTES);
memset(p1, 0, DH_BYTES); memset(p1, 0, DH_BYTES);
memset(p2, 0, DH_BYTES); memset(p2, 0, DH_BYTES);
test_memeq(p1, p2, DH_BYTES); tt_mem_op(p1,==, p2, DH_BYTES);
test_assert(! crypto_dh_get_public(dh1, p1, DH_BYTES)); tt_assert(! crypto_dh_get_public(dh1, p1, DH_BYTES));
test_memneq(p1, p2, DH_BYTES); tt_mem_op(p1,!=, p2, DH_BYTES);
test_assert(! crypto_dh_get_public(dh2, p2, DH_BYTES)); tt_assert(! crypto_dh_get_public(dh2, p2, DH_BYTES));
test_memneq(p1, p2, DH_BYTES); tt_mem_op(p1,!=, p2, DH_BYTES);
memset(s1, 0, DH_BYTES); memset(s1, 0, DH_BYTES);
memset(s2, 0xFF, DH_BYTES); memset(s2, 0xFF, DH_BYTES);
s1len = crypto_dh_compute_secret(LOG_WARN, dh1, p2, DH_BYTES, s1, 50); s1len = crypto_dh_compute_secret(LOG_WARN, dh1, p2, DH_BYTES, s1, 50);
s2len = crypto_dh_compute_secret(LOG_WARN, dh2, p1, DH_BYTES, s2, 50); s2len = crypto_dh_compute_secret(LOG_WARN, dh2, p1, DH_BYTES, s2, 50);
test_assert(s1len > 0); tt_assert(s1len > 0);
test_eq(s1len, s2len); tt_int_op(s1len,==, s2len);
test_memeq(s1, s2, s1len); tt_mem_op(s1,==, s2, s1len);
{ {
/* XXXX Now fabricate some bad values and make sure they get caught, /* XXXX Now fabricate some bad values and make sure they get caught,
@ -70,10 +70,10 @@ test_crypto_rng(void)
double d; double d;
/* Try out RNG. */ /* Try out RNG. */
test_assert(! crypto_seed_rng(0)); tt_assert(! crypto_seed_rng(0));
crypto_rand(data1, 100); crypto_rand(data1, 100);
crypto_rand(data2, 100); crypto_rand(data2, 100);
test_memneq(data1,data2,100); tt_mem_op(data1,!=, data2,100);
allok = 1; allok = 1;
for (i = 0; i < 100; ++i) { for (i = 0; i < 100; ++i) {
uint64_t big; uint64_t big;
@ -88,8 +88,8 @@ test_crypto_rng(void)
if (big >= 5) if (big >= 5)
allok = 0; allok = 0;
d = crypto_rand_double(); d = crypto_rand_double();
test_assert(d >= 0); tt_assert(d >= 0);
test_assert(d < 1.0); tt_assert(d < 1.0);
host = crypto_random_hostname(3,8,"www.",".onion"); host = crypto_random_hostname(3,8,"www.",".onion");
if (strcmpstart(host,"www.") || if (strcmpstart(host,"www.") ||
strcmpend(host,".onion") || strcmpend(host,".onion") ||
@ -98,7 +98,7 @@ test_crypto_rng(void)
allok = 0; allok = 0;
tor_free(host); tor_free(host);
} }
test_assert(allok); tt_assert(allok);
done: done:
; ;
} }
@ -135,8 +135,8 @@ test_crypto_aes(void *arg)
/* Try encrypting 512 chars. */ /* Try encrypting 512 chars. */
crypto_cipher_encrypt(env1, data2, data1, 512); crypto_cipher_encrypt(env1, data2, data1, 512);
crypto_cipher_decrypt(env2, data3, data2, 512); crypto_cipher_decrypt(env2, data3, data2, 512);
test_memeq(data1, data3, 512); tt_mem_op(data1,==, data3, 512);
test_memneq(data1, data2, 512); tt_mem_op(data1,!=, data2, 512);
/* Now encrypt 1 at a time, and get 1 at a time. */ /* Now encrypt 1 at a time, and get 1 at a time. */
for (j = 512; j < 560; ++j) { for (j = 512; j < 560; ++j) {
@ -145,7 +145,7 @@ test_crypto_aes(void *arg)
for (j = 512; j < 560; ++j) { for (j = 512; j < 560; ++j) {
crypto_cipher_decrypt(env2, data3+j, data2+j, 1); crypto_cipher_decrypt(env2, data3+j, data2+j, 1);
} }
test_memeq(data1, data3, 560); tt_mem_op(data1,==, data3, 560);
/* Now encrypt 3 at a time, and get 5 at a time. */ /* Now encrypt 3 at a time, and get 5 at a time. */
for (j = 560; j < 1024-5; j += 3) { for (j = 560; j < 1024-5; j += 3) {
crypto_cipher_encrypt(env1, data2+j, data1+j, 3); crypto_cipher_encrypt(env1, data2+j, data1+j, 3);
@ -153,7 +153,7 @@ test_crypto_aes(void *arg)
for (j = 560; j < 1024-5; j += 5) { for (j = 560; j < 1024-5; j += 5) {
crypto_cipher_decrypt(env2, data3+j, data2+j, 5); crypto_cipher_decrypt(env2, data3+j, data2+j, 5);
} }
test_memeq(data1, data3, 1024-5); tt_mem_op(data1,==, data3, 1024-5);
/* Now make sure that when we encrypt with different chunk sizes, we get /* Now make sure that when we encrypt with different chunk sizes, we get
the same results. */ the same results. */
crypto_cipher_free(env2); crypto_cipher_free(env2);
@ -170,7 +170,7 @@ test_crypto_aes(void *arg)
printf("%d: %d\t%d\n", j, (int) data2[j], (int) data3[j]); printf("%d: %d\t%d\n", j, (int) data2[j], (int) data3[j]);
} }
} }
test_memeq(data2, data3, 1024-16); tt_mem_op(data2,==, data3, 1024-16);
crypto_cipher_free(env1); crypto_cipher_free(env1);
env1 = NULL; env1 = NULL;
crypto_cipher_free(env2); crypto_cipher_free(env2);
@ -237,7 +237,7 @@ test_crypto_aes(void *arg)
"\xff\xff\xff\xff\xff\xff\xff\xff" "\xff\xff\xff\xff\xff\xff\xff\xff"
"\xff\xff\xff\xff\xff\xff\xff\xff"); "\xff\xff\xff\xff\xff\xff\xff\xff");
crypto_cipher_crypt_inplace(env1, data2, 64); crypto_cipher_crypt_inplace(env1, data2, 64);
test_assert(tor_mem_is_zero(data2, 64)); tt_assert(tor_mem_is_zero(data2, 64));
done: done:
tor_free(mem_op_hex_tmp); tor_free(mem_op_hex_tmp);
@ -277,13 +277,13 @@ test_crypto_sha(void)
/* Case empty (wikipedia) */ /* Case empty (wikipedia) */
crypto_hmac_sha256(digest, "", 0, "", 0); crypto_hmac_sha256(digest, "", 0, "", 0);
test_streq(hex_str(digest, 32), tt_str_op(hex_str(digest, 32),==,
"B613679A0814D9EC772F95D778C35FC5FF1697C493715653C6C712144292C5AD"); "B613679A0814D9EC772F95D778C35FC5FF1697C493715653C6C712144292C5AD");
/* Case quick-brown (wikipedia) */ /* Case quick-brown (wikipedia) */
crypto_hmac_sha256(digest, "key", 3, crypto_hmac_sha256(digest, "key", 3,
"The quick brown fox jumps over the lazy dog", 43); "The quick brown fox jumps over the lazy dog", 43);
test_streq(hex_str(digest, 32), tt_str_op(hex_str(digest, 32),==,
"F7BC83F430538424B13298E6AA6FB143EF4D59A14946175997479DBC2D1A3CD8"); "F7BC83F430538424B13298E6AA6FB143EF4D59A14946175997479DBC2D1A3CD8");
/* "Test Case 1" from RFC 4231 */ /* "Test Case 1" from RFC 4231 */
@ -344,43 +344,43 @@ test_crypto_sha(void)
/* Incremental digest code. */ /* Incremental digest code. */
d1 = crypto_digest_new(); d1 = crypto_digest_new();
test_assert(d1); tt_assert(d1);
crypto_digest_add_bytes(d1, "abcdef", 6); crypto_digest_add_bytes(d1, "abcdef", 6);
d2 = crypto_digest_dup(d1); d2 = crypto_digest_dup(d1);
test_assert(d2); tt_assert(d2);
crypto_digest_add_bytes(d2, "ghijkl", 6); crypto_digest_add_bytes(d2, "ghijkl", 6);
crypto_digest_get_digest(d2, d_out1, sizeof(d_out1)); crypto_digest_get_digest(d2, d_out1, sizeof(d_out1));
crypto_digest(d_out2, "abcdefghijkl", 12); crypto_digest(d_out2, "abcdefghijkl", 12);
test_memeq(d_out1, d_out2, DIGEST_LEN); tt_mem_op(d_out1,==, d_out2, DIGEST_LEN);
crypto_digest_assign(d2, d1); crypto_digest_assign(d2, d1);
crypto_digest_add_bytes(d2, "mno", 3); crypto_digest_add_bytes(d2, "mno", 3);
crypto_digest_get_digest(d2, d_out1, sizeof(d_out1)); crypto_digest_get_digest(d2, d_out1, sizeof(d_out1));
crypto_digest(d_out2, "abcdefmno", 9); crypto_digest(d_out2, "abcdefmno", 9);
test_memeq(d_out1, d_out2, DIGEST_LEN); tt_mem_op(d_out1,==, d_out2, DIGEST_LEN);
crypto_digest_get_digest(d1, d_out1, sizeof(d_out1)); crypto_digest_get_digest(d1, d_out1, sizeof(d_out1));
crypto_digest(d_out2, "abcdef", 6); crypto_digest(d_out2, "abcdef", 6);
test_memeq(d_out1, d_out2, DIGEST_LEN); tt_mem_op(d_out1,==, d_out2, DIGEST_LEN);
crypto_digest_free(d1); crypto_digest_free(d1);
crypto_digest_free(d2); crypto_digest_free(d2);
/* Incremental digest code with sha256 */ /* Incremental digest code with sha256 */
d1 = crypto_digest256_new(DIGEST_SHA256); d1 = crypto_digest256_new(DIGEST_SHA256);
test_assert(d1); tt_assert(d1);
crypto_digest_add_bytes(d1, "abcdef", 6); crypto_digest_add_bytes(d1, "abcdef", 6);
d2 = crypto_digest_dup(d1); d2 = crypto_digest_dup(d1);
test_assert(d2); tt_assert(d2);
crypto_digest_add_bytes(d2, "ghijkl", 6); crypto_digest_add_bytes(d2, "ghijkl", 6);
crypto_digest_get_digest(d2, d_out1, sizeof(d_out1)); crypto_digest_get_digest(d2, d_out1, sizeof(d_out1));
crypto_digest256(d_out2, "abcdefghijkl", 12, DIGEST_SHA256); crypto_digest256(d_out2, "abcdefghijkl", 12, DIGEST_SHA256);
test_memeq(d_out1, d_out2, DIGEST_LEN); tt_mem_op(d_out1,==, d_out2, DIGEST_LEN);
crypto_digest_assign(d2, d1); crypto_digest_assign(d2, d1);
crypto_digest_add_bytes(d2, "mno", 3); crypto_digest_add_bytes(d2, "mno", 3);
crypto_digest_get_digest(d2, d_out1, sizeof(d_out1)); crypto_digest_get_digest(d2, d_out1, sizeof(d_out1));
crypto_digest256(d_out2, "abcdefmno", 9, DIGEST_SHA256); crypto_digest256(d_out2, "abcdefmno", 9, DIGEST_SHA256);
test_memeq(d_out1, d_out2, DIGEST_LEN); tt_mem_op(d_out1,==, d_out2, DIGEST_LEN);
crypto_digest_get_digest(d1, d_out1, sizeof(d_out1)); crypto_digest_get_digest(d1, d_out1, sizeof(d_out1));
crypto_digest256(d_out2, "abcdef", 6, DIGEST_SHA256); crypto_digest256(d_out2, "abcdef", 6, DIGEST_SHA256);
test_memeq(d_out1, d_out2, DIGEST_LEN); tt_mem_op(d_out1,==, d_out2, DIGEST_LEN);
done: done:
if (d1) if (d1)
@ -403,72 +403,72 @@ test_crypto_pk(void)
/* Public-key ciphers */ /* Public-key ciphers */
pk1 = pk_generate(0); pk1 = pk_generate(0);
pk2 = crypto_pk_new(); pk2 = crypto_pk_new();
test_assert(pk1 && pk2); tt_assert(pk1 && pk2);
test_assert(! crypto_pk_write_public_key_to_string(pk1, &encoded, &size)); tt_assert(! crypto_pk_write_public_key_to_string(pk1, &encoded, &size));
test_assert(! crypto_pk_read_public_key_from_string(pk2, encoded, size)); tt_assert(! crypto_pk_read_public_key_from_string(pk2, encoded, size));
test_eq(0, crypto_pk_cmp_keys(pk1, pk2)); tt_int_op(0,==, crypto_pk_cmp_keys(pk1, pk2));
/* comparison between keys and NULL */ /* comparison between keys and NULL */
tt_int_op(crypto_pk_cmp_keys(NULL, pk1), <, 0); tt_int_op(crypto_pk_cmp_keys(NULL, pk1), <, 0);
tt_int_op(crypto_pk_cmp_keys(NULL, NULL), ==, 0); tt_int_op(crypto_pk_cmp_keys(NULL, NULL), ==, 0);
tt_int_op(crypto_pk_cmp_keys(pk1, NULL), >, 0); tt_int_op(crypto_pk_cmp_keys(pk1, NULL), >, 0);
test_eq(128, crypto_pk_keysize(pk1)); tt_int_op(128,==, crypto_pk_keysize(pk1));
test_eq(1024, crypto_pk_num_bits(pk1)); tt_int_op(1024,==, crypto_pk_num_bits(pk1));
test_eq(128, crypto_pk_keysize(pk2)); tt_int_op(128,==, crypto_pk_keysize(pk2));
test_eq(1024, crypto_pk_num_bits(pk2)); tt_int_op(1024,==, crypto_pk_num_bits(pk2));
test_eq(128, crypto_pk_public_encrypt(pk2, data1, sizeof(data1), tt_int_op(128,==, crypto_pk_public_encrypt(pk2, data1, sizeof(data1),
"Hello whirled.", 15, "Hello whirled.", 15,
PK_PKCS1_OAEP_PADDING)); PK_PKCS1_OAEP_PADDING));
test_eq(128, crypto_pk_public_encrypt(pk1, data2, sizeof(data1), tt_int_op(128,==, crypto_pk_public_encrypt(pk1, data2, sizeof(data1),
"Hello whirled.", 15, "Hello whirled.", 15,
PK_PKCS1_OAEP_PADDING)); PK_PKCS1_OAEP_PADDING));
/* oaep padding should make encryption not match */ /* oaep padding should make encryption not match */
test_memneq(data1, data2, 128); tt_mem_op(data1,!=, data2, 128);
test_eq(15, crypto_pk_private_decrypt(pk1, data3, sizeof(data3), data1, 128, tt_int_op(15,==, crypto_pk_private_decrypt(pk1, data3, sizeof(data3), data1, 128,
PK_PKCS1_OAEP_PADDING,1)); PK_PKCS1_OAEP_PADDING,1));
test_streq(data3, "Hello whirled."); tt_str_op(data3,==, "Hello whirled.");
memset(data3, 0, 1024); memset(data3, 0, 1024);
test_eq(15, crypto_pk_private_decrypt(pk1, data3, sizeof(data3), data2, 128, tt_int_op(15,==, crypto_pk_private_decrypt(pk1, data3, sizeof(data3), data2, 128,
PK_PKCS1_OAEP_PADDING,1)); PK_PKCS1_OAEP_PADDING,1));
test_streq(data3, "Hello whirled."); tt_str_op(data3,==, "Hello whirled.");
/* Can't decrypt with public key. */ /* Can't decrypt with public key. */
test_eq(-1, crypto_pk_private_decrypt(pk2, data3, sizeof(data3), data2, 128, tt_int_op(-1,==, crypto_pk_private_decrypt(pk2, data3, sizeof(data3), data2, 128,
PK_PKCS1_OAEP_PADDING,1)); PK_PKCS1_OAEP_PADDING,1));
/* Try again with bad padding */ /* Try again with bad padding */
memcpy(data2+1, "XYZZY", 5); /* This has fails ~ once-in-2^40 */ memcpy(data2+1, "XYZZY", 5); /* This has fails ~ once-in-2^40 */
test_eq(-1, crypto_pk_private_decrypt(pk1, data3, sizeof(data3), data2, 128, tt_int_op(-1,==, crypto_pk_private_decrypt(pk1, data3, sizeof(data3), data2, 128,
PK_PKCS1_OAEP_PADDING,1)); PK_PKCS1_OAEP_PADDING,1));
/* File operations: save and load private key */ /* File operations: save and load private key */
test_assert(! crypto_pk_write_private_key_to_filename(pk1, tt_assert(! crypto_pk_write_private_key_to_filename(pk1,
get_fname("pkey1"))); get_fname("pkey1")));
/* failing case for read: can't read. */ /* failing case for read: can't read. */
test_assert(crypto_pk_read_private_key_from_filename(pk2, tt_assert(crypto_pk_read_private_key_from_filename(pk2,
get_fname("xyzzy")) < 0); get_fname("xyzzy")) < 0);
write_str_to_file(get_fname("xyzzy"), "foobar", 6); write_str_to_file(get_fname("xyzzy"), "foobar", 6);
/* Failing case for read: no key. */ /* Failing case for read: no key. */
test_assert(crypto_pk_read_private_key_from_filename(pk2, tt_assert(crypto_pk_read_private_key_from_filename(pk2,
get_fname("xyzzy")) < 0); get_fname("xyzzy")) < 0);
test_assert(! crypto_pk_read_private_key_from_filename(pk2, tt_assert(! crypto_pk_read_private_key_from_filename(pk2,
get_fname("pkey1"))); get_fname("pkey1")));
test_eq(15, crypto_pk_private_decrypt(pk2, data3, sizeof(data3), data1, 128, tt_int_op(15,==, crypto_pk_private_decrypt(pk2, data3, sizeof(data3), data1, 128,
PK_PKCS1_OAEP_PADDING,1)); PK_PKCS1_OAEP_PADDING,1));
/* Now try signing. */ /* Now try signing. */
strlcpy(data1, "Ossifrage", 1024); strlcpy(data1, "Ossifrage", 1024);
test_eq(128, crypto_pk_private_sign(pk1, data2, sizeof(data2), data1, 10)); tt_int_op(128,==, crypto_pk_private_sign(pk1, data2, sizeof(data2), data1, 10));
test_eq(10, tt_int_op(10,==,
crypto_pk_public_checksig(pk1, data3, sizeof(data3), data2, 128)); crypto_pk_public_checksig(pk1, data3, sizeof(data3), data2, 128));
test_streq(data3, "Ossifrage"); tt_str_op(data3,==, "Ossifrage");
/* Try signing digests. */ /* Try signing digests. */
test_eq(128, crypto_pk_private_sign_digest(pk1, data2, sizeof(data2), tt_int_op(128,==, crypto_pk_private_sign_digest(pk1, data2, sizeof(data2),
data1, 10)); data1, 10));
test_eq(20, tt_int_op(20,==,
crypto_pk_public_checksig(pk1, data3, sizeof(data3), data2, 128)); crypto_pk_public_checksig(pk1, data3, sizeof(data3), data2, 128));
test_eq(0, crypto_pk_public_checksig_digest(pk1, data1, 10, data2, 128)); tt_int_op(0,==, crypto_pk_public_checksig_digest(pk1, data1, 10, data2, 128));
test_eq(-1, crypto_pk_public_checksig_digest(pk1, data1, 11, data2, 128)); tt_int_op(-1,==, crypto_pk_public_checksig_digest(pk1, data1, 11, data2, 128));
/*XXXX test failed signing*/ /*XXXX test failed signing*/
@ -476,9 +476,9 @@ test_crypto_pk(void)
crypto_pk_free(pk2); crypto_pk_free(pk2);
pk2 = NULL; pk2 = NULL;
i = crypto_pk_asn1_encode(pk1, data1, 1024); i = crypto_pk_asn1_encode(pk1, data1, 1024);
test_assert(i>0); tt_int_op(i, >, 0);
pk2 = crypto_pk_asn1_decode(data1, i); pk2 = crypto_pk_asn1_decode(data1, i);
test_assert(crypto_pk_cmp_keys(pk1,pk2) == 0); tt_assert(crypto_pk_cmp_keys(pk1,pk2) == 0);
/* Try with hybrid encryption wrappers. */ /* Try with hybrid encryption wrappers. */
crypto_rand(data1, 1024); crypto_rand(data1, 1024);
@ -487,19 +487,19 @@ test_crypto_pk(void)
memset(data3,0,1024); memset(data3,0,1024);
len = crypto_pk_public_hybrid_encrypt(pk1,data2,sizeof(data2), len = crypto_pk_public_hybrid_encrypt(pk1,data2,sizeof(data2),
data1,i,PK_PKCS1_OAEP_PADDING,0); data1,i,PK_PKCS1_OAEP_PADDING,0);
test_assert(len>=0); tt_int_op(len, >=, 0);
len = crypto_pk_private_hybrid_decrypt(pk1,data3,sizeof(data3), len = crypto_pk_private_hybrid_decrypt(pk1,data3,sizeof(data3),
data2,len,PK_PKCS1_OAEP_PADDING,1); data2,len,PK_PKCS1_OAEP_PADDING,1);
test_eq(len,i); tt_int_op(len,==, i);
test_memeq(data1,data3,i); tt_mem_op(data1,==, data3,i);
} }
/* Try copy_full */ /* Try copy_full */
crypto_pk_free(pk2); crypto_pk_free(pk2);
pk2 = crypto_pk_copy_full(pk1); pk2 = crypto_pk_copy_full(pk1);
test_assert(pk2 != NULL); tt_assert(pk2 != NULL);
test_neq_ptr(pk1, pk2); test_neq_ptr(pk1, pk2);
test_assert(crypto_pk_cmp_keys(pk1,pk2) == 0); tt_assert(crypto_pk_cmp_keys(pk1,pk2) == 0);
done: done:
if (pk1) if (pk1)
@ -532,7 +532,7 @@ test_crypto_pk_fingerprints(void *arg)
/* Is digest as expected? */ /* Is digest as expected? */
crypto_digest(d, encoded, n); crypto_digest(d, encoded, n);
tt_int_op(0, ==, crypto_pk_get_digest(pk, d2)); tt_int_op(0, ==, crypto_pk_get_digest(pk, d2));
test_memeq(d, d2, DIGEST_LEN); tt_mem_op(d,==, d2, DIGEST_LEN);
/* Is fingerprint right? */ /* Is fingerprint right? */
tt_int_op(0, ==, crypto_pk_get_fingerprint(pk, fingerprint, 0)); tt_int_op(0, ==, crypto_pk_get_fingerprint(pk, fingerprint, 0));
@ -569,20 +569,20 @@ test_crypto_digests(void)
char digest[DIGEST_LEN]; char digest[DIGEST_LEN];
k = crypto_pk_new(); k = crypto_pk_new();
test_assert(k); tt_assert(k);
r = crypto_pk_read_private_key_from_string(k, AUTHORITY_SIGNKEY_3, -1); r = crypto_pk_read_private_key_from_string(k, AUTHORITY_SIGNKEY_3, -1);
test_assert(!r); tt_assert(!r);
r = crypto_pk_get_digest(k, digest); r = crypto_pk_get_digest(k, digest);
test_assert(r == 0); tt_assert(r == 0);
test_memeq(hex_str(digest, DIGEST_LEN), tt_mem_op(hex_str(digest, DIGEST_LEN),==,
AUTHORITY_SIGNKEY_A_DIGEST, HEX_DIGEST_LEN); AUTHORITY_SIGNKEY_A_DIGEST, HEX_DIGEST_LEN);
r = crypto_pk_get_all_digests(k, &pkey_digests); r = crypto_pk_get_all_digests(k, &pkey_digests);
test_memeq(hex_str(pkey_digests.d[DIGEST_SHA1], DIGEST_LEN), tt_mem_op(hex_str(pkey_digests.d[DIGEST_SHA1], DIGEST_LEN),==,
AUTHORITY_SIGNKEY_A_DIGEST, HEX_DIGEST_LEN); AUTHORITY_SIGNKEY_A_DIGEST, HEX_DIGEST_LEN);
test_memeq(hex_str(pkey_digests.d[DIGEST_SHA256], DIGEST256_LEN), tt_mem_op(hex_str(pkey_digests.d[DIGEST_SHA256], DIGEST256_LEN),==,
AUTHORITY_SIGNKEY_A_DIGEST256, HEX_DIGEST256_LEN); AUTHORITY_SIGNKEY_A_DIGEST256, HEX_DIGEST256_LEN);
done: done:
crypto_pk_free(k); crypto_pk_free(k);
@ -599,50 +599,50 @@ test_crypto_formats(void)
data1 = tor_malloc(1024); data1 = tor_malloc(1024);
data2 = tor_malloc(1024); data2 = tor_malloc(1024);
data3 = tor_malloc(1024); data3 = tor_malloc(1024);
test_assert(data1 && data2 && data3); tt_assert(data1 && data2 && data3);
/* Base64 tests */ /* Base64 tests */
memset(data1, 6, 1024); memset(data1, 6, 1024);
for (idx = 0; idx < 10; ++idx) { for (idx = 0; idx < 10; ++idx) {
i = base64_encode(data2, 1024, data1, idx); i = base64_encode(data2, 1024, data1, idx);
test_assert(i >= 0); tt_int_op(i, >=, 0);
j = base64_decode(data3, 1024, data2, i); j = base64_decode(data3, 1024, data2, i);
test_eq(j,idx); tt_int_op(j,==, idx);
test_memeq(data3, data1, idx); tt_mem_op(data3,==, data1, idx);
} }
strlcpy(data1, "Test string that contains 35 chars.", 1024); strlcpy(data1, "Test string that contains 35 chars.", 1024);
strlcat(data1, " 2nd string that contains 35 chars.", 1024); strlcat(data1, " 2nd string that contains 35 chars.", 1024);
i = base64_encode(data2, 1024, data1, 71); i = base64_encode(data2, 1024, data1, 71);
test_assert(i >= 0); tt_int_op(i, >=, 0);
j = base64_decode(data3, 1024, data2, i); j = base64_decode(data3, 1024, data2, i);
test_eq(j, 71); tt_int_op(j,==, 71);
test_streq(data3, data1); tt_str_op(data3,==, data1);
test_assert(data2[i] == '\0'); tt_int_op(data2[i], ==, '\0');
crypto_rand(data1, DIGEST_LEN); crypto_rand(data1, DIGEST_LEN);
memset(data2, 100, 1024); memset(data2, 100, 1024);
digest_to_base64(data2, data1); digest_to_base64(data2, data1);
test_eq(BASE64_DIGEST_LEN, strlen(data2)); tt_int_op(BASE64_DIGEST_LEN,==, strlen(data2));
test_eq(100, data2[BASE64_DIGEST_LEN+2]); tt_int_op(100,==, data2[BASE64_DIGEST_LEN+2]);
memset(data3, 99, 1024); memset(data3, 99, 1024);
test_eq(digest_from_base64(data3, data2), 0); tt_int_op(digest_from_base64(data3, data2),==, 0);
test_memeq(data1, data3, DIGEST_LEN); tt_mem_op(data1,==, data3, DIGEST_LEN);
test_eq(99, data3[DIGEST_LEN+1]); tt_int_op(99,==, data3[DIGEST_LEN+1]);
test_assert(digest_from_base64(data3, "###") < 0); tt_assert(digest_from_base64(data3, "###") < 0);
/* Encoding SHA256 */ /* Encoding SHA256 */
crypto_rand(data2, DIGEST256_LEN); crypto_rand(data2, DIGEST256_LEN);
memset(data2, 100, 1024); memset(data2, 100, 1024);
digest256_to_base64(data2, data1); digest256_to_base64(data2, data1);
test_eq(BASE64_DIGEST256_LEN, strlen(data2)); tt_int_op(BASE64_DIGEST256_LEN,==, strlen(data2));
test_eq(100, data2[BASE64_DIGEST256_LEN+2]); tt_int_op(100,==, data2[BASE64_DIGEST256_LEN+2]);
memset(data3, 99, 1024); memset(data3, 99, 1024);
test_eq(digest256_from_base64(data3, data2), 0); tt_int_op(digest256_from_base64(data3, data2),==, 0);
test_memeq(data1, data3, DIGEST256_LEN); tt_mem_op(data1,==, data3, DIGEST256_LEN);
test_eq(99, data3[DIGEST256_LEN+1]); tt_int_op(99,==, data3[DIGEST256_LEN+1]);
/* Base32 tests */ /* Base32 tests */
strlcpy(data1, "5chrs", 1024); strlcpy(data1, "5chrs", 1024);
@ -651,27 +651,27 @@ test_crypto_formats(void)
* By 5s: [00110 10101 10001 10110 10000 11100 10011 10011] * By 5s: [00110 10101 10001 10110 10000 11100 10011 10011]
*/ */
base32_encode(data2, 9, data1, 5); base32_encode(data2, 9, data1, 5);
test_streq(data2, "gvrwq4tt"); tt_str_op(data2,==, "gvrwq4tt");
strlcpy(data1, "\xFF\xF5\x6D\x44\xAE\x0D\x5C\xC9\x62\xC4", 1024); strlcpy(data1, "\xFF\xF5\x6D\x44\xAE\x0D\x5C\xC9\x62\xC4", 1024);
base32_encode(data2, 30, data1, 10); base32_encode(data2, 30, data1, 10);
test_streq(data2, "772w2rfobvomsywe"); tt_str_op(data2,==, "772w2rfobvomsywe");
/* Base16 tests */ /* Base16 tests */
strlcpy(data1, "6chrs\xff", 1024); strlcpy(data1, "6chrs\xff", 1024);
base16_encode(data2, 13, data1, 6); base16_encode(data2, 13, data1, 6);
test_streq(data2, "3663687273FF"); tt_str_op(data2,==, "3663687273FF");
strlcpy(data1, "f0d678affc000100", 1024); strlcpy(data1, "f0d678affc000100", 1024);
i = base16_decode(data2, 8, data1, 16); i = base16_decode(data2, 8, data1, 16);
test_eq(i,0); tt_int_op(i,==, 0);
test_memeq(data2, "\xf0\xd6\x78\xaf\xfc\x00\x01\x00",8); tt_mem_op(data2,==, "\xf0\xd6\x78\xaf\xfc\x00\x01\x00",8);
/* now try some failing base16 decodes */ /* now try some failing base16 decodes */
test_eq(-1, base16_decode(data2, 8, data1, 15)); /* odd input len */ tt_int_op(-1,==, base16_decode(data2, 8, data1, 15)); /* odd input len */
test_eq(-1, base16_decode(data2, 7, data1, 16)); /* dest too short */ tt_int_op(-1,==, base16_decode(data2, 7, data1, 16)); /* dest too short */
strlcpy(data1, "f0dz!8affc000100", 1024); strlcpy(data1, "f0dz!8affc000100", 1024);
test_eq(-1, base16_decode(data2, 8, data1, 16)); tt_int_op(-1,==, base16_decode(data2, 8, data1, 16));
tor_free(data1); tor_free(data1);
tor_free(data2); tor_free(data2);
@ -680,10 +680,10 @@ test_crypto_formats(void)
/* Add spaces to fingerprint */ /* Add spaces to fingerprint */
{ {
data1 = tor_strdup("ABCD1234ABCD56780000ABCD1234ABCD56780000"); data1 = tor_strdup("ABCD1234ABCD56780000ABCD1234ABCD56780000");
test_eq(strlen(data1), 40); tt_int_op(strlen(data1),==, 40);
data2 = tor_malloc(FINGERPRINT_LEN+1); data2 = tor_malloc(FINGERPRINT_LEN+1);
crypto_add_spaces_to_fp(data2, FINGERPRINT_LEN+1, data1); crypto_add_spaces_to_fp(data2, FINGERPRINT_LEN+1, data1);
test_streq(data2, "ABCD 1234 ABCD 5678 0000 ABCD 1234 ABCD 5678 0000"); tt_str_op(data2,==, "ABCD 1234 ABCD 5678 0000 ABCD 1234 ABCD 5678 0000");
tor_free(data1); tor_free(data1);
tor_free(data2); tor_free(data2);
} }
@ -710,7 +710,7 @@ test_crypto_s2k(void)
secret_to_key(buf+9, 20, "", 0, buf); secret_to_key(buf+9, 20, "", 0, buf);
crypto_digest(buf2+9, buf3, 1024); crypto_digest(buf2+9, buf3, 1024);
test_memeq(buf, buf2, 29); tt_mem_op(buf,==, buf2, 29);
memcpy(buf,"vrbacrda",8); memcpy(buf,"vrbacrda",8);
memcpy(buf2,"vrbacrda",8); memcpy(buf2,"vrbacrda",8);
@ -721,7 +721,7 @@ test_crypto_s2k(void)
memcpy(buf3+i, "vrbacrda12345678", 16); memcpy(buf3+i, "vrbacrda12345678", 16);
} }
crypto_digest(buf2+9, buf3, 65536); crypto_digest(buf2+9, buf3, 65536);
test_memeq(buf, buf2, 29); tt_mem_op(buf,==, buf2, 29);
done: done:
tor_free(buf3); tor_free(buf3);
@ -757,79 +757,79 @@ test_crypto_aes_iv(void *arg)
encrypted_size = crypto_cipher_encrypt_with_iv(key1, encrypted1, 16 + 4095, encrypted_size = crypto_cipher_encrypt_with_iv(key1, encrypted1, 16 + 4095,
plain, 4095); plain, 4095);
test_eq(encrypted_size, 16 + 4095); tt_int_op(encrypted_size,==, 16 + 4095);
tt_assert(encrypted_size > 0); /* This is obviously true, since 4111 is tt_assert(encrypted_size > 0); /* This is obviously true, since 4111 is
* greater than 0, but its truth is not * greater than 0, but its truth is not
* obvious to all analysis tools. */ * obvious to all analysis tools. */
decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted1, 4095, decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted1, 4095,
encrypted1, encrypted_size); encrypted1, encrypted_size);
test_eq(decrypted_size, 4095); tt_int_op(decrypted_size,==, 4095);
tt_assert(decrypted_size > 0); tt_assert(decrypted_size > 0);
test_memeq(plain, decrypted1, 4095); tt_mem_op(plain,==, decrypted1, 4095);
/* Encrypt a second time (with a new random initialization vector). */ /* Encrypt a second time (with a new random initialization vector). */
encrypted_size = crypto_cipher_encrypt_with_iv(key1, encrypted2, 16 + 4095, encrypted_size = crypto_cipher_encrypt_with_iv(key1, encrypted2, 16 + 4095,
plain, 4095); plain, 4095);
test_eq(encrypted_size, 16 + 4095); tt_int_op(encrypted_size,==, 16 + 4095);
tt_assert(encrypted_size > 0); tt_assert(encrypted_size > 0);
decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted2, 4095, decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted2, 4095,
encrypted2, encrypted_size); encrypted2, encrypted_size);
test_eq(decrypted_size, 4095); tt_int_op(decrypted_size,==, 4095);
tt_assert(decrypted_size > 0); tt_assert(decrypted_size > 0);
test_memeq(plain, decrypted2, 4095); tt_mem_op(plain,==, decrypted2, 4095);
test_memneq(encrypted1, encrypted2, encrypted_size); tt_mem_op(encrypted1,!=, encrypted2, encrypted_size);
/* Decrypt with the wrong key. */ /* Decrypt with the wrong key. */
decrypted_size = crypto_cipher_decrypt_with_iv(key2, decrypted2, 4095, decrypted_size = crypto_cipher_decrypt_with_iv(key2, decrypted2, 4095,
encrypted1, encrypted_size); encrypted1, encrypted_size);
test_eq(decrypted_size, 4095); tt_int_op(decrypted_size,==, 4095);
test_memneq(plain, decrypted2, decrypted_size); tt_mem_op(plain,!=, decrypted2, decrypted_size);
/* Alter the initialization vector. */ /* Alter the initialization vector. */
encrypted1[0] += 42; encrypted1[0] += 42;
decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted1, 4095, decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted1, 4095,
encrypted1, encrypted_size); encrypted1, encrypted_size);
test_eq(decrypted_size, 4095); tt_int_op(decrypted_size,==, 4095);
test_memneq(plain, decrypted2, 4095); tt_mem_op(plain,!=, decrypted2, 4095);
/* Special length case: 1. */ /* Special length case: 1. */
encrypted_size = crypto_cipher_encrypt_with_iv(key1, encrypted1, 16 + 1, encrypted_size = crypto_cipher_encrypt_with_iv(key1, encrypted1, 16 + 1,
plain_1, 1); plain_1, 1);
test_eq(encrypted_size, 16 + 1); tt_int_op(encrypted_size,==, 16 + 1);
tt_assert(encrypted_size > 0); tt_assert(encrypted_size > 0);
decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted1, 1, decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted1, 1,
encrypted1, encrypted_size); encrypted1, encrypted_size);
test_eq(decrypted_size, 1); tt_int_op(decrypted_size,==, 1);
tt_assert(decrypted_size > 0); tt_assert(decrypted_size > 0);
test_memeq(plain_1, decrypted1, 1); tt_mem_op(plain_1,==, decrypted1, 1);
/* Special length case: 15. */ /* Special length case: 15. */
encrypted_size = crypto_cipher_encrypt_with_iv(key1, encrypted1, 16 + 15, encrypted_size = crypto_cipher_encrypt_with_iv(key1, encrypted1, 16 + 15,
plain_15, 15); plain_15, 15);
test_eq(encrypted_size, 16 + 15); tt_int_op(encrypted_size,==, 16 + 15);
tt_assert(encrypted_size > 0); tt_assert(encrypted_size > 0);
decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted1, 15, decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted1, 15,
encrypted1, encrypted_size); encrypted1, encrypted_size);
test_eq(decrypted_size, 15); tt_int_op(decrypted_size,==, 15);
tt_assert(decrypted_size > 0); tt_assert(decrypted_size > 0);
test_memeq(plain_15, decrypted1, 15); tt_mem_op(plain_15,==, decrypted1, 15);
/* Special length case: 16. */ /* Special length case: 16. */
encrypted_size = crypto_cipher_encrypt_with_iv(key1, encrypted1, 16 + 16, encrypted_size = crypto_cipher_encrypt_with_iv(key1, encrypted1, 16 + 16,
plain_16, 16); plain_16, 16);
test_eq(encrypted_size, 16 + 16); tt_int_op(encrypted_size,==, 16 + 16);
tt_assert(encrypted_size > 0); tt_assert(encrypted_size > 0);
decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted1, 16, decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted1, 16,
encrypted1, encrypted_size); encrypted1, encrypted_size);
test_eq(decrypted_size, 16); tt_int_op(decrypted_size,==, 16);
tt_assert(decrypted_size > 0); tt_assert(decrypted_size > 0);
test_memeq(plain_16, decrypted1, 16); tt_mem_op(plain_16,==, decrypted1, 16);
/* Special length case: 17. */ /* Special length case: 17. */
encrypted_size = crypto_cipher_encrypt_with_iv(key1, encrypted1, 16 + 17, encrypted_size = crypto_cipher_encrypt_with_iv(key1, encrypted1, 16 + 17,
plain_17, 17); plain_17, 17);
test_eq(encrypted_size, 16 + 17); tt_int_op(encrypted_size,==, 16 + 17);
tt_assert(encrypted_size > 0); tt_assert(encrypted_size > 0);
decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted1, 17, decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted1, 17,
encrypted1, encrypted_size); encrypted1, encrypted_size);
test_eq(decrypted_size, 17); tt_int_op(decrypted_size,==, 17);
tt_assert(decrypted_size > 0); tt_assert(decrypted_size > 0);
test_memeq(plain_17, decrypted1, 17); tt_mem_op(plain_17,==, decrypted1, 17);
done: done:
/* Free memory. */ /* Free memory. */
@ -850,26 +850,26 @@ test_crypto_base32_decode(void)
/* Encode and decode a random string. */ /* Encode and decode a random string. */
base32_encode(encoded, 96 + 1, plain, 60); base32_encode(encoded, 96 + 1, plain, 60);
res = base32_decode(decoded, 60, encoded, 96); res = base32_decode(decoded, 60, encoded, 96);
test_eq(res, 0); tt_int_op(res,==, 0);
test_memeq(plain, decoded, 60); tt_mem_op(plain,==, decoded, 60);
/* Encode, uppercase, and decode a random string. */ /* Encode, uppercase, and decode a random string. */
base32_encode(encoded, 96 + 1, plain, 60); base32_encode(encoded, 96 + 1, plain, 60);
tor_strupper(encoded); tor_strupper(encoded);
res = base32_decode(decoded, 60, encoded, 96); res = base32_decode(decoded, 60, encoded, 96);
test_eq(res, 0); tt_int_op(res,==, 0);
test_memeq(plain, decoded, 60); tt_mem_op(plain,==, decoded, 60);
/* Change encoded string and decode. */ /* Change encoded string and decode. */
if (encoded[0] == 'A' || encoded[0] == 'a') if (encoded[0] == 'A' || encoded[0] == 'a')
encoded[0] = 'B'; encoded[0] = 'B';
else else
encoded[0] = 'A'; encoded[0] = 'A';
res = base32_decode(decoded, 60, encoded, 96); res = base32_decode(decoded, 60, encoded, 96);
test_eq(res, 0); tt_int_op(res,==, 0);
test_memneq(plain, decoded, 60); tt_mem_op(plain,!=, decoded, 60);
/* Bad encodings. */ /* Bad encodings. */
encoded[0] = '!'; encoded[0] = '!';
res = base32_decode(decoded, 60, encoded, 96); res = base32_decode(decoded, 60, encoded, 96);
test_assert(res < 0); tt_int_op(0, >, res);
done: done:
; ;
@ -1024,7 +1024,7 @@ test_crypto_curve25519_impl(void *arg)
e2k[31] |= (byte & 0x80); e2k[31] |= (byte & 0x80);
} }
curve25519_impl(e1e2k,e1,e2k); curve25519_impl(e1e2k,e1,e2k);
test_memeq(e1e2k, e2e1k, 32); tt_mem_op(e1e2k,==, e2e1k, 32);
if (loop == loop_max-1) { if (loop == loop_max-1) {
break; break;
} }
@ -1056,11 +1056,11 @@ test_crypto_curve25519_wrappers(void *arg)
curve25519_secret_key_generate(&seckey2, 1); curve25519_secret_key_generate(&seckey2, 1);
curve25519_public_key_generate(&pubkey1, &seckey1); curve25519_public_key_generate(&pubkey1, &seckey1);
curve25519_public_key_generate(&pubkey2, &seckey2); curve25519_public_key_generate(&pubkey2, &seckey2);
test_assert(curve25519_public_key_is_ok(&pubkey1)); tt_assert(curve25519_public_key_is_ok(&pubkey1));
test_assert(curve25519_public_key_is_ok(&pubkey2)); tt_assert(curve25519_public_key_is_ok(&pubkey2));
curve25519_handshake(output1, &seckey1, &pubkey2); curve25519_handshake(output1, &seckey1, &pubkey2);
curve25519_handshake(output2, &seckey2, &pubkey1); curve25519_handshake(output2, &seckey2, &pubkey1);
test_memeq(output1, output2, sizeof(output1)); tt_mem_op(output1,==, output2, sizeof(output1));
done: done:
; ;
@ -1081,12 +1081,12 @@ test_crypto_curve25519_encode(void *arg)
tt_int_op(CURVE25519_BASE64_PADDED_LEN, ==, strlen(buf)); tt_int_op(CURVE25519_BASE64_PADDED_LEN, ==, strlen(buf));
tt_int_op(0, ==, curve25519_public_from_base64(&key2, buf)); tt_int_op(0, ==, curve25519_public_from_base64(&key2, buf));
test_memeq(key1.public_key, key2.public_key, CURVE25519_PUBKEY_LEN); tt_mem_op(key1.public_key,==, key2.public_key, CURVE25519_PUBKEY_LEN);
buf[CURVE25519_BASE64_PADDED_LEN - 1] = '\0'; buf[CURVE25519_BASE64_PADDED_LEN - 1] = '\0';
tt_int_op(CURVE25519_BASE64_PADDED_LEN-1, ==, strlen(buf)); tt_int_op(CURVE25519_BASE64_PADDED_LEN-1, ==, strlen(buf));
tt_int_op(0, ==, curve25519_public_from_base64(&key3, buf)); tt_int_op(0, ==, curve25519_public_from_base64(&key3, buf));
test_memeq(key1.public_key, key3.public_key, CURVE25519_PUBKEY_LEN); tt_mem_op(key1.public_key,==, key3.public_key, CURVE25519_PUBKEY_LEN);
/* Now try bogus parses. */ /* Now try bogus parses. */
strlcpy(buf, "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$=", sizeof(buf)); strlcpy(buf, "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$=", sizeof(buf));
@ -1122,10 +1122,10 @@ test_crypto_curve25519_persist(void *arg)
tt_str_op(tag,==,"testing"); tt_str_op(tag,==,"testing");
tor_free(tag); tor_free(tag);
test_memeq(keypair.pubkey.public_key, tt_mem_op(keypair.pubkey.public_key,==,
keypair2.pubkey.public_key, keypair2.pubkey.public_key,
CURVE25519_PUBKEY_LEN); CURVE25519_PUBKEY_LEN);
test_memeq(keypair.seckey.secret_key, tt_mem_op(keypair.seckey.secret_key,==,
keypair2.seckey.secret_key, keypair2.seckey.secret_key,
CURVE25519_SECKEY_LEN); CURVE25519_SECKEY_LEN);
@ -1137,11 +1137,11 @@ test_crypto_curve25519_persist(void *arg)
tt_assert(fast_memeq(content, "== c25519v1: testing ==", taglen)); tt_assert(fast_memeq(content, "== c25519v1: testing ==", taglen));
tt_assert(tor_mem_is_zero(content+taglen, 32-taglen)); tt_assert(tor_mem_is_zero(content+taglen, 32-taglen));
cp = content + 32; cp = content + 32;
test_memeq(keypair.seckey.secret_key, tt_mem_op(keypair.seckey.secret_key,==,
cp, cp,
CURVE25519_SECKEY_LEN); CURVE25519_SECKEY_LEN);
cp += CURVE25519_SECKEY_LEN; cp += CURVE25519_SECKEY_LEN;
test_memeq(keypair.pubkey.public_key, tt_mem_op(keypair.pubkey.public_key,==,
cp, cp,
CURVE25519_SECKEY_LEN); CURVE25519_SECKEY_LEN);

File diff suppressed because it is too large Load Diff

View File

@ -139,7 +139,7 @@ test_choose_random_entry_no_guards(void *arg)
/* Unintuitively, we actually pick a random node as our entry, /* Unintuitively, we actually pick a random node as our entry,
because router_choose_random_node() relaxes its constraints if it because router_choose_random_node() relaxes its constraints if it
can't find a proper entry guard. */ can't find a proper entry guard. */
test_assert(chosen_entry); tt_assert(chosen_entry);
done: done:
; ;
@ -201,7 +201,7 @@ populate_live_entry_guards_test_helper(int num_needed)
SMARTLIST_FOREACH_BEGIN(our_nodelist, const node_t *, node) { SMARTLIST_FOREACH_BEGIN(our_nodelist, const node_t *, node) {
const node_t *node_tmp; const node_t *node_tmp;
node_tmp = add_an_entry_guard(node, 0, 1, 0, 0); node_tmp = add_an_entry_guard(node, 0, 1, 0, 0);
test_assert(node_tmp); tt_assert(node_tmp);
} SMARTLIST_FOREACH_END(node); } SMARTLIST_FOREACH_END(node);
/* Make sure the nodes were added as entry guards. */ /* Make sure the nodes were added as entry guards. */
@ -650,7 +650,7 @@ test_entry_is_live(void *arg)
SMARTLIST_FOREACH_BEGIN(our_nodelist, const node_t *, node) { SMARTLIST_FOREACH_BEGIN(our_nodelist, const node_t *, node) {
const node_t *node_tmp; const node_t *node_tmp;
node_tmp = add_an_entry_guard(node, 0, 1, 0, 0); node_tmp = add_an_entry_guard(node, 0, 1, 0, 0);
test_assert(node_tmp); tt_assert(node_tmp);
tt_int_op(node->is_stable, ==, 0); tt_int_op(node->is_stable, ==, 0);
tt_int_op(node->is_fast, ==, 0); tt_int_op(node->is_fast, ==, 0);
@ -670,22 +670,22 @@ test_entry_is_live(void *arg)
test_node = entry_is_live(test_entry, test_node = entry_is_live(test_entry,
ENTRY_NEED_UPTIME | ENTRY_ASSUME_REACHABLE, ENTRY_NEED_UPTIME | ENTRY_ASSUME_REACHABLE,
&msg); &msg);
test_assert(!test_node); tt_assert(!test_node);
/* Require the node to be fast, but it's not. Should fail. */ /* Require the node to be fast, but it's not. Should fail. */
test_node = entry_is_live(test_entry, test_node = entry_is_live(test_entry,
ENTRY_NEED_CAPACITY | ENTRY_ASSUME_REACHABLE, ENTRY_NEED_CAPACITY | ENTRY_ASSUME_REACHABLE,
&msg); &msg);
test_assert(!test_node); tt_assert(!test_node);
/* Don't impose any restrictions on the node. Should succeed. */ /* Don't impose any restrictions on the node. Should succeed. */
test_node = entry_is_live(test_entry, 0, &msg); test_node = entry_is_live(test_entry, 0, &msg);
test_assert(test_node); tt_assert(test_node);
tt_ptr_op(test_node, ==, node_get_by_id(test_entry->identity)); tt_ptr_op(test_node, ==, node_get_by_id(test_entry->identity));
/* Require descriptor for this node. It has one so it should succeed. */ /* Require descriptor for this node. It has one so it should succeed. */
test_node = entry_is_live(test_entry, ENTRY_NEED_DESCRIPTOR, &msg); test_node = entry_is_live(test_entry, ENTRY_NEED_DESCRIPTOR, &msg);
test_assert(test_node); tt_assert(test_node);
tt_ptr_op(test_node, ==, node_get_by_id(test_entry->identity)); tt_ptr_op(test_node, ==, node_get_by_id(test_entry->identity));
done: done:

View File

@ -42,7 +42,7 @@ test_ext_or_id_map(void *arg)
/* Give c2 a new ID. */ /* Give c2 a new ID. */
connection_or_set_ext_or_identifier(c2); connection_or_set_ext_or_identifier(c2);
test_mem_op(idp, !=, c2->ext_or_conn_id, EXT_OR_CONN_ID_LEN); tt_mem_op(idp, !=, c2->ext_or_conn_id, EXT_OR_CONN_ID_LEN);
idp2 = tor_memdup(c2->ext_or_conn_id, EXT_OR_CONN_ID_LEN); idp2 = tor_memdup(c2->ext_or_conn_id, EXT_OR_CONN_ID_LEN);
tt_assert(!tor_digest_is_zero(idp2)); tt_assert(!tor_digest_is_zero(idp2));
@ -119,7 +119,7 @@ test_ext_or_write_command(void *arg)
==, 0); ==, 0);
cp = buf_get_contents(TO_CONN(c1)->outbuf, &sz); cp = buf_get_contents(TO_CONN(c1)->outbuf, &sz);
tt_int_op(sz, ==, 4); tt_int_op(sz, ==, 4);
test_mem_op(cp, ==, "\x00\x99\x00\x00", 4); tt_mem_op(cp, ==, "\x00\x99\x00\x00", 4);
tor_free(cp); tor_free(cp);
/* Medium command. */ /* Medium command. */
@ -127,7 +127,7 @@ test_ext_or_write_command(void *arg)
"Wai\0Hello", 9), ==, 0); "Wai\0Hello", 9), ==, 0);
cp = buf_get_contents(TO_CONN(c1)->outbuf, &sz); cp = buf_get_contents(TO_CONN(c1)->outbuf, &sz);
tt_int_op(sz, ==, 13); tt_int_op(sz, ==, 13);
test_mem_op(cp, ==, "\x00\x99\x00\x09Wai\x00Hello", 13); tt_mem_op(cp, ==, "\x00\x99\x00\x09Wai\x00Hello", 13);
tor_free(cp); tor_free(cp);
/* Long command */ /* Long command */
@ -137,8 +137,8 @@ test_ext_or_write_command(void *arg)
buf, 65535), ==, 0); buf, 65535), ==, 0);
cp = buf_get_contents(TO_CONN(c1)->outbuf, &sz); cp = buf_get_contents(TO_CONN(c1)->outbuf, &sz);
tt_int_op(sz, ==, 65539); tt_int_op(sz, ==, 65539);
test_mem_op(cp, ==, "\xf0\x0d\xff\xff", 4); tt_mem_op(cp, ==, "\xf0\x0d\xff\xff", 4);
test_mem_op(cp+4, ==, buf, 65535); tt_mem_op(cp+4, ==, buf, 65535);
tor_free(cp); tor_free(cp);
done: done:
@ -181,7 +181,7 @@ test_ext_or_init_auth(void *arg)
/* Shouldn't be initialized already, or our tests will be a bit /* Shouldn't be initialized already, or our tests will be a bit
* meaningless */ * meaningless */
ext_or_auth_cookie = tor_malloc_zero(32); ext_or_auth_cookie = tor_malloc_zero(32);
test_assert(tor_mem_is_zero((char*)ext_or_auth_cookie, 32)); tt_assert(tor_mem_is_zero((char*)ext_or_auth_cookie, 32));
/* Now make sure we use a temporary file */ /* Now make sure we use a temporary file */
fn = get_fname("ext_cookie_file"); fn = get_fname("ext_cookie_file");
@ -203,14 +203,14 @@ test_ext_or_init_auth(void *arg)
cp = read_file_to_str(fn, RFTS_BIN, &st); cp = read_file_to_str(fn, RFTS_BIN, &st);
tt_ptr_op(cp, !=, NULL); tt_ptr_op(cp, !=, NULL);
tt_u64_op((uint64_t)st.st_size, ==, 64); tt_u64_op((uint64_t)st.st_size, ==, 64);
test_memeq(cp, "! Extended ORPort Auth Cookie !\x0a", 32); tt_mem_op(cp,==, "! Extended ORPort Auth Cookie !\x0a", 32);
test_memeq(cp+32, ext_or_auth_cookie, 32); tt_mem_op(cp+32,==, ext_or_auth_cookie, 32);
memcpy(cookie0, ext_or_auth_cookie, 32); memcpy(cookie0, ext_or_auth_cookie, 32);
test_assert(!tor_mem_is_zero((char*)ext_or_auth_cookie, 32)); tt_assert(!tor_mem_is_zero((char*)ext_or_auth_cookie, 32));
/* Operation should be idempotent. */ /* Operation should be idempotent. */
tt_int_op(0, ==, init_ext_or_cookie_authentication(1)); tt_int_op(0, ==, init_ext_or_cookie_authentication(1));
test_memeq(cookie0, ext_or_auth_cookie, 32); tt_mem_op(cookie0,==, ext_or_auth_cookie, 32);
done: done:
tor_free(cp); tor_free(cp);
@ -280,15 +280,15 @@ test_ext_or_cookie_auth(void *arg)
46+32+32); 46+32+32);
crypto_hmac_sha256(hmac2, (char*)ext_or_auth_cookie, 32, client_hash_input, crypto_hmac_sha256(hmac2, (char*)ext_or_auth_cookie, 32, client_hash_input,
46+32+32); 46+32+32);
test_memeq(hmac1, reply, 32); tt_mem_op(hmac1,==, reply, 32);
test_memeq(hmac2, client_hash, 32); tt_mem_op(hmac2,==, client_hash, 32);
/* Now do it again and make sure that the results are *different* */ /* Now do it again and make sure that the results are *different* */
tt_int_op(0, ==, tt_int_op(0, ==,
handle_client_auth_nonce(client_nonce, 32, &client_hash2, &reply2, handle_client_auth_nonce(client_nonce, 32, &client_hash2, &reply2,
&reply_len)); &reply_len));
test_memneq(reply2, reply, reply_len); tt_mem_op(reply2,!=, reply, reply_len);
test_memneq(client_hash2, client_hash, 32); tt_mem_op(client_hash2,!=, client_hash, 32);
/* But that this one checks out too. */ /* But that this one checks out too. */
memcpy(server_hash_input+46+32, reply2+32, 32); memcpy(server_hash_input+46+32, reply2+32, 32);
memcpy(client_hash_input+46+32, reply2+32, 32); memcpy(client_hash_input+46+32, reply2+32, 32);
@ -297,8 +297,8 @@ test_ext_or_cookie_auth(void *arg)
46+32+32); 46+32+32);
crypto_hmac_sha256(hmac2, (char*)ext_or_auth_cookie, 32, client_hash_input, crypto_hmac_sha256(hmac2, (char*)ext_or_auth_cookie, 32, client_hash_input,
46+32+32); 46+32+32);
test_memeq(hmac1, reply2, 32); tt_mem_op(hmac1,==, reply2, 32);
test_memeq(hmac2, client_hash2, 32); tt_mem_op(hmac2,==, client_hash2, 32);
done: done:
tor_free(reply); tor_free(reply);
@ -339,7 +339,7 @@ test_ext_or_cookie_auth_testvec(void *arg)
&reply_len)); &reply_len));
tt_ptr_op(reply, !=, NULL ); tt_ptr_op(reply, !=, NULL );
tt_uint_op(reply_len, ==, 64); tt_uint_op(reply_len, ==, 64);
test_memeq(reply+32, "te road There is always another ", 32); tt_mem_op(reply+32,==, "te road There is always another ", 32);
/* HMACSHA256("Gliding wrapt in a brown mantle," /* HMACSHA256("Gliding wrapt in a brown mantle,"
* "ExtORPort authentication server-to-client hash" * "ExtORPort authentication server-to-client hash"
* "But when I look ahead up the write road There is always another "); * "But when I look ahead up the write road There is always another ");

View File

@ -84,8 +84,8 @@ test_hs_desc_event(void *arg)
STR_HS_ID); STR_HS_ID);
expected_msg = "650 HS_DESC REQUESTED "STR_HS_ADDR" NO_AUTH "\ expected_msg = "650 HS_DESC REQUESTED "STR_HS_ADDR" NO_AUTH "\
STR_HSDIR_EXIST_LONGNAME" "STR_HS_ID"\r\n"; STR_HSDIR_EXIST_LONGNAME" "STR_HS_ID"\r\n";
test_assert(received_msg); tt_assert(received_msg);
test_streq(received_msg, expected_msg); tt_str_op(received_msg,==, expected_msg);
tor_free(received_msg); tor_free(received_msg);
/* test received event */ /* test received event */
@ -93,8 +93,8 @@ test_hs_desc_event(void *arg)
control_event_hs_descriptor_received(&rend_query, HSDIR_EXIST_ID); control_event_hs_descriptor_received(&rend_query, HSDIR_EXIST_ID);
expected_msg = "650 HS_DESC RECEIVED "STR_HS_ADDR" BASIC_AUTH "\ expected_msg = "650 HS_DESC RECEIVED "STR_HS_ADDR" BASIC_AUTH "\
STR_HSDIR_EXIST_LONGNAME"\r\n"; STR_HSDIR_EXIST_LONGNAME"\r\n";
test_assert(received_msg); tt_assert(received_msg);
test_streq(received_msg, expected_msg); tt_str_op(received_msg,==, expected_msg);
tor_free(received_msg); tor_free(received_msg);
/* test failed event */ /* test failed event */
@ -102,8 +102,8 @@ test_hs_desc_event(void *arg)
control_event_hs_descriptor_failed(&rend_query, HSDIR_NONE_EXIST_ID); control_event_hs_descriptor_failed(&rend_query, HSDIR_NONE_EXIST_ID);
expected_msg = "650 HS_DESC FAILED "STR_HS_ADDR" STEALTH_AUTH "\ expected_msg = "650 HS_DESC FAILED "STR_HS_ADDR" STEALTH_AUTH "\
STR_HSDIR_NONE_EXIST_LONGNAME"\r\n"; STR_HSDIR_NONE_EXIST_LONGNAME"\r\n";
test_assert(received_msg); tt_assert(received_msg);
test_streq(received_msg, expected_msg); tt_str_op(received_msg,==, expected_msg);
tor_free(received_msg); tor_free(received_msg);
/* test invalid auth type */ /* test invalid auth type */
@ -111,8 +111,8 @@ test_hs_desc_event(void *arg)
control_event_hs_descriptor_failed(&rend_query, HSDIR_EXIST_ID); control_event_hs_descriptor_failed(&rend_query, HSDIR_EXIST_ID);
expected_msg = "650 HS_DESC FAILED "STR_HS_ADDR" UNKNOWN "\ expected_msg = "650 HS_DESC FAILED "STR_HS_ADDR" UNKNOWN "\
STR_HSDIR_EXIST_LONGNAME"\r\n"; STR_HSDIR_EXIST_LONGNAME"\r\n";
test_assert(received_msg); tt_assert(received_msg);
test_streq(received_msg, expected_msg); tt_str_op(received_msg,==, expected_msg);
tor_free(received_msg); tor_free(received_msg);
done: done:

View File

@ -290,48 +290,48 @@ do_parse_test(uint8_t *plaintext, size_t plaintext_len, int phase)
/* Get a key */ /* Get a key */
k = crypto_pk_new(); k = crypto_pk_new();
test_assert(k); tt_assert(k);
r = crypto_pk_read_private_key_from_string(k, AUTHORITY_SIGNKEY_1, -1); r = crypto_pk_read_private_key_from_string(k, AUTHORITY_SIGNKEY_1, -1);
test_assert(!r); tt_assert(!r);
/* Get digest for future comparison */ /* Get digest for future comparison */
r = crypto_pk_get_digest(k, digest); r = crypto_pk_get_digest(k, digest);
test_assert(r >= 0); tt_assert(r >= 0);
/* Make a cell out of it */ /* Make a cell out of it */
r = make_intro_from_plaintext( r = make_intro_from_plaintext(
plaintext, plaintext_len, plaintext, plaintext_len,
k, (void **)(&cell)); k, (void **)(&cell));
test_assert(r > 0); tt_assert(r > 0);
test_assert(cell); tt_assert(cell);
cell_len = r; cell_len = r;
/* Do early parsing */ /* Do early parsing */
parsed_req = rend_service_begin_parse_intro(cell, cell_len, 2, &err_msg); parsed_req = rend_service_begin_parse_intro(cell, cell_len, 2, &err_msg);
test_assert(parsed_req); tt_assert(parsed_req);
test_assert(!err_msg); tt_assert(!err_msg);
test_memeq(parsed_req->pk, digest, DIGEST_LEN); tt_mem_op(parsed_req->pk,==, digest, DIGEST_LEN);
test_assert(parsed_req->ciphertext); tt_assert(parsed_req->ciphertext);
test_assert(parsed_req->ciphertext_len > 0); tt_assert(parsed_req->ciphertext_len > 0);
if (phase == EARLY_PARSE_ONLY) if (phase == EARLY_PARSE_ONLY)
goto done; goto done;
/* Do decryption */ /* Do decryption */
r = rend_service_decrypt_intro(parsed_req, k, &err_msg); r = rend_service_decrypt_intro(parsed_req, k, &err_msg);
test_assert(!r); tt_assert(!r);
test_assert(!err_msg); tt_assert(!err_msg);
test_assert(parsed_req->plaintext); tt_assert(parsed_req->plaintext);
test_assert(parsed_req->plaintext_len > 0); tt_assert(parsed_req->plaintext_len > 0);
if (phase == DECRYPT_ONLY) if (phase == DECRYPT_ONLY)
goto done; goto done;
/* Do late parsing */ /* Do late parsing */
r = rend_service_parse_intro_plaintext(parsed_req, &err_msg); r = rend_service_parse_intro_plaintext(parsed_req, &err_msg);
test_assert(!r); tt_assert(!r);
test_assert(!err_msg); tt_assert(!err_msg);
test_assert(parsed_req->parsed); tt_assert(parsed_req->parsed);
done: done:
tor_free(cell); tor_free(cell);
@ -371,14 +371,14 @@ make_intro_from_plaintext(
/* Compute key digest (will be first DIGEST_LEN octets of cell) */ /* Compute key digest (will be first DIGEST_LEN octets of cell) */
r = crypto_pk_get_digest(key, cell); r = crypto_pk_get_digest(key, cell);
test_assert(r >= 0); tt_assert(r >= 0);
/* Do encryption */ /* Do encryption */
r = crypto_pk_public_hybrid_encrypt( r = crypto_pk_public_hybrid_encrypt(
key, cell + DIGEST_LEN, ciphertext_size, key, cell + DIGEST_LEN, ciphertext_size,
buf, len, buf, len,
PK_PKCS1_OAEP_PADDING, 0); PK_PKCS1_OAEP_PADDING, 0);
test_assert(r >= 0); tt_assert(r >= 0);
/* Figure out cell length */ /* Figure out cell length */
cell_len = DIGEST_LEN + r; cell_len = DIGEST_LEN + r;

View File

@ -108,7 +108,7 @@ test_md_cache(void *data)
md2 = smartlist_get(added, 0); md2 = smartlist_get(added, 0);
/* And it should have gotten removed from 'wanted' */ /* And it should have gotten removed from 'wanted' */
tt_int_op(smartlist_len(wanted), ==, 1); tt_int_op(smartlist_len(wanted), ==, 1);
test_mem_op(smartlist_get(wanted, 0), ==, d3, DIGEST256_LEN); tt_mem_op(smartlist_get(wanted, 0), ==, d3, DIGEST256_LEN);
smartlist_free(added); smartlist_free(added);
added = NULL; added = NULL;
@ -144,18 +144,18 @@ test_md_cache(void *data)
tt_int_op(md1->bodylen, ==, strlen(test_md1)); tt_int_op(md1->bodylen, ==, strlen(test_md1));
tt_int_op(md2->bodylen, ==, strlen(test_md2)); tt_int_op(md2->bodylen, ==, strlen(test_md2));
tt_int_op(md3->bodylen, ==, strlen(test_md3_noannotation)); tt_int_op(md3->bodylen, ==, strlen(test_md3_noannotation));
test_mem_op(md1->body, ==, test_md1, strlen(test_md1)); tt_mem_op(md1->body, ==, test_md1, strlen(test_md1));
test_mem_op(md2->body, ==, test_md2, strlen(test_md2)); tt_mem_op(md2->body, ==, test_md2, strlen(test_md2));
test_mem_op(md3->body, ==, test_md3_noannotation, tt_mem_op(md3->body, ==, test_md3_noannotation,
strlen(test_md3_noannotation)); strlen(test_md3_noannotation));
tor_asprintf(&fn, "%s"PATH_SEPARATOR"cached-microdescs.new", tor_asprintf(&fn, "%s"PATH_SEPARATOR"cached-microdescs.new",
options->DataDirectory); options->DataDirectory);
s = read_file_to_str(fn, RFTS_BIN, NULL); s = read_file_to_str(fn, RFTS_BIN, NULL);
tt_assert(s); tt_assert(s);
test_mem_op(md1->body, ==, s + md1->off, md1->bodylen); tt_mem_op(md1->body, ==, s + md1->off, md1->bodylen);
test_mem_op(md2->body, ==, s + md2->off, md2->bodylen); tt_mem_op(md2->body, ==, s + md2->off, md2->bodylen);
test_mem_op(md3->body, ==, s + md3->off, md3->bodylen); tt_mem_op(md3->body, ==, s + md3->off, md3->bodylen);
tt_ptr_op(md1->family, ==, NULL); tt_ptr_op(md1->family, ==, NULL);
tt_ptr_op(md3->family, !=, NULL); tt_ptr_op(md3->family, !=, NULL);
@ -180,9 +180,9 @@ test_md_cache(void *data)
tor_asprintf(&fn, "%s"PATH_SEPARATOR"cached-microdescs", tor_asprintf(&fn, "%s"PATH_SEPARATOR"cached-microdescs",
options->DataDirectory); options->DataDirectory);
s = read_file_to_str(fn, RFTS_BIN, NULL); s = read_file_to_str(fn, RFTS_BIN, NULL);
test_mem_op(md1->body, ==, s + md1->off, strlen(test_md1)); tt_mem_op(md1->body, ==, s + md1->off, strlen(test_md1));
test_mem_op(md2->body, ==, s + md2->off, strlen(test_md2)); tt_mem_op(md2->body, ==, s + md2->off, strlen(test_md2));
test_mem_op(md3->body, ==, s + md3->off, strlen(test_md3_noannotation)); tt_mem_op(md3->body, ==, s + md3->off, strlen(test_md3_noannotation));
/* Okay, now we are going to forget about the cache entirely, and reload it /* Okay, now we are going to forget about the cache entirely, and reload it
* from the disk. */ * from the disk. */
@ -191,12 +191,12 @@ test_md_cache(void *data)
md1 = microdesc_cache_lookup_by_digest256(mc, d1); md1 = microdesc_cache_lookup_by_digest256(mc, d1);
md2 = microdesc_cache_lookup_by_digest256(mc, d2); md2 = microdesc_cache_lookup_by_digest256(mc, d2);
md3 = microdesc_cache_lookup_by_digest256(mc, d3); md3 = microdesc_cache_lookup_by_digest256(mc, d3);
test_assert(md1); tt_assert(md1);
test_assert(md2); tt_assert(md2);
test_assert(md3); tt_assert(md3);
test_mem_op(md1->body, ==, s + md1->off, strlen(test_md1)); tt_mem_op(md1->body, ==, s + md1->off, strlen(test_md1));
test_mem_op(md2->body, ==, s + md2->off, strlen(test_md2)); tt_mem_op(md2->body, ==, s + md2->off, strlen(test_md2));
test_mem_op(md3->body, ==, s + md3->off, strlen(test_md3_noannotation)); tt_mem_op(md3->body, ==, s + md3->off, strlen(test_md3_noannotation));
tt_int_op(md1->last_listed, ==, time1); tt_int_op(md1->last_listed, ==, time1);
tt_int_op(md2->last_listed, ==, time2); tt_int_op(md2->last_listed, ==, time2);

View File

@ -23,9 +23,9 @@ test_nodelist_node_get_verbose_nickname_by_id_null_node(void *arg)
(void) arg; (void) arg;
/* make sure node_get_by_id returns NULL */ /* make sure node_get_by_id returns NULL */
test_assert(!node_get_by_id(ID)); tt_assert(!node_get_by_id(ID));
node_get_verbose_nickname_by_id(ID, vname); node_get_verbose_nickname_by_id(ID, vname);
test_streq(vname, "$AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); tt_str_op(vname,==, "$AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
done: done:
return; return;
} }
@ -54,7 +54,7 @@ test_nodelist_node_get_verbose_nickname_not_named(void *arg)
"\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA", "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA",
DIGEST_LEN); DIGEST_LEN);
node_get_verbose_nickname(&mock_node, vname); node_get_verbose_nickname(&mock_node, vname);
test_streq(vname, "$AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA~TestOR"); tt_str_op(vname,==, "$AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA~TestOR");
done: done:
return; return;

View File

@ -48,16 +48,16 @@ test_policy_summary_helper(const char *policy_str,
line.next = NULL; line.next = NULL;
r = policies_parse_exit_policy(&line, &policy, 1, 0, 0, 1); r = policies_parse_exit_policy(&line, &policy, 1, 0, 0, 1);
test_eq(r, 0); tt_int_op(r,==, 0);
summary = policy_summarize(policy, AF_INET); summary = policy_summarize(policy, AF_INET);
test_assert(summary != NULL); tt_assert(summary != NULL);
test_streq(summary, expected_summary); tt_str_op(summary,==, expected_summary);
short_policy = parse_short_policy(summary); short_policy = parse_short_policy(summary);
tt_assert(short_policy); tt_assert(short_policy);
summary_after = write_short_policy(short_policy); summary_after = write_short_policy(short_policy);
test_streq(summary, summary_after); tt_str_op(summary,==, summary_after);
done: done:
tor_free(summary_after); tor_free(summary_after);
@ -86,104 +86,104 @@ test_policies_general(void *arg)
policy = smartlist_new(); policy = smartlist_new();
p = router_parse_addr_policy_item_from_string("reject 192.168.0.0/16:*",-1); p = router_parse_addr_policy_item_from_string("reject 192.168.0.0/16:*",-1);
test_assert(p != NULL); tt_assert(p != NULL);
test_eq(ADDR_POLICY_REJECT, p->policy_type); tt_int_op(ADDR_POLICY_REJECT,==, p->policy_type);
tor_addr_from_ipv4h(&tar, 0xc0a80000u); tor_addr_from_ipv4h(&tar, 0xc0a80000u);
test_eq(0, tor_addr_compare(&p->addr, &tar, CMP_EXACT)); tt_int_op(0,==, tor_addr_compare(&p->addr, &tar, CMP_EXACT));
test_eq(16, p->maskbits); tt_int_op(16,==, p->maskbits);
test_eq(1, p->prt_min); tt_int_op(1,==, p->prt_min);
test_eq(65535, p->prt_max); tt_int_op(65535,==, p->prt_max);
smartlist_add(policy, p); smartlist_add(policy, p);
tor_addr_from_ipv4h(&tar, 0x01020304u); tor_addr_from_ipv4h(&tar, 0x01020304u);
test_assert(ADDR_POLICY_ACCEPTED == tt_assert(ADDR_POLICY_ACCEPTED ==
compare_tor_addr_to_addr_policy(&tar, 2, policy)); compare_tor_addr_to_addr_policy(&tar, 2, policy));
tor_addr_make_unspec(&tar); tor_addr_make_unspec(&tar);
test_assert(ADDR_POLICY_PROBABLY_ACCEPTED == tt_assert(ADDR_POLICY_PROBABLY_ACCEPTED ==
compare_tor_addr_to_addr_policy(&tar, 2, policy)); compare_tor_addr_to_addr_policy(&tar, 2, policy));
tor_addr_from_ipv4h(&tar, 0xc0a80102); tor_addr_from_ipv4h(&tar, 0xc0a80102);
test_assert(ADDR_POLICY_REJECTED == tt_assert(ADDR_POLICY_REJECTED ==
compare_tor_addr_to_addr_policy(&tar, 2, policy)); compare_tor_addr_to_addr_policy(&tar, 2, policy));
test_assert(0 == policies_parse_exit_policy(NULL, &policy2, 1, 1, 0, 1)); tt_assert(0 == policies_parse_exit_policy(NULL, &policy2, 1, 1, 0, 1));
test_assert(policy2); tt_assert(policy2);
policy3 = smartlist_new(); policy3 = smartlist_new();
p = router_parse_addr_policy_item_from_string("reject *:*",-1); p = router_parse_addr_policy_item_from_string("reject *:*",-1);
test_assert(p != NULL); tt_assert(p != NULL);
smartlist_add(policy3, p); smartlist_add(policy3, p);
p = router_parse_addr_policy_item_from_string("accept *:*",-1); p = router_parse_addr_policy_item_from_string("accept *:*",-1);
test_assert(p != NULL); tt_assert(p != NULL);
smartlist_add(policy3, p); smartlist_add(policy3, p);
policy4 = smartlist_new(); policy4 = smartlist_new();
p = router_parse_addr_policy_item_from_string("accept *:443",-1); p = router_parse_addr_policy_item_from_string("accept *:443",-1);
test_assert(p != NULL); tt_assert(p != NULL);
smartlist_add(policy4, p); smartlist_add(policy4, p);
p = router_parse_addr_policy_item_from_string("accept *:443",-1); p = router_parse_addr_policy_item_from_string("accept *:443",-1);
test_assert(p != NULL); tt_assert(p != NULL);
smartlist_add(policy4, p); smartlist_add(policy4, p);
policy5 = smartlist_new(); policy5 = smartlist_new();
p = router_parse_addr_policy_item_from_string("reject 0.0.0.0/8:*",-1); p = router_parse_addr_policy_item_from_string("reject 0.0.0.0/8:*",-1);
test_assert(p != NULL); tt_assert(p != NULL);
smartlist_add(policy5, p); smartlist_add(policy5, p);
p = router_parse_addr_policy_item_from_string("reject 169.254.0.0/16:*",-1); p = router_parse_addr_policy_item_from_string("reject 169.254.0.0/16:*",-1);
test_assert(p != NULL); tt_assert(p != NULL);
smartlist_add(policy5, p); smartlist_add(policy5, p);
p = router_parse_addr_policy_item_from_string("reject 127.0.0.0/8:*",-1); p = router_parse_addr_policy_item_from_string("reject 127.0.0.0/8:*",-1);
test_assert(p != NULL); tt_assert(p != NULL);
smartlist_add(policy5, p); smartlist_add(policy5, p);
p = router_parse_addr_policy_item_from_string("reject 192.168.0.0/16:*",-1); p = router_parse_addr_policy_item_from_string("reject 192.168.0.0/16:*",-1);
test_assert(p != NULL); tt_assert(p != NULL);
smartlist_add(policy5, p); smartlist_add(policy5, p);
p = router_parse_addr_policy_item_from_string("reject 10.0.0.0/8:*",-1); p = router_parse_addr_policy_item_from_string("reject 10.0.0.0/8:*",-1);
test_assert(p != NULL); tt_assert(p != NULL);
smartlist_add(policy5, p); smartlist_add(policy5, p);
p = router_parse_addr_policy_item_from_string("reject 172.16.0.0/12:*",-1); p = router_parse_addr_policy_item_from_string("reject 172.16.0.0/12:*",-1);
test_assert(p != NULL); tt_assert(p != NULL);
smartlist_add(policy5, p); smartlist_add(policy5, p);
p = router_parse_addr_policy_item_from_string("reject 80.190.250.90:*",-1); p = router_parse_addr_policy_item_from_string("reject 80.190.250.90:*",-1);
test_assert(p != NULL); tt_assert(p != NULL);
smartlist_add(policy5, p); smartlist_add(policy5, p);
p = router_parse_addr_policy_item_from_string("reject *:1-65534",-1); p = router_parse_addr_policy_item_from_string("reject *:1-65534",-1);
test_assert(p != NULL); tt_assert(p != NULL);
smartlist_add(policy5, p); smartlist_add(policy5, p);
p = router_parse_addr_policy_item_from_string("reject *:65535",-1); p = router_parse_addr_policy_item_from_string("reject *:65535",-1);
test_assert(p != NULL); tt_assert(p != NULL);
smartlist_add(policy5, p); smartlist_add(policy5, p);
p = router_parse_addr_policy_item_from_string("accept *:1-65535",-1); p = router_parse_addr_policy_item_from_string("accept *:1-65535",-1);
test_assert(p != NULL); tt_assert(p != NULL);
smartlist_add(policy5, p); smartlist_add(policy5, p);
policy6 = smartlist_new(); policy6 = smartlist_new();
p = router_parse_addr_policy_item_from_string("accept 43.3.0.0/9:*",-1); p = router_parse_addr_policy_item_from_string("accept 43.3.0.0/9:*",-1);
test_assert(p != NULL); tt_assert(p != NULL);
smartlist_add(policy6, p); smartlist_add(policy6, p);
policy7 = smartlist_new(); policy7 = smartlist_new();
p = router_parse_addr_policy_item_from_string("accept 0.0.0.0/8:*",-1); p = router_parse_addr_policy_item_from_string("accept 0.0.0.0/8:*",-1);
test_assert(p != NULL); tt_assert(p != NULL);
smartlist_add(policy7, p); smartlist_add(policy7, p);
test_assert(!exit_policy_is_general_exit(policy)); tt_assert(!exit_policy_is_general_exit(policy));
test_assert(exit_policy_is_general_exit(policy2)); tt_assert(exit_policy_is_general_exit(policy2));
test_assert(!exit_policy_is_general_exit(NULL)); tt_assert(!exit_policy_is_general_exit(NULL));
test_assert(!exit_policy_is_general_exit(policy3)); tt_assert(!exit_policy_is_general_exit(policy3));
test_assert(!exit_policy_is_general_exit(policy4)); tt_assert(!exit_policy_is_general_exit(policy4));
test_assert(!exit_policy_is_general_exit(policy5)); tt_assert(!exit_policy_is_general_exit(policy5));
test_assert(!exit_policy_is_general_exit(policy6)); tt_assert(!exit_policy_is_general_exit(policy6));
test_assert(!exit_policy_is_general_exit(policy7)); tt_assert(!exit_policy_is_general_exit(policy7));
test_assert(cmp_addr_policies(policy, policy2)); tt_assert(cmp_addr_policies(policy, policy2));
test_assert(cmp_addr_policies(policy, NULL)); tt_assert(cmp_addr_policies(policy, NULL));
test_assert(!cmp_addr_policies(policy2, policy2)); tt_assert(!cmp_addr_policies(policy2, policy2));
test_assert(!cmp_addr_policies(NULL, NULL)); tt_assert(!cmp_addr_policies(NULL, NULL));
test_assert(!policy_is_reject_star(policy2, AF_INET)); tt_assert(!policy_is_reject_star(policy2, AF_INET));
test_assert(policy_is_reject_star(policy, AF_INET)); tt_assert(policy_is_reject_star(policy, AF_INET));
test_assert(policy_is_reject_star(NULL, AF_INET)); tt_assert(policy_is_reject_star(NULL, AF_INET));
addr_policy_list_free(policy); addr_policy_list_free(policy);
policy = NULL; policy = NULL;
@ -193,11 +193,11 @@ test_policies_general(void *arg)
line.key = (char*)"foo"; line.key = (char*)"foo";
line.value = (char*)"accept *:80,reject private:*,reject *:*"; line.value = (char*)"accept *:80,reject private:*,reject *:*";
line.next = NULL; line.next = NULL;
test_assert(0 == policies_parse_exit_policy(&line, &policy, 1, 0, 0, 1)); tt_assert(0 == policies_parse_exit_policy(&line, &policy, 1, 0, 0, 1));
test_assert(policy); tt_assert(policy);
//test_streq(policy->string, "accept *:80"); //test_streq(policy->string, "accept *:80");
//test_streq(policy->next->string, "reject *:*"); //test_streq(policy->next->string, "reject *:*");
test_eq(smartlist_len(policy), 4); tt_int_op(smartlist_len(policy),==, 4);
/* test policy summaries */ /* test policy summaries */
/* check if we properly ignore private IP addresses */ /* check if we properly ignore private IP addresses */
@ -359,7 +359,7 @@ test_dump_exit_policy_to_string(void *arg)
ri->exit_policy = NULL; // expecting "reject *:*" ri->exit_policy = NULL; // expecting "reject *:*"
ep = router_dump_exit_policy_to_string(ri,1,1); ep = router_dump_exit_policy_to_string(ri,1,1);
test_streq("reject *:*",ep); tt_str_op("reject *:*",==, ep);
tor_free(ep); tor_free(ep);
@ -372,7 +372,7 @@ test_dump_exit_policy_to_string(void *arg)
ep = router_dump_exit_policy_to_string(ri,1,1); ep = router_dump_exit_policy_to_string(ri,1,1);
test_streq("accept *:*",ep); tt_str_op("accept *:*",==, ep);
tor_free(ep); tor_free(ep);
@ -382,7 +382,7 @@ test_dump_exit_policy_to_string(void *arg)
ep = router_dump_exit_policy_to_string(ri,1,1); ep = router_dump_exit_policy_to_string(ri,1,1);
test_streq("accept *:*\nreject *:25",ep); tt_str_op("accept *:*\nreject *:25",==, ep);
tor_free(ep); tor_free(ep);
@ -393,7 +393,7 @@ test_dump_exit_policy_to_string(void *arg)
ep = router_dump_exit_policy_to_string(ri,1,1); ep = router_dump_exit_policy_to_string(ri,1,1);
test_streq("accept *:*\nreject *:25\nreject 8.8.8.8:*",ep); tt_str_op("accept *:*\nreject *:25\nreject 8.8.8.8:*",==, ep);
tor_free(ep); tor_free(ep);
policy_entry = policy_entry =
@ -403,8 +403,8 @@ test_dump_exit_policy_to_string(void *arg)
ep = router_dump_exit_policy_to_string(ri,1,1); ep = router_dump_exit_policy_to_string(ri,1,1);
test_streq("accept *:*\nreject *:25\nreject 8.8.8.8:*\n" tt_str_op("accept *:*\nreject *:25\nreject 8.8.8.8:*\n"
"reject6 [fc00::]/7:*",ep); "reject6 [fc00::]/7:*",==, ep);
tor_free(ep); tor_free(ep);
policy_entry = policy_entry =
@ -414,8 +414,8 @@ test_dump_exit_policy_to_string(void *arg)
ep = router_dump_exit_policy_to_string(ri,1,1); ep = router_dump_exit_policy_to_string(ri,1,1);
test_streq("accept *:*\nreject *:25\nreject 8.8.8.8:*\n" tt_str_op("accept *:*\nreject *:25\nreject 8.8.8.8:*\n"
"reject6 [fc00::]/7:*\naccept6 [c000::]/3:*",ep); "reject6 [fc00::]/7:*\naccept6 [c000::]/3:*",==, ep);
done: done:

View File

@ -39,63 +39,63 @@ test_pt_parsing(void)
/* incomplete cmethod */ /* incomplete cmethod */
strlcpy(line,"CMETHOD trebuchet",sizeof(line)); strlcpy(line,"CMETHOD trebuchet",sizeof(line));
test_assert(parse_cmethod_line(line, mp) < 0); tt_assert(parse_cmethod_line(line, mp) < 0);
reset_mp(mp); reset_mp(mp);
/* wrong proxy type */ /* wrong proxy type */
strlcpy(line,"CMETHOD trebuchet dog 127.0.0.1:1999",sizeof(line)); strlcpy(line,"CMETHOD trebuchet dog 127.0.0.1:1999",sizeof(line));
test_assert(parse_cmethod_line(line, mp) < 0); tt_assert(parse_cmethod_line(line, mp) < 0);
reset_mp(mp); reset_mp(mp);
/* wrong addrport */ /* wrong addrport */
strlcpy(line,"CMETHOD trebuchet socks4 abcd",sizeof(line)); strlcpy(line,"CMETHOD trebuchet socks4 abcd",sizeof(line));
test_assert(parse_cmethod_line(line, mp) < 0); tt_assert(parse_cmethod_line(line, mp) < 0);
reset_mp(mp); reset_mp(mp);
/* correct line */ /* correct line */
strlcpy(line,"CMETHOD trebuchet socks5 127.0.0.1:1999",sizeof(line)); strlcpy(line,"CMETHOD trebuchet socks5 127.0.0.1:1999",sizeof(line));
test_assert(parse_cmethod_line(line, mp) == 0); tt_assert(parse_cmethod_line(line, mp) == 0);
test_assert(smartlist_len(mp->transports) == 1); tt_assert(smartlist_len(mp->transports) == 1);
transport = smartlist_get(mp->transports, 0); transport = smartlist_get(mp->transports, 0);
/* test registered address of transport */ /* test registered address of transport */
tor_addr_parse(&test_addr, "127.0.0.1"); tor_addr_parse(&test_addr, "127.0.0.1");
test_assert(tor_addr_eq(&test_addr, &transport->addr)); tt_assert(tor_addr_eq(&test_addr, &transport->addr));
/* test registered port of transport */ /* test registered port of transport */
test_assert(transport->port == 1999); tt_assert(transport->port == 1999);
/* test registered SOCKS version of transport */ /* test registered SOCKS version of transport */
test_assert(transport->socks_version == PROXY_SOCKS5); tt_assert(transport->socks_version == PROXY_SOCKS5);
/* test registered name of transport */ /* test registered name of transport */
test_streq(transport->name, "trebuchet"); tt_str_op(transport->name,==, "trebuchet");
reset_mp(mp); reset_mp(mp);
/* incomplete smethod */ /* incomplete smethod */
strlcpy(line,"SMETHOD trebuchet",sizeof(line)); strlcpy(line,"SMETHOD trebuchet",sizeof(line));
test_assert(parse_smethod_line(line, mp) < 0); tt_assert(parse_smethod_line(line, mp) < 0);
reset_mp(mp); reset_mp(mp);
/* wrong addr type */ /* wrong addr type */
strlcpy(line,"SMETHOD trebuchet abcd",sizeof(line)); strlcpy(line,"SMETHOD trebuchet abcd",sizeof(line));
test_assert(parse_smethod_line(line, mp) < 0); tt_assert(parse_smethod_line(line, mp) < 0);
reset_mp(mp); reset_mp(mp);
/* cowwect */ /* cowwect */
strlcpy(line,"SMETHOD trebuchy 127.0.0.2:2999",sizeof(line)); strlcpy(line,"SMETHOD trebuchy 127.0.0.2:2999",sizeof(line));
test_assert(parse_smethod_line(line, mp) == 0); tt_assert(parse_smethod_line(line, mp) == 0);
test_assert(smartlist_len(mp->transports) == 1); tt_assert(smartlist_len(mp->transports) == 1);
transport = smartlist_get(mp->transports, 0); transport = smartlist_get(mp->transports, 0);
/* test registered address of transport */ /* test registered address of transport */
tor_addr_parse(&test_addr, "127.0.0.2"); tor_addr_parse(&test_addr, "127.0.0.2");
test_assert(tor_addr_eq(&test_addr, &transport->addr)); tt_assert(tor_addr_eq(&test_addr, &transport->addr));
/* test registered port of transport */ /* test registered port of transport */
test_assert(transport->port == 2999); tt_assert(transport->port == 2999);
/* test registered name of transport */ /* test registered name of transport */
test_streq(transport->name, "trebuchy"); tt_str_op(transport->name,==, "trebuchy");
reset_mp(mp); reset_mp(mp);
@ -103,7 +103,7 @@ test_pt_parsing(void)
strlcpy(line,"SMETHOD trebuchet 127.0.0.1:9999 " strlcpy(line,"SMETHOD trebuchet 127.0.0.1:9999 "
"ARGS:counterweight=3,sling=snappy", "ARGS:counterweight=3,sling=snappy",
sizeof(line)); sizeof(line));
test_assert(parse_smethod_line(line, mp) == 0); tt_assert(parse_smethod_line(line, mp) == 0);
tt_int_op(1, ==, smartlist_len(mp->transports)); tt_int_op(1, ==, smartlist_len(mp->transports));
{ {
const transport_t *transport = smartlist_get(mp->transports, 0); const transport_t *transport = smartlist_get(mp->transports, 0);
@ -118,15 +118,15 @@ test_pt_parsing(void)
/* unsupported version */ /* unsupported version */
strlcpy(line,"VERSION 666",sizeof(line)); strlcpy(line,"VERSION 666",sizeof(line));
test_assert(parse_version(line, mp) < 0); tt_assert(parse_version(line, mp) < 0);
/* incomplete VERSION */ /* incomplete VERSION */
strlcpy(line,"VERSION ",sizeof(line)); strlcpy(line,"VERSION ",sizeof(line));
test_assert(parse_version(line, mp) < 0); tt_assert(parse_version(line, mp) < 0);
/* correct VERSION */ /* correct VERSION */
strlcpy(line,"VERSION 1",sizeof(line)); strlcpy(line,"VERSION 1",sizeof(line));
test_assert(parse_version(line, mp) == 0); tt_assert(parse_version(line, mp) == 0);
done: done:
reset_mp(mp); reset_mp(mp);
@ -201,32 +201,32 @@ test_pt_protocol(void)
strlcpy(line,"VERSION 1",sizeof(line)); strlcpy(line,"VERSION 1",sizeof(line));
handle_proxy_line(line, mp); handle_proxy_line(line, mp);
test_assert(mp->conf_state == PT_PROTO_ACCEPTING_METHODS); tt_assert(mp->conf_state == PT_PROTO_ACCEPTING_METHODS);
strlcpy(line,"VERSION 1",sizeof(line)); strlcpy(line,"VERSION 1",sizeof(line));
handle_proxy_line(line, mp); handle_proxy_line(line, mp);
test_assert(mp->conf_state == PT_PROTO_BROKEN); tt_assert(mp->conf_state == PT_PROTO_BROKEN);
reset_mp(mp); reset_mp(mp);
strlcpy(line,"CMETHOD trebuchet socks5 127.0.0.1:1999",sizeof(line)); strlcpy(line,"CMETHOD trebuchet socks5 127.0.0.1:1999",sizeof(line));
handle_proxy_line(line, mp); handle_proxy_line(line, mp);
test_assert(mp->conf_state == PT_PROTO_BROKEN); tt_assert(mp->conf_state == PT_PROTO_BROKEN);
reset_mp(mp); reset_mp(mp);
/* correct protocol run: */ /* correct protocol run: */
strlcpy(line,"VERSION 1",sizeof(line)); strlcpy(line,"VERSION 1",sizeof(line));
handle_proxy_line(line, mp); handle_proxy_line(line, mp);
test_assert(mp->conf_state == PT_PROTO_ACCEPTING_METHODS); tt_assert(mp->conf_state == PT_PROTO_ACCEPTING_METHODS);
strlcpy(line,"CMETHOD trebuchet socks5 127.0.0.1:1999",sizeof(line)); strlcpy(line,"CMETHOD trebuchet socks5 127.0.0.1:1999",sizeof(line));
handle_proxy_line(line, mp); handle_proxy_line(line, mp);
test_assert(mp->conf_state == PT_PROTO_ACCEPTING_METHODS); tt_assert(mp->conf_state == PT_PROTO_ACCEPTING_METHODS);
strlcpy(line,"CMETHODS DONE",sizeof(line)); strlcpy(line,"CMETHODS DONE",sizeof(line));
handle_proxy_line(line, mp); handle_proxy_line(line, mp);
test_assert(mp->conf_state == PT_PROTO_CONFIGURED); tt_assert(mp->conf_state == PT_PROTO_CONFIGURED);
done: done:
reset_mp(mp); reset_mp(mp);
@ -378,19 +378,19 @@ test_pt_configure_proxy(void *arg)
for (i = 0 ; i < 5 ; i++) { for (i = 0 ; i < 5 ; i++) {
retval = configure_proxy(mp); retval = configure_proxy(mp);
/* retval should be zero because proxy hasn't finished configuring yet */ /* retval should be zero because proxy hasn't finished configuring yet */
test_assert(retval == 0); tt_int_op(retval, ==, 0);
/* check the number of registered transports */ /* check the number of registered transports */
test_assert(smartlist_len(mp->transports) == i+1); tt_assert(smartlist_len(mp->transports) == i+1);
/* check that the mp is still waiting for transports */ /* check that the mp is still waiting for transports */
test_assert(mp->conf_state == PT_PROTO_ACCEPTING_METHODS); tt_assert(mp->conf_state == PT_PROTO_ACCEPTING_METHODS);
} }
/* this last configure_proxy() should finalize the proxy configuration. */ /* this last configure_proxy() should finalize the proxy configuration. */
retval = configure_proxy(mp); retval = configure_proxy(mp);
/* retval should be 1 since the proxy finished configuring */ /* retval should be 1 since the proxy finished configuring */
test_assert(retval == 1); tt_int_op(retval, ==, 1);
/* check the mp state */ /* check the mp state */
test_assert(mp->conf_state == PT_PROTO_COMPLETED); tt_assert(mp->conf_state == PT_PROTO_COMPLETED);
tt_int_op(controlevent_n, ==, 5); tt_int_op(controlevent_n, ==, 5);
tt_int_op(controlevent_event, ==, EVENT_TRANSPORT_LAUNCHED); tt_int_op(controlevent_event, ==, EVENT_TRANSPORT_LAUNCHED);
@ -416,7 +416,7 @@ test_pt_configure_proxy(void *arg)
/* Get the bindaddr for "mock1" and check it against the bindaddr /* Get the bindaddr for "mock1" and check it against the bindaddr
that the mocked tor_get_lines_from_handle() generated. */ that the mocked tor_get_lines_from_handle() generated. */
transport_in_state = get_transport_in_state_by_name("mock1"); transport_in_state = get_transport_in_state_by_name("mock1");
test_assert(transport_in_state); tt_assert(transport_in_state);
smartlist_split_string(transport_info_sl, transport_in_state->value, smartlist_split_string(transport_info_sl, transport_in_state->value,
NULL, 0, 0); NULL, 0, 0);
name_of_transport = smartlist_get(transport_info_sl, 0); name_of_transport = smartlist_get(transport_info_sl, 0);
@ -468,7 +468,7 @@ test_get_pt_proxy_uri(void *arg)
ret = tor_addr_port_lookup(options->Socks4Proxy, ret = tor_addr_port_lookup(options->Socks4Proxy,
&options->Socks4ProxyAddr, &options->Socks4ProxyAddr,
&options->Socks4ProxyPort); &options->Socks4ProxyPort);
tt_assert(ret == 0); tt_int_op(ret, ==, 0);
uri = get_pt_proxy_uri(); uri = get_pt_proxy_uri();
tt_str_op(uri, ==, "socks4a://192.0.2.1:1080"); tt_str_op(uri, ==, "socks4a://192.0.2.1:1080");
tor_free(uri); tor_free(uri);
@ -479,7 +479,7 @@ test_get_pt_proxy_uri(void *arg)
ret = tor_addr_port_lookup(options->Socks5Proxy, ret = tor_addr_port_lookup(options->Socks5Proxy,
&options->Socks5ProxyAddr, &options->Socks5ProxyAddr,
&options->Socks5ProxyPort); &options->Socks5ProxyPort);
tt_assert(ret == 0); tt_int_op(ret, ==, 0);
uri = get_pt_proxy_uri(); uri = get_pt_proxy_uri();
tt_str_op(uri, ==, "socks5://192.0.2.1:1080"); tt_str_op(uri, ==, "socks5://192.0.2.1:1080");
tor_free(uri); tor_free(uri);
@ -499,7 +499,7 @@ test_get_pt_proxy_uri(void *arg)
ret = tor_addr_port_lookup(options->HTTPSProxy, ret = tor_addr_port_lookup(options->HTTPSProxy,
&options->HTTPSProxyAddr, &options->HTTPSProxyAddr,
&options->HTTPSProxyPort); &options->HTTPSProxyPort);
tt_assert(ret == 0); tt_int_op(ret, ==, 0);
uri = get_pt_proxy_uri(); uri = get_pt_proxy_uri();
tt_str_op(uri, ==, "http://192.0.2.1:80"); tt_str_op(uri, ==, "http://192.0.2.1:80");
tor_free(uri); tor_free(uri);
@ -517,7 +517,7 @@ test_get_pt_proxy_uri(void *arg)
ret = tor_addr_port_lookup(options->Socks4Proxy, ret = tor_addr_port_lookup(options->Socks4Proxy,
&options->Socks4ProxyAddr, &options->Socks4ProxyAddr,
&options->Socks4ProxyPort); &options->Socks4ProxyPort);
tt_assert(ret == 0); tt_int_op(ret, ==, 0);
uri = get_pt_proxy_uri(); uri = get_pt_proxy_uri();
tt_str_op(uri, ==, "socks4a://[2001:db8::1]:1080"); tt_str_op(uri, ==, "socks4a://[2001:db8::1]:1080");
tor_free(uri); tor_free(uri);

View File

@ -23,7 +23,7 @@ test_replaycache_alloc(void)
replaycache_t *r = NULL; replaycache_t *r = NULL;
r = replaycache_new(600, 300); r = replaycache_new(600, 300);
test_assert(r != NULL); tt_assert(r != NULL);
done: done:
if (r) replaycache_free(r); if (r) replaycache_free(r);
@ -38,15 +38,15 @@ test_replaycache_badalloc(void)
/* Negative horizon should fail */ /* Negative horizon should fail */
r = replaycache_new(-600, 300); r = replaycache_new(-600, 300);
test_assert(r == NULL); tt_assert(r == NULL);
/* Negative interval should get adjusted to zero */ /* Negative interval should get adjusted to zero */
r = replaycache_new(600, -300); r = replaycache_new(600, -300);
test_assert(r != NULL); tt_assert(r != NULL);
test_eq(r->scrub_interval, 0); tt_int_op(r->scrub_interval,==, 0);
replaycache_free(r); replaycache_free(r);
/* Negative horizon and negative interval should still fail */ /* Negative horizon and negative interval should still fail */
r = replaycache_new(-600, -300); r = replaycache_new(-600, -300);
test_assert(r == NULL); tt_assert(r == NULL);
done: done:
if (r) replaycache_free(r); if (r) replaycache_free(r);
@ -59,7 +59,7 @@ test_replaycache_free_null(void)
{ {
replaycache_free(NULL); replaycache_free(NULL);
/* Assert that we're here without horrible death */ /* Assert that we're here without horrible death */
test_assert(1); tt_assert(1);
done: done:
return; return;
@ -72,18 +72,18 @@ test_replaycache_miss(void)
int result; int result;
r = replaycache_new(600, 300); r = replaycache_new(600, 300);
test_assert(r != NULL); tt_assert(r != NULL);
result = result =
replaycache_add_and_test_internal(1200, r, test_buffer, replaycache_add_and_test_internal(1200, r, test_buffer,
strlen(test_buffer), NULL); strlen(test_buffer), NULL);
test_eq(result, 0); tt_int_op(result,==, 0);
/* poke the bad-parameter error case too */ /* poke the bad-parameter error case too */
result = result =
replaycache_add_and_test_internal(1200, NULL, test_buffer, replaycache_add_and_test_internal(1200, NULL, test_buffer,
strlen(test_buffer), NULL); strlen(test_buffer), NULL);
test_eq(result, 0); tt_int_op(result,==, 0);
done: done:
if (r) replaycache_free(r); if (r) replaycache_free(r);
@ -98,17 +98,17 @@ test_replaycache_hit(void)
int result; int result;
r = replaycache_new(600, 300); r = replaycache_new(600, 300);
test_assert(r != NULL); tt_assert(r != NULL);
result = result =
replaycache_add_and_test_internal(1200, r, test_buffer, replaycache_add_and_test_internal(1200, r, test_buffer,
strlen(test_buffer), NULL); strlen(test_buffer), NULL);
test_eq(result, 0); tt_int_op(result,==, 0);
result = result =
replaycache_add_and_test_internal(1300, r, test_buffer, replaycache_add_and_test_internal(1300, r, test_buffer,
strlen(test_buffer), NULL); strlen(test_buffer), NULL);
test_eq(result, 1); tt_int_op(result,==, 1);
done: done:
if (r) replaycache_free(r); if (r) replaycache_free(r);
@ -123,22 +123,22 @@ test_replaycache_age(void)
int result; int result;
r = replaycache_new(600, 300); r = replaycache_new(600, 300);
test_assert(r != NULL); tt_assert(r != NULL);
result = result =
replaycache_add_and_test_internal(1200, r, test_buffer, replaycache_add_and_test_internal(1200, r, test_buffer,
strlen(test_buffer), NULL); strlen(test_buffer), NULL);
test_eq(result, 0); tt_int_op(result,==, 0);
result = result =
replaycache_add_and_test_internal(1300, r, test_buffer, replaycache_add_and_test_internal(1300, r, test_buffer,
strlen(test_buffer), NULL); strlen(test_buffer), NULL);
test_eq(result, 1); tt_int_op(result,==, 1);
result = result =
replaycache_add_and_test_internal(3000, r, test_buffer, replaycache_add_and_test_internal(3000, r, test_buffer,
strlen(test_buffer), NULL); strlen(test_buffer), NULL);
test_eq(result, 0); tt_int_op(result,==, 0);
done: done:
if (r) replaycache_free(r); if (r) replaycache_free(r);
@ -154,18 +154,18 @@ test_replaycache_elapsed(void)
time_t elapsed; time_t elapsed;
r = replaycache_new(600, 300); r = replaycache_new(600, 300);
test_assert(r != NULL); tt_assert(r != NULL);
result = result =
replaycache_add_and_test_internal(1200, r, test_buffer, replaycache_add_and_test_internal(1200, r, test_buffer,
strlen(test_buffer), NULL); strlen(test_buffer), NULL);
test_eq(result, 0); tt_int_op(result,==, 0);
result = result =
replaycache_add_and_test_internal(1300, r, test_buffer, replaycache_add_and_test_internal(1300, r, test_buffer,
strlen(test_buffer), &elapsed); strlen(test_buffer), &elapsed);
test_eq(result, 1); tt_int_op(result,==, 1);
test_eq(elapsed, 100); tt_int_op(elapsed,==, 100);
done: done:
if (r) replaycache_free(r); if (r) replaycache_free(r);
@ -180,22 +180,22 @@ test_replaycache_noexpire(void)
int result; int result;
r = replaycache_new(0, 0); r = replaycache_new(0, 0);
test_assert(r != NULL); tt_assert(r != NULL);
result = result =
replaycache_add_and_test_internal(1200, r, test_buffer, replaycache_add_and_test_internal(1200, r, test_buffer,
strlen(test_buffer), NULL); strlen(test_buffer), NULL);
test_eq(result, 0); tt_int_op(result,==, 0);
result = result =
replaycache_add_and_test_internal(1300, r, test_buffer, replaycache_add_and_test_internal(1300, r, test_buffer,
strlen(test_buffer), NULL); strlen(test_buffer), NULL);
test_eq(result, 1); tt_int_op(result,==, 1);
result = result =
replaycache_add_and_test_internal(3000, r, test_buffer, replaycache_add_and_test_internal(3000, r, test_buffer,
strlen(test_buffer), NULL); strlen(test_buffer), NULL);
test_eq(result, 1); tt_int_op(result,==, 1);
done: done:
if (r) replaycache_free(r); if (r) replaycache_free(r);
@ -210,18 +210,18 @@ test_replaycache_scrub(void)
int result; int result;
r = replaycache_new(600, 300); r = replaycache_new(600, 300);
test_assert(r != NULL); tt_assert(r != NULL);
/* Set up like in test_replaycache_hit() */ /* Set up like in test_replaycache_hit() */
result = result =
replaycache_add_and_test_internal(100, r, test_buffer, replaycache_add_and_test_internal(100, r, test_buffer,
strlen(test_buffer), NULL); strlen(test_buffer), NULL);
test_eq(result, 0); tt_int_op(result,==, 0);
result = result =
replaycache_add_and_test_internal(200, r, test_buffer, replaycache_add_and_test_internal(200, r, test_buffer,
strlen(test_buffer), NULL); strlen(test_buffer), NULL);
test_eq(result, 1); tt_int_op(result,==, 1);
/* /*
* Poke a few replaycache_scrub_if_needed_internal() error cases that * Poke a few replaycache_scrub_if_needed_internal() error cases that
@ -231,12 +231,12 @@ test_replaycache_scrub(void)
/* Null cache */ /* Null cache */
replaycache_scrub_if_needed_internal(300, NULL); replaycache_scrub_if_needed_internal(300, NULL);
/* Assert we're still here */ /* Assert we're still here */
test_assert(1); tt_assert(1);
/* Make sure we hit the aging-out case too */ /* Make sure we hit the aging-out case too */
replaycache_scrub_if_needed_internal(1500, r); replaycache_scrub_if_needed_internal(1500, r);
/* Assert that we aged it */ /* Assert that we aged it */
test_eq(digestmap_size(r->digests_seen), 0); tt_int_op(digestmap_size(r->digests_seen),==, 0);
done: done:
if (r) replaycache_free(r); if (r) replaycache_free(r);
@ -252,22 +252,22 @@ test_replaycache_future(void)
time_t elapsed = 0; time_t elapsed = 0;
r = replaycache_new(600, 300); r = replaycache_new(600, 300);
test_assert(r != NULL); tt_assert(r != NULL);
/* Set up like in test_replaycache_hit() */ /* Set up like in test_replaycache_hit() */
result = result =
replaycache_add_and_test_internal(100, r, test_buffer, replaycache_add_and_test_internal(100, r, test_buffer,
strlen(test_buffer), &elapsed); strlen(test_buffer), &elapsed);
test_eq(result, 0); tt_int_op(result,==, 0);
/* elapsed should still be 0, since it wasn't written */ /* elapsed should still be 0, since it wasn't written */
test_eq(elapsed, 0); tt_int_op(elapsed,==, 0);
result = result =
replaycache_add_and_test_internal(200, r, test_buffer, replaycache_add_and_test_internal(200, r, test_buffer,
strlen(test_buffer), &elapsed); strlen(test_buffer), &elapsed);
test_eq(result, 1); tt_int_op(result,==, 1);
/* elapsed should be the time since the last hit */ /* elapsed should be the time since the last hit */
test_eq(elapsed, 100); tt_int_op(elapsed,==, 100);
/* /*
* Now let's turn the clock back to get coverage on the cache entry from the * Now let's turn the clock back to get coverage on the cache entry from the
@ -277,9 +277,9 @@ test_replaycache_future(void)
replaycache_add_and_test_internal(150, r, test_buffer, replaycache_add_and_test_internal(150, r, test_buffer,
strlen(test_buffer), &elapsed); strlen(test_buffer), &elapsed);
/* We should still get a hit */ /* We should still get a hit */
test_eq(result, 1); tt_int_op(result,==, 1);
/* ...but it shouldn't let us see a negative elapsed time */ /* ...but it shouldn't let us see a negative elapsed time */
test_eq(elapsed, 0); tt_int_op(elapsed,==, 0);
done: done:
if (r) replaycache_free(r); if (r) replaycache_free(r);
@ -300,25 +300,25 @@ test_replaycache_realtime(void)
/* Test the realtime as well as *_internal() entry points */ /* Test the realtime as well as *_internal() entry points */
r = replaycache_new(600, 300); r = replaycache_new(600, 300);
test_assert(r != NULL); tt_assert(r != NULL);
/* This should miss */ /* This should miss */
result = result =
replaycache_add_and_test(r, test_buffer, strlen(test_buffer)); replaycache_add_and_test(r, test_buffer, strlen(test_buffer));
test_eq(result, 0); tt_int_op(result,==, 0);
/* This should hit */ /* This should hit */
result = result =
replaycache_add_and_test(r, test_buffer, strlen(test_buffer)); replaycache_add_and_test(r, test_buffer, strlen(test_buffer));
test_eq(result, 1); tt_int_op(result,==, 1);
/* This should hit and return a small elapsed time */ /* This should hit and return a small elapsed time */
result = result =
replaycache_add_test_and_elapsed(r, test_buffer, replaycache_add_test_and_elapsed(r, test_buffer,
strlen(test_buffer), &elapsed); strlen(test_buffer), &elapsed);
test_eq(result, 1); tt_int_op(result,==, 1);
test_assert(elapsed >= 0); tt_assert(elapsed >= 0);
test_assert(elapsed <= 5); tt_assert(elapsed <= 5);
/* Scrub it to exercise that entry point too */ /* Scrub it to exercise that entry point too */
replaycache_scrub_if_needed(r); replaycache_scrub_if_needed(r);

View File

@ -61,10 +61,10 @@ test_socks_4_unsupported_commands(void *ptr)
/* SOCKS 4 Send BIND [02] to IP address 2.2.2.2:4369 */ /* SOCKS 4 Send BIND [02] to IP address 2.2.2.2:4369 */
ADD_DATA(buf, "\x04\x02\x11\x11\x02\x02\x02\x02\x00"); ADD_DATA(buf, "\x04\x02\x11\x11\x02\x02\x02\x02\x00");
test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, tt_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
get_options()->SafeSocks) == -1); get_options()->SafeSocks) == -1);
test_eq(4, socks->socks_version); tt_int_op(4,==, socks->socks_version);
test_eq(0, socks->replylen); /* XXX: shouldn't tor reply? */ tt_int_op(0,==, socks->replylen); /* XXX: shouldn't tor reply? */
done: done:
; ;
@ -76,49 +76,49 @@ test_socks_4_supported_commands(void *ptr)
{ {
SOCKS_TEST_INIT(); SOCKS_TEST_INIT();
test_eq(0, buf_datalen(buf)); tt_int_op(0,==, buf_datalen(buf));
/* SOCKS 4 Send CONNECT [01] to IP address 2.2.2.2:4370 */ /* SOCKS 4 Send CONNECT [01] to IP address 2.2.2.2:4370 */
ADD_DATA(buf, "\x04\x01\x11\x12\x02\x02\x02\x03\x00"); ADD_DATA(buf, "\x04\x01\x11\x12\x02\x02\x02\x03\x00");
test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, tt_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
get_options()->SafeSocks) == 1); get_options()->SafeSocks) == 1);
test_eq(4, socks->socks_version); tt_int_op(4,==, socks->socks_version);
test_eq(0, socks->replylen); /* XXX: shouldn't tor reply? */ tt_int_op(0,==, socks->replylen); /* XXX: shouldn't tor reply? */
test_eq(SOCKS_COMMAND_CONNECT, socks->command); tt_int_op(SOCKS_COMMAND_CONNECT,==, socks->command);
test_streq("2.2.2.3", socks->address); tt_str_op("2.2.2.3",==, socks->address);
test_eq(4370, socks->port); tt_int_op(4370,==, socks->port);
test_assert(socks->got_auth == 0); tt_assert(socks->got_auth == 0);
test_assert(! socks->username); tt_assert(! socks->username);
test_eq(0, buf_datalen(buf)); tt_int_op(0,==, buf_datalen(buf));
socks_request_clear(socks); socks_request_clear(socks);
/* SOCKS 4 Send CONNECT [01] to IP address 2.2.2.2:4369 with userid*/ /* SOCKS 4 Send CONNECT [01] to IP address 2.2.2.2:4369 with userid*/
ADD_DATA(buf, "\x04\x01\x11\x12\x02\x02\x02\x04me\x00"); ADD_DATA(buf, "\x04\x01\x11\x12\x02\x02\x02\x04me\x00");
test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, tt_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
get_options()->SafeSocks) == 1); get_options()->SafeSocks) == 1);
test_eq(4, socks->socks_version); tt_int_op(4,==, socks->socks_version);
test_eq(0, socks->replylen); /* XXX: shouldn't tor reply? */ tt_int_op(0,==, socks->replylen); /* XXX: shouldn't tor reply? */
test_eq(SOCKS_COMMAND_CONNECT, socks->command); tt_int_op(SOCKS_COMMAND_CONNECT,==, socks->command);
test_streq("2.2.2.4", socks->address); tt_str_op("2.2.2.4",==, socks->address);
test_eq(4370, socks->port); tt_int_op(4370,==, socks->port);
test_assert(socks->got_auth == 1); tt_assert(socks->got_auth == 1);
test_assert(socks->username); tt_assert(socks->username);
test_eq(2, socks->usernamelen); tt_int_op(2,==, socks->usernamelen);
test_memeq("me", socks->username, 2); tt_mem_op("me",==, socks->username, 2);
test_eq(0, buf_datalen(buf)); tt_int_op(0,==, buf_datalen(buf));
socks_request_clear(socks); socks_request_clear(socks);
/* SOCKS 4a Send RESOLVE [F0] request for torproject.org */ /* SOCKS 4a Send RESOLVE [F0] request for torproject.org */
ADD_DATA(buf, "\x04\xF0\x01\x01\x00\x00\x00\x02me\x00torproject.org\x00"); ADD_DATA(buf, "\x04\xF0\x01\x01\x00\x00\x00\x02me\x00torproject.org\x00");
test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, tt_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
get_options()->SafeSocks) == 1); get_options()->SafeSocks) == 1);
test_eq(4, socks->socks_version); tt_int_op(4,==, socks->socks_version);
test_eq(0, socks->replylen); /* XXX: shouldn't tor reply? */ tt_int_op(0,==, socks->replylen); /* XXX: shouldn't tor reply? */
test_streq("torproject.org", socks->address); tt_str_op("torproject.org",==, socks->address);
test_eq(0, buf_datalen(buf)); tt_int_op(0,==, buf_datalen(buf));
done: done:
; ;
@ -133,16 +133,16 @@ test_socks_5_unsupported_commands(void *ptr)
/* SOCKS 5 Send unsupported BIND [02] command */ /* SOCKS 5 Send unsupported BIND [02] command */
ADD_DATA(buf, "\x05\x02\x00\x01"); ADD_DATA(buf, "\x05\x02\x00\x01");
test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
get_options()->SafeSocks), 0); get_options()->SafeSocks),==, 0);
test_eq(0, buf_datalen(buf)); tt_int_op(0,==, buf_datalen(buf));
test_eq(5, socks->socks_version); tt_int_op(5,==, socks->socks_version);
test_eq(2, socks->replylen); tt_int_op(2,==, socks->replylen);
test_eq(5, socks->reply[0]); tt_int_op(5,==, socks->reply[0]);
test_eq(0, socks->reply[1]); tt_int_op(0,==, socks->reply[1]);
ADD_DATA(buf, "\x05\x02\x00\x01\x02\x02\x02\x01\x01\x01"); ADD_DATA(buf, "\x05\x02\x00\x01\x02\x02\x02\x01\x01\x01");
test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
get_options()->SafeSocks), -1); get_options()->SafeSocks),==, -1);
/* XXX: shouldn't tor reply 'command not supported' [07]? */ /* XXX: shouldn't tor reply 'command not supported' [07]? */
buf_clear(buf); buf_clear(buf);
@ -150,15 +150,15 @@ test_socks_5_unsupported_commands(void *ptr)
/* SOCKS 5 Send unsupported UDP_ASSOCIATE [03] command */ /* SOCKS 5 Send unsupported UDP_ASSOCIATE [03] command */
ADD_DATA(buf, "\x05\x03\x00\x01\x02"); ADD_DATA(buf, "\x05\x03\x00\x01\x02");
test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
get_options()->SafeSocks), 0); get_options()->SafeSocks),==, 0);
test_eq(5, socks->socks_version); tt_int_op(5,==, socks->socks_version);
test_eq(2, socks->replylen); tt_int_op(2,==, socks->replylen);
test_eq(5, socks->reply[0]); tt_int_op(5,==, socks->reply[0]);
test_eq(2, socks->reply[1]); tt_int_op(2,==, socks->reply[1]);
ADD_DATA(buf, "\x05\x03\x00\x01\x02\x02\x02\x01\x01\x01"); ADD_DATA(buf, "\x05\x03\x00\x01\x02\x02\x02\x01\x01\x01");
test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
get_options()->SafeSocks), -1); get_options()->SafeSocks),==, -1);
/* XXX: shouldn't tor reply 'command not supported' [07]? */ /* XXX: shouldn't tor reply 'command not supported' [07]? */
done: done:
@ -173,64 +173,64 @@ test_socks_5_supported_commands(void *ptr)
/* SOCKS 5 Send CONNECT [01] to IP address 2.2.2.2:4369 */ /* SOCKS 5 Send CONNECT [01] to IP address 2.2.2.2:4369 */
ADD_DATA(buf, "\x05\x01\x00"); ADD_DATA(buf, "\x05\x01\x00");
test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
get_options()->SafeSocks), 0); get_options()->SafeSocks),==, 0);
test_eq(5, socks->socks_version); tt_int_op(5,==, socks->socks_version);
test_eq(2, socks->replylen); tt_int_op(2,==, socks->replylen);
test_eq(5, socks->reply[0]); tt_int_op(5,==, socks->reply[0]);
test_eq(0, socks->reply[1]); tt_int_op(0,==, socks->reply[1]);
ADD_DATA(buf, "\x05\x01\x00\x01\x02\x02\x02\x02\x11\x11"); ADD_DATA(buf, "\x05\x01\x00\x01\x02\x02\x02\x02\x11\x11");
test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
get_options()->SafeSocks), 1); get_options()->SafeSocks),==, 1);
test_streq("2.2.2.2", socks->address); tt_str_op("2.2.2.2",==, socks->address);
test_eq(4369, socks->port); tt_int_op(4369,==, socks->port);
test_eq(0, buf_datalen(buf)); tt_int_op(0,==, buf_datalen(buf));
socks_request_clear(socks); socks_request_clear(socks);
/* SOCKS 5 Send CONNECT [01] to FQDN torproject.org:4369 */ /* SOCKS 5 Send CONNECT [01] to FQDN torproject.org:4369 */
ADD_DATA(buf, "\x05\x01\x00"); ADD_DATA(buf, "\x05\x01\x00");
ADD_DATA(buf, "\x05\x01\x00\x03\x0Etorproject.org\x11\x11"); ADD_DATA(buf, "\x05\x01\x00\x03\x0Etorproject.org\x11\x11");
test_eq(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
get_options()->SafeSocks), 1); get_options()->SafeSocks),==, 1);
test_eq(5, socks->socks_version); tt_int_op(5,==, socks->socks_version);
test_eq(2, socks->replylen); tt_int_op(2,==, socks->replylen);
test_eq(5, socks->reply[0]); tt_int_op(5,==, socks->reply[0]);
test_eq(0, socks->reply[1]); tt_int_op(0,==, socks->reply[1]);
test_streq("torproject.org", socks->address); tt_str_op("torproject.org",==, socks->address);
test_eq(4369, socks->port); tt_int_op(4369,==, socks->port);
test_eq(0, buf_datalen(buf)); tt_int_op(0,==, buf_datalen(buf));
socks_request_clear(socks); socks_request_clear(socks);
/* SOCKS 5 Send RESOLVE [F0] request for torproject.org:4369 */ /* SOCKS 5 Send RESOLVE [F0] request for torproject.org:4369 */
ADD_DATA(buf, "\x05\x01\x00"); ADD_DATA(buf, "\x05\x01\x00");
ADD_DATA(buf, "\x05\xF0\x00\x03\x0Etorproject.org\x01\x02"); ADD_DATA(buf, "\x05\xF0\x00\x03\x0Etorproject.org\x01\x02");
test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, tt_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
get_options()->SafeSocks) == 1); get_options()->SafeSocks) == 1);
test_eq(5, socks->socks_version); tt_int_op(5,==, socks->socks_version);
test_eq(2, socks->replylen); tt_int_op(2,==, socks->replylen);
test_eq(5, socks->reply[0]); tt_int_op(5,==, socks->reply[0]);
test_eq(0, socks->reply[1]); tt_int_op(0,==, socks->reply[1]);
test_streq("torproject.org", socks->address); tt_str_op("torproject.org",==, socks->address);
test_eq(0, buf_datalen(buf)); tt_int_op(0,==, buf_datalen(buf));
socks_request_clear(socks); socks_request_clear(socks);
/* SOCKS 5 Send RESOLVE_PTR [F1] for IP address 2.2.2.5 */ /* SOCKS 5 Send RESOLVE_PTR [F1] for IP address 2.2.2.5 */
ADD_DATA(buf, "\x05\x01\x00"); ADD_DATA(buf, "\x05\x01\x00");
ADD_DATA(buf, "\x05\xF1\x00\x01\x02\x02\x02\x05\x01\x03"); ADD_DATA(buf, "\x05\xF1\x00\x01\x02\x02\x02\x05\x01\x03");
test_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, tt_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks,
get_options()->SafeSocks) == 1); get_options()->SafeSocks) == 1);
test_eq(5, socks->socks_version); tt_int_op(5,==, socks->socks_version);
test_eq(2, socks->replylen); tt_int_op(2,==, socks->replylen);
test_eq(5, socks->reply[0]); tt_int_op(5,==, socks->reply[0]);
test_eq(0, socks->reply[1]); tt_int_op(0,==, socks->reply[1]);
test_streq("2.2.2.5", socks->address); tt_str_op("2.2.2.5",==, socks->address);
test_eq(0, buf_datalen(buf)); tt_int_op(0,==, buf_datalen(buf));
done: done:
; ;
@ -244,30 +244,30 @@ test_socks_5_no_authenticate(void *ptr)
/*SOCKS 5 No Authentication */ /*SOCKS 5 No Authentication */
ADD_DATA(buf,"\x05\x01\x00"); ADD_DATA(buf,"\x05\x01\x00");
test_assert(!fetch_from_buf_socks(buf, socks, tt_assert(!fetch_from_buf_socks(buf, socks,
get_options()->TestSocks, get_options()->TestSocks,
get_options()->SafeSocks)); get_options()->SafeSocks));
test_eq(2, socks->replylen); tt_int_op(2,==, socks->replylen);
test_eq(5, socks->reply[0]); tt_int_op(5,==, socks->reply[0]);
test_eq(SOCKS_NO_AUTH, socks->reply[1]); tt_int_op(SOCKS_NO_AUTH,==, socks->reply[1]);
test_eq(0, buf_datalen(buf)); tt_int_op(0,==, buf_datalen(buf));
/*SOCKS 5 Send username/password anyway - pretend to be broken */ /*SOCKS 5 Send username/password anyway - pretend to be broken */
ADD_DATA(buf,"\x01\x02\x01\x01\x02\x01\x01"); ADD_DATA(buf,"\x01\x02\x01\x01\x02\x01\x01");
test_assert(!fetch_from_buf_socks(buf, socks, tt_assert(!fetch_from_buf_socks(buf, socks,
get_options()->TestSocks, get_options()->TestSocks,
get_options()->SafeSocks)); get_options()->SafeSocks));
test_eq(5, socks->socks_version); tt_int_op(5,==, socks->socks_version);
test_eq(2, socks->replylen); tt_int_op(2,==, socks->replylen);
test_eq(1, socks->reply[0]); tt_int_op(1,==, socks->reply[0]);
test_eq(0, socks->reply[1]); tt_int_op(0,==, socks->reply[1]);
test_eq(2, socks->usernamelen); tt_int_op(2,==, socks->usernamelen);
test_eq(2, socks->passwordlen); tt_int_op(2,==, socks->passwordlen);
test_memeq("\x01\x01", socks->username, 2); tt_mem_op("\x01\x01",==, socks->username, 2);
test_memeq("\x01\x01", socks->password, 2); tt_mem_op("\x01\x01",==, socks->password, 2);
done: done:
; ;
@ -282,31 +282,31 @@ test_socks_5_authenticate(void *ptr)
/* SOCKS 5 Negotiate username/password authentication */ /* SOCKS 5 Negotiate username/password authentication */
ADD_DATA(buf, "\x05\x01\x02"); ADD_DATA(buf, "\x05\x01\x02");
test_assert(!fetch_from_buf_socks(buf, socks, tt_assert(!fetch_from_buf_socks(buf, socks,
get_options()->TestSocks, get_options()->TestSocks,
get_options()->SafeSocks)); get_options()->SafeSocks));
test_eq(2, socks->replylen); tt_int_op(2,==, socks->replylen);
test_eq(5, socks->reply[0]); tt_int_op(5,==, socks->reply[0]);
test_eq(SOCKS_USER_PASS, socks->reply[1]); tt_int_op(SOCKS_USER_PASS,==, socks->reply[1]);
test_eq(5, socks->socks_version); tt_int_op(5,==, socks->socks_version);
test_eq(0, buf_datalen(buf)); tt_int_op(0,==, buf_datalen(buf));
/* SOCKS 5 Send username/password */ /* SOCKS 5 Send username/password */
ADD_DATA(buf, "\x01\x02me\x08mypasswd"); ADD_DATA(buf, "\x01\x02me\x08mypasswd");
test_assert(!fetch_from_buf_socks(buf, socks, tt_assert(!fetch_from_buf_socks(buf, socks,
get_options()->TestSocks, get_options()->TestSocks,
get_options()->SafeSocks)); get_options()->SafeSocks));
test_eq(5, socks->socks_version); tt_int_op(5,==, socks->socks_version);
test_eq(2, socks->replylen); tt_int_op(2,==, socks->replylen);
test_eq(1, socks->reply[0]); tt_int_op(1,==, socks->reply[0]);
test_eq(0, socks->reply[1]); tt_int_op(0,==, socks->reply[1]);
test_eq(2, socks->usernamelen); tt_int_op(2,==, socks->usernamelen);
test_eq(8, socks->passwordlen); tt_int_op(8,==, socks->passwordlen);
test_memeq("me", socks->username, 2); tt_mem_op("me",==, socks->username, 2);
test_memeq("mypasswd", socks->password, 8); tt_mem_op("mypasswd",==, socks->password, 8);
done: done:
; ;
@ -321,34 +321,34 @@ test_socks_5_authenticate_with_data(void *ptr)
/* SOCKS 5 Negotiate username/password authentication */ /* SOCKS 5 Negotiate username/password authentication */
ADD_DATA(buf, "\x05\x01\x02"); ADD_DATA(buf, "\x05\x01\x02");
test_assert(!fetch_from_buf_socks(buf, socks, tt_assert(!fetch_from_buf_socks(buf, socks,
get_options()->TestSocks, get_options()->TestSocks,
get_options()->SafeSocks)); get_options()->SafeSocks));
test_eq(2, socks->replylen); tt_int_op(2,==, socks->replylen);
test_eq(5, socks->reply[0]); tt_int_op(5,==, socks->reply[0]);
test_eq(SOCKS_USER_PASS, socks->reply[1]); tt_int_op(SOCKS_USER_PASS,==, socks->reply[1]);
test_eq(5, socks->socks_version); tt_int_op(5,==, socks->socks_version);
test_eq(0, buf_datalen(buf)); tt_int_op(0,==, buf_datalen(buf));
/* SOCKS 5 Send username/password */ /* SOCKS 5 Send username/password */
/* SOCKS 5 Send CONNECT [01] to IP address 2.2.2.2:4369 */ /* SOCKS 5 Send CONNECT [01] to IP address 2.2.2.2:4369 */
ADD_DATA(buf, "\x01\x02me\x03you\x05\x01\x00\x01\x02\x02\x02\x02\x11\x11"); ADD_DATA(buf, "\x01\x02me\x03you\x05\x01\x00\x01\x02\x02\x02\x02\x11\x11");
test_assert(fetch_from_buf_socks(buf, socks, tt_assert(fetch_from_buf_socks(buf, socks,
get_options()->TestSocks, get_options()->TestSocks,
get_options()->SafeSocks) == 1); get_options()->SafeSocks) == 1);
test_eq(5, socks->socks_version); tt_int_op(5,==, socks->socks_version);
test_eq(2, socks->replylen); tt_int_op(2,==, socks->replylen);
test_eq(1, socks->reply[0]); tt_int_op(1,==, socks->reply[0]);
test_eq(0, socks->reply[1]); tt_int_op(0,==, socks->reply[1]);
test_streq("2.2.2.2", socks->address); tt_str_op("2.2.2.2",==, socks->address);
test_eq(4369, socks->port); tt_int_op(4369,==, socks->port);
test_eq(2, socks->usernamelen); tt_int_op(2,==, socks->usernamelen);
test_eq(3, socks->passwordlen); tt_int_op(3,==, socks->passwordlen);
test_memeq("me", socks->username, 2); tt_mem_op("me",==, socks->username, 2);
test_memeq("you", socks->password, 3); tt_mem_op("you",==, socks->password, 3);
done: done:
; ;
@ -362,13 +362,13 @@ test_socks_5_auth_before_negotiation(void *ptr)
/* SOCKS 5 Send username/password */ /* SOCKS 5 Send username/password */
ADD_DATA(buf, "\x01\x02me\x02me"); ADD_DATA(buf, "\x01\x02me\x02me");
test_assert(fetch_from_buf_socks(buf, socks, tt_assert(fetch_from_buf_socks(buf, socks,
get_options()->TestSocks, get_options()->TestSocks,
get_options()->SafeSocks) == -1); get_options()->SafeSocks) == -1);
test_eq(0, socks->socks_version); tt_int_op(0,==, socks->socks_version);
test_eq(0, socks->replylen); tt_int_op(0,==, socks->replylen);
test_eq(0, socks->reply[0]); tt_int_op(0,==, socks->reply[0]);
test_eq(0, socks->reply[1]); tt_int_op(0,==, socks->reply[1]);
done: done:
; ;

File diff suppressed because it is too large Load Diff