xref: /aosp_15_r20/external/selinux/libsemanage/tests/utilities.h (revision 2d543d20722ada2425b5bdab9d0d1d29470e7bba)
1*2d543d20SAndroid Build Coastguard Worker /* Authors: Christopher Ashworth <[email protected]>
2*2d543d20SAndroid Build Coastguard Worker  *
3*2d543d20SAndroid Build Coastguard Worker  * Copyright (C) 2006 Tresys Technology, LLC
4*2d543d20SAndroid Build Coastguard Worker  * Copyright (C) 2019 Red Hat, Inc.
5*2d543d20SAndroid Build Coastguard Worker  *
6*2d543d20SAndroid Build Coastguard Worker  *  This library is free software; you can redistribute it and/or
7*2d543d20SAndroid Build Coastguard Worker  *  modify it under the terms of the GNU Lesser General Public
8*2d543d20SAndroid Build Coastguard Worker  *  License as published by the Free Software Foundation; either
9*2d543d20SAndroid Build Coastguard Worker  *  version 2.1 of the License, or (at your option) any later version.
10*2d543d20SAndroid Build Coastguard Worker  *
11*2d543d20SAndroid Build Coastguard Worker  *  This library is distributed in the hope that it will be useful,
12*2d543d20SAndroid Build Coastguard Worker  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13*2d543d20SAndroid Build Coastguard Worker  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14*2d543d20SAndroid Build Coastguard Worker  *  Lesser General Public License for more details.
15*2d543d20SAndroid Build Coastguard Worker  *
16*2d543d20SAndroid Build Coastguard Worker  *  You should have received a copy of the GNU Lesser General Public
17*2d543d20SAndroid Build Coastguard Worker  *  License along with this library; if not, write to the Free Software
18*2d543d20SAndroid Build Coastguard Worker  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19*2d543d20SAndroid Build Coastguard Worker  */
20*2d543d20SAndroid Build Coastguard Worker 
21*2d543d20SAndroid Build Coastguard Worker #ifndef __UTILITIES_H__
22*2d543d20SAndroid Build Coastguard Worker #define __UTILITIES_H__
23*2d543d20SAndroid Build Coastguard Worker 
24*2d543d20SAndroid Build Coastguard Worker #include <stdio.h>
25*2d543d20SAndroid Build Coastguard Worker #include <stdlib.h>
26*2d543d20SAndroid Build Coastguard Worker #include <stdarg.h>
27*2d543d20SAndroid Build Coastguard Worker #include <fts.h>
28*2d543d20SAndroid Build Coastguard Worker #include <assert.h>
29*2d543d20SAndroid Build Coastguard Worker #include <sys/stat.h>
30*2d543d20SAndroid Build Coastguard Worker #include <sys/types.h>
31*2d543d20SAndroid Build Coastguard Worker #include <CUnit/Basic.h>
32*2d543d20SAndroid Build Coastguard Worker 
33*2d543d20SAndroid Build Coastguard Worker #include "semanage/semanage.h"
34*2d543d20SAndroid Build Coastguard Worker 
35*2d543d20SAndroid Build Coastguard Worker #define CU_ASSERT_CONTEXT_EQUAL(CON1,CON2) \
36*2d543d20SAndroid Build Coastguard Worker 	do { \
37*2d543d20SAndroid Build Coastguard Worker 		char *__str; \
38*2d543d20SAndroid Build Coastguard Worker 		char *__str2; \
39*2d543d20SAndroid Build Coastguard Worker 		CU_ASSERT(semanage_context_to_string(sh, CON1, &__str) >= 0); \
40*2d543d20SAndroid Build Coastguard Worker 		CU_ASSERT(semanage_context_to_string(sh, CON2, &__str2) >= 0); \
41*2d543d20SAndroid Build Coastguard Worker 		CU_ASSERT_STRING_EQUAL(__str, __str2); \
42*2d543d20SAndroid Build Coastguard Worker 		free(__str2); \
43*2d543d20SAndroid Build Coastguard Worker 		free(__str); \
44*2d543d20SAndroid Build Coastguard Worker 	} while (0)
45*2d543d20SAndroid Build Coastguard Worker 
46*2d543d20SAndroid Build Coastguard Worker 
47*2d543d20SAndroid Build Coastguard Worker /* Override CU_*_FATAL() in order to help static analyzers by really asserting that an assertion holds */
48*2d543d20SAndroid Build Coastguard Worker #ifdef __CHECKER__
49*2d543d20SAndroid Build Coastguard Worker 
50*2d543d20SAndroid Build Coastguard Worker #undef CU_ASSERT_FATAL
51*2d543d20SAndroid Build Coastguard Worker #define CU_ASSERT_FATAL(value) do { \
52*2d543d20SAndroid Build Coastguard Worker 		int _value = (value); \
53*2d543d20SAndroid Build Coastguard Worker 		CU_ASSERT(_value); \
54*2d543d20SAndroid Build Coastguard Worker 		assert(_value); \
55*2d543d20SAndroid Build Coastguard Worker 	} while (0)
56*2d543d20SAndroid Build Coastguard Worker 
57*2d543d20SAndroid Build Coastguard Worker #undef CU_FAIL_FATAL
58*2d543d20SAndroid Build Coastguard Worker #define CU_FAIL_FATAL(msg) do { \
59*2d543d20SAndroid Build Coastguard Worker 		CU_FAIL(msg); \
60*2d543d20SAndroid Build Coastguard Worker 		assert(0); \
61*2d543d20SAndroid Build Coastguard Worker 	} while (0)
62*2d543d20SAndroid Build Coastguard Worker 
63*2d543d20SAndroid Build Coastguard Worker #undef CU_ASSERT_PTR_NOT_NULL_FATAL
64*2d543d20SAndroid Build Coastguard Worker #define CU_ASSERT_PTR_NOT_NULL_FATAL(value) do { \
65*2d543d20SAndroid Build Coastguard Worker 		const void *_value = (value); \
66*2d543d20SAndroid Build Coastguard Worker 		CU_ASSERT_PTR_NOT_NULL(_value); \
67*2d543d20SAndroid Build Coastguard Worker 		assert(_value != NULL); \
68*2d543d20SAndroid Build Coastguard Worker 	} while (0)
69*2d543d20SAndroid Build Coastguard Worker 
70*2d543d20SAndroid Build Coastguard Worker #endif /* __CHECKER__ */
71*2d543d20SAndroid Build Coastguard Worker 
72*2d543d20SAndroid Build Coastguard Worker #define I_NULL  -1
73*2d543d20SAndroid Build Coastguard Worker #define I_FIRST  0
74*2d543d20SAndroid Build Coastguard Worker #define I_SECOND 1
75*2d543d20SAndroid Build Coastguard Worker #define I_THIRD  2
76*2d543d20SAndroid Build Coastguard Worker 
77*2d543d20SAndroid Build Coastguard Worker typedef enum { SH_NULL, SH_HANDLE, SH_CONNECT, SH_TRANS } level_t;
78*2d543d20SAndroid Build Coastguard Worker 
79*2d543d20SAndroid Build Coastguard Worker void test_msg_handler(void *varg, semanage_handle_t *handle, const char *fmt,
80*2d543d20SAndroid Build Coastguard Worker 		      ...);
81*2d543d20SAndroid Build Coastguard Worker 
82*2d543d20SAndroid Build Coastguard Worker void setup_handle(level_t level);
83*2d543d20SAndroid Build Coastguard Worker void cleanup_handle(level_t level);
84*2d543d20SAndroid Build Coastguard Worker void setup_handle_invalid_store(level_t level);
85*2d543d20SAndroid Build Coastguard Worker 
86*2d543d20SAndroid Build Coastguard Worker void helper_handle_create(void);
87*2d543d20SAndroid Build Coastguard Worker void helper_handle_destroy(void);
88*2d543d20SAndroid Build Coastguard Worker void helper_connect(void);
89*2d543d20SAndroid Build Coastguard Worker void helper_disconnect(void);
90*2d543d20SAndroid Build Coastguard Worker void helper_begin_transaction(void);
91*2d543d20SAndroid Build Coastguard Worker void helper_commit(void);
92*2d543d20SAndroid Build Coastguard Worker 
93*2d543d20SAndroid Build Coastguard Worker int create_test_store(void);
94*2d543d20SAndroid Build Coastguard Worker int write_test_policy_from_file(const char *filename);
95*2d543d20SAndroid Build Coastguard Worker int write_test_policy_src(unsigned char *data, unsigned int data_len);
96*2d543d20SAndroid Build Coastguard Worker int destroy_test_store(void);
97*2d543d20SAndroid Build Coastguard Worker void enable_test_store(void);
98*2d543d20SAndroid Build Coastguard Worker void disable_test_store(void);
99*2d543d20SAndroid Build Coastguard Worker 
100*2d543d20SAndroid Build Coastguard Worker #endif
101