From c5a0909216c406ce3e23d6f41146daf2bb303226 Mon Sep 17 00:00:00 2001 From: Tomas Halman Date: Fri, 19 Jul 2019 13:05:44 +0200 Subject: [PATCH 46/48] BE: Introduce flag for be_ptask_create MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The be_ptask_create has already too many parameters. Lets have flags parameter to avoid future extending. Reviewed-by: Pavel Březina --- src/providers/ad/ad_dyndns.c | 2 +- src/providers/ad/ad_machine_pw_renewal.c | 2 +- src/providers/ad/ad_subdomains.c | 2 +- src/providers/be_ptask.c | 17 +++++- src/providers/be_ptask.h | 10 ++++ src/providers/be_ptask_private.h | 1 + src/providers/be_refresh.c | 2 +- src/providers/data_provider_be.c | 2 +- src/providers/ipa/ipa_dyndns.c | 2 +- src/providers/ipa/ipa_subdomains.c | 2 +- src/providers/ldap/ldap_id_cleanup.c | 2 +- src/providers/ldap/ldap_id_enum.c | 2 +- src/providers/ldap/sdap_sudo_shared.c | 4 +- src/tests/cmocka/test_be_ptask.c | 67 +++++++++++++++--------- 14 files changed, 80 insertions(+), 37 deletions(-) diff --git a/src/providers/ad/ad_dyndns.c b/src/providers/ad/ad_dyndns.c index 02ea7f24b..af765b581 100644 --- a/src/providers/ad/ad_dyndns.c +++ b/src/providers/ad/ad_dyndns.c @@ -101,7 +101,7 @@ errno_t ad_dyndns_init(struct be_ctx *be_ctx, ret = be_ptask_create(ad_opts, be_ctx, period, ptask_first_delay, 0, 0, period, BE_PTASK_OFFLINE_DISABLE, BE_PTASK_SCHEDULE_FROM_LAST, 0, ad_dyndns_update_send, ad_dyndns_update_recv, ad_opts, - "Dyndns update", NULL); + "Dyndns update", 0, NULL); if (ret != EOK) { DEBUG(SSSDBG_CRIT_FAILURE, "Unable to setup ptask " diff --git a/src/providers/ad/ad_machine_pw_renewal.c b/src/providers/ad/ad_machine_pw_renewal.c index 47941dfbf..67802c04a 100644 --- a/src/providers/ad/ad_machine_pw_renewal.c +++ b/src/providers/ad/ad_machine_pw_renewal.c @@ -388,7 +388,7 @@ errno_t ad_machine_account_password_renewal_init(struct be_ctx *be_ctx, ad_machine_account_password_renewal_send, ad_machine_account_password_renewal_recv, renewal_data, - "AD machine account password renewal", NULL); + "AD machine account password renewal", 0, NULL); if (ret != EOK) { DEBUG(SSSDBG_OP_FAILURE, "be_ptask_create failed.\n"); goto done; diff --git a/src/providers/ad/ad_subdomains.c b/src/providers/ad/ad_subdomains.c index 2510498da..0f46b46ad 100644 --- a/src/providers/ad/ad_subdomains.c +++ b/src/providers/ad/ad_subdomains.c @@ -2070,7 +2070,7 @@ errno_t ad_subdomains_init(TALLOC_CTX *mem_ctx, BE_PTASK_SCHEDULE_FROM_LAST, 0, ad_subdomains_ptask_send, ad_subdomains_ptask_recv, sd_ctx, - "Subdomains Refresh", NULL); + "Subdomains Refresh", 0, NULL); if (ret != EOK) { DEBUG(SSSDBG_CRIT_FAILURE, "Unable to setup ptask " "[%d]: %s\n", ret, sss_strerror(ret)); diff --git a/src/providers/be_ptask.c b/src/providers/be_ptask.c index 32d9a03ce..56c9c82fe 100644 --- a/src/providers/be_ptask.c +++ b/src/providers/be_ptask.c @@ -208,6 +208,12 @@ static void be_ptask_schedule(struct be_ptask *task, delay = task->enabled_delay; break; case BE_PTASK_PERIOD: + if (task->flags & BE_PTASK_NO_PERIODIC) { + /* Periodic task is disabled, */ + /* only online/offline change can cause some activity. */ + return; + } + delay = task->period; if (backoff_allowed(task) && task->period * 2 <= task->max_backoff) { @@ -269,16 +275,21 @@ errno_t be_ptask_create(TALLOC_CTX *mem_ctx, be_ptask_recv_t recv_fn, void *pvt, const char *name, + uint32_t flags, struct be_ptask **_task) { struct be_ptask *task = NULL; errno_t ret; - if (be_ctx == NULL || period == 0 || send_fn == NULL || recv_fn == NULL + if (be_ctx == NULL || send_fn == NULL || recv_fn == NULL || name == NULL) { return EINVAL; } + if (period == 0 && (flags & BE_PTASK_NO_PERIODIC) == 0) { + return EINVAL; + } + task = talloc_zero(mem_ctx, struct be_ptask); if (task == NULL) { ret = ENOMEM; @@ -306,6 +317,7 @@ errno_t be_ptask_create(TALLOC_CTX *mem_ctx, goto done; } + task->flags = flags; task->enabled = true; talloc_set_destructor((TALLOC_CTX*)task, be_ptask_destructor); @@ -451,6 +463,7 @@ errno_t be_ptask_create_sync(TALLOC_CTX *mem_ctx, be_ptask_sync_t fn, void *pvt, const char *name, + uint32_t flags, struct be_ptask **_task) { errno_t ret; @@ -469,7 +482,7 @@ errno_t be_ptask_create_sync(TALLOC_CTX *mem_ctx, enabled_delay, random_offset, timeout, offline, BE_PTASK_SCHEDULE_FROM_LAST, max_backoff, be_ptask_sync_send, be_ptask_sync_recv, - ctx, name, _task); + ctx, name, flags, _task); if (ret != EOK) { goto done; } diff --git a/src/providers/be_ptask.h b/src/providers/be_ptask.h index c23278e88..a33443965 100644 --- a/src/providers/be_ptask.h +++ b/src/providers/be_ptask.h @@ -30,6 +30,14 @@ struct be_ctx; struct be_ptask; +/* be_ptask flags */ + +/** + * Do not schedule periodic task. This flag is useful for tasks that + * should be performend only when there is offline/online change. + */ +#define BE_PTASK_NO_PERIODIC 0x0001 + /** * Defines how should task behave when back end is offline. */ @@ -127,6 +135,7 @@ errno_t be_ptask_create(TALLOC_CTX *mem_ctx, be_ptask_recv_t recv_fn, void *pvt, const char *name, + uint32_t flags, struct be_ptask **_task); errno_t be_ptask_create_sync(TALLOC_CTX *mem_ctx, @@ -141,6 +150,7 @@ errno_t be_ptask_create_sync(TALLOC_CTX *mem_ctx, be_ptask_sync_t fn, void *pvt, const char *name, + uint32_t flags, struct be_ptask **_task); void be_ptask_enable(struct be_ptask *task); diff --git a/src/providers/be_ptask_private.h b/src/providers/be_ptask_private.h index e89105f95..496a2f9ae 100644 --- a/src/providers/be_ptask_private.h +++ b/src/providers/be_ptask_private.h @@ -43,6 +43,7 @@ struct be_ptask { time_t last_execution; /* last time when send was called */ struct tevent_req *req; /* active tevent request */ struct tevent_timer *timer; /* active tevent timer */ + uint32_t flags; bool enabled; }; diff --git a/src/providers/be_refresh.c b/src/providers/be_refresh.c index 8f50e231d..687d3f022 100644 --- a/src/providers/be_refresh.c +++ b/src/providers/be_refresh.c @@ -177,7 +177,7 @@ static errno_t be_refresh_ctx_init(struct be_ctx *be_ctx, BE_PTASK_SCHEDULE_FROM_NOW, 0, be_refresh_send, be_refresh_recv, - ctx, "Refresh Records", NULL); + ctx, "Refresh Records", 0, NULL); if (ret != EOK) { DEBUG(SSSDBG_FATAL_FAILURE, "Unable to initialize refresh periodic task [%d]: %s\n", diff --git a/src/providers/data_provider_be.c b/src/providers/data_provider_be.c index 877841055..f21669b8c 100644 --- a/src/providers/data_provider_be.c +++ b/src/providers/data_provider_be.c @@ -133,7 +133,7 @@ void be_mark_offline(struct be_ctx *ctx) BE_PTASK_OFFLINE_EXECUTE, 3600 /* max_backoff */, try_to_go_online, - ctx, "Check if online (periodic)", + ctx, "Check if online (periodic)", 0, &ctx->check_if_online_ptask); if (ret != EOK) { DEBUG(SSSDBG_FATAL_FAILURE, diff --git a/src/providers/ipa/ipa_dyndns.c b/src/providers/ipa/ipa_dyndns.c index 8e8ff5a4f..27852c2e2 100644 --- a/src/providers/ipa/ipa_dyndns.c +++ b/src/providers/ipa/ipa_dyndns.c @@ -78,7 +78,7 @@ errno_t ipa_dyndns_init(struct be_ctx *be_ctx, BE_PTASK_SCHEDULE_FROM_LAST, 0, ipa_dyndns_update_send, ipa_dyndns_update_recv, ctx, - "Dyndns update", NULL); + "Dyndns update", 0, NULL); if (ret != EOK) { DEBUG(SSSDBG_CRIT_FAILURE, "Unable to setup ptask " "[%d]: %s\n", ret, sss_strerror(ret)); diff --git a/src/providers/ipa/ipa_subdomains.c b/src/providers/ipa/ipa_subdomains.c index 3a17c851d..13e49c5c0 100644 --- a/src/providers/ipa/ipa_subdomains.c +++ b/src/providers/ipa/ipa_subdomains.c @@ -3138,7 +3138,7 @@ errno_t ipa_subdomains_init(TALLOC_CTX *mem_ctx, BE_PTASK_SCHEDULE_FROM_LAST, 0, ipa_subdomains_ptask_send, ipa_subdomains_ptask_recv, sd_ctx, - "Subdomains Refresh", NULL); + "Subdomains Refresh", 0, NULL); if (ret != EOK) { DEBUG(SSSDBG_CRIT_FAILURE, "Unable to setup ptask " "[%d]: %s\n", ret, sss_strerror(ret)); diff --git a/src/providers/ldap/ldap_id_cleanup.c b/src/providers/ldap/ldap_id_cleanup.c index e50fb0f22..df56f4da4 100644 --- a/src/providers/ldap/ldap_id_cleanup.c +++ b/src/providers/ldap/ldap_id_cleanup.c @@ -88,7 +88,7 @@ errno_t ldap_setup_cleanup(struct sdap_id_ctx *id_ctx, ret = be_ptask_create_sync(sdom, id_ctx->be, period, first_delay, 5 /* enabled delay */, 0 /* random offset */, period /* timeout */, BE_PTASK_OFFLINE_SKIP, 0, - ldap_cleanup_task, cleanup_ctx, name, + ldap_cleanup_task, cleanup_ctx, name, 0, &sdom->cleanup_task); if (ret != EOK) { DEBUG(SSSDBG_FATAL_FAILURE, "Unable to initialize cleanup periodic " diff --git a/src/providers/ldap/ldap_id_enum.c b/src/providers/ldap/ldap_id_enum.c index 062185c55..2137f6821 100644 --- a/src/providers/ldap/ldap_id_enum.c +++ b/src/providers/ldap/ldap_id_enum.c @@ -102,7 +102,7 @@ errno_t ldap_setup_enumeration(struct be_ctx *be_ctx, BE_PTASK_SCHEDULE_FROM_LAST, 0, /* max_backoff */ send_fn, recv_fn, - ectx, "enumeration", &sdom->enum_task); + ectx, "enumeration", 0, &sdom->enum_task); if (ret != EOK) { DEBUG(SSSDBG_FATAL_FAILURE, "Unable to initialize enumeration periodic task\n"); diff --git a/src/providers/ldap/sdap_sudo_shared.c b/src/providers/ldap/sdap_sudo_shared.c index a00d8e6a9..59356bd44 100644 --- a/src/providers/ldap/sdap_sudo_shared.c +++ b/src/providers/ldap/sdap_sudo_shared.c @@ -94,7 +94,7 @@ sdap_sudo_ptask_setup_generic(struct be_ctx *be_ctx, BE_PTASK_SCHEDULE_FROM_LAST, 0, full_send_fn, full_recv_fn, pvt, - "SUDO Full Refresh", NULL); + "SUDO Full Refresh", 0, NULL); if (ret != EOK) { DEBUG(SSSDBG_CRIT_FAILURE, "Unable to setup full refresh ptask " "[%d]: %s\n", ret, sss_strerror(ret)); @@ -113,7 +113,7 @@ sdap_sudo_ptask_setup_generic(struct be_ctx *be_ctx, BE_PTASK_SCHEDULE_FROM_LAST, 0, smart_send_fn, smart_recv_fn, pvt, - "SUDO Smart Refresh", NULL); + "SUDO Smart Refresh", 0, NULL); if (ret != EOK) { DEBUG(SSSDBG_CRIT_FAILURE, "Unable to setup smart refresh ptask " "[%d]: %s\n", ret, sss_strerror(ret)); diff --git a/src/tests/cmocka/test_be_ptask.c b/src/tests/cmocka/test_be_ptask.c index 03b1165bb..ac8c0767f 100644 --- a/src/tests/cmocka/test_be_ptask.c +++ b/src/tests/cmocka/test_be_ptask.c @@ -306,7 +306,7 @@ void test_be_ptask_create_einval_be(void **state) ret = be_ptask_create(test_ctx, NULL, PERIOD, 0, 0, 0, 0, BE_PTASK_OFFLINE_SKIP, BE_PTASK_SCHEDULE_FROM_LAST, 0, test_be_ptask_send, - test_be_ptask_recv, NULL, "Test ptask", &ptask); + test_be_ptask_recv, NULL, "Test ptask", 0, &ptask); assert_int_equal(ret, EINVAL); assert_null(ptask); } @@ -320,7 +320,7 @@ void test_be_ptask_create_einval_period(void **state) ret = be_ptask_create(test_ctx, test_ctx->be_ctx, 0, 0, 0, 0, 0, BE_PTASK_OFFLINE_SKIP, BE_PTASK_SCHEDULE_FROM_LAST, 0, test_be_ptask_send, - test_be_ptask_recv, NULL, "Test ptask", &ptask); + test_be_ptask_recv, NULL, "Test ptask", 0, &ptask); assert_int_equal(ret, EINVAL); assert_null(ptask); } @@ -334,7 +334,7 @@ void test_be_ptask_create_einval_send(void **state) ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0, BE_PTASK_OFFLINE_SKIP, BE_PTASK_SCHEDULE_FROM_LAST, 0, NULL, - test_be_ptask_recv, NULL, "Test ptask", &ptask); + test_be_ptask_recv, NULL, "Test ptask", 0, &ptask); assert_int_equal(ret, EINVAL); assert_null(ptask); } @@ -348,7 +348,7 @@ void test_be_ptask_create_einval_recv(void **state) ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0, BE_PTASK_OFFLINE_SKIP, BE_PTASK_SCHEDULE_FROM_LAST, 0, test_be_ptask_send, - NULL, NULL, "Test ptask", &ptask); + NULL, NULL, "Test ptask", 0, &ptask); assert_int_equal(ret, EINVAL); assert_null(ptask); } @@ -362,7 +362,7 @@ void test_be_ptask_create_einval_name(void **state) ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0, BE_PTASK_OFFLINE_SKIP, BE_PTASK_SCHEDULE_FROM_LAST, 0, test_be_ptask_send, - test_be_ptask_recv, NULL, NULL, &ptask); + test_be_ptask_recv, NULL, NULL, 0, &ptask); assert_int_equal(ret, EINVAL); assert_null(ptask); } @@ -378,7 +378,7 @@ void test_be_ptask_create_no_delay(void **state) ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0, BE_PTASK_OFFLINE_SKIP, BE_PTASK_SCHEDULE_FROM_LAST, 0, test_be_ptask_send, - test_be_ptask_recv, test_ctx, "Test ptask", &ptask); + test_be_ptask_recv, test_ctx, "Test ptask", 0, &ptask); assert_int_equal(ret, ERR_OK); assert_non_null(ptask); assert_non_null(ptask->timer); @@ -406,7 +406,7 @@ void test_be_ptask_create_first_delay(void **state) ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, DELAY, 0, 0, 0, BE_PTASK_OFFLINE_SKIP, BE_PTASK_SCHEDULE_FROM_LAST, 0, test_be_ptask_send, - test_be_ptask_recv, test_ctx, "Test ptask", &ptask); + test_be_ptask_recv, test_ctx, "Test ptask", 0, &ptask); assert_int_equal(ret, ERR_OK); assert_non_null(ptask); assert_non_null(ptask->timer); @@ -432,7 +432,7 @@ void test_be_ptask_disable(void **state) ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0, BE_PTASK_OFFLINE_SKIP, BE_PTASK_SCHEDULE_FROM_LAST, 0, test_be_ptask_send, - test_be_ptask_recv, test_ctx, "Test ptask", &ptask); + test_be_ptask_recv, test_ctx, "Test ptask", 0, &ptask); assert_int_equal(ret, ERR_OK); assert_non_null(ptask); assert_non_null(ptask->timer); @@ -457,7 +457,7 @@ void test_be_ptask_enable(void **state) ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0, BE_PTASK_OFFLINE_SKIP, BE_PTASK_SCHEDULE_FROM_LAST, 0, test_be_ptask_send, - test_be_ptask_recv, test_ctx, "Test ptask", &ptask); + test_be_ptask_recv, test_ctx, "Test ptask", 0, &ptask); assert_int_equal(ret, ERR_OK); assert_non_null(ptask); assert_non_null(ptask->timer); @@ -490,7 +490,7 @@ void test_be_ptask_enable_delay(void **state) ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, DELAY, 0, 0, BE_PTASK_OFFLINE_SKIP, BE_PTASK_SCHEDULE_FROM_LAST, 0, test_be_ptask_send, - test_be_ptask_recv, test_ctx, "Test ptask", &ptask); + test_be_ptask_recv, test_ctx, "Test ptask", 0, &ptask); assert_int_equal(ret, ERR_OK); assert_non_null(ptask); assert_non_null(ptask->timer); @@ -530,7 +530,7 @@ void test_be_ptask_offline_skip(void **state) ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0, BE_PTASK_OFFLINE_SKIP, BE_PTASK_SCHEDULE_FROM_LAST, 0, test_be_ptask_send, - test_be_ptask_recv, test_ctx, "Test ptask", &ptask); + test_be_ptask_recv, test_ctx, "Test ptask", 0, &ptask); assert_int_equal(ret, ERR_OK); assert_non_null(ptask); assert_non_null(ptask->timer); @@ -565,7 +565,7 @@ void test_be_ptask_offline_disable(void **state) BE_PTASK_OFFLINE_DISABLE, BE_PTASK_SCHEDULE_FROM_LAST, 0, test_be_ptask_send, - test_be_ptask_recv, test_ctx, "Test ptask", &ptask); + test_be_ptask_recv, test_ctx, "Test ptask", 0, &ptask); assert_int_equal(ret, ERR_OK); assert_non_null(ptask); assert_non_null(ptask->timer); @@ -597,7 +597,7 @@ void test_be_ptask_offline_execute(void **state) BE_PTASK_OFFLINE_EXECUTE, BE_PTASK_SCHEDULE_FROM_LAST, 0, test_be_ptask_send, - test_be_ptask_recv, test_ctx, "Test ptask", &ptask); + test_be_ptask_recv, test_ctx, "Test ptask", 0, &ptask); assert_int_equal(ret, ERR_OK); assert_non_null(ptask); assert_non_null(ptask->timer); @@ -625,7 +625,7 @@ void test_be_ptask_reschedule_ok(void **state) ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0, BE_PTASK_OFFLINE_SKIP, BE_PTASK_SCHEDULE_FROM_LAST, 0, test_be_ptask_send, - test_be_ptask_recv, test_ctx, "Test ptask", &ptask); + test_be_ptask_recv, test_ctx, "Test ptask", 0, &ptask); assert_int_equal(ret, ERR_OK); assert_non_null(ptask); assert_non_null(ptask->timer); @@ -657,7 +657,7 @@ void test_be_ptask_reschedule_null(void **state) ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0, BE_PTASK_OFFLINE_SKIP, BE_PTASK_SCHEDULE_FROM_LAST, 0, test_be_ptask_null_send, - test_be_ptask_recv, test_ctx, "Test ptask", + test_be_ptask_recv, test_ctx, "Test ptask", 0, &ptask); assert_int_equal(ret, ERR_OK); assert_non_null(ptask); @@ -685,7 +685,7 @@ void test_be_ptask_reschedule_error(void **state) ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0, BE_PTASK_OFFLINE_SKIP, BE_PTASK_SCHEDULE_FROM_LAST, 0, test_be_ptask_send, - test_be_ptask_error_recv, test_ctx, "Test ptask", + test_be_ptask_error_recv, test_ctx, "Test ptask", 0, &ptask); assert_int_equal(ret, ERR_OK); assert_non_null(ptask); @@ -713,7 +713,7 @@ void test_be_ptask_reschedule_timeout(void **state) ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 1, BE_PTASK_OFFLINE_SKIP, BE_PTASK_SCHEDULE_FROM_LAST, 0, test_be_ptask_timeout_send, - test_be_ptask_error_recv, test_ctx, "Test ptask", + test_be_ptask_error_recv, test_ctx, "Test ptask", 0, &ptask); assert_int_equal(ret, ERR_OK); assert_non_null(ptask); @@ -751,7 +751,7 @@ void test_be_ptask_reschedule_backoff(void **state) ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0, BE_PTASK_OFFLINE_SKIP, BE_PTASK_SCHEDULE_FROM_LAST, PERIOD*2, test_be_ptask_send, - test_be_ptask_recv, test_ctx, "Test ptask", &ptask); + test_be_ptask_recv, test_ctx, "Test ptask", 0, &ptask); assert_int_equal(ret, ERR_OK); assert_non_null(ptask); assert_non_null(ptask->timer); @@ -806,7 +806,7 @@ void test_be_ptask_get_period(void **state) ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0, BE_PTASK_OFFLINE_SKIP, BE_PTASK_SCHEDULE_FROM_LAST, 0, test_be_ptask_send, - test_be_ptask_recv, test_ctx, "Test ptask", &ptask); + test_be_ptask_recv, test_ctx, "Test ptask", 0, &ptask); assert_int_equal(ret, ERR_OK); assert_non_null(ptask); @@ -827,7 +827,7 @@ void test_be_ptask_get_timeout(void **state) ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, TIMEOUT, BE_PTASK_OFFLINE_SKIP, BE_PTASK_SCHEDULE_FROM_LAST, 0, test_be_ptask_send, - test_be_ptask_recv, test_ctx, "Test ptask", &ptask); + test_be_ptask_recv, test_ctx, "Test ptask", 0, &ptask); assert_int_equal(ret, ERR_OK); assert_non_null(ptask); @@ -838,6 +838,24 @@ void test_be_ptask_get_timeout(void **state) assert_null(ptask); } +void test_be_ptask_no_periodic(void **state) +{ + struct test_ctx *test_ctx = (struct test_ctx *)(*state); + struct be_ptask *ptask = NULL; + errno_t ret; + + ret = be_ptask_create(test_ctx, test_ctx->be_ctx, 0, 0, DELAY, 0, 0, + BE_PTASK_OFFLINE_SKIP, BE_PTASK_SCHEDULE_FROM_LAST, + 0, test_be_ptask_send, + test_be_ptask_recv, test_ctx, "Test ptask", + BE_PTASK_NO_PERIODIC, &ptask); + assert_int_equal(ret, ERR_OK); + assert_non_null(ptask); + + be_ptask_destroy(&ptask); + assert_null(ptask); +} + void test_be_ptask_create_sync(void **state) { struct test_ctx *test_ctx = (struct test_ctx *)(*state); @@ -848,7 +866,7 @@ void test_be_ptask_create_sync(void **state) now = get_current_time(); ret = be_ptask_create_sync(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0, BE_PTASK_OFFLINE_SKIP, 0, test_be_ptask_sync, - test_ctx, "Test ptask", &ptask); + test_ctx, "Test ptask", 0, &ptask); assert_int_equal(ret, ERR_OK); assert_non_null(ptask); assert_non_null(ptask->timer); @@ -876,7 +894,7 @@ void test_be_ptask_sync_reschedule_ok(void **state) now = get_current_time(); ret = be_ptask_create_sync(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0, BE_PTASK_OFFLINE_SKIP, 0, test_be_ptask_sync, - test_ctx, "Test ptask", &ptask); + test_ctx, "Test ptask", 0, &ptask); assert_int_equal(ret, ERR_OK); assert_non_null(ptask); assert_non_null(ptask->timer); @@ -908,7 +926,7 @@ void test_be_ptask_sync_reschedule_error(void **state) ret = be_ptask_create_sync(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0, BE_PTASK_OFFLINE_SKIP, 0, test_be_ptask_sync_error, - test_ctx, "Test ptask", &ptask); + test_ctx, "Test ptask", 0, &ptask); assert_int_equal(ret, ERR_OK); assert_non_null(ptask); assert_non_null(ptask->timer); @@ -938,7 +956,7 @@ void test_be_ptask_sync_reschedule_backoff(void **state) 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); + test_ctx, "Test ptask", 0, &ptask); assert_int_equal(ret, ERR_OK); assert_non_null(ptask); assert_non_null(ptask->timer); @@ -1014,6 +1032,7 @@ int main(int argc, const char *argv[]) new_test(be_ptask_reschedule_backoff), new_test(be_ptask_get_period), new_test(be_ptask_get_timeout), + new_test(be_ptask_no_periodic), new_test(be_ptask_create_sync), new_test(be_ptask_sync_reschedule_ok), new_test(be_ptask_sync_reschedule_error), -- 2.20.1