Loading src/test/test_consdiffmgr.c +25 −4 Original line number Diff line number Diff line Loading @@ -623,6 +623,7 @@ test_consdiffmgr_cleanup_old_diffs(void *arg) networkstatus_t *md_ns[N]; uint8_t md_ns_sha3[N][DIGEST256_LEN]; int i; consensus_cache_entry_t *hold_ent = NULL, *ent; /* Make sure that the cleanup function removes diffs to the not-most-recent * consensus. */ Loading Loading @@ -658,15 +659,19 @@ test_consdiffmgr_cleanup_old_diffs(void *arg) tt_int_op(0, OP_EQ, lookup_apply_and_verify_diff(FLAV_MICRODESC, md_body[1], md_body[2])); tt_int_op(CONSDIFF_AVAILABLE, OP_EQ, lookup_diff_from(&hold_ent, FLAV_MICRODESC, md_body[1])); consensus_cache_entry_incref(hold_ent); // incref, so it is preserved. /* Now add an even-more-recent consensus; this should make all previous * diffs deletable */ tt_int_op(0, OP_EQ, consdiffmgr_add_consensus(md_body[3], md_ns[3])); tt_int_op(2, OP_EQ, consdiffmgr_cleanup()); consensus_cache_entry_t *ent; tt_int_op(CONSDIFF_NOT_FOUND, OP_EQ, lookup_diff_from(&ent, FLAV_MICRODESC, md_body[0])); tt_int_op(CONSDIFF_NOT_FOUND, OP_EQ, /* This one is marked deletable but still in the hashtable */ tt_int_op(CONSDIFF_AVAILABLE, OP_EQ, lookup_diff_from(&ent, FLAV_MICRODESC, md_body[1])); tt_int_op(CONSDIFF_NOT_FOUND, OP_EQ, lookup_diff_from(&ent, FLAV_MICRODESC, md_body[2])); Loading @@ -674,11 +679,29 @@ test_consdiffmgr_cleanup_old_diffs(void *arg) /* Everything should be valid at this point */ tt_int_op(0, OP_EQ, consdiffmgr_validate()); /* And if we recan NOW, we'll purge the hashtable of the entries, * and launch attempts to generate new ones */ consdiffmgr_rescan(); tt_int_op(CONSDIFF_IN_PROGRESS, OP_EQ, lookup_diff_from(&ent, FLAV_MICRODESC, md_body[0])); tt_int_op(CONSDIFF_IN_PROGRESS, OP_EQ, lookup_diff_from(&ent, FLAV_MICRODESC, md_body[1])); tt_int_op(CONSDIFF_IN_PROGRESS, OP_EQ, lookup_diff_from(&ent, FLAV_MICRODESC, md_body[2])); /* We're still holding on to this, though, so we can still map it! */ const uint8_t *t1 = NULL; size_t s; int r = consensus_cache_entry_get_body(hold_ent, &t1, &s); tt_int_op(r, OP_EQ, 0); tt_assert(t1); done: for (i = 0; i < N; ++i) { tor_free(md_body[i]); networkstatus_vote_free(md_ns[i]); } consensus_cache_entry_decref(hold_ent); UNMOCK(cpuworker_queue_work); #undef N } Loading @@ -701,8 +724,6 @@ struct testcase_t consdiffmgr_tests[] = { // XXXX Test: no duplicate diff job is launched when a job is pending. // XXXX Test: register status when no pending entry existed?? (bug) // XXXX Test: clean up hashtable after most-recent-consensus changes // in cdm_diff_ht_purge(). // XXXX Test: cdm_entry_get_sha3_value cases. // XXXX Test: sha3 mismatch on validation // XXXX Test: non-cacheing cases of replyfn(). Loading Loading
src/test/test_consdiffmgr.c +25 −4 Original line number Diff line number Diff line Loading @@ -623,6 +623,7 @@ test_consdiffmgr_cleanup_old_diffs(void *arg) networkstatus_t *md_ns[N]; uint8_t md_ns_sha3[N][DIGEST256_LEN]; int i; consensus_cache_entry_t *hold_ent = NULL, *ent; /* Make sure that the cleanup function removes diffs to the not-most-recent * consensus. */ Loading Loading @@ -658,15 +659,19 @@ test_consdiffmgr_cleanup_old_diffs(void *arg) tt_int_op(0, OP_EQ, lookup_apply_and_verify_diff(FLAV_MICRODESC, md_body[1], md_body[2])); tt_int_op(CONSDIFF_AVAILABLE, OP_EQ, lookup_diff_from(&hold_ent, FLAV_MICRODESC, md_body[1])); consensus_cache_entry_incref(hold_ent); // incref, so it is preserved. /* Now add an even-more-recent consensus; this should make all previous * diffs deletable */ tt_int_op(0, OP_EQ, consdiffmgr_add_consensus(md_body[3], md_ns[3])); tt_int_op(2, OP_EQ, consdiffmgr_cleanup()); consensus_cache_entry_t *ent; tt_int_op(CONSDIFF_NOT_FOUND, OP_EQ, lookup_diff_from(&ent, FLAV_MICRODESC, md_body[0])); tt_int_op(CONSDIFF_NOT_FOUND, OP_EQ, /* This one is marked deletable but still in the hashtable */ tt_int_op(CONSDIFF_AVAILABLE, OP_EQ, lookup_diff_from(&ent, FLAV_MICRODESC, md_body[1])); tt_int_op(CONSDIFF_NOT_FOUND, OP_EQ, lookup_diff_from(&ent, FLAV_MICRODESC, md_body[2])); Loading @@ -674,11 +679,29 @@ test_consdiffmgr_cleanup_old_diffs(void *arg) /* Everything should be valid at this point */ tt_int_op(0, OP_EQ, consdiffmgr_validate()); /* And if we recan NOW, we'll purge the hashtable of the entries, * and launch attempts to generate new ones */ consdiffmgr_rescan(); tt_int_op(CONSDIFF_IN_PROGRESS, OP_EQ, lookup_diff_from(&ent, FLAV_MICRODESC, md_body[0])); tt_int_op(CONSDIFF_IN_PROGRESS, OP_EQ, lookup_diff_from(&ent, FLAV_MICRODESC, md_body[1])); tt_int_op(CONSDIFF_IN_PROGRESS, OP_EQ, lookup_diff_from(&ent, FLAV_MICRODESC, md_body[2])); /* We're still holding on to this, though, so we can still map it! */ const uint8_t *t1 = NULL; size_t s; int r = consensus_cache_entry_get_body(hold_ent, &t1, &s); tt_int_op(r, OP_EQ, 0); tt_assert(t1); done: for (i = 0; i < N; ++i) { tor_free(md_body[i]); networkstatus_vote_free(md_ns[i]); } consensus_cache_entry_decref(hold_ent); UNMOCK(cpuworker_queue_work); #undef N } Loading @@ -701,8 +724,6 @@ struct testcase_t consdiffmgr_tests[] = { // XXXX Test: no duplicate diff job is launched when a job is pending. // XXXX Test: register status when no pending entry existed?? (bug) // XXXX Test: clean up hashtable after most-recent-consensus changes // in cdm_diff_ht_purge(). // XXXX Test: cdm_entry_get_sha3_value cases. // XXXX Test: sha3 mismatch on validation // XXXX Test: non-cacheing cases of replyfn(). Loading