static void test_replaycache_hit(void *arg) { replaycache_t *r = NULL; int result; (void)arg; r = replaycache_new(600, 300); tt_assert(r != NULL); result = replaycache_add_and_test_internal(1200, r, test_buffer, strlen(test_buffer), NULL); tt_int_op(result,OP_EQ, 0); result = replaycache_add_and_test_internal(1300, r, test_buffer, strlen(test_buffer), NULL); tt_int_op(result,OP_EQ, 1); done: if (r) replaycache_free(r); return; }
static void test_replaycache_age(void) { replaycache_t *r = NULL; int result; r = replaycache_new(600, 300); test_assert(r != NULL); result = replaycache_add_and_test_internal(1200, r, test_buffer, (int)strlen(test_buffer), NULL); test_eq(result, 0); result = replaycache_add_and_test_internal(1300, r, test_buffer, (int)strlen(test_buffer), NULL); test_eq(result, 1); result = replaycache_add_and_test_internal(3000, r, test_buffer, (int)strlen(test_buffer), NULL); test_eq(result, 0); done: if (r) replaycache_free(r); return; }
static void test_replaycache_miss(void *arg) { replaycache_t *r = NULL; int result; (void)arg; r = replaycache_new(600, 300); tt_assert(r != NULL); result = replaycache_add_and_test_internal(1200, r, test_buffer, strlen(test_buffer), NULL); tt_int_op(result,OP_EQ, 0); /* poke the bad-parameter error case too */ result = replaycache_add_and_test_internal(1200, NULL, test_buffer, strlen(test_buffer), NULL); tt_int_op(result,OP_EQ, 0); done: if (r) replaycache_free(r); return; }
static void test_replaycache_elapsed(void) { replaycache_t *r = NULL; int result; time_t elapsed; r = replaycache_new(600, 300); test_assert(r != NULL); if (!r) goto done; result = replaycache_add_and_test_internal(1200, r, test_buffer, (int)strlen(test_buffer), NULL); test_eq(result, 0); result = replaycache_add_and_test_internal(1300, r, test_buffer, (int)strlen(test_buffer), &elapsed); test_eq(result, 1); test_eq(elapsed, 100); done: if (r) replaycache_free(r); return; }
static void test_replaycache_future(void *arg) { replaycache_t *r = NULL; int result; time_t elapsed = 0; (void)arg; r = replaycache_new(600, 300); tt_assert(r != NULL); /* Set up like in test_replaycache_hit() */ result = replaycache_add_and_test_internal(100, r, test_buffer, strlen(test_buffer), &elapsed); tt_int_op(result,OP_EQ, 0); /* elapsed should still be 0, since it wasn't written */ tt_int_op(elapsed,OP_EQ, 0); result = replaycache_add_and_test_internal(200, r, test_buffer, strlen(test_buffer), &elapsed); tt_int_op(result,OP_EQ, 1); /* elapsed should be the time since the last hit */ tt_int_op(elapsed,OP_EQ, 100); /* * Now let's turn the clock back to get coverage on the cache entry from the * future not-supposed-to-happen case. */ result = replaycache_add_and_test_internal(150, r, test_buffer, strlen(test_buffer), &elapsed); /* We should still get a hit */ tt_int_op(result,OP_EQ, 1); /* ...but it shouldn't let us see a negative elapsed time */ tt_int_op(elapsed,OP_EQ, 0); done: if (r) replaycache_free(r); return; }
static void test_replaycache_scrub(void *arg) { replaycache_t *r = NULL; int result; (void)arg; r = replaycache_new(600, 300); tt_assert(r != NULL); /* Set up like in test_replaycache_hit() */ result = replaycache_add_and_test_internal(100, r, test_buffer, strlen(test_buffer), NULL); tt_int_op(result,OP_EQ, 0); result = replaycache_add_and_test_internal(200, r, test_buffer, strlen(test_buffer), NULL); tt_int_op(result,OP_EQ, 1); /* * Poke a few replaycache_scrub_if_needed_internal() error cases that * can't happen through replaycache_add_and_test_internal() */ /* Null cache */ replaycache_scrub_if_needed_internal(300, NULL); /* Assert we're still here */ tt_assert(1); /* Make sure we hit the aging-out case too */ replaycache_scrub_if_needed_internal(1500, r); /* Assert that we aged it */ tt_int_op(digestmap_size(r->digests_seen),OP_EQ, 0); done: if (r) replaycache_free(r); return; }
int replaycache_add_test_and_elapsed( replaycache_t *r, const void *data, int len, time_t *elapsed) { return replaycache_add_and_test_internal(time(NULL), r, data, len, elapsed); }
int replaycache_add_and_test(replaycache_t *r, const void *data, int len) { return replaycache_add_and_test_internal(time(NULL), r, data, len, NULL); }