tc.h revision 4a53e3c2b83c476a93148eaee0272649beb221ca
f54d0c9c6e65de367d4ef08f51d22a2fb4c56208Mark Andrews/* Copyright (c) 2008 The NetBSD Foundation, Inc.
279c6ec074be17dce62dd1b2c6ed7c2cc56a7b78David Lawrence * All rights reserved.
2baa66562a2f119edffded961d3391f87ff98ec0Ondřej Surý *
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence * Redistribution and use in source and binary forms, with or without
bd5040035c8bb3fe4acdaf6a1f26423b58302188Mark Andrews * modification, are permitted provided that the following conditions
bd5040035c8bb3fe4acdaf6a1f26423b58302188Mark Andrews * are met:
bd5040035c8bb3fe4acdaf6a1f26423b58302188Mark Andrews * 1. Redistributions of source code must retain the above copyright
2baa66562a2f119edffded961d3391f87ff98ec0Ondřej Surý * notice, this list of conditions and the following disclaimer.
2baa66562a2f119edffded961d3391f87ff98ec0Ondřej Surý * 2. Redistributions in binary form must reproduce the above copyright
2baa66562a2f119edffded961d3391f87ff98ec0Ondřej Surý * notice, this list of conditions and the following disclaimer in the
279c6ec074be17dce62dd1b2c6ed7c2cc56a7b78David Lawrence * documentation and/or other materials provided with the distribution.
279c6ec074be17dce62dd1b2c6ed7c2cc56a7b78David Lawrence *
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
a14613fce99dee3cad5bf842fd6be78f8e463582Brian Wellington * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
279c6ec074be17dce62dd1b2c6ed7c2cc56a7b78David Lawrence * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
279c6ec074be17dce62dd1b2c6ed7c2cc56a7b78David Lawrence * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
279c6ec074be17dce62dd1b2c6ed7c2cc56a7b78David Lawrence * IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
279c6ec074be17dce62dd1b2c6ed7c2cc56a7b78David Lawrence * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
a5d43b72413db3edd6b36a58f9bdf2cf6ff692f2Bob Halley * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
a30e7fc23415fd238d067a8a871607bca36068baMichael Graff * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
a30e7fc23415fd238d067a8a871607bca36068baMichael Graff * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
8d4257cff01b3821abcb9a21f46c6c6a43bb1e72Bob Halley * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
8d4257cff01b3821abcb9a21f46c6c6a43bb1e72Bob Halley
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#if !defined(ATF_C_TC_H)
8d4257cff01b3821abcb9a21f46c6c6a43bb1e72Bob Halley#define ATF_C_TC_H
8d4257cff01b3821abcb9a21f46c6c6a43bb1e72Bob Halley
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#include <stdbool.h>
dc97fe4ed08488d314ab5bc8e99ed839542cf411David Lawrence#include <stddef.h>
dc97fe4ed08488d314ab5bc8e99ed839542cf411David Lawrence
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#include <atf-c/defs.h>
8d4257cff01b3821abcb9a21f46c6c6a43bb1e72Bob Halley#include <atf-c/error_fwd.h>
8d4257cff01b3821abcb9a21f46c6c6a43bb1e72Bob Halley
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinstruct atf_tc;
50453ad879d0d93854de5a3385776bd799e8f35cBob Halley
50453ad879d0d93854de5a3385776bd799e8f35cBob Halleytypedef void (*atf_tc_head_t)(struct atf_tc *);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeintypedef void (*atf_tc_body_t)(const struct atf_tc *);
7005cfed8cd3296d356883dcb414979f22e06b13Brian Wellingtontypedef void (*atf_tc_cleanup_t)(const struct atf_tc *);
7005cfed8cd3296d356883dcb414979f22e06b13Brian Wellington
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein/* ---------------------------------------------------------------------
6f7660093e70d3a7c80738b681ac0f5c1b661c00Mark Andrews * The "atf_tc_pack" type.
6f7660093e70d3a7c80738b681ac0f5c1b661c00Mark Andrews * --------------------------------------------------------------------- */
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
d8dcd6ad4617cc8d7df979bd62101fa9c4bac1bcBob Halley/* For static initialization only. */
d8dcd6ad4617cc8d7df979bd62101fa9c4bac1bcBob Halleystruct atf_tc_pack {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein const char *m_ident;
baf7c7e589f313f10b29d9119811fc4d36c2e4bcMark Andrews
baf7c7e589f313f10b29d9119811fc4d36c2e4bcMark Andrews const char *const *m_config;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
a30e7fc23415fd238d067a8a871607bca36068baMichael Graff atf_tc_head_t m_head;
a30e7fc23415fd238d067a8a871607bca36068baMichael Graff atf_tc_body_t m_body;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein atf_tc_cleanup_t m_cleanup;
6286983c506433d642b23e64845c50be30f2a7f6Mark Andrews};
6286983c506433d642b23e64845c50be30f2a7f6Mark Andrewstypedef const struct atf_tc_pack atf_tc_pack_t;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
8313838954d67250d0ed7edf67fba5da0790d1a7Michael Graff/* ---------------------------------------------------------------------
8313838954d67250d0ed7edf67fba5da0790d1a7Michael Graff * The "atf_tc" type.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * --------------------------------------------------------------------- */
8313838954d67250d0ed7edf67fba5da0790d1a7Michael Graff
8313838954d67250d0ed7edf67fba5da0790d1a7Michael Graffstruct atf_tc_impl;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinstruct atf_tc {
703e1c0bb66f3cd3d300358ca0c1fdf3cb5fb1c5Brian Wellington struct atf_tc_impl *pimpl;
703e1c0bb66f3cd3d300358ca0c1fdf3cb5fb1c5Brian Wellington};
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeintypedef struct atf_tc atf_tc_t;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
0eb2572d79822d02ea05448ce4e5f1759c73d171Michael Graff/* Constructors/destructors. */
0eb2572d79822d02ea05448ce4e5f1759c73d171Michael Graffatf_error_t atf_tc_init(atf_tc_t *, const char *, atf_tc_head_t,
0eb2572d79822d02ea05448ce4e5f1759c73d171Michael Graff atf_tc_body_t, atf_tc_cleanup_t,
0eb2572d79822d02ea05448ce4e5f1759c73d171Michael Graff const char *const *);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinatf_error_t atf_tc_init_pack(atf_tc_t *, atf_tc_pack_t *,
4108eed5092156cf0407a97a9bd8ab7775164694Brian Wellington const char *const *);
4108eed5092156cf0407a97a9bd8ab7775164694Brian Wellingtonvoid atf_tc_fini(atf_tc_t *);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
3f123dcc2fe5d2cd08ca91b732741d86a4036906Brian Wellington/* Getters. */
3f123dcc2fe5d2cd08ca91b732741d86a4036906Brian Wellingtonconst char *atf_tc_get_ident(const atf_tc_t *);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinconst char *atf_tc_get_config_var(const atf_tc_t *, const char *);
64b92523f9333ba053f4b2860335583be455b0b3Brian Wellingtonconst char *atf_tc_get_config_var_wd(const atf_tc_t *, const char *,
64b92523f9333ba053f4b2860335583be455b0b3Brian Wellington const char *);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinbool atf_tc_get_config_var_as_bool(const atf_tc_t *, const char *);
876753d5ce1be48f3218fb4875fac501f8adfd6cDavid Lawrencebool atf_tc_get_config_var_as_bool_wd(const atf_tc_t *, const char *,
876753d5ce1be48f3218fb4875fac501f8adfd6cDavid Lawrence const bool);
876753d5ce1be48f3218fb4875fac501f8adfd6cDavid Lawrencelong atf_tc_get_config_var_as_long(const atf_tc_t *, const char *);
876753d5ce1be48f3218fb4875fac501f8adfd6cDavid Lawrencelong atf_tc_get_config_var_as_long_wd(const atf_tc_t *, const char *,
876753d5ce1be48f3218fb4875fac501f8adfd6cDavid Lawrence const long);
876753d5ce1be48f3218fb4875fac501f8adfd6cDavid Lawrenceconst char *atf_tc_get_md_var(const atf_tc_t *, const char *);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinchar **atf_tc_get_md_vars(const atf_tc_t *);
ed71ea51c6ecb5d7d659b6e6a20f6b3f5c2678c6David Lawrencebool atf_tc_has_config_var(const atf_tc_t *, const char *);
ed71ea51c6ecb5d7d659b6e6a20f6b3f5c2678c6David Lawrencebool atf_tc_has_md_var(const atf_tc_t *, const char *);
ed71ea51c6ecb5d7d659b6e6a20f6b3f5c2678c6David Lawrence
ed71ea51c6ecb5d7d659b6e6a20f6b3f5c2678c6David Lawrence/* Modifiers. */
ed71ea51c6ecb5d7d659b6e6a20f6b3f5c2678c6David Lawrenceatf_error_t atf_tc_set_md_var(atf_tc_t *, const char *, const char *, ...);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
49a2cf8f211213712d452287ae8e121cf59e3178David Lawrence/* ---------------------------------------------------------------------
49a2cf8f211213712d452287ae8e121cf59e3178David Lawrence * Free functions.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * --------------------------------------------------------------------- */
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
49a2cf8f211213712d452287ae8e121cf59e3178David Lawrenceatf_error_t atf_tc_run(const atf_tc_t *, const char *);
49a2cf8f211213712d452287ae8e121cf59e3178David Lawrenceatf_error_t atf_tc_cleanup(const atf_tc_t *);
49a2cf8f211213712d452287ae8e121cf59e3178David Lawrence
2e61d171bc1fa47ea4d551b87546ebcf78f61e4aMark Andrews/* To be run from test case bodies only. */
49a2cf8f211213712d452287ae8e121cf59e3178David Lawrencevoid atf_tc_fail(const char *, ...)
f54d0c9c6e65de367d4ef08f51d22a2fb4c56208Mark Andrews ATF_DEFS_ATTRIBUTE_FORMAT_PRINTF(1, 2)
f54d0c9c6e65de367d4ef08f51d22a2fb4c56208Mark Andrews ATF_DEFS_ATTRIBUTE_NORETURN;
f54d0c9c6e65de367d4ef08f51d22a2fb4c56208Mark Andrewsvoid atf_tc_fail_nonfatal(const char *, ...)
f54d0c9c6e65de367d4ef08f51d22a2fb4c56208Mark Andrews ATF_DEFS_ATTRIBUTE_FORMAT_PRINTF(1, 2);
f54d0c9c6e65de367d4ef08f51d22a2fb4c56208Mark Andrewsvoid atf_tc_pass(void)
f54d0c9c6e65de367d4ef08f51d22a2fb4c56208Mark Andrews ATF_DEFS_ATTRIBUTE_NORETURN;
f54d0c9c6e65de367d4ef08f51d22a2fb4c56208Mark Andrewsvoid atf_tc_require_prog(const char *);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinvoid atf_tc_skip(const char *, ...)
49a2cf8f211213712d452287ae8e121cf59e3178David Lawrence ATF_DEFS_ATTRIBUTE_FORMAT_PRINTF(1, 2)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ATF_DEFS_ATTRIBUTE_NORETURN;
529ff4b4959fb157194f985394951108ff5286e4Brian Wellingtonvoid atf_tc_expect_pass(void);
a14613fce99dee3cad5bf842fd6be78f8e463582Brian Wellingtonvoid atf_tc_expect_fail(const char *, ...)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ATF_DEFS_ATTRIBUTE_FORMAT_PRINTF(1, 2);
489b76292622f5bc18bf1a18845f8166a73bd797Brian Wellingtonvoid atf_tc_expect_exit(const int, const char *, ...)
489b76292622f5bc18bf1a18845f8166a73bd797Brian Wellington ATF_DEFS_ATTRIBUTE_FORMAT_PRINTF(2, 3);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinvoid atf_tc_expect_signal(const int, const char *, ...)
bff8ac12a8c099257bdbf7d0c55d2d5b77591926Mark Andrews ATF_DEFS_ATTRIBUTE_FORMAT_PRINTF(2, 3);
bff8ac12a8c099257bdbf7d0c55d2d5b77591926Mark Andrewsvoid atf_tc_expect_death(const char *, ...)
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ATF_DEFS_ATTRIBUTE_FORMAT_PRINTF(1, 2);
fd837244be31850a764863688bce11df9ce972f4Andreas Gustafssonvoid atf_tc_expect_timeout(const char *, ...)
fd837244be31850a764863688bce11df9ce972f4Andreas Gustafsson ATF_DEFS_ATTRIBUTE_FORMAT_PRINTF(1, 2);
cffc2e06f906dd048af4cc27d487deb157f5a082Mark Andrews
cffc2e06f906dd048af4cc27d487deb157f5a082Mark Andrews/* To be run from test case bodies only; internal to macros.h. */
cffc2e06f906dd048af4cc27d487deb157f5a082Mark Andrewsvoid atf_tc_fail_check(const char *, const size_t, const char *, ...)
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt ATF_DEFS_ATTRIBUTE_FORMAT_PRINTF(3, 4);
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Huntvoid atf_tc_fail_requirement(const char *, const size_t, const char *, ...)
aaaf8d4f4873d21e55c3ffb4f656203d08339865Mark Andrews ATF_DEFS_ATTRIBUTE_FORMAT_PRINTF(3, 4)
43fe2897fc80bbec2115310ca79d432a252f3ea4Mark Andrews ATF_DEFS_ATTRIBUTE_NORETURN;
43fe2897fc80bbec2115310ca79d432a252f3ea4Mark Andrewsvoid atf_tc_check_errno(const char *, const size_t, const int,
43fe2897fc80bbec2115310ca79d432a252f3ea4Mark Andrews const char *, const bool);
70e854766f5304f43e94212dc38ebaefe214148cMark Andrewsvoid atf_tc_require_errno(const char *, const size_t, const int,
70e854766f5304f43e94212dc38ebaefe214148cMark Andrews const char *, const bool);
70e854766f5304f43e94212dc38ebaefe214148cMark Andrews
f02c22d58ac88777655e0b407b22b07864d39184Evan Hunt#endif /* !defined(ATF_C_TC_H) */
f02c22d58ac88777655e0b407b22b07864d39184Evan Hunt