7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halley/*
dc2a85bed7fcfceab0df1867fbc1d35796261dedTinderbox User * Copyright (C) 2011, 2012, 2016 Internet Systems Consortium, Inc. ("ISC")
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence *
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * This Source Code Form is subject to the terms of the Mozilla Public
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * License, v. 2.0. If a copy of the MPL was not distributed with this
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * file, You can obtain one at http://mozilla.org/MPL/2.0/.
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halley */
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halley
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein/* $Id$ */
9c3531d72aeaad6c5f01efe6a1c82023e1379e4dDavid Lawrence
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halley/*! \file */
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halley
0042d68e2f0d655d5a1088dd5f8be3c79c2477a6Brian Wellington#include <config.h>
0042d68e2f0d655d5a1088dd5f8be3c79c2477a6Brian Wellington
d9059b0c38bd630c367d81424d72b1308cd74b04Tatuya JINMEI 神明達哉#include <atf-c.h>
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halley
25c5d8e89efc6e6299a351eabcf55ac7e6005ebfMark Andrews#include <unistd.h>
8c9fba44a41e3ea23e7e8405029980aba672f7ceEvan Hunt
e7857b5ee05414961bb11f9e57f654163fae6acbckb#include <isc/task.h>
d9059b0c38bd630c367d81424d72b1308cd74b04Tatuya JINMEI 神明達哉#include <isc/taskpool.h>
630b2d0c5a04cfc8b08d4585b7a0d997c00d7341Evan Hunt
440be4c866f6935ac069db79a414304507a664c2Michael Graff#include "isctest.h"
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halley
501f6a2fa5541c0384640d7f6dc4d592acebfee9Andreas Gustafsson/*
a8783019814daa36dd57afe3f527462822834c3bEvan Hunt * Individual unit tests
ad26c868910d4a7368fae94e5d7389d4139f7225Andreas Gustafsson */
dd2a0a6d2dec1c23787351e51b434a838dec5603Evan Hunt
b4d79725458782ce4ae781255fc7a22614a8b484Bob Halley/* Create a taskpool */
03e200df5dc283f24a6a349f0b31d3eab26da893Mark AndrewsATF_TC(create_pool);
e334405421979688f2d838805ac67ee47bd62976Mark AndrewsATF_TC_HEAD(create_pool, tc) {
faa4af28cff84d7ac45c1da98e40c00f65a24aa3Mark Andrews atf_tc_set_md_var(tc, "descr", "create a taskpool");
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halley}
b4d79725458782ce4ae781255fc7a22614a8b484Bob HalleyATF_TC_BODY(create_pool, tc) {
6b79e960e6ba2991aeb02a6c39af255ab7f06d99Mark Andrews isc_result_t result;
6098d364b690cb9dabf96e9664c4689c8559bd2eMark Andrews isc_taskpool_t *pool = NULL;
2dd99c098ca162f985b7ef3c8142a964ad8281aeMark Andrews
b4d79725458782ce4ae781255fc7a22614a8b484Bob Halley UNUSED(tc);
e9f6414d40ac21743db777007260053323570835Andreas Gustafsson
9ab8a7477d6a31275ca7d1f6b5f37c23a8a7e6cbBob Halley result = isc_test_begin(NULL, ISC_TRUE);
b4d79725458782ce4ae781255fc7a22614a8b484Bob Halley ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
b4d79725458782ce4ae781255fc7a22614a8b484Bob Halley
2ebe19d1a2b5381dcd6dce5882dfd5c98ab6db6dAndreas Gustafsson result = isc_taskpool_create(taskmgr, mctx, 8, 2, &pool);
09f22ac5b09e70bc526015f37168ba33e21ea91fDavid Lawrence ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
4fdb67f4ebec8003fe8d4e34c2c1389725a4f793Bob Halley ATF_REQUIRE_EQ(isc_taskpool_size(pool), 8);
09f22ac5b09e70bc526015f37168ba33e21ea91fDavid Lawrence
ce1f5b8d0ae5936fd187c1f414ff12a7e3b0aa37Andreas Gustafsson isc_taskpool_destroy(&pool);
90ace4c9e063e67fb452907d11bf29eae618a355Brian Wellington ATF_REQUIRE_EQ(pool, NULL);
09f22ac5b09e70bc526015f37168ba33e21ea91fDavid Lawrence
d60f5b9bc8c1e1f7ddebc6c7834f7550a8e8be6fBob Halley isc_test_end();
d60f5b9bc8c1e1f7ddebc6c7834f7550a8e8be6fBob Halley}
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halley
7e6c9a9a733f7a57ace98e4692573f42a2cad0edBob Halley/* Resize a taskpool */
810656a187f2c358323bbf679f792f19a46a7973Mark AndrewsATF_TC(expand_pool);
6017f424ee3c02d7f22132c77576ea38542fa949Andreas GustafssonATF_TC_HEAD(expand_pool, tc) {
6017f424ee3c02d7f22132c77576ea38542fa949Andreas Gustafsson atf_tc_set_md_var(tc, "descr", "expand a taskpool");
50faa6daf7e7550b3cd9d981ff3ddb9c0175080bAndreas Gustafsson}
d662fd77ecb875663f3d7510a8dd03f369697da2Andreas GustafssonATF_TC_BODY(expand_pool, tc) {
6017f424ee3c02d7f22132c77576ea38542fa949Andreas Gustafsson isc_result_t result;
e334405421979688f2d838805ac67ee47bd62976Mark Andrews isc_taskpool_t *pool1 = NULL, *pool2 = NULL, *hold = NULL;
e334405421979688f2d838805ac67ee47bd62976Mark Andrews
e334405421979688f2d838805ac67ee47bd62976Mark Andrews UNUSED(tc);
e334405421979688f2d838805ac67ee47bd62976Mark Andrews
e334405421979688f2d838805ac67ee47bd62976Mark Andrews result = isc_test_begin(NULL, ISC_TRUE);
e334405421979688f2d838805ac67ee47bd62976Mark Andrews ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
e334405421979688f2d838805ac67ee47bd62976Mark Andrews
e334405421979688f2d838805ac67ee47bd62976Mark Andrews result = isc_taskpool_create(taskmgr, mctx, 10, 2, &pool1);
e334405421979688f2d838805ac67ee47bd62976Mark Andrews ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
e334405421979688f2d838805ac67ee47bd62976Mark Andrews ATF_REQUIRE_EQ(isc_taskpool_size(pool1), 10);
e334405421979688f2d838805ac67ee47bd62976Mark Andrews
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein /* resizing to a smaller size should have no effect */
b77cab68c65633bc534090b09fbac743b161f9b7Bob Halley hold = pool1;
b77cab68c65633bc534090b09fbac743b161f9b7Bob Halley result = isc_taskpool_expand(&pool1, 5, &pool2);
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
0e5d1f7463f3b748b0aff6057c9d2d26cd15189bBob Halley ATF_REQUIRE_EQ(isc_taskpool_size(pool2), 10);
0e5d1f7463f3b748b0aff6057c9d2d26cd15189bBob Halley ATF_REQUIRE_EQ(pool2, hold);
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein ATF_REQUIRE_EQ(pool1, NULL);
0e5d1f7463f3b748b0aff6057c9d2d26cd15189bBob Halley pool1 = pool2;
0e5d1f7463f3b748b0aff6057c9d2d26cd15189bBob Halley pool2 = NULL;
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein
4fdb67f4ebec8003fe8d4e34c2c1389725a4f793Bob Halley /* resizing to the same size should have no effect */
4fdb67f4ebec8003fe8d4e34c2c1389725a4f793Bob Halley hold = pool1;
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein result = isc_taskpool_expand(&pool1, 10, &pool2);
bf336d569445bfe2c9f37fd58864e2cac7bef1ffBob Halley ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
bf336d569445bfe2c9f37fd58864e2cac7bef1ffBob Halley ATF_REQUIRE_EQ(isc_taskpool_size(pool2), 10);
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein ATF_REQUIRE_EQ(pool2, hold);
1fc26319b5d69d19a7a31c8d0ab1afc2beef0c41Andreas Gustafsson ATF_REQUIRE_EQ(pool1, NULL);
1fc26319b5d69d19a7a31c8d0ab1afc2beef0c41Andreas Gustafsson pool1 = pool2;
ce67023ae3ad39a77da5361d0187ab6f3f0219cbMark Andrews pool2 = NULL;
ce67023ae3ad39a77da5361d0187ab6f3f0219cbMark Andrews
04893d38e0c013c35a57f177c3012cdeb9ea086dMark Andrews /* resizing to larger size should make a new pool */
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein hold = pool1;
b2ca6fd3a8293440b4d263723525396059cf2400Brian Wellington result = isc_taskpool_expand(&pool1, 20, &pool2);
b2ca6fd3a8293440b4d263723525396059cf2400Brian Wellington ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
4118cd4276c3f53f9f6f0133688e05e52d70336bMark Andrews ATF_REQUIRE_EQ(isc_taskpool_size(pool2), 20);
4118cd4276c3f53f9f6f0133688e05e52d70336bMark Andrews ATF_REQUIRE(pool2 != hold);
4118cd4276c3f53f9f6f0133688e05e52d70336bMark Andrews ATF_REQUIRE_EQ(pool1, NULL);
ce67023ae3ad39a77da5361d0187ab6f3f0219cbMark Andrews
ce67023ae3ad39a77da5361d0187ab6f3f0219cbMark Andrews isc_taskpool_destroy(&pool2);
ce67023ae3ad39a77da5361d0187ab6f3f0219cbMark Andrews ATF_REQUIRE_EQ(pool2, NULL);
ce67023ae3ad39a77da5361d0187ab6f3f0219cbMark Andrews
ce67023ae3ad39a77da5361d0187ab6f3f0219cbMark Andrews isc_test_end();
ce67023ae3ad39a77da5361d0187ab6f3f0219cbMark Andrews}
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein
02a402afe50f8877729555d3e5d4fb82a10ef9a3Bob Halley/* Get tasks */
02a402afe50f8877729555d3e5d4fb82a10ef9a3Bob HalleyATF_TC(get_tasks);
ab023a65562e62b85a824509d829b6fad87e00b1Rob AusteinATF_TC_HEAD(get_tasks, tc) {
02a402afe50f8877729555d3e5d4fb82a10ef9a3Bob Halley atf_tc_set_md_var(tc, "descr", "create a taskpool");
02a402afe50f8877729555d3e5d4fb82a10ef9a3Bob Halley}
ab023a65562e62b85a824509d829b6fad87e00b1Rob AusteinATF_TC_BODY(get_tasks, tc) {
35541328a8c18ba1f984300dfe30ec8713c90031Mark Andrews isc_result_t result;
35541328a8c18ba1f984300dfe30ec8713c90031Mark Andrews isc_taskpool_t *pool = NULL;
e334405421979688f2d838805ac67ee47bd62976Mark Andrews isc_task_t *task1 = NULL, *task2 = NULL, *task3 = NULL;
e334405421979688f2d838805ac67ee47bd62976Mark Andrews
e334405421979688f2d838805ac67ee47bd62976Mark Andrews UNUSED(tc);
e334405421979688f2d838805ac67ee47bd62976Mark Andrews
e334405421979688f2d838805ac67ee47bd62976Mark Andrews result = isc_test_begin(NULL, ISC_TRUE);
e334405421979688f2d838805ac67ee47bd62976Mark Andrews ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
b77cab68c65633bc534090b09fbac743b161f9b7Bob Halley
c82b3781158672e8308b53a8b6289e432ceb48d0Mark Andrews result = isc_taskpool_create(taskmgr, mctx, 2, 2, &pool);
c82b3781158672e8308b53a8b6289e432ceb48d0Mark Andrews ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
c82b3781158672e8308b53a8b6289e432ceb48d0Mark Andrews ATF_REQUIRE_EQ(isc_taskpool_size(pool), 2);
6098d364b690cb9dabf96e9664c4689c8559bd2eMark Andrews
6098d364b690cb9dabf96e9664c4689c8559bd2eMark Andrews /* two tasks in pool; make sure we can access them more than twice */
6098d364b690cb9dabf96e9664c4689c8559bd2eMark Andrews isc_taskpool_gettask(pool, &task1);
6098d364b690cb9dabf96e9664c4689c8559bd2eMark Andrews ATF_REQUIRE(ISCAPI_TASK_VALID(task1));
1783676a64b8e390b756d775ae152509f1d76719Mukund Sivaraman
2a12984ce69f7f49dc3aeef1b216e0c7c93373acMark Andrews isc_taskpool_gettask(pool, &task2);
2a12984ce69f7f49dc3aeef1b216e0c7c93373acMark Andrews ATF_REQUIRE(ISCAPI_TASK_VALID(task2));
2a12984ce69f7f49dc3aeef1b216e0c7c93373acMark Andrews
2a12984ce69f7f49dc3aeef1b216e0c7c93373acMark Andrews isc_taskpool_gettask(pool, &task3);
2a12984ce69f7f49dc3aeef1b216e0c7c93373acMark Andrews ATF_REQUIRE(ISCAPI_TASK_VALID(task3));
630b2d0c5a04cfc8b08d4585b7a0d997c00d7341Evan Hunt
2a12984ce69f7f49dc3aeef1b216e0c7c93373acMark Andrews isc_task_destroy(&task1);
2a12984ce69f7f49dc3aeef1b216e0c7c93373acMark Andrews isc_task_destroy(&task2);
630b2d0c5a04cfc8b08d4585b7a0d997c00d7341Evan Hunt isc_task_destroy(&task3);
630b2d0c5a04cfc8b08d4585b7a0d997c00d7341Evan Hunt
2a12984ce69f7f49dc3aeef1b216e0c7c93373acMark Andrews isc_taskpool_destroy(&pool);
2a12984ce69f7f49dc3aeef1b216e0c7c93373acMark Andrews ATF_REQUIRE_EQ(pool, NULL);
630b2d0c5a04cfc8b08d4585b7a0d997c00d7341Evan Hunt
630b2d0c5a04cfc8b08d4585b7a0d997c00d7341Evan Hunt isc_test_end();
630b2d0c5a04cfc8b08d4585b7a0d997c00d7341Evan Hunt}
630b2d0c5a04cfc8b08d4585b7a0d997c00d7341Evan Hunt
630b2d0c5a04cfc8b08d4585b7a0d997c00d7341Evan Hunt/* Get tasks */
630b2d0c5a04cfc8b08d4585b7a0d997c00d7341Evan HuntATF_TC(set_privilege);
2a12984ce69f7f49dc3aeef1b216e0c7c93373acMark AndrewsATF_TC_HEAD(set_privilege, tc) {
2a12984ce69f7f49dc3aeef1b216e0c7c93373acMark Andrews atf_tc_set_md_var(tc, "descr", "create a taskpool");
2a12984ce69f7f49dc3aeef1b216e0c7c93373acMark Andrews}
2a12984ce69f7f49dc3aeef1b216e0c7c93373acMark AndrewsATF_TC_BODY(set_privilege, tc) {
630b2d0c5a04cfc8b08d4585b7a0d997c00d7341Evan Hunt isc_result_t result;
630b2d0c5a04cfc8b08d4585b7a0d997c00d7341Evan Hunt isc_taskpool_t *pool = NULL;
630b2d0c5a04cfc8b08d4585b7a0d997c00d7341Evan Hunt isc_task_t *task1 = NULL, *task2 = NULL, *task3 = NULL;
630b2d0c5a04cfc8b08d4585b7a0d997c00d7341Evan Hunt
630b2d0c5a04cfc8b08d4585b7a0d997c00d7341Evan Hunt UNUSED(tc);
630b2d0c5a04cfc8b08d4585b7a0d997c00d7341Evan Hunt
2a12984ce69f7f49dc3aeef1b216e0c7c93373acMark Andrews result = isc_test_begin(NULL, ISC_TRUE);
2a12984ce69f7f49dc3aeef1b216e0c7c93373acMark Andrews ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
2a12984ce69f7f49dc3aeef1b216e0c7c93373acMark Andrews
6b32dc65e4684fd8ee3ae11dc92d4ccb84911057Mark Andrews result = isc_taskpool_create(taskmgr, mctx, 2, 2, &pool);
f5c24a7f48cd68337c21dea47a448ae2ff2ccb8cEvan Hunt ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
1783676a64b8e390b756d775ae152509f1d76719Mukund Sivaraman ATF_REQUIRE_EQ(isc_taskpool_size(pool), 2);
6b32dc65e4684fd8ee3ae11dc92d4ccb84911057Mark Andrews
f5c24a7f48cd68337c21dea47a448ae2ff2ccb8cEvan Hunt isc_taskpool_setprivilege(pool, ISC_TRUE);
0bfcec250f9705a1211d0374f0fc1049960de84bMark Andrews
0bfcec250f9705a1211d0374f0fc1049960de84bMark Andrews isc_taskpool_gettask(pool, &task1);
c86eed4bdecad9df12f992f9d743dfee3a6c5bdcMark Andrews isc_taskpool_gettask(pool, &task2);
87708bde16713bc02ff2598f4a82f98c699a2f2dMark Andrews isc_taskpool_gettask(pool, &task3);
0bfcec250f9705a1211d0374f0fc1049960de84bMark Andrews
a39a5f4d816ca7d3f43106712ca668dd1ab31d69Mark Andrews ATF_CHECK(ISCAPI_TASK_VALID(task1));
a39a5f4d816ca7d3f43106712ca668dd1ab31d69Mark Andrews ATF_CHECK(ISCAPI_TASK_VALID(task2));
a8783019814daa36dd57afe3f527462822834c3bEvan Hunt ATF_CHECK(ISCAPI_TASK_VALID(task3));
a8783019814daa36dd57afe3f527462822834c3bEvan Hunt
ac110848296c18b3a3bfaa89bdee2dd00755b36fMark Andrews ATF_CHECK(isc_task_privilege(task1));
ac110848296c18b3a3bfaa89bdee2dd00755b36fMark Andrews ATF_CHECK(isc_task_privilege(task2));
ac110848296c18b3a3bfaa89bdee2dd00755b36fMark Andrews ATF_CHECK(isc_task_privilege(task3));
ac110848296c18b3a3bfaa89bdee2dd00755b36fMark Andrews
ac110848296c18b3a3bfaa89bdee2dd00755b36fMark Andrews isc_taskpool_setprivilege(pool, ISC_FALSE);
ac110848296c18b3a3bfaa89bdee2dd00755b36fMark Andrews
ac110848296c18b3a3bfaa89bdee2dd00755b36fMark Andrews ATF_CHECK(!isc_task_privilege(task1));
ac110848296c18b3a3bfaa89bdee2dd00755b36fMark Andrews ATF_CHECK(!isc_task_privilege(task2));
ac110848296c18b3a3bfaa89bdee2dd00755b36fMark Andrews ATF_CHECK(!isc_task_privilege(task3));
ac110848296c18b3a3bfaa89bdee2dd00755b36fMark Andrews
ac110848296c18b3a3bfaa89bdee2dd00755b36fMark Andrews isc_task_destroy(&task1);
ac110848296c18b3a3bfaa89bdee2dd00755b36fMark Andrews isc_task_destroy(&task2);
ac110848296c18b3a3bfaa89bdee2dd00755b36fMark Andrews isc_task_destroy(&task3);
d0eb2cc33c5db3366a16b1cb0abcca6ec7c8ee3cTatuya JINMEI 神明達哉
d0eb2cc33c5db3366a16b1cb0abcca6ec7c8ee3cTatuya JINMEI 神明達哉 isc_taskpool_destroy(&pool);
d0eb2cc33c5db3366a16b1cb0abcca6ec7c8ee3cTatuya JINMEI 神明達哉 ATF_REQUIRE_EQ(pool, NULL);
d0eb2cc33c5db3366a16b1cb0abcca6ec7c8ee3cTatuya JINMEI 神明達哉
d0eb2cc33c5db3366a16b1cb0abcca6ec7c8ee3cTatuya JINMEI 神明達哉 isc_test_end();
609f86163a9e80aa5ce0db79b67ee0b6e2a34b34Tatuya JINMEI 神明達哉}
b23f160d5b0efb1c22ad4f61e5f5edf80e9f0f57Andreas Gustafsson
4fdb67f4ebec8003fe8d4e34c2c1389725a4f793Bob Halley/*
faa4af28cff84d7ac45c1da98e40c00f65a24aa3Mark Andrews * Main
faa4af28cff84d7ac45c1da98e40c00f65a24aa3Mark Andrews */
faa4af28cff84d7ac45c1da98e40c00f65a24aa3Mark AndrewsATF_TP_ADD_TCS(tp) {
faa4af28cff84d7ac45c1da98e40c00f65a24aa3Mark Andrews ATF_TP_ADD_TC(tp, create_pool);
6098d364b690cb9dabf96e9664c4689c8559bd2eMark Andrews ATF_TP_ADD_TC(tp, expand_pool);
6098d364b690cb9dabf96e9664c4689c8559bd2eMark Andrews ATF_TP_ADD_TC(tp, get_tasks);
6098d364b690cb9dabf96e9664c4689c8559bd2eMark Andrews ATF_TP_ADD_TC(tp, set_privilege);
6098d364b690cb9dabf96e9664c4689c8559bd2eMark Andrews
6098d364b690cb9dabf96e9664c4689c8559bd2eMark Andrews return (atf_no_error());
6098d364b690cb9dabf96e9664c4689c8559bd2eMark Andrews}
6098d364b690cb9dabf96e9664c4689c8559bd2eMark Andrews
609f86163a9e80aa5ce0db79b67ee0b6e2a34b34Tatuya JINMEI 神明達哉