154359Sroberto/* 254359Sroberto * Copyright (C) 2011, 2012 Internet Systems Consortium, Inc. ("ISC") 354359Sroberto * 4285612Sdelphij * Permission to use, copy, modify, and/or distribute this software for any 554359Sroberto * purpose with or without fee is hereby granted, provided that the above 654359Sroberto * copyright notice and this permission notice appear in all copies. 754359Sroberto * 854359Sroberto * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 954359Sroberto * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 1054359Sroberto * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 1154359Sroberto * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 1254359Sroberto * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 1354359Sroberto * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 14285612Sdelphij * PERFORMANCE OF THIS SOFTWARE. 15285612Sdelphij */ 1654359Sroberto 17132451Sroberto/* $Id$ */ 1854359Sroberto 1954359Sroberto/*! \file */ 2054359Sroberto 21285612Sdelphij#include <config.h> 22285612Sdelphij 2354359Sroberto#include <atf-c.h> 24285612Sdelphij 2554359Sroberto#include <unistd.h> 2654359Sroberto#include <time.h> 2754359Sroberto 2854359Sroberto#include <isc/queue.h> 2954359Sroberto 3054359Sroberto#include "isctest.h" 3154359Sroberto 3254359Srobertotypedef struct item { 3354359Sroberto int value; 34285612Sdelphij ISC_QLINK(item_t) qlink; 3554359Sroberto} item_t; 3654359Sroberto 37285612Sdelphijtypedef ISC_QUEUE(item_t) item_queue_t; 38285612Sdelphij 39285612Sdelphijstatic void 40285612Sdelphijitem_init(item_t *item, int value) { 4154359Sroberto item->value = value; 42285612Sdelphij ISC_QLINK_INIT(item, qlink); 43293650Sglebius} 44285612Sdelphij 45285612Sdelphij/* 46285612Sdelphij * Individual unit tests 47285612Sdelphij */ 48285612Sdelphij 49285612Sdelphij/* Test UDP sendto/recv (IPv4) */ 50285612SdelphijATF_TC(queue_valid); 5154359SrobertoATF_TC_HEAD(queue_valid, tc) { 5254359Sroberto atf_tc_set_md_var(tc, "descr", "Check queue validity"); 5354359Sroberto} 5454359SrobertoATF_TC_BODY(queue_valid, tc) { 5554359Sroberto isc_result_t result; 5654359Sroberto item_queue_t queue; 57285612Sdelphij item_t one, two, three, four, five; 58285612Sdelphij item_t *p; 59285612Sdelphij 6054359Sroberto UNUSED(tc); 61285612Sdelphij 62285612Sdelphij ISC_QUEUE_INIT(queue, qlink); 6354359Sroberto 64285612Sdelphij item_init(&one, 1); 65293650Sglebius item_init(&two, 2); 6654359Sroberto item_init(&three, 3); 6754359Sroberto item_init(&four, 4); 6854359Sroberto item_init(&five, 5); 6954359Sroberto 70285612Sdelphij result = isc_test_begin(NULL, ISC_TRUE); 71285612Sdelphij ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); 72285612Sdelphij 7354359Sroberto ATF_CHECK(ISC_QUEUE_EMPTY(queue)); 74285612Sdelphij 75285612Sdelphij ISC_QUEUE_POP(queue, qlink, p); 76285612Sdelphij ATF_CHECK(p == NULL); 77285612Sdelphij 7854359Sroberto ATF_CHECK(! ISC_QLINK_LINKED(&one, qlink)); 79285612Sdelphij ISC_QUEUE_PUSH(queue, &one, qlink); 80285612Sdelphij ATF_CHECK(ISC_QLINK_LINKED(&one, qlink)); 81285612Sdelphij 82285612Sdelphij ATF_CHECK(! ISC_QUEUE_EMPTY(queue)); 83285612Sdelphij 84285612Sdelphij ISC_QUEUE_POP(queue, qlink, p); 85285612Sdelphij ATF_REQUIRE(p != NULL); 86285612Sdelphij ATF_CHECK_EQ(p->value, 1); 87285612Sdelphij ATF_CHECK(ISC_QUEUE_EMPTY(queue)); 8854359Sroberto ATF_CHECK(! ISC_QLINK_LINKED(p, qlink)); 89285612Sdelphij 90285612Sdelphij ISC_QUEUE_PUSH(queue, p, qlink); 91285612Sdelphij ATF_CHECK(! ISC_QUEUE_EMPTY(queue)); 92285612Sdelphij ATF_CHECK(ISC_QLINK_LINKED(p, qlink)); 93285612Sdelphij 94285612Sdelphij ATF_CHECK(! ISC_QLINK_LINKED(&two, qlink)); 95285612Sdelphij ISC_QUEUE_PUSH(queue, &two, qlink); 96285612Sdelphij ATF_CHECK(ISC_QLINK_LINKED(&two, qlink)); 97285612Sdelphij 98293650Sglebius ATF_CHECK(! ISC_QLINK_LINKED(&three, qlink)); 99285612Sdelphij ISC_QUEUE_PUSH(queue, &three, qlink); 100285612Sdelphij ATF_CHECK(ISC_QLINK_LINKED(&three, qlink)); 10154359Sroberto 102285612Sdelphij ATF_CHECK(! ISC_QLINK_LINKED(&four, qlink)); 103285612Sdelphij ISC_QUEUE_PUSH(queue, &four, qlink); 10454359Sroberto ATF_CHECK(ISC_QLINK_LINKED(&four, qlink)); 105285612Sdelphij 106285612Sdelphij ATF_CHECK(! ISC_QLINK_LINKED(&five, qlink)); 107285612Sdelphij ISC_QUEUE_PUSH(queue, &five, qlink); 10854359Sroberto ATF_CHECK(ISC_QLINK_LINKED(&five, qlink)); 10954359Sroberto 11054359Sroberto ISC_QUEUE_POP(queue, qlink, p); 11154359Sroberto ATF_REQUIRE(p != NULL); 11254359Sroberto ATF_CHECK_EQ(p->value, 1); 11354359Sroberto 11454359Sroberto ISC_QUEUE_POP(queue, qlink, p); 11554359Sroberto ATF_REQUIRE(p != NULL); 11654359Sroberto ATF_CHECK_EQ(p->value, 2); 117285612Sdelphij 11854359Sroberto ISC_QUEUE_POP(queue, qlink, p); 119285612Sdelphij ATF_REQUIRE(p != NULL); 120285612Sdelphij ATF_CHECK_EQ(p->value, 3); 12154359Sroberto 12254359Sroberto ISC_QUEUE_POP(queue, qlink, p); 12354359Sroberto ATF_REQUIRE(p != NULL); 124285612Sdelphij ATF_CHECK_EQ(p->value, 4); 12554359Sroberto 12654359Sroberto ISC_QUEUE_POP(queue, qlink, p); 127285612Sdelphij ATF_REQUIRE(p != NULL); 128285612Sdelphij ATF_CHECK_EQ(p->value, 5); 12954359Sroberto 13054359Sroberto ATF_CHECK(ISC_QUEUE_EMPTY(queue)); 13154359Sroberto 13254359Sroberto ISC_QUEUE_DESTROY(queue); 13354359Sroberto isc_test_end(); 13454359Sroberto} 13554359Sroberto 13654359Sroberto/* 137285612Sdelphij * Main 138285612Sdelphij */ 139285612SdelphijATF_TP_ADD_TCS(tp) { 140285612Sdelphij ATF_TP_ADD_TC(tp, queue_valid); 141285612Sdelphij 142285612Sdelphij return (atf_no_error()); 143285612Sdelphij} 144285612Sdelphij 145285612Sdelphij