taskpool_test.c revision 275970
1256056Sgrehan/* 2256056Sgrehan * Copyright (C) 2011, 2012 Internet Systems Consortium, Inc. ("ISC") 3256056Sgrehan * 4256056Sgrehan * Permission to use, copy, modify, and/or distribute this software for any 5256056Sgrehan * purpose with or without fee is hereby granted, provided that the above 6256056Sgrehan * copyright notice and this permission notice appear in all copies. 7256056Sgrehan * 8256056Sgrehan * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 9256056Sgrehan * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 10256056Sgrehan * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 11256056Sgrehan * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 12256056Sgrehan * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 13256056Sgrehan * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 14256056Sgrehan * PERFORMANCE OF THIS SOFTWARE. 15256056Sgrehan */ 16256056Sgrehan 17256056Sgrehan/* $Id$ */ 18256056Sgrehan 19256056Sgrehan/*! \file */ 20256056Sgrehan 21256056Sgrehan#include <config.h> 22256056Sgrehan 23256056Sgrehan#include <atf-c.h> 24256056Sgrehan 25256056Sgrehan#include <unistd.h> 26256056Sgrehan 27256056Sgrehan#include <isc/task.h> 28256056Sgrehan#include <isc/taskpool.h> 29256056Sgrehan 30256056Sgrehan#include "isctest.h" 31256056Sgrehan 32256056Sgrehan/* 33256056Sgrehan * Individual unit tests 34256056Sgrehan */ 35256056Sgrehan 36256056Sgrehan/* Create a taskpool */ 37256056SgrehanATF_TC(create_pool); 38256056SgrehanATF_TC_HEAD(create_pool, tc) { 39256056Sgrehan atf_tc_set_md_var(tc, "descr", "create a taskpool"); 40256056Sgrehan} 41256056SgrehanATF_TC_BODY(create_pool, tc) { 42256056Sgrehan isc_result_t result; 43256056Sgrehan isc_taskpool_t *pool = NULL; 44256056Sgrehan 45256056Sgrehan UNUSED(tc); 46256056Sgrehan 47256056Sgrehan result = isc_test_begin(NULL, ISC_TRUE); 48256056Sgrehan ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); 49256056Sgrehan 50256056Sgrehan result = isc_taskpool_create(taskmgr, mctx, 8, 2, &pool); 51276349Sneel ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); 52256056Sgrehan ATF_REQUIRE_EQ(isc_taskpool_size(pool), 8); 53280745Smav 54256056Sgrehan isc_taskpool_destroy(&pool); 55256056Sgrehan ATF_REQUIRE_EQ(pool, NULL); 56256056Sgrehan 57256056Sgrehan isc_test_end(); 58256056Sgrehan} 59256056Sgrehan 60256056Sgrehan/* Resize a taskpool */ 61256056SgrehanATF_TC(expand_pool); 62256056SgrehanATF_TC_HEAD(expand_pool, tc) { 63256056Sgrehan atf_tc_set_md_var(tc, "descr", "expand a taskpool"); 64256056Sgrehan} 65256056SgrehanATF_TC_BODY(expand_pool, tc) { 66256056Sgrehan isc_result_t result; 67256056Sgrehan isc_taskpool_t *pool1 = NULL, *pool2 = NULL, *hold = NULL; 68256056Sgrehan 69256056Sgrehan UNUSED(tc); 70256056Sgrehan 71256056Sgrehan result = isc_test_begin(NULL, ISC_TRUE); 72256056Sgrehan ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); 73256056Sgrehan 74256056Sgrehan result = isc_taskpool_create(taskmgr, mctx, 10, 2, &pool1); 75256056Sgrehan ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); 76256056Sgrehan ATF_REQUIRE_EQ(isc_taskpool_size(pool1), 10); 77256056Sgrehan 78256056Sgrehan /* resizing to a smaller size should have no effect */ 79256056Sgrehan hold = pool1; 80256056Sgrehan result = isc_taskpool_expand(&pool1, 5, &pool2); 81256056Sgrehan ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); 82256056Sgrehan ATF_REQUIRE_EQ(isc_taskpool_size(pool2), 10); 83256056Sgrehan ATF_REQUIRE_EQ(pool2, hold); 84256056Sgrehan ATF_REQUIRE_EQ(pool1, NULL); 85256056Sgrehan pool1 = pool2; 86256056Sgrehan pool2 = NULL; 87256056Sgrehan 88256056Sgrehan /* resizing to the same size should have no effect */ 89256056Sgrehan hold = pool1; 90280740Smav result = isc_taskpool_expand(&pool1, 10, &pool2); 91256056Sgrehan ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); 92256056Sgrehan ATF_REQUIRE_EQ(isc_taskpool_size(pool2), 10); 93256056Sgrehan ATF_REQUIRE_EQ(pool2, hold); 94256056Sgrehan ATF_REQUIRE_EQ(pool1, NULL); 95256056Sgrehan pool1 = pool2; 96256056Sgrehan pool2 = NULL; 97256056Sgrehan 98256056Sgrehan /* resizing to larger size should make a new pool */ 99256056Sgrehan hold = pool1; 100256056Sgrehan result = isc_taskpool_expand(&pool1, 20, &pool2); 101267339Sjhb ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); 102267339Sjhb ATF_REQUIRE_EQ(isc_taskpool_size(pool2), 20); 103267339Sjhb ATF_REQUIRE(pool2 != hold); 104267339Sjhb ATF_REQUIRE_EQ(pool1, NULL); 105267339Sjhb 106267339Sjhb isc_taskpool_destroy(&pool2); 107267339Sjhb ATF_REQUIRE_EQ(pool2, NULL); 108256056Sgrehan 109256056Sgrehan isc_test_end(); 110256056Sgrehan} 111256056Sgrehan 112256056Sgrehan/* Get tasks */ 113256056SgrehanATF_TC(get_tasks); 114256056SgrehanATF_TC_HEAD(get_tasks, tc) { 115256056Sgrehan atf_tc_set_md_var(tc, "descr", "create a taskpool"); 116256056Sgrehan} 117256056SgrehanATF_TC_BODY(get_tasks, tc) { 118256056Sgrehan isc_result_t result; 119256056Sgrehan isc_taskpool_t *pool = NULL; 120256056Sgrehan isc_task_t *task1 = NULL, *task2 = NULL, *task3 = NULL; 121276349Sneel 122276349Sneel UNUSED(tc); 123256056Sgrehan 124256056Sgrehan result = isc_test_begin(NULL, ISC_TRUE); 125256056Sgrehan ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); 126256056Sgrehan 127282306Smav result = isc_taskpool_create(taskmgr, mctx, 2, 2, &pool); 128256056Sgrehan ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); 129256056Sgrehan ATF_REQUIRE_EQ(isc_taskpool_size(pool), 2); 130256056Sgrehan 131256056Sgrehan /* two tasks in pool; make sure we can access them more than twice */ 132256056Sgrehan isc_taskpool_gettask(pool, &task1); 133256164Sdim ATF_REQUIRE(ISCAPI_TASK_VALID(task1)); 134256164Sdim 135280745Smav isc_taskpool_gettask(pool, &task2); 136256056Sgrehan ATF_REQUIRE(ISCAPI_TASK_VALID(task2)); 137256056Sgrehan 138282846Smav isc_taskpool_gettask(pool, &task3); 139256056Sgrehan ATF_REQUIRE(ISCAPI_TASK_VALID(task3)); 140256056Sgrehan 141280736Smav isc_task_destroy(&task1); 142256056Sgrehan isc_task_destroy(&task2); 143256056Sgrehan isc_task_destroy(&task3); 144282846Smav 145267339Sjhb isc_taskpool_destroy(&pool); 146256056Sgrehan ATF_REQUIRE_EQ(pool, NULL); 147256056Sgrehan 148256056Sgrehan isc_test_end(); 149256056Sgrehan} 150256056Sgrehan 151256056Sgrehan/* Get tasks */ 152256056SgrehanATF_TC(set_privilege); 153256056SgrehanATF_TC_HEAD(set_privilege, tc) { 154256056Sgrehan atf_tc_set_md_var(tc, "descr", "create a taskpool"); 155256056Sgrehan} 156256056SgrehanATF_TC_BODY(set_privilege, tc) { 157256056Sgrehan isc_result_t result; 158256056Sgrehan isc_taskpool_t *pool = NULL; 159256056Sgrehan isc_task_t *task1 = NULL, *task2 = NULL, *task3 = NULL; 160256056Sgrehan 161256056Sgrehan UNUSED(tc); 162256056Sgrehan 163256056Sgrehan result = isc_test_begin(NULL, ISC_TRUE); 164256056Sgrehan ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); 165256056Sgrehan 166256056Sgrehan result = isc_taskpool_create(taskmgr, mctx, 2, 2, &pool); 167256056Sgrehan ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); 168256056Sgrehan ATF_REQUIRE_EQ(isc_taskpool_size(pool), 2); 169256056Sgrehan 170256056Sgrehan isc_taskpool_setprivilege(pool, ISC_TRUE); 171276349Sneel 172256056Sgrehan isc_taskpool_gettask(pool, &task1); 173256056Sgrehan isc_taskpool_gettask(pool, &task2); 174256056Sgrehan isc_taskpool_gettask(pool, &task3); 175256056Sgrehan 176256056Sgrehan ATF_CHECK(ISCAPI_TASK_VALID(task1)); 177256056Sgrehan ATF_CHECK(ISCAPI_TASK_VALID(task2)); 178256056Sgrehan ATF_CHECK(ISCAPI_TASK_VALID(task3)); 179256056Sgrehan 180256056Sgrehan ATF_CHECK(isc_task_privilege(task1)); 181256056Sgrehan ATF_CHECK(isc_task_privilege(task2)); 182256056Sgrehan ATF_CHECK(isc_task_privilege(task3)); 183256056Sgrehan 184256056Sgrehan isc_taskpool_setprivilege(pool, ISC_FALSE); 185259301Sgrehan 186256056Sgrehan ATF_CHECK(!isc_task_privilege(task1)); 187256056Sgrehan ATF_CHECK(!isc_task_privilege(task2)); 188256056Sgrehan ATF_CHECK(!isc_task_privilege(task3)); 189256056Sgrehan 190256056Sgrehan isc_task_destroy(&task1); 191256056Sgrehan isc_task_destroy(&task2); 192256056Sgrehan isc_task_destroy(&task3); 193256056Sgrehan 194256056Sgrehan isc_taskpool_destroy(&pool); 195256056Sgrehan ATF_REQUIRE_EQ(pool, NULL); 196256056Sgrehan 197256056Sgrehan isc_test_end(); 198256056Sgrehan} 199256056Sgrehan 200256056Sgrehan/* 201256056Sgrehan * Main 202256056Sgrehan */ 203256056SgrehanATF_TP_ADD_TCS(tp) { 204267393Sjhb ATF_TP_ADD_TC(tp, create_pool); 205256056Sgrehan ATF_TP_ADD_TC(tp, expand_pool); 206256056Sgrehan ATF_TP_ADD_TC(tp, get_tasks); 207256056Sgrehan ATF_TP_ADD_TC(tp, set_privilege); 208256056Sgrehan 209282846Smav return (atf_no_error()); 210282846Smav} 211256056Sgrehan 212256056Sgrehan