xref: /freebsd-src/contrib/netbsd-tests/lib/libpthread_dbg/t_dummy.c (revision 1a36faad54665288ed4eb839d2a4699ae2ead45e)
1*63d1fd59SEnji Cooper /*	$NetBSD: t_dummy.c,v 1.6 2016/11/19 15:13:46 kamil Exp $	*/
2*63d1fd59SEnji Cooper 
3*63d1fd59SEnji Cooper /*-
4*63d1fd59SEnji Cooper  * Copyright (c) 2016 The NetBSD Foundation, Inc.
5*63d1fd59SEnji Cooper  * All rights reserved.
6*63d1fd59SEnji Cooper  *
7*63d1fd59SEnji Cooper  * Redistribution and use in source and binary forms, with or without
8*63d1fd59SEnji Cooper  * modification, are permitted provided that the following conditions
9*63d1fd59SEnji Cooper  * are met:
10*63d1fd59SEnji Cooper  * 1. Redistributions of source code must retain the above copyright
11*63d1fd59SEnji Cooper  *    notice, this list of conditions and the following disclaimer.
12*63d1fd59SEnji Cooper  * 2. Redistributions in binary form must reproduce the above copyright
13*63d1fd59SEnji Cooper  *    notice, this list of conditions and the following disclaimer in the
14*63d1fd59SEnji Cooper  *    documentation and/or other materials provided with the distribution.
15*63d1fd59SEnji Cooper  *
16*63d1fd59SEnji Cooper  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
17*63d1fd59SEnji Cooper  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
18*63d1fd59SEnji Cooper  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19*63d1fd59SEnji Cooper  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
20*63d1fd59SEnji Cooper  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21*63d1fd59SEnji Cooper  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22*63d1fd59SEnji Cooper  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23*63d1fd59SEnji Cooper  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24*63d1fd59SEnji Cooper  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25*63d1fd59SEnji Cooper  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26*63d1fd59SEnji Cooper  * POSSIBILITY OF SUCH DAMAGE.
27*63d1fd59SEnji Cooper  */
28*63d1fd59SEnji Cooper 
29*63d1fd59SEnji Cooper 
30*63d1fd59SEnji Cooper #include <sys/cdefs.h>
31*63d1fd59SEnji Cooper __RCSID("$NetBSD: t_dummy.c,v 1.6 2016/11/19 15:13:46 kamil Exp $");
32*63d1fd59SEnji Cooper 
33*63d1fd59SEnji Cooper #include "h_common.h"
34*63d1fd59SEnji Cooper #include <pthread_dbg.h>
35*63d1fd59SEnji Cooper #include <stdio.h>
36*63d1fd59SEnji Cooper 
37*63d1fd59SEnji Cooper #include <atf-c.h>
38*63d1fd59SEnji Cooper 
39*63d1fd59SEnji Cooper 
40*63d1fd59SEnji Cooper ATF_TC(dummy1);
ATF_TC_HEAD(dummy1,tc)41*63d1fd59SEnji Cooper ATF_TC_HEAD(dummy1, tc)
42*63d1fd59SEnji Cooper {
43*63d1fd59SEnji Cooper 
44*63d1fd59SEnji Cooper 	atf_tc_set_md_var(tc, "descr",
45*63d1fd59SEnji Cooper 	    "Asserts that dummy lookup functions stop td_open() with failure");
46*63d1fd59SEnji Cooper }
47*63d1fd59SEnji Cooper 
ATF_TC_BODY(dummy1,tc)48*63d1fd59SEnji Cooper ATF_TC_BODY(dummy1, tc)
49*63d1fd59SEnji Cooper {
50*63d1fd59SEnji Cooper 
51*63d1fd59SEnji Cooper 	struct td_proc_callbacks_t dummy_callbacks;
52*63d1fd59SEnji Cooper 	td_proc_t *main_ta;
53*63d1fd59SEnji Cooper 
54*63d1fd59SEnji Cooper 	dummy_callbacks.proc_read	= dummy_proc_read;
55*63d1fd59SEnji Cooper 	dummy_callbacks.proc_write	= dummy_proc_write;
56*63d1fd59SEnji Cooper 	dummy_callbacks.proc_lookup	= dummy_proc_lookup;
57*63d1fd59SEnji Cooper 	dummy_callbacks.proc_regsize	= dummy_proc_regsize;
58*63d1fd59SEnji Cooper 	dummy_callbacks.proc_getregs	= dummy_proc_getregs;
59*63d1fd59SEnji Cooper 	dummy_callbacks.proc_setregs	= dummy_proc_setregs;
60*63d1fd59SEnji Cooper 
61*63d1fd59SEnji Cooper 	ATF_REQUIRE(td_open(&dummy_callbacks, NULL, &main_ta) == TD_ERR_ERR);
62*63d1fd59SEnji Cooper }
63*63d1fd59SEnji Cooper 
64*63d1fd59SEnji Cooper ATF_TC(dummy2);
ATF_TC_HEAD(dummy2,tc)65*63d1fd59SEnji Cooper ATF_TC_HEAD(dummy2, tc)
66*63d1fd59SEnji Cooper {
67*63d1fd59SEnji Cooper 
68*63d1fd59SEnji Cooper 	atf_tc_set_md_var(tc, "descr",
69*63d1fd59SEnji Cooper 	    "Asserts that td_open() for basic proc_{read,write,lookup} works");
70*63d1fd59SEnji Cooper }
71*63d1fd59SEnji Cooper 
ATF_TC_BODY(dummy2,tc)72*63d1fd59SEnji Cooper ATF_TC_BODY(dummy2, tc)
73*63d1fd59SEnji Cooper {
74*63d1fd59SEnji Cooper 	struct td_proc_callbacks_t dummy_callbacks;
75*63d1fd59SEnji Cooper 	td_proc_t *main_ta;
76*63d1fd59SEnji Cooper 
77*63d1fd59SEnji Cooper 	dummy_callbacks.proc_read	= basic_proc_read;
78*63d1fd59SEnji Cooper 	dummy_callbacks.proc_write	= basic_proc_write;
79*63d1fd59SEnji Cooper 	dummy_callbacks.proc_lookup	= basic_proc_lookup;
80*63d1fd59SEnji Cooper 	dummy_callbacks.proc_regsize	= dummy_proc_regsize;
81*63d1fd59SEnji Cooper 	dummy_callbacks.proc_getregs	= dummy_proc_getregs;
82*63d1fd59SEnji Cooper 	dummy_callbacks.proc_setregs	= dummy_proc_setregs;
83*63d1fd59SEnji Cooper 
84*63d1fd59SEnji Cooper 	printf("Calling td_open(3)\n");
85*63d1fd59SEnji Cooper 	ATF_REQUIRE(td_open(&dummy_callbacks, NULL, &main_ta) == TD_ERR_OK);
86*63d1fd59SEnji Cooper 
87*63d1fd59SEnji Cooper 	printf("Calling td_close(3)\n");
88*63d1fd59SEnji Cooper 	ATF_REQUIRE(td_close(main_ta) == TD_ERR_OK);
89*63d1fd59SEnji Cooper }
90*63d1fd59SEnji Cooper 
91*63d1fd59SEnji Cooper ATF_TC(dummy3);
ATF_TC_HEAD(dummy3,tc)92*63d1fd59SEnji Cooper ATF_TC_HEAD(dummy3, tc)
93*63d1fd59SEnji Cooper {
94*63d1fd59SEnji Cooper 
95*63d1fd59SEnji Cooper 	atf_tc_set_md_var(tc, "descr",
96*63d1fd59SEnji Cooper 	    "Asserts that calling twice td_open() for the same process fails");
97*63d1fd59SEnji Cooper }
98*63d1fd59SEnji Cooper 
ATF_TC_BODY(dummy3,tc)99*63d1fd59SEnji Cooper ATF_TC_BODY(dummy3, tc)
100*63d1fd59SEnji Cooper {
101*63d1fd59SEnji Cooper 	struct td_proc_callbacks_t dummy_callbacks;
102*63d1fd59SEnji Cooper 	td_proc_t *main_ta1;
103*63d1fd59SEnji Cooper 	td_proc_t *main_ta2;
104*63d1fd59SEnji Cooper 
105*63d1fd59SEnji Cooper 	dummy_callbacks.proc_read	= basic_proc_read;
106*63d1fd59SEnji Cooper 	dummy_callbacks.proc_write	= basic_proc_write;
107*63d1fd59SEnji Cooper 	dummy_callbacks.proc_lookup	= basic_proc_lookup;
108*63d1fd59SEnji Cooper 	dummy_callbacks.proc_regsize	= dummy_proc_regsize;
109*63d1fd59SEnji Cooper 	dummy_callbacks.proc_getregs	= dummy_proc_getregs;
110*63d1fd59SEnji Cooper 	dummy_callbacks.proc_setregs	= dummy_proc_setregs;
111*63d1fd59SEnji Cooper 
112*63d1fd59SEnji Cooper 	printf("Calling td_open(3) for the first time - expecting success\n");
113*63d1fd59SEnji Cooper 	ATF_REQUIRE(td_open(&dummy_callbacks, NULL, &main_ta1) == TD_ERR_OK);
114*63d1fd59SEnji Cooper 
115*63d1fd59SEnji Cooper 	printf("Calling td_open(3) for the first time - expecting in-use\n");
116*63d1fd59SEnji Cooper 	ATF_REQUIRE(td_open(&dummy_callbacks, NULL, &main_ta2) ==
117*63d1fd59SEnji Cooper 	    TD_ERR_INUSE);
118*63d1fd59SEnji Cooper 
119*63d1fd59SEnji Cooper 	printf("Calling td_close(3) for the first successful call\n");
120*63d1fd59SEnji Cooper 	ATF_REQUIRE(td_close(main_ta1) == TD_ERR_OK);
121*63d1fd59SEnji Cooper }
122*63d1fd59SEnji Cooper 
ATF_TP_ADD_TCS(tp)123*63d1fd59SEnji Cooper ATF_TP_ADD_TCS(tp)
124*63d1fd59SEnji Cooper {
125*63d1fd59SEnji Cooper 
126*63d1fd59SEnji Cooper 	ATF_TP_ADD_TC(tp, dummy1);
127*63d1fd59SEnji Cooper 	ATF_TP_ADD_TC(tp, dummy2);
128*63d1fd59SEnji Cooper 	ATF_TP_ADD_TC(tp, dummy3);
129*63d1fd59SEnji Cooper 
130*63d1fd59SEnji Cooper 	return atf_no_error();
131*63d1fd59SEnji Cooper }
132