diff options
author | Pavel Březina <pbrezina@redhat.com> | 2014-11-21 12:34:54 +0100 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2014-12-08 10:39:45 +0100 |
commit | babaca78cc196e7e0dcc3e972347951a081159f2 (patch) | |
tree | ee5f135177631bb3a9b513d9169a06ac5968a205 /src/tests | |
parent | 5dcf3ffa3aa228701a79556dc0b889dba0aac535 (diff) | |
download | sssd-babaca78cc196e7e0dcc3e972347951a081159f2.tar.gz sssd-babaca78cc196e7e0dcc3e972347951a081159f2.tar.xz sssd-babaca78cc196e7e0dcc3e972347951a081159f2.zip |
be_ptask: let backoff affect only period
With this patch the first and enabled delay values are respected.
Reviewed-by: Michal Židek <mzidek@redhat.com>
Diffstat (limited to 'src/tests')
-rw-r--r-- | src/tests/cmocka/test_be_ptask.c | 113 |
1 files changed, 111 insertions, 2 deletions
diff --git a/src/tests/cmocka/test_be_ptask.c b/src/tests/cmocka/test_be_ptask.c index e06cc90c3..6155002ab 100644 --- a/src/tests/cmocka/test_be_ptask.c +++ b/src/tests/cmocka/test_be_ptask.c @@ -31,7 +31,7 @@ #include "tests/common.h" #define DELAY 2 -#define PERIOD 10 +#define PERIOD 1 #define new_test(test) \ unit_test_setup_teardown(test_ ## test, test_setup, test_teardown) @@ -702,6 +702,59 @@ void test_be_ptask_reschedule_timeout(void **state) assert_null(ptask); } +void test_be_ptask_reschedule_backoff(void **state) +{ + struct test_ctx *test_ctx = (struct test_ctx *)(*state); + struct be_ptask *ptask = NULL; + time_t next_execution; + time_t now; + errno_t ret; + + now = time(NULL); + ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0, + BE_PTASK_OFFLINE_SKIP, PERIOD*2, test_be_ptask_send, + test_be_ptask_recv, test_ctx, "Test ptask", &ptask); + assert_int_equal(ret, ERR_OK); + assert_non_null(ptask); + assert_non_null(ptask->timer); + + /* first run */ + next_execution = ptask->next_execution; + + while (!test_ctx->done) { + tevent_loop_once(test_ctx->be_ctx->ev); + } + + assert_true(now <= ptask->last_execution); + assert_true(now <= test_ctx->when); + assert_true(ptask->last_execution <= test_ctx->when); + + assert_true(next_execution + PERIOD <= ptask->next_execution); + assert_int_equal(PERIOD*2, ptask->period); + assert_non_null(ptask->timer); + + test_ctx->done = false; + + /* second run */ + now = time(NULL); + next_execution = ptask->next_execution; + + while (!test_ctx->done) { + tevent_loop_once(test_ctx->be_ctx->ev); + } + + assert_true(now + PERIOD <= ptask->last_execution); + assert_true(now + PERIOD <= test_ctx->when); + assert_true(ptask->last_execution <= test_ctx->when); + + assert_true(next_execution + PERIOD*2 <= ptask->next_execution); + assert_int_equal(PERIOD*2, ptask->period); + assert_non_null(ptask->timer); + + be_ptask_destroy(&ptask); + assert_null(ptask); +} + void test_be_ptask_get_period(void **state) { struct test_ctx *test_ctx = (struct test_ctx *)(*state); @@ -809,6 +862,60 @@ void test_be_ptask_sync_reschedule_error(void **state) assert_null(ptask); } +void test_be_ptask_sync_reschedule_backoff(void **state) +{ + struct test_ctx *test_ctx = (struct test_ctx *)(*state); + struct be_ptask *ptask = NULL; + time_t next_execution; + time_t now; + errno_t ret; + + now = time(NULL); + ret = be_ptask_create_sync(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0, + BE_PTASK_OFFLINE_SKIP, PERIOD*2, + test_be_ptask_sync_error, + test_ctx, "Test ptask", &ptask); + assert_int_equal(ret, ERR_OK); + assert_non_null(ptask); + assert_non_null(ptask->timer); + + /* first run */ + next_execution = ptask->next_execution; + + while (!is_sync_ptask_finished(test_ctx, ptask)) { + tevent_loop_once(test_ctx->be_ctx->ev); + } + + assert_true(now <= ptask->last_execution); + assert_true(now <= test_ctx->when); + assert_true(ptask->last_execution <= test_ctx->when); + + assert_true(next_execution + PERIOD <= ptask->next_execution); + assert_int_equal(PERIOD*2, ptask->period); + assert_non_null(ptask->timer); + + test_ctx->done = false; + + /* second run */ + now = time(NULL); + next_execution = ptask->next_execution; + + while (!is_sync_ptask_finished(test_ctx, ptask)) { + tevent_loop_once(test_ctx->be_ctx->ev); + } + + assert_true(now + PERIOD <= ptask->last_execution); + assert_true(now + PERIOD <= test_ctx->when); + assert_true(ptask->last_execution <= test_ctx->when); + + assert_true(next_execution + PERIOD*2 <= ptask->next_execution); + assert_int_equal(PERIOD*2, ptask->period); + assert_non_null(ptask->timer); + + be_ptask_destroy(&ptask); + assert_null(ptask); +} + int main(int argc, const char *argv[]) { poptContext pc; @@ -837,10 +944,12 @@ int main(int argc, const char *argv[]) new_test(be_ptask_reschedule_null), new_test(be_ptask_reschedule_error), new_test(be_ptask_reschedule_timeout), + new_test(be_ptask_reschedule_backoff), new_test(be_ptask_get_period), new_test(be_ptask_create_sync), new_test(be_ptask_sync_reschedule_ok), - new_test(be_ptask_sync_reschedule_error) + new_test(be_ptask_sync_reschedule_error), + new_test(be_ptask_sync_reschedule_backoff) }; /* Set debug level to invalid value so we can deside if -d 0 was used. */ |