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