etc/protocols - sync with NetBSD-8
[minix.git] / external / bsd / bind / dist / lib / isc / tests / taskpool_test.c
blob29c33da162f15574fa8c46e3e0e9d2ed8532f2bb
1 /* $NetBSD: taskpool_test.c,v 1.1.1.4 2014/12/10 03:34:44 christos Exp $ */
3 /*
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.
19 /* Id */
21 /*! \file */
23 #include <config.h>
25 #include <atf-c.h>
27 #include <unistd.h>
29 #include <isc/task.h>
30 #include <isc/taskpool.h>
32 #include "isctest.h"
35 * Individual unit tests
38 /* Create a taskpool */
39 ATF_TC(create_pool);
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) {
44 isc_result_t result;
45 isc_taskpool_t *pool = NULL;
47 UNUSED(tc);
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);
59 isc_test_end();
62 /* Resize a taskpool */
63 ATF_TC(expand_pool);
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) {
68 isc_result_t result;
69 isc_taskpool_t *pool1 = NULL, *pool2 = NULL, *hold = NULL;
71 UNUSED(tc);
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 */
81 hold = pool1;
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);
87 pool1 = pool2;
88 pool2 = NULL;
90 /* resizing to the same size should have no effect */
91 hold = pool1;
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);
97 pool1 = pool2;
98 pool2 = NULL;
100 /* resizing to larger size should make a new pool */
101 hold = pool1;
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);
111 isc_test_end();
114 /* Get tasks */
115 ATF_TC(get_tasks);
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) {
120 isc_result_t result;
121 isc_taskpool_t *pool = NULL;
122 isc_task_t *task1 = NULL, *task2 = NULL, *task3 = NULL;
124 UNUSED(tc);
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);
150 isc_test_end();
153 /* Get tasks */
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) {
159 isc_result_t result;
160 isc_taskpool_t *pool = NULL;
161 isc_task_t *task1 = NULL, *task2 = NULL, *task3 = NULL;
163 UNUSED(tc);
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);
199 isc_test_end();
203 * Main
205 ATF_TP_ADD_TCS(tp) {
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());