a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina/*
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina Authors:
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina Pavel Březina <pbrezina@redhat.com>
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina Copyright (C) 2014 Red Hat
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina This program is free software; you can redistribute it and/or modify
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina it under the terms of the GNU General Public License as published by
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina the Free Software Foundation; either version 3 of the License, or
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina (at your option) any later version.
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina This program is distributed in the hope that it will be useful,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina but WITHOUT ANY WARRANTY; without even the implied warranty of
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina GNU General Public License for more details.
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina You should have received a copy of the GNU General Public License
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina along with this program. If not, see <http://www.gnu.org/licenses/>.
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina*/
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina#include <talloc.h>
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina#include <tevent.h>
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina#include <errno.h>
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina#include <popt.h>
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina#include <time.h>
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
cc2d77d5218c188119fa954c856e858cbde76947Pavel Březina#include "providers/backend.h"
3b99f7a97553a0a357d50abe507d4f0060c4eceaPavel Březina#include "providers/be_ptask_private.h"
3b99f7a97553a0a357d50abe507d4f0060c4eceaPavel Březina#include "providers/be_ptask.h"
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina#include "tests/cmocka/common_mock.h"
d43c9d18fb263b1ea4071b20e93ce4994583f62fJakub Hrozek#include "tests/cmocka/common_mock_be.h"
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina#include "tests/common.h"
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina#define DELAY 2
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina#define PERIOD 1
e89c2cb5ec77d57ed93952dae08df51738834fafSumit Bose#define TIMEOUT 123
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina#define new_test(test) \
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek cmocka_unit_test_setup_teardown(test_ ## test, test_setup, test_teardown)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinastruct test_ctx {
d43c9d18fb263b1ea4071b20e93ce4994583f62fJakub Hrozek struct sss_test_ctx *tctx;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ctx *be_ctx;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina time_t when;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina bool done;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina bool add_online_cb_called;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina bool add_offline_cb_called;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina};
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina#define mark_online(test_ctx) do { \
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_ctx->be_ctx->offstat.went_offline = 0; \
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_ctx->be_ctx->offstat.offline = false; \
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina} while (0)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina#define mark_offline(test_ctx) do { \
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina test_ctx->be_ctx->offstat.went_offline = get_current_time(); \
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_ctx->be_ctx->offstat.offline = true; \
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina} while (0)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina/* Since both test_ctx->done and ptask->req is marked as finished already
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina * in the sync _send function before a new execution is scheduled we need to
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina * rely on the fact that ptask->req is set to zero when a new timer is
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina * created. This way we guarantee that the condition is true only when
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina * the ptask is executed and a new one is scheduled. */
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina#define is_sync_ptask_finished(test_ctx, ptask) \
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina (test_ctx->done && ptask->req == NULL)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březinastatic time_t get_current_time(void)
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina{
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina struct timeval tv;
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina int ret;
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina ret = gettimeofday(&tv, NULL);
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina assert_int_equal(0, ret);
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina return tv.tv_sec;
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina}
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina/* Mock few backend functions so we don't have to bring the whole
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina * data provider into this test. */
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinabool be_is_offline(struct be_ctx *ctx)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina return ctx->offstat.offline;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinaint be_add_online_cb(TALLOC_CTX *mem_ctx,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ctx *ctx,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina be_callback_t cb,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina void *pvt,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_cb **online_cb)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_ctx = sss_mock_ptr_type(struct test_ctx *);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_ctx->add_online_cb_called = true;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina return ERR_OK;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinaint be_add_offline_cb(TALLOC_CTX *mem_ctx,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ctx *ctx,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina be_callback_t cb,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina void *pvt,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_cb **offline_cb)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_ctx = sss_mock_ptr_type(struct test_ctx *);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_ctx->add_offline_cb_called = true;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina return ERR_OK;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinastruct test_be_ptask_state {
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina};
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinastruct tevent_req * test_be_ptask_send(TALLOC_CTX *mem_ctx,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct tevent_context *ev,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ctx *be_ctx,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ptask *be_ptask,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina void *pvt)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_be_ptask_state *state = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct tevent_req *req = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ev);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(be_ctx);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(be_ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(pvt);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_ctx = talloc_get_type(pvt, struct test_ctx);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(test_ctx);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina test_ctx->when = get_current_time();
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina req = tevent_req_create(mem_ctx, &state, struct test_be_ptask_state);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(req);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina state->test_ctx = test_ctx;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina tevent_req_done(req);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina tevent_req_post(req, ev);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina return req;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinastruct tevent_req * test_be_ptask_null_send(TALLOC_CTX *mem_ctx,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct tevent_context *ev,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ctx *be_ctx,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ptask *be_ptask,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina void *pvt)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ev);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(be_ctx);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(be_ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(pvt);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_ctx = talloc_get_type(pvt, struct test_ctx);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(test_ctx);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina test_ctx->when = get_current_time();
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_ctx->done = true;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina return NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinastruct tevent_req * test_be_ptask_timeout_send(TALLOC_CTX *mem_ctx,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct tevent_context *ev,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ctx *be_ctx,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ptask *be_ptask,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina void *pvt)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_be_ptask_state *state = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct tevent_req *req = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ev);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(be_ctx);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(be_ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(pvt);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_ctx = talloc_get_type(pvt, struct test_ctx);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(test_ctx);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina test_ctx->when = get_current_time();
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina req = tevent_req_create(mem_ctx, &state, struct test_be_ptask_state);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(req);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina state->test_ctx = test_ctx;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina /* we won't finish the request */
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina return req;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinaerrno_t test_be_ptask_recv(struct tevent_req *req)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_be_ptask_state *state = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina state = tevent_req_data(req, struct test_be_ptask_state);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(state);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina state->test_ctx->done = true;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina TEVENT_REQ_RETURN_ON_ERROR(req);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina return ERR_OK;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinaerrno_t test_be_ptask_error_recv(struct tevent_req *req)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_be_ptask_state *state = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina state = tevent_req_data(req, struct test_be_ptask_state);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(state);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina state->test_ctx->done = true;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina return ERR_INTERNAL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinaerrno_t test_be_ptask_sync(TALLOC_CTX *mem_ctx,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct tevent_context *ev,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ctx *be_ctx,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ptask *be_ptask,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina void *pvt)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ev);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(be_ctx);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(be_ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(pvt);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_ctx = talloc_get_type(pvt, struct test_ctx);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(test_ctx);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina test_ctx->when = get_current_time();
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_ctx->done = true;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina return ERR_OK;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinaerrno_t test_be_ptask_sync_error(TALLOC_CTX *mem_ctx,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct tevent_context *ev,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ctx *be_ctx,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ptask *be_ptask,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina void *pvt)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ev);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(be_ctx);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(be_ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(pvt);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_ctx = talloc_get_type(pvt, struct test_ctx);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(test_ctx);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina test_ctx->when = get_current_time();
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_ctx->done = true;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina return ERR_INTERNAL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozekstatic int test_setup(void **state)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(leak_check_setup());
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_ctx = talloc_zero(global_talloc_context, struct test_ctx);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(test_ctx);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
d43c9d18fb263b1ea4071b20e93ce4994583f62fJakub Hrozek test_ctx->tctx = create_ev_test_ctx(test_ctx);
d43c9d18fb263b1ea4071b20e93ce4994583f62fJakub Hrozek assert_non_null(test_ctx->tctx);
d43c9d18fb263b1ea4071b20e93ce4994583f62fJakub Hrozek
d43c9d18fb263b1ea4071b20e93ce4994583f62fJakub Hrozek test_ctx->be_ctx = mock_be_ctx(test_ctx, test_ctx->tctx);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(test_ctx->be_ctx);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_ctx->be_ctx->ev = tevent_context_init(test_ctx->be_ctx);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(test_ctx->be_ctx->ev);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
f818dba78f3e2f3d53ba072e42ac662d2f49edadLukas Slebodnik check_leaks_push(test_ctx);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina *state = test_ctx;
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek return 0;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozekstatic int test_teardown(void **state)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
f818dba78f3e2f3d53ba072e42ac662d2f49edadLukas Slebodnik assert_true(check_leaks_pop(*state));
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina talloc_zfree(*state);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(leak_check_teardown());
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek return 0;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinavoid test_be_ptask_create_einval_be(void **state)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = (struct test_ctx *)(*state);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ptask *ptask = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina errno_t ret;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina ret = be_ptask_create(test_ctx, NULL, PERIOD, 0, 0, 0, 0,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina BE_PTASK_OFFLINE_SKIP, 0, test_be_ptask_send,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_be_ptask_recv, NULL, "Test ptask", &ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_int_equal(ret, EINVAL);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinavoid test_be_ptask_create_einval_period(void **state)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = (struct test_ctx *)(*state);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ptask *ptask = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina errno_t ret;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina ret = be_ptask_create(test_ctx, test_ctx->be_ctx, 0, 0, 0, 0, 0,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina BE_PTASK_OFFLINE_SKIP, 0, test_be_ptask_send,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_be_ptask_recv, NULL, "Test ptask", &ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_int_equal(ret, EINVAL);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinavoid test_be_ptask_create_einval_send(void **state)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = (struct test_ctx *)(*state);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ptask *ptask = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina errno_t ret;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina BE_PTASK_OFFLINE_SKIP, 0, NULL,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_be_ptask_recv, NULL, "Test ptask", &ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_int_equal(ret, EINVAL);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinavoid test_be_ptask_create_einval_recv(void **state)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = (struct test_ctx *)(*state);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ptask *ptask = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina errno_t ret;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina BE_PTASK_OFFLINE_SKIP, 0, test_be_ptask_send,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina NULL, NULL, "Test ptask", &ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_int_equal(ret, EINVAL);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinavoid test_be_ptask_create_einval_name(void **state)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = (struct test_ctx *)(*state);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ptask *ptask = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina errno_t ret;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina BE_PTASK_OFFLINE_SKIP, 0, test_be_ptask_send,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_be_ptask_recv, NULL, NULL, &ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_int_equal(ret, EINVAL);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinavoid test_be_ptask_create_no_delay(void **state)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = (struct test_ctx *)(*state);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ptask *ptask = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina time_t now;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina errno_t ret;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina now = get_current_time();
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina BE_PTASK_OFFLINE_SKIP, 0, test_be_ptask_send,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_be_ptask_recv, test_ctx, "Test ptask", &ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_int_equal(ret, ERR_OK);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask->timer);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina while (!test_ctx->done) {
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina tevent_loop_once(test_ctx->be_ctx->ev);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina }
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(now <= ptask->last_execution);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(now <= test_ctx->when);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(ptask->last_execution <= test_ctx->when);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina be_ptask_destroy(&ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinavoid test_be_ptask_create_first_delay(void **state)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = (struct test_ctx *)(*state);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ptask *ptask = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina time_t now;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina errno_t ret;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina now = get_current_time();
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, DELAY, 0, 0, 0,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina BE_PTASK_OFFLINE_SKIP, 0, test_be_ptask_send,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_be_ptask_recv, test_ctx, "Test ptask", &ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_int_equal(ret, ERR_OK);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask->timer);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina while (!test_ctx->done) {
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina tevent_loop_once(test_ctx->be_ctx->ev);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina }
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(now + DELAY <= ptask->last_execution);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(now + DELAY <= test_ctx->when);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(ptask->last_execution <= test_ctx->when);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina be_ptask_destroy(&ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinavoid test_be_ptask_disable(void **state)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = (struct test_ctx *)(*state);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ptask *ptask = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina errno_t ret;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina BE_PTASK_OFFLINE_SKIP, 0, test_be_ptask_send,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_be_ptask_recv, test_ctx, "Test ptask", &ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_int_equal(ret, ERR_OK);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask->timer);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina be_ptask_disable(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_null(ptask->timer);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_false(ptask->enabled);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina be_ptask_destroy(&ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinavoid test_be_ptask_enable(void **state)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = (struct test_ctx *)(*state);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ptask *ptask = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina time_t now;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina errno_t ret;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina now = get_current_time();
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina BE_PTASK_OFFLINE_SKIP, 0, test_be_ptask_send,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_be_ptask_recv, test_ctx, "Test ptask", &ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_int_equal(ret, ERR_OK);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask->timer);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina be_ptask_disable(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina now = get_current_time();
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina be_ptask_enable(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask->timer);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina while (!test_ctx->done) {
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina tevent_loop_once(test_ctx->be_ctx->ev);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina }
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(now <= ptask->last_execution);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(now <= test_ctx->when);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(ptask->last_execution <= test_ctx->when);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina be_ptask_destroy(&ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinavoid test_be_ptask_enable_delay(void **state)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = (struct test_ctx *)(*state);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ptask *ptask = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina time_t now;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina errno_t ret;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, DELAY, 0, 0,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina BE_PTASK_OFFLINE_SKIP, 0, test_be_ptask_send,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_be_ptask_recv, test_ctx, "Test ptask", &ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_int_equal(ret, ERR_OK);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask->timer);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina while (!test_ctx->done) {
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina tevent_loop_once(test_ctx->be_ctx->ev);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina }
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina be_ptask_disable(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_ctx->done = false;
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina now = get_current_time();
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina be_ptask_enable(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina while (!test_ctx->done) {
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina tevent_loop_once(test_ctx->be_ctx->ev);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina }
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(now + DELAY <= ptask->last_execution);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(now + DELAY <= test_ctx->when);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(ptask->last_execution <= test_ctx->when);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina be_ptask_destroy(&ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinavoid test_be_ptask_offline_skip(void **state)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = (struct test_ctx *)(*state);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ptask *ptask = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina time_t next_execution;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina time_t now;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina errno_t ret;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina mark_offline(test_ctx);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina now = get_current_time();
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina BE_PTASK_OFFLINE_SKIP, 0, test_be_ptask_send,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_be_ptask_recv, test_ctx, "Test ptask", &ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_int_equal(ret, ERR_OK);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask->timer);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina next_execution = ptask->next_execution;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(now <= next_execution);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina while (ptask->next_execution == next_execution && !test_ctx->done) {
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina tevent_loop_once(test_ctx->be_ctx->ev);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina }
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(next_execution + PERIOD <= ptask->next_execution);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(ptask->enabled);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask->timer);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina be_ptask_destroy(&ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinavoid test_be_ptask_offline_disable(void **state)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = (struct test_ctx *)(*state);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ptask *ptask = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina errno_t ret;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina mark_offline(test_ctx);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina will_return(be_add_online_cb, test_ctx);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina will_return(be_add_offline_cb, test_ctx);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina BE_PTASK_OFFLINE_DISABLE, 0, test_be_ptask_send,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_be_ptask_recv, test_ctx, "Test ptask", &ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_int_equal(ret, ERR_OK);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask->timer);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(test_ctx->add_online_cb_called);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(test_ctx->add_offline_cb_called);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina while (ptask->enabled && !test_ctx->done) {
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina tevent_loop_once(test_ctx->be_ctx->ev);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina }
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_false(ptask->enabled);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_false(test_ctx->done);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_null(ptask->timer);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina be_ptask_destroy(&ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinavoid test_be_ptask_offline_execute(void **state)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = (struct test_ctx *)(*state);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ptask *ptask = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina errno_t ret;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina mark_offline(test_ctx);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina BE_PTASK_OFFLINE_EXECUTE, 0, test_be_ptask_send,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_be_ptask_recv, test_ctx, "Test ptask", &ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_int_equal(ret, ERR_OK);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask->timer);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina while (!test_ctx->done) {
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina tevent_loop_once(test_ctx->be_ctx->ev);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina }
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(ptask->enabled);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask->timer);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina be_ptask_destroy(&ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinavoid test_be_ptask_reschedule_ok(void **state)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = (struct test_ctx *)(*state);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ptask *ptask = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina time_t next_execution;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina time_t now;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina errno_t ret;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina now = get_current_time();
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina BE_PTASK_OFFLINE_SKIP, 0, test_be_ptask_send,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_be_ptask_recv, test_ctx, "Test ptask", &ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_int_equal(ret, ERR_OK);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask->timer);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina next_execution = ptask->next_execution;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina while (!test_ctx->done) {
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina tevent_loop_once(test_ctx->be_ctx->ev);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina }
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(now <= ptask->last_execution);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(now <= test_ctx->when);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(ptask->last_execution <= test_ctx->when);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(next_execution + PERIOD <= ptask->next_execution);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask->timer);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina be_ptask_destroy(&ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinavoid test_be_ptask_reschedule_null(void **state)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = (struct test_ctx *)(*state);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ptask *ptask = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina time_t now = 0;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina errno_t ret;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina BE_PTASK_OFFLINE_SKIP, 0, test_be_ptask_null_send,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_be_ptask_recv, test_ctx, "Test ptask",
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina &ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_int_equal(ret, ERR_OK);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask->timer);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina while (!test_ctx->done) {
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina now = get_current_time();
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina tevent_loop_once(test_ctx->be_ctx->ev);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina }
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(now + PERIOD <= ptask->next_execution);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask->timer);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina be_ptask_destroy(&ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinavoid test_be_ptask_reschedule_error(void **state)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = (struct test_ctx *)(*state);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ptask *ptask = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina time_t now = 0;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina errno_t ret;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina BE_PTASK_OFFLINE_SKIP, 0, test_be_ptask_send,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_be_ptask_error_recv, test_ctx, "Test ptask",
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina &ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_int_equal(ret, ERR_OK);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask->timer);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina while (!test_ctx->done) {
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina now = get_current_time();
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina tevent_loop_once(test_ctx->be_ctx->ev);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina }
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(now + PERIOD <= ptask->next_execution);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask->timer);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina be_ptask_destroy(&ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinavoid test_be_ptask_reschedule_timeout(void **state)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = (struct test_ctx *)(*state);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ptask *ptask = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina time_t now = 0;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina errno_t ret;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 1,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina BE_PTASK_OFFLINE_SKIP, 0, test_be_ptask_timeout_send,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_be_ptask_error_recv, test_ctx, "Test ptask",
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina &ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_int_equal(ret, ERR_OK);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask->timer);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina /* first iterate until the task is executed */
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina while (!test_ctx->done && ptask->req == NULL) {
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina tevent_loop_once(test_ctx->be_ctx->ev);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina }
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina /* then iterate until the request is destroyed */
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina while (!test_ctx->done && ptask->req != NULL) {
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina now = get_current_time();
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina tevent_loop_once(test_ctx->be_ctx->ev);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina }
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_false(test_ctx->done);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(now + PERIOD <= ptask->next_execution);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask->timer);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina be_ptask_destroy(&ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březinavoid test_be_ptask_reschedule_backoff(void **state)
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina{
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina struct test_ctx *test_ctx = (struct test_ctx *)(*state);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina struct be_ptask *ptask = NULL;
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina time_t next_execution;
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina time_t now_first;
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina time_t now_backoff = 0;
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina errno_t ret;
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina now_first = get_current_time();
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0,
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina BE_PTASK_OFFLINE_SKIP, PERIOD*2, test_be_ptask_send,
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina test_be_ptask_recv, test_ctx, "Test ptask", &ptask);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina assert_int_equal(ret, ERR_OK);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina assert_non_null(ptask);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina assert_non_null(ptask->timer);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina /* first run */
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina next_execution = ptask->next_execution;
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina while (!test_ctx->done) {
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina /* We need to acquire timestamp for the second test here, since this
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina * is the closest value to the timestamp when the next event is
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina * scheduled. */
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina now_backoff = get_current_time();
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina tevent_loop_once(test_ctx->be_ctx->ev);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina }
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina assert_true(now_first <= ptask->last_execution);
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina assert_true(now_first <= test_ctx->when);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina assert_true(ptask->last_execution <= test_ctx->when);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina assert_true(next_execution + PERIOD <= ptask->next_execution);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina assert_int_equal(PERIOD*2, ptask->period);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina assert_non_null(ptask->timer);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina test_ctx->done = false;
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina /* second run */
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina next_execution = ptask->next_execution;
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina while (!test_ctx->done) {
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina tevent_loop_once(test_ctx->be_ctx->ev);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina }
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina assert_true(now_backoff + PERIOD <= ptask->last_execution);
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina assert_true(now_backoff + PERIOD <= test_ctx->when);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina assert_true(ptask->last_execution <= test_ctx->when);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina assert_true(next_execution + PERIOD*2 <= ptask->next_execution);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina assert_int_equal(PERIOD*2, ptask->period);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina assert_non_null(ptask->timer);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina be_ptask_destroy(&ptask);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina assert_null(ptask);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina}
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinavoid test_be_ptask_get_period(void **state)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = (struct test_ctx *)(*state);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ptask *ptask = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina time_t out_period;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina errno_t ret;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina BE_PTASK_OFFLINE_SKIP, 0, test_be_ptask_send,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_be_ptask_recv, test_ctx, "Test ptask", &ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_int_equal(ret, ERR_OK);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina out_period = be_ptask_get_period(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(PERIOD == out_period);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina be_ptask_destroy(&ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
e89c2cb5ec77d57ed93952dae08df51738834fafSumit Bosevoid test_be_ptask_get_timeout(void **state)
e89c2cb5ec77d57ed93952dae08df51738834fafSumit Bose{
e89c2cb5ec77d57ed93952dae08df51738834fafSumit Bose struct test_ctx *test_ctx = (struct test_ctx *)(*state);
e89c2cb5ec77d57ed93952dae08df51738834fafSumit Bose struct be_ptask *ptask = NULL;
e89c2cb5ec77d57ed93952dae08df51738834fafSumit Bose time_t out_timeout;
e89c2cb5ec77d57ed93952dae08df51738834fafSumit Bose errno_t ret;
e89c2cb5ec77d57ed93952dae08df51738834fafSumit Bose
e89c2cb5ec77d57ed93952dae08df51738834fafSumit Bose ret = be_ptask_create(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, TIMEOUT,
e89c2cb5ec77d57ed93952dae08df51738834fafSumit Bose BE_PTASK_OFFLINE_SKIP, 0, test_be_ptask_send,
e89c2cb5ec77d57ed93952dae08df51738834fafSumit Bose test_be_ptask_recv, test_ctx, "Test ptask", &ptask);
e89c2cb5ec77d57ed93952dae08df51738834fafSumit Bose assert_int_equal(ret, ERR_OK);
e89c2cb5ec77d57ed93952dae08df51738834fafSumit Bose assert_non_null(ptask);
e89c2cb5ec77d57ed93952dae08df51738834fafSumit Bose
e89c2cb5ec77d57ed93952dae08df51738834fafSumit Bose out_timeout = be_ptask_get_timeout(ptask);
e89c2cb5ec77d57ed93952dae08df51738834fafSumit Bose assert_true(TIMEOUT == out_timeout);
e89c2cb5ec77d57ed93952dae08df51738834fafSumit Bose
e89c2cb5ec77d57ed93952dae08df51738834fafSumit Bose be_ptask_destroy(&ptask);
e89c2cb5ec77d57ed93952dae08df51738834fafSumit Bose assert_null(ptask);
e89c2cb5ec77d57ed93952dae08df51738834fafSumit Bose}
e89c2cb5ec77d57ed93952dae08df51738834fafSumit Bose
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinavoid test_be_ptask_create_sync(void **state)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = (struct test_ctx *)(*state);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ptask *ptask = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina time_t now;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina errno_t ret;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina now = get_current_time();
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina ret = be_ptask_create_sync(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina BE_PTASK_OFFLINE_SKIP, 0, test_be_ptask_sync,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_ctx, "Test ptask", &ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_int_equal(ret, ERR_OK);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask->timer);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina while (!test_ctx->done) {
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina tevent_loop_once(test_ctx->be_ctx->ev);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina }
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(now <= ptask->last_execution);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(now <= test_ctx->when);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(ptask->last_execution <= test_ctx->when);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina be_ptask_destroy(&ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinavoid test_be_ptask_sync_reschedule_ok(void **state)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = (struct test_ctx *)(*state);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ptask *ptask = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina time_t next_execution;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina time_t now;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina errno_t ret;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina now = get_current_time();
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina ret = be_ptask_create_sync(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina BE_PTASK_OFFLINE_SKIP, 0, test_be_ptask_sync,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_ctx, "Test ptask", &ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_int_equal(ret, ERR_OK);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask->timer);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina next_execution = ptask->next_execution;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina while (!is_sync_ptask_finished(test_ctx, ptask)) {
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina tevent_loop_once(test_ctx->be_ctx->ev);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina }
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(now <= ptask->last_execution);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(now <= test_ctx->when);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(ptask->last_execution <= test_ctx->when);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(next_execution + PERIOD <= ptask->next_execution);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask->timer);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina be_ptask_destroy(&ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinavoid test_be_ptask_sync_reschedule_error(void **state)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct test_ctx *test_ctx = (struct test_ctx *)(*state);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct be_ptask *ptask = NULL;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina time_t now = 0;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina errno_t ret;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina ret = be_ptask_create_sync(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina BE_PTASK_OFFLINE_SKIP, 0,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_be_ptask_sync_error,
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina test_ctx, "Test ptask", &ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_int_equal(ret, ERR_OK);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask->timer);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina while (!is_sync_ptask_finished(test_ctx, ptask)) {
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina now = get_current_time();
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina tevent_loop_once(test_ctx->be_ctx->ev);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina }
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_true(now + PERIOD <= ptask->next_execution);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_non_null(ptask->timer);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina be_ptask_destroy(&ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina assert_null(ptask);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březinavoid test_be_ptask_sync_reschedule_backoff(void **state)
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina{
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina struct test_ctx *test_ctx = (struct test_ctx *)(*state);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina struct be_ptask *ptask = NULL;
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina time_t next_execution;
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina time_t now_first;
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina time_t now_backoff = 0;
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina errno_t ret;
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina now_first = get_current_time();
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina ret = be_ptask_create_sync(test_ctx, test_ctx->be_ctx, PERIOD, 0, 0, 0, 0,
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina BE_PTASK_OFFLINE_SKIP, PERIOD*2,
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina test_be_ptask_sync_error,
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina test_ctx, "Test ptask", &ptask);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina assert_int_equal(ret, ERR_OK);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina assert_non_null(ptask);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina assert_non_null(ptask->timer);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina /* first run */
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina next_execution = ptask->next_execution;
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina while (!is_sync_ptask_finished(test_ctx, ptask)) {
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina /* We need to acquire timestamp for the second test here, since this
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina * is the closest value to the timestamp when the next event is
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina * scheduled. */
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina now_backoff = get_current_time();
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina tevent_loop_once(test_ctx->be_ctx->ev);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina }
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina assert_true(now_first <= ptask->last_execution);
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina assert_true(now_first <= test_ctx->when);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina assert_true(ptask->last_execution <= test_ctx->when);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina assert_true(next_execution + PERIOD <= ptask->next_execution);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina assert_int_equal(PERIOD*2, ptask->period);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina assert_non_null(ptask->timer);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina test_ctx->done = false;
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina /* second run */
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina next_execution = ptask->next_execution;
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina while (!is_sync_ptask_finished(test_ctx, ptask)) {
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina tevent_loop_once(test_ctx->be_ctx->ev);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina }
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina assert_true(now_backoff + PERIOD <= ptask->last_execution);
5d69dd4d62dab877dfc3c88e410816034981915fPavel Březina assert_true(now_backoff + PERIOD <= test_ctx->when);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina assert_true(ptask->last_execution <= test_ctx->when);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina assert_true(next_execution + PERIOD*2 <= ptask->next_execution);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina assert_int_equal(PERIOD*2, ptask->period);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina assert_non_null(ptask->timer);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina be_ptask_destroy(&ptask);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina assert_null(ptask);
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina}
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březinaint main(int argc, const char *argv[])
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina{
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina poptContext pc;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina int opt;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina struct poptOption long_options[] = {
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina POPT_AUTOHELP
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina SSSD_DEBUG_OPTS
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina POPT_TABLEEND
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina };
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek const struct CMUnitTest tests[] = {
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina new_test(be_ptask_create_einval_be),
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina new_test(be_ptask_create_einval_period),
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina new_test(be_ptask_create_einval_send),
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina new_test(be_ptask_create_einval_recv),
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina new_test(be_ptask_create_einval_name),
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina new_test(be_ptask_create_no_delay),
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina new_test(be_ptask_create_first_delay),
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina new_test(be_ptask_disable),
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina new_test(be_ptask_enable),
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina new_test(be_ptask_enable_delay),
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina new_test(be_ptask_offline_skip),
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina new_test(be_ptask_offline_disable),
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina new_test(be_ptask_offline_execute),
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina new_test(be_ptask_reschedule_ok),
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina new_test(be_ptask_reschedule_null),
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina new_test(be_ptask_reschedule_error),
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina new_test(be_ptask_reschedule_timeout),
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina new_test(be_ptask_reschedule_backoff),
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina new_test(be_ptask_get_period),
e89c2cb5ec77d57ed93952dae08df51738834fafSumit Bose new_test(be_ptask_get_timeout),
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina new_test(be_ptask_create_sync),
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina new_test(be_ptask_sync_reschedule_ok),
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina new_test(be_ptask_sync_reschedule_error),
babaca78cc196e7e0dcc3e972347951a081159f2Pavel Březina new_test(be_ptask_sync_reschedule_backoff)
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina };
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
57c5ea8825c7179fd93382dbcbb07e828e5aec19René Genz /* Set debug level to invalid value so we can decide if -d 0 was used. */
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina debug_level = SSSDBG_INVALID;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina pc = poptGetContext(argv[0], argc, argv, long_options, 0);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina while((opt = poptGetNextOpt(pc)) != -1) {
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina switch(opt) {
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina default:
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina fprintf(stderr, "\nInvalid option %s: %s\n\n",
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina poptBadOption(pc, 0), poptStrerror(opt));
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina poptPrintUsage(pc, stderr, 0);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina return 1;
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina }
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina }
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina poptFreeContext(pc);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina DEBUG_CLI_INIT(debug_level);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina
4e5e846de22407f825fe3b4040d79606818a2419Jakub Hrozek return cmocka_run_group_tests(tests, NULL, NULL);
a5623363d6042290fe652a1ca5ce5a85a821236fPavel Březina}