1 /* $NetBSD: taskpool_test.c,v 1.1.1.4 2014/12/10 03:34:44 christos Exp $ */
4 * Copyright (C) 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
6 * Permission to use, copy, modify, and/or distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
10 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
11 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
12 * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
13 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
14 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
15 * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16 * PERFORMANCE OF THIS SOFTWARE.
30 #include <isc/taskpool.h>
35 * Individual unit tests
38 /* Create a taskpool */
40 ATF_TC_HEAD(create_pool
, tc
) {
41 atf_tc_set_md_var(tc
, "descr", "create a taskpool");
43 ATF_TC_BODY(create_pool
, tc
) {
45 isc_taskpool_t
*pool
= NULL
;
49 result
= isc_test_begin(NULL
, ISC_TRUE
);
50 ATF_REQUIRE_EQ(result
, ISC_R_SUCCESS
);
52 result
= isc_taskpool_create(taskmgr
, mctx
, 8, 2, &pool
);
53 ATF_REQUIRE_EQ(result
, ISC_R_SUCCESS
);
54 ATF_REQUIRE_EQ(isc_taskpool_size(pool
), 8);
56 isc_taskpool_destroy(&pool
);
57 ATF_REQUIRE_EQ(pool
, NULL
);
62 /* Resize a taskpool */
64 ATF_TC_HEAD(expand_pool
, tc
) {
65 atf_tc_set_md_var(tc
, "descr", "expand a taskpool");
67 ATF_TC_BODY(expand_pool
, tc
) {
69 isc_taskpool_t
*pool1
= NULL
, *pool2
= NULL
, *hold
= NULL
;
73 result
= isc_test_begin(NULL
, ISC_TRUE
);
74 ATF_REQUIRE_EQ(result
, ISC_R_SUCCESS
);
76 result
= isc_taskpool_create(taskmgr
, mctx
, 10, 2, &pool1
);
77 ATF_REQUIRE_EQ(result
, ISC_R_SUCCESS
);
78 ATF_REQUIRE_EQ(isc_taskpool_size(pool1
), 10);
80 /* resizing to a smaller size should have no effect */
82 result
= isc_taskpool_expand(&pool1
, 5, &pool2
);
83 ATF_REQUIRE_EQ(result
, ISC_R_SUCCESS
);
84 ATF_REQUIRE_EQ(isc_taskpool_size(pool2
), 10);
85 ATF_REQUIRE_EQ(pool2
, hold
);
86 ATF_REQUIRE_EQ(pool1
, NULL
);
90 /* resizing to the same size should have no effect */
92 result
= isc_taskpool_expand(&pool1
, 10, &pool2
);
93 ATF_REQUIRE_EQ(result
, ISC_R_SUCCESS
);
94 ATF_REQUIRE_EQ(isc_taskpool_size(pool2
), 10);
95 ATF_REQUIRE_EQ(pool2
, hold
);
96 ATF_REQUIRE_EQ(pool1
, NULL
);
100 /* resizing to larger size should make a new pool */
102 result
= isc_taskpool_expand(&pool1
, 20, &pool2
);
103 ATF_REQUIRE_EQ(result
, ISC_R_SUCCESS
);
104 ATF_REQUIRE_EQ(isc_taskpool_size(pool2
), 20);
105 ATF_REQUIRE(pool2
!= hold
);
106 ATF_REQUIRE_EQ(pool1
, NULL
);
108 isc_taskpool_destroy(&pool2
);
109 ATF_REQUIRE_EQ(pool2
, NULL
);
116 ATF_TC_HEAD(get_tasks
, tc
) {
117 atf_tc_set_md_var(tc
, "descr", "create a taskpool");
119 ATF_TC_BODY(get_tasks
, tc
) {
121 isc_taskpool_t
*pool
= NULL
;
122 isc_task_t
*task1
= NULL
, *task2
= NULL
, *task3
= NULL
;
126 result
= isc_test_begin(NULL
, ISC_TRUE
);
127 ATF_REQUIRE_EQ(result
, ISC_R_SUCCESS
);
129 result
= isc_taskpool_create(taskmgr
, mctx
, 2, 2, &pool
);
130 ATF_REQUIRE_EQ(result
, ISC_R_SUCCESS
);
131 ATF_REQUIRE_EQ(isc_taskpool_size(pool
), 2);
133 /* two tasks in pool; make sure we can access them more than twice */
134 isc_taskpool_gettask(pool
, &task1
);
135 ATF_REQUIRE(ISCAPI_TASK_VALID(task1
));
137 isc_taskpool_gettask(pool
, &task2
);
138 ATF_REQUIRE(ISCAPI_TASK_VALID(task2
));
140 isc_taskpool_gettask(pool
, &task3
);
141 ATF_REQUIRE(ISCAPI_TASK_VALID(task3
));
143 isc_task_destroy(&task1
);
144 isc_task_destroy(&task2
);
145 isc_task_destroy(&task3
);
147 isc_taskpool_destroy(&pool
);
148 ATF_REQUIRE_EQ(pool
, NULL
);
154 ATF_TC(set_privilege
);
155 ATF_TC_HEAD(set_privilege
, tc
) {
156 atf_tc_set_md_var(tc
, "descr", "create a taskpool");
158 ATF_TC_BODY(set_privilege
, tc
) {
160 isc_taskpool_t
*pool
= NULL
;
161 isc_task_t
*task1
= NULL
, *task2
= NULL
, *task3
= NULL
;
165 result
= isc_test_begin(NULL
, ISC_TRUE
);
166 ATF_REQUIRE_EQ(result
, ISC_R_SUCCESS
);
168 result
= isc_taskpool_create(taskmgr
, mctx
, 2, 2, &pool
);
169 ATF_REQUIRE_EQ(result
, ISC_R_SUCCESS
);
170 ATF_REQUIRE_EQ(isc_taskpool_size(pool
), 2);
172 isc_taskpool_setprivilege(pool
, ISC_TRUE
);
174 isc_taskpool_gettask(pool
, &task1
);
175 isc_taskpool_gettask(pool
, &task2
);
176 isc_taskpool_gettask(pool
, &task3
);
178 ATF_CHECK(ISCAPI_TASK_VALID(task1
));
179 ATF_CHECK(ISCAPI_TASK_VALID(task2
));
180 ATF_CHECK(ISCAPI_TASK_VALID(task3
));
182 ATF_CHECK(isc_task_privilege(task1
));
183 ATF_CHECK(isc_task_privilege(task2
));
184 ATF_CHECK(isc_task_privilege(task3
));
186 isc_taskpool_setprivilege(pool
, ISC_FALSE
);
188 ATF_CHECK(!isc_task_privilege(task1
));
189 ATF_CHECK(!isc_task_privilege(task2
));
190 ATF_CHECK(!isc_task_privilege(task3
));
192 isc_task_destroy(&task1
);
193 isc_task_destroy(&task2
);
194 isc_task_destroy(&task3
);
196 isc_taskpool_destroy(&pool
);
197 ATF_REQUIRE_EQ(pool
, NULL
);
206 ATF_TP_ADD_TC(tp
, create_pool
);
207 ATF_TP_ADD_TC(tp
, expand_pool
);
208 ATF_TP_ADD_TC(tp
, get_tasks
);
209 ATF_TP_ADD_TC(tp
, set_privilege
);
211 return (atf_no_error());