1*c243e490SMarcel Moolenaar /* 2*c243e490SMarcel Moolenaar * Automated Testing Framework (atf) 3*c243e490SMarcel Moolenaar * 4*c243e490SMarcel Moolenaar * Copyright (c) 2008 The NetBSD Foundation, Inc. 5*c243e490SMarcel Moolenaar * All rights reserved. 6*c243e490SMarcel Moolenaar * 7*c243e490SMarcel Moolenaar * Redistribution and use in source and binary forms, with or without 8*c243e490SMarcel Moolenaar * modification, are permitted provided that the following conditions 9*c243e490SMarcel Moolenaar * are met: 10*c243e490SMarcel Moolenaar * 1. Redistributions of source code must retain the above copyright 11*c243e490SMarcel Moolenaar * notice, this list of conditions and the following disclaimer. 12*c243e490SMarcel Moolenaar * 2. Redistributions in binary form must reproduce the above copyright 13*c243e490SMarcel Moolenaar * notice, this list of conditions and the following disclaimer in the 14*c243e490SMarcel Moolenaar * documentation and/or other materials provided with the distribution. 15*c243e490SMarcel Moolenaar * 16*c243e490SMarcel Moolenaar * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND 17*c243e490SMarcel Moolenaar * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 18*c243e490SMarcel Moolenaar * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19*c243e490SMarcel Moolenaar * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20*c243e490SMarcel Moolenaar * IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY 21*c243e490SMarcel Moolenaar * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22*c243e490SMarcel Moolenaar * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 23*c243e490SMarcel Moolenaar * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24*c243e490SMarcel Moolenaar * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 25*c243e490SMarcel Moolenaar * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 26*c243e490SMarcel Moolenaar * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27*c243e490SMarcel Moolenaar * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28*c243e490SMarcel Moolenaar */ 29*c243e490SMarcel Moolenaar 30*c243e490SMarcel Moolenaar #include <stdbool.h> 31*c243e490SMarcel Moolenaar #include <string.h> 32*c243e490SMarcel Moolenaar 33*c243e490SMarcel Moolenaar #include <atf-c.h> 34*c243e490SMarcel Moolenaar 35*c243e490SMarcel Moolenaar #include "detail/test_helpers.h" 36*c243e490SMarcel Moolenaar 37*c243e490SMarcel Moolenaar /* --------------------------------------------------------------------- 38*c243e490SMarcel Moolenaar * Auxiliary test cases. 39*c243e490SMarcel Moolenaar * --------------------------------------------------------------------- */ 40*c243e490SMarcel Moolenaar 41*c243e490SMarcel Moolenaar ATF_TC_HEAD(empty, tc) 42*c243e490SMarcel Moolenaar { 43*c243e490SMarcel Moolenaar if (tc != NULL) {} 44*c243e490SMarcel Moolenaar } 45*c243e490SMarcel Moolenaar ATF_TC_BODY(empty, tc) 46*c243e490SMarcel Moolenaar { 47*c243e490SMarcel Moolenaar } 48*c243e490SMarcel Moolenaar 49*c243e490SMarcel Moolenaar ATF_TC_HEAD(test_var, tc) 50*c243e490SMarcel Moolenaar { 51*c243e490SMarcel Moolenaar atf_tc_set_md_var(tc, "test-var", "Test text"); 52*c243e490SMarcel Moolenaar } 53*c243e490SMarcel Moolenaar 54*c243e490SMarcel Moolenaar /* --------------------------------------------------------------------- 55*c243e490SMarcel Moolenaar * Test cases for the "atf_tc_t" type. 56*c243e490SMarcel Moolenaar * --------------------------------------------------------------------- */ 57*c243e490SMarcel Moolenaar 58*c243e490SMarcel Moolenaar ATF_TC(init); 59*c243e490SMarcel Moolenaar ATF_TC_HEAD(init, tc) 60*c243e490SMarcel Moolenaar { 61*c243e490SMarcel Moolenaar atf_tc_set_md_var(tc, "descr", "Tests the atf_tc_init function"); 62*c243e490SMarcel Moolenaar } 63*c243e490SMarcel Moolenaar ATF_TC_BODY(init, tcin) 64*c243e490SMarcel Moolenaar { 65*c243e490SMarcel Moolenaar atf_tc_t tc; 66*c243e490SMarcel Moolenaar 67*c243e490SMarcel Moolenaar RE(atf_tc_init(&tc, "test1", ATF_TC_HEAD_NAME(empty), 68*c243e490SMarcel Moolenaar ATF_TC_BODY_NAME(empty), NULL, NULL)); 69*c243e490SMarcel Moolenaar ATF_REQUIRE(strcmp(atf_tc_get_ident(&tc), "test1") == 0); 70*c243e490SMarcel Moolenaar ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var")); 71*c243e490SMarcel Moolenaar atf_tc_fini(&tc); 72*c243e490SMarcel Moolenaar 73*c243e490SMarcel Moolenaar RE(atf_tc_init(&tc, "test2", ATF_TC_HEAD_NAME(test_var), 74*c243e490SMarcel Moolenaar ATF_TC_BODY_NAME(empty), NULL, NULL)); 75*c243e490SMarcel Moolenaar ATF_REQUIRE(strcmp(atf_tc_get_ident(&tc), "test2") == 0); 76*c243e490SMarcel Moolenaar ATF_REQUIRE(atf_tc_has_md_var(&tc, "test-var")); 77*c243e490SMarcel Moolenaar atf_tc_fini(&tc); 78*c243e490SMarcel Moolenaar } 79*c243e490SMarcel Moolenaar 80*c243e490SMarcel Moolenaar ATF_TC(init_pack); 81*c243e490SMarcel Moolenaar ATF_TC_HEAD(init_pack, tc) 82*c243e490SMarcel Moolenaar { 83*c243e490SMarcel Moolenaar atf_tc_set_md_var(tc, "descr", "Tests the atf_tc_init_pack function"); 84*c243e490SMarcel Moolenaar } 85*c243e490SMarcel Moolenaar ATF_TC_BODY(init_pack, tcin) 86*c243e490SMarcel Moolenaar { 87*c243e490SMarcel Moolenaar atf_tc_t tc; 88*c243e490SMarcel Moolenaar atf_tc_pack_t tcp1 = { 89*c243e490SMarcel Moolenaar .m_ident = "test1", 90*c243e490SMarcel Moolenaar .m_head = ATF_TC_HEAD_NAME(empty), 91*c243e490SMarcel Moolenaar .m_body = ATF_TC_BODY_NAME(empty), 92*c243e490SMarcel Moolenaar .m_cleanup = NULL, 93*c243e490SMarcel Moolenaar }; 94*c243e490SMarcel Moolenaar atf_tc_pack_t tcp2 = { 95*c243e490SMarcel Moolenaar .m_ident = "test2", 96*c243e490SMarcel Moolenaar .m_head = ATF_TC_HEAD_NAME(test_var), 97*c243e490SMarcel Moolenaar .m_body = ATF_TC_BODY_NAME(empty), 98*c243e490SMarcel Moolenaar .m_cleanup = NULL, 99*c243e490SMarcel Moolenaar }; 100*c243e490SMarcel Moolenaar 101*c243e490SMarcel Moolenaar RE(atf_tc_init_pack(&tc, &tcp1, NULL)); 102*c243e490SMarcel Moolenaar ATF_REQUIRE(strcmp(atf_tc_get_ident(&tc), "test1") == 0); 103*c243e490SMarcel Moolenaar ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var")); 104*c243e490SMarcel Moolenaar atf_tc_fini(&tc); 105*c243e490SMarcel Moolenaar 106*c243e490SMarcel Moolenaar RE(atf_tc_init_pack(&tc, &tcp2, NULL)); 107*c243e490SMarcel Moolenaar ATF_REQUIRE(strcmp(atf_tc_get_ident(&tc), "test2") == 0); 108*c243e490SMarcel Moolenaar ATF_REQUIRE(atf_tc_has_md_var(&tc, "test-var")); 109*c243e490SMarcel Moolenaar atf_tc_fini(&tc); 110*c243e490SMarcel Moolenaar } 111*c243e490SMarcel Moolenaar 112*c243e490SMarcel Moolenaar ATF_TC(vars); 113*c243e490SMarcel Moolenaar ATF_TC_HEAD(vars, tc) 114*c243e490SMarcel Moolenaar { 115*c243e490SMarcel Moolenaar atf_tc_set_md_var(tc, "descr", "Tests the atf_tc_get_md_var, " 116*c243e490SMarcel Moolenaar "atf_tc_has_md_var and atf_tc_set_md_var functions"); 117*c243e490SMarcel Moolenaar } 118*c243e490SMarcel Moolenaar ATF_TC_BODY(vars, tcin) 119*c243e490SMarcel Moolenaar { 120*c243e490SMarcel Moolenaar atf_tc_t tc; 121*c243e490SMarcel Moolenaar 122*c243e490SMarcel Moolenaar RE(atf_tc_init(&tc, "test1", ATF_TC_HEAD_NAME(empty), 123*c243e490SMarcel Moolenaar ATF_TC_BODY_NAME(empty), NULL, NULL)); 124*c243e490SMarcel Moolenaar ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var")); 125*c243e490SMarcel Moolenaar RE(atf_tc_set_md_var(&tc, "test-var", "Test value")); 126*c243e490SMarcel Moolenaar ATF_REQUIRE(atf_tc_has_md_var(&tc, "test-var")); 127*c243e490SMarcel Moolenaar ATF_REQUIRE(strcmp(atf_tc_get_md_var(&tc, "test-var"), "Test value") == 0); 128*c243e490SMarcel Moolenaar atf_tc_fini(&tc); 129*c243e490SMarcel Moolenaar } 130*c243e490SMarcel Moolenaar 131*c243e490SMarcel Moolenaar ATF_TC(config); 132*c243e490SMarcel Moolenaar ATF_TC_HEAD(config, tc) 133*c243e490SMarcel Moolenaar { 134*c243e490SMarcel Moolenaar atf_tc_set_md_var(tc, "descr", "Tests the atf_tc_get_config_var, " 135*c243e490SMarcel Moolenaar "atf_tc_get_config_var_wd and atf_tc_has_config_var " 136*c243e490SMarcel Moolenaar "functions"); 137*c243e490SMarcel Moolenaar } 138*c243e490SMarcel Moolenaar ATF_TC_BODY(config, tcin) 139*c243e490SMarcel Moolenaar { 140*c243e490SMarcel Moolenaar atf_tc_t tc; 141*c243e490SMarcel Moolenaar const char *const config[] = { "test-var", "test-value", NULL }; 142*c243e490SMarcel Moolenaar 143*c243e490SMarcel Moolenaar RE(atf_tc_init(&tc, "test1", ATF_TC_HEAD_NAME(empty), 144*c243e490SMarcel Moolenaar ATF_TC_BODY_NAME(empty), NULL, NULL)); 145*c243e490SMarcel Moolenaar ATF_REQUIRE(!atf_tc_has_config_var(&tc, "test-var")); 146*c243e490SMarcel Moolenaar ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var")); 147*c243e490SMarcel Moolenaar atf_tc_fini(&tc); 148*c243e490SMarcel Moolenaar 149*c243e490SMarcel Moolenaar RE(atf_tc_init(&tc, "test1", ATF_TC_HEAD_NAME(empty), 150*c243e490SMarcel Moolenaar ATF_TC_BODY_NAME(empty), NULL, config)); 151*c243e490SMarcel Moolenaar ATF_REQUIRE(atf_tc_has_config_var(&tc, "test-var")); 152*c243e490SMarcel Moolenaar ATF_REQUIRE(strcmp(atf_tc_get_config_var(&tc, "test-var"), 153*c243e490SMarcel Moolenaar "test-value") == 0); 154*c243e490SMarcel Moolenaar ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var")); 155*c243e490SMarcel Moolenaar ATF_REQUIRE(!atf_tc_has_config_var(&tc, "test-var2")); 156*c243e490SMarcel Moolenaar ATF_REQUIRE(strcmp(atf_tc_get_config_var_wd(&tc, "test-var2", "def-value"), 157*c243e490SMarcel Moolenaar "def-value") == 0); 158*c243e490SMarcel Moolenaar atf_tc_fini(&tc); 159*c243e490SMarcel Moolenaar } 160*c243e490SMarcel Moolenaar 161*c243e490SMarcel Moolenaar /* --------------------------------------------------------------------- 162*c243e490SMarcel Moolenaar * Test cases for the free functions. 163*c243e490SMarcel Moolenaar * --------------------------------------------------------------------- */ 164*c243e490SMarcel Moolenaar 165*c243e490SMarcel Moolenaar /* TODO: Add test cases for atf_tc_run. This is going to be very tough, 166*c243e490SMarcel Moolenaar * but good tests here could allow us to avoid much of the indirect 167*c243e490SMarcel Moolenaar * testing done later on. */ 168*c243e490SMarcel Moolenaar 169*c243e490SMarcel Moolenaar /* --------------------------------------------------------------------- 170*c243e490SMarcel Moolenaar * Tests cases for the header file. 171*c243e490SMarcel Moolenaar * --------------------------------------------------------------------- */ 172*c243e490SMarcel Moolenaar 173*c243e490SMarcel Moolenaar HEADER_TC(include, "atf-c/tc.h"); 174*c243e490SMarcel Moolenaar 175*c243e490SMarcel Moolenaar /* --------------------------------------------------------------------- 176*c243e490SMarcel Moolenaar * Main. 177*c243e490SMarcel Moolenaar * --------------------------------------------------------------------- */ 178*c243e490SMarcel Moolenaar 179*c243e490SMarcel Moolenaar ATF_TP_ADD_TCS(tp) 180*c243e490SMarcel Moolenaar { 181*c243e490SMarcel Moolenaar /* Add the test cases for the "atf_tcr_t" type. */ 182*c243e490SMarcel Moolenaar ATF_TP_ADD_TC(tp, init); 183*c243e490SMarcel Moolenaar ATF_TP_ADD_TC(tp, init_pack); 184*c243e490SMarcel Moolenaar ATF_TP_ADD_TC(tp, vars); 185*c243e490SMarcel Moolenaar ATF_TP_ADD_TC(tp, config); 186*c243e490SMarcel Moolenaar 187*c243e490SMarcel Moolenaar /* Add the test cases for the free functions. */ 188*c243e490SMarcel Moolenaar /* TODO */ 189*c243e490SMarcel Moolenaar 190*c243e490SMarcel Moolenaar /* Add the test cases for the header file. */ 191*c243e490SMarcel Moolenaar ATF_TP_ADD_TC(tp, include); 192*c243e490SMarcel Moolenaar 193*c243e490SMarcel Moolenaar return atf_no_error(); 194*c243e490SMarcel Moolenaar } 195