1227569Sphilip/* 2284555Sarybchik * Automated Testing Framework (atf) 3227569Sphilip * 4227569Sphilip * Copyright (c) 2008 The NetBSD Foundation, Inc. 5227569Sphilip * All rights reserved. 6227569Sphilip * 7227569Sphilip * Redistribution and use in source and binary forms, with or without 8227569Sphilip * modification, are permitted provided that the following conditions 9284555Sarybchik * are met: 10227569Sphilip * 1. Redistributions of source code must retain the above copyright 11284555Sarybchik * notice, this list of conditions and the following disclaimer. 12284555Sarybchik * 2. Redistributions in binary form must reproduce the above copyright 13284555Sarybchik * notice, this list of conditions and the following disclaimer in the 14284555Sarybchik * documentation and/or other materials provided with the distribution. 15284555Sarybchik * 16284555Sarybchik * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND 17284555Sarybchik * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 18284555Sarybchik * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19284555Sarybchik * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20284555Sarybchik * IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY 21284555Sarybchik * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22284555Sarybchik * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 23284555Sarybchik * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24284555Sarybchik * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 25284555Sarybchik * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 26284555Sarybchik * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27284555Sarybchik * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28284555Sarybchik */ 29284555Sarybchik 30284555Sarybchik#include <stdbool.h> 31284555Sarybchik#include <string.h> 32227569Sphilip 33227569Sphilip#include <atf-c.h> 34227569Sphilip 35227569Sphilip#include "detail/test_helpers.h" 36227569Sphilip 37227569Sphilip/* --------------------------------------------------------------------- 38227569Sphilip * Auxiliary test cases. 39227569Sphilip * --------------------------------------------------------------------- */ 40227569Sphilip 41227569SphilipATF_TC_HEAD(empty, tc) 42227569Sphilip{ 43227569Sphilip if (tc != NULL) {} 44227569Sphilip} 45227569SphilipATF_TC_BODY(empty, tc) 46227569Sphilip{ 47227569Sphilip} 48227569Sphilip 49284555SarybchikATF_TC_HEAD(test_var, tc) 50280502Sarybchik{ 51227569Sphilip atf_tc_set_md_var(tc, "test-var", "Test text"); 52227569Sphilip} 53227569Sphilip 54227569Sphilip/* --------------------------------------------------------------------- 55227569Sphilip * Test cases for the "atf_tc_t" type. 56227569Sphilip * --------------------------------------------------------------------- */ 57227569Sphilip 58227569SphilipATF_TC(init); 59227569SphilipATF_TC_HEAD(init, tc) 60227569Sphilip{ 61227569Sphilip atf_tc_set_md_var(tc, "descr", "Tests the atf_tc_init function"); 62227569Sphilip} 63227569SphilipATF_TC_BODY(init, tcin) 64284555Sarybchik{ 65280601Sarybchik atf_tc_t tc; 66227569Sphilip 67283204Sarybchik RE(atf_tc_init(&tc, "test1", ATF_TC_HEAD_NAME(empty), 68283216Sarybchik ATF_TC_BODY_NAME(empty), NULL, NULL)); 69283205Sarybchik ATF_REQUIRE(strcmp(atf_tc_get_ident(&tc), "test1") == 0); 70283216Sarybchik ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var")); 71283217Sarybchik atf_tc_fini(&tc); 72292089Sarybchik 73280501Sarybchik RE(atf_tc_init(&tc, "test2", ATF_TC_HEAD_NAME(test_var), 74283215Sarybchik ATF_TC_BODY_NAME(empty), NULL, NULL)); 75292089Sarybchik ATF_REQUIRE(strcmp(atf_tc_get_ident(&tc), "test2") == 0); 76227569Sphilip ATF_REQUIRE(atf_tc_has_md_var(&tc, "test-var")); 77227569Sphilip atf_tc_fini(&tc); 78227569Sphilip} 79280502Sarybchik 80280502SarybchikATF_TC(init_pack); 81280502SarybchikATF_TC_HEAD(init_pack, tc) 82280502Sarybchik{ 83280502Sarybchik atf_tc_set_md_var(tc, "descr", "Tests the atf_tc_init_pack function"); 84280502Sarybchik} 85280502SarybchikATF_TC_BODY(init_pack, tcin) 86280502Sarybchik{ 87280502Sarybchik atf_tc_t tc; 88280502Sarybchik atf_tc_pack_t tcp1 = { 89280502Sarybchik .m_ident = "test1", 90280502Sarybchik .m_head = ATF_TC_HEAD_NAME(empty), 91280502Sarybchik .m_body = ATF_TC_BODY_NAME(empty), 92280502Sarybchik .m_cleanup = NULL, 93280502Sarybchik }; 94280502Sarybchik atf_tc_pack_t tcp2 = { 95280502Sarybchik .m_ident = "test2", 96280502Sarybchik .m_head = ATF_TC_HEAD_NAME(test_var), 97292089Sarybchik .m_body = ATF_TC_BODY_NAME(empty), 98292089Sarybchik .m_cleanup = NULL, 99292089Sarybchik }; 100292089Sarybchik 101292089Sarybchik RE(atf_tc_init_pack(&tc, &tcp1, NULL)); 102292089Sarybchik ATF_REQUIRE(strcmp(atf_tc_get_ident(&tc), "test1") == 0); 103292089Sarybchik ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var")); 104292089Sarybchik atf_tc_fini(&tc); 105293970Sarybchik 106293970Sarybchik RE(atf_tc_init_pack(&tc, &tcp2, NULL)); 107293970Sarybchik ATF_REQUIRE(strcmp(atf_tc_get_ident(&tc), "test2") == 0); 108293970Sarybchik ATF_REQUIRE(atf_tc_has_md_var(&tc, "test-var")); 109293970Sarybchik atf_tc_fini(&tc); 110293970Sarybchik} 111293970Sarybchik 112293946SarybchikATF_TC(vars); 113293946SarybchikATF_TC_HEAD(vars, tc) 114293946Sarybchik{ 115293946Sarybchik atf_tc_set_md_var(tc, "descr", "Tests the atf_tc_get_md_var, " 116293946Sarybchik "atf_tc_has_md_var and atf_tc_set_md_var functions"); 117293946Sarybchik} 118227569SphilipATF_TC_BODY(vars, tcin) 119227569Sphilip{ 120227569Sphilip atf_tc_t tc; 121227569Sphilip 122284555Sarybchik RE(atf_tc_init(&tc, "test1", ATF_TC_HEAD_NAME(empty), 123284555Sarybchik ATF_TC_BODY_NAME(empty), NULL, NULL)); 124284555Sarybchik ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var")); 125284555Sarybchik RE(atf_tc_set_md_var(&tc, "test-var", "Test value")); 126284555Sarybchik ATF_REQUIRE(atf_tc_has_md_var(&tc, "test-var")); 127284555Sarybchik ATF_REQUIRE(strcmp(atf_tc_get_md_var(&tc, "test-var"), "Test value") == 0); 128284555Sarybchik atf_tc_fini(&tc); 129284555Sarybchik} 130284555Sarybchik 131284555SarybchikATF_TC(config); 132284555SarybchikATF_TC_HEAD(config, tc) 133284555Sarybchik{ 134284555Sarybchik atf_tc_set_md_var(tc, "descr", "Tests the atf_tc_get_config_var, " 135284555Sarybchik "atf_tc_get_config_var_wd and atf_tc_has_config_var " 136284555Sarybchik "functions"); 137284555Sarybchik} 138284555SarybchikATF_TC_BODY(config, tcin) 139284555Sarybchik{ 140284555Sarybchik atf_tc_t tc; 141284555Sarybchik const char *const config[] = { "test-var", "test-value", NULL }; 142284555Sarybchik 143284555Sarybchik RE(atf_tc_init(&tc, "test1", ATF_TC_HEAD_NAME(empty), 144284555Sarybchik ATF_TC_BODY_NAME(empty), NULL, NULL)); 145284555Sarybchik ATF_REQUIRE(!atf_tc_has_config_var(&tc, "test-var")); 146284555Sarybchik ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var")); 147284555Sarybchik atf_tc_fini(&tc); 148284555Sarybchik 149284555Sarybchik RE(atf_tc_init(&tc, "test1", ATF_TC_HEAD_NAME(empty), 150284555Sarybchik ATF_TC_BODY_NAME(empty), NULL, config)); 151284555Sarybchik ATF_REQUIRE(atf_tc_has_config_var(&tc, "test-var")); 152284555Sarybchik ATF_REQUIRE(strcmp(atf_tc_get_config_var(&tc, "test-var"), 153284555Sarybchik "test-value") == 0); 154284555Sarybchik ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var")); 155284555Sarybchik ATF_REQUIRE(!atf_tc_has_config_var(&tc, "test-var2")); 156284555Sarybchik ATF_REQUIRE(strcmp(atf_tc_get_config_var_wd(&tc, "test-var2", "def-value"), 157284555Sarybchik "def-value") == 0); 158284555Sarybchik atf_tc_fini(&tc); 159284555Sarybchik} 160284555Sarybchik 161284555Sarybchik/* --------------------------------------------------------------------- 162284555Sarybchik * Test cases for the free functions. 163284555Sarybchik * --------------------------------------------------------------------- */ 164284555Sarybchik 165284555Sarybchik/* TODO: Add test cases for atf_tc_run. This is going to be very tough, 166284555Sarybchik * but good tests here could allow us to avoid much of the indirect 167284555Sarybchik * testing done later on. */ 168284555Sarybchik 169284555Sarybchik/* --------------------------------------------------------------------- 170284555Sarybchik * Tests cases for the header file. 171284555Sarybchik * --------------------------------------------------------------------- */ 172284555Sarybchik 173284555SarybchikHEADER_TC(include, "atf-c/tc.h"); 174284555Sarybchik 175284555Sarybchik/* --------------------------------------------------------------------- 176284555Sarybchik * Main. 177284555Sarybchik * --------------------------------------------------------------------- */ 178284555Sarybchik 179284555SarybchikATF_TP_ADD_TCS(tp) 180284555Sarybchik{ 181284555Sarybchik /* Add the test cases for the "atf_tcr_t" type. */ 182284555Sarybchik ATF_TP_ADD_TC(tp, init); 183284555Sarybchik ATF_TP_ADD_TC(tp, init_pack); 184284555Sarybchik ATF_TP_ADD_TC(tp, vars); 185284555Sarybchik ATF_TP_ADD_TC(tp, config); 186284555Sarybchik 187284555Sarybchik /* Add the test cases for the free functions. */ 188284555Sarybchik /* TODO */ 189284555Sarybchik 190284555Sarybchik /* Add the test cases for the header file. */ 191284555Sarybchik ATF_TP_ADD_TC(tp, include); 192284555Sarybchik 193284555Sarybchik return atf_no_error(); 194284555Sarybchik} 195284555Sarybchik