1*2d543d20SAndroid Build Coastguard Worker /*
2*2d543d20SAndroid Build Coastguard Worker * Authors: Jan Zarsky <[email protected]>
3*2d543d20SAndroid Build Coastguard Worker *
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 #include "utilities.h"
22*2d543d20SAndroid Build Coastguard Worker #include "test_iface.h"
23*2d543d20SAndroid Build Coastguard Worker
24*2d543d20SAndroid Build Coastguard Worker #define IFACE_COUNT 3
25*2d543d20SAndroid Build Coastguard Worker
26*2d543d20SAndroid Build Coastguard Worker #define IFACE1_NAME "eth0"
27*2d543d20SAndroid Build Coastguard Worker #define IFACE1_IFCON "system_u:object_r:first_netif_t:s0"
28*2d543d20SAndroid Build Coastguard Worker #define IFACE1_MSGCON IFACE1_IFCON
29*2d543d20SAndroid Build Coastguard Worker
30*2d543d20SAndroid Build Coastguard Worker #define IFACE2_NAME "eth1"
31*2d543d20SAndroid Build Coastguard Worker #define IFACE2_IFCON "system_u:object_r:second_netif_t:s0"
32*2d543d20SAndroid Build Coastguard Worker #define IFACE2_MSGCON IFACE2_IFCON
33*2d543d20SAndroid Build Coastguard Worker
34*2d543d20SAndroid Build Coastguard Worker #define IFACE3_NAME "eth2"
35*2d543d20SAndroid Build Coastguard Worker #define IFACE3_IFCON "system_u:object_r:third_netif_t:s0"
36*2d543d20SAndroid Build Coastguard Worker #define IFACE3_MSGCON IFACE3_IFCON
37*2d543d20SAndroid Build Coastguard Worker
38*2d543d20SAndroid Build Coastguard Worker
39*2d543d20SAndroid Build Coastguard Worker /* iface_record.h */
40*2d543d20SAndroid Build Coastguard Worker static void test_iface_compare(void);
41*2d543d20SAndroid Build Coastguard Worker static void test_iface_compare2(void);
42*2d543d20SAndroid Build Coastguard Worker static void test_iface_key_create(void);
43*2d543d20SAndroid Build Coastguard Worker static void test_iface_key_extract(void);
44*2d543d20SAndroid Build Coastguard Worker static void test_iface_get_set_name(void);
45*2d543d20SAndroid Build Coastguard Worker static void test_iface_get_set_ifcon(void);
46*2d543d20SAndroid Build Coastguard Worker static void test_iface_get_set_msgcon(void);
47*2d543d20SAndroid Build Coastguard Worker static void test_iface_create(void);
48*2d543d20SAndroid Build Coastguard Worker static void test_iface_clone(void);
49*2d543d20SAndroid Build Coastguard Worker
50*2d543d20SAndroid Build Coastguard Worker /* interfaces_policy.h */
51*2d543d20SAndroid Build Coastguard Worker static void test_iface_query(void);
52*2d543d20SAndroid Build Coastguard Worker static void test_iface_exists(void);
53*2d543d20SAndroid Build Coastguard Worker static void test_iface_count(void);
54*2d543d20SAndroid Build Coastguard Worker static void test_iface_iterate(void);
55*2d543d20SAndroid Build Coastguard Worker static void test_iface_list(void);
56*2d543d20SAndroid Build Coastguard Worker
57*2d543d20SAndroid Build Coastguard Worker /* interfaces_local.h */
58*2d543d20SAndroid Build Coastguard Worker static void test_iface_modify_del_query_local(void);
59*2d543d20SAndroid Build Coastguard Worker static void test_iface_exists_local(void);
60*2d543d20SAndroid Build Coastguard Worker static void test_iface_count_local(void);
61*2d543d20SAndroid Build Coastguard Worker static void test_iface_iterate_local(void);
62*2d543d20SAndroid Build Coastguard Worker static void test_iface_list_local(void);
63*2d543d20SAndroid Build Coastguard Worker
64*2d543d20SAndroid Build Coastguard Worker extern semanage_handle_t *sh;
65*2d543d20SAndroid Build Coastguard Worker
iface_test_init(void)66*2d543d20SAndroid Build Coastguard Worker int iface_test_init(void)
67*2d543d20SAndroid Build Coastguard Worker {
68*2d543d20SAndroid Build Coastguard Worker if (create_test_store() < 0) {
69*2d543d20SAndroid Build Coastguard Worker fprintf(stderr, "Could not create test store\n");
70*2d543d20SAndroid Build Coastguard Worker return 1;
71*2d543d20SAndroid Build Coastguard Worker }
72*2d543d20SAndroid Build Coastguard Worker
73*2d543d20SAndroid Build Coastguard Worker if (write_test_policy_from_file("test_iface.policy") < 0) {
74*2d543d20SAndroid Build Coastguard Worker fprintf(stderr, "Could not write test policy\n");
75*2d543d20SAndroid Build Coastguard Worker return 1;
76*2d543d20SAndroid Build Coastguard Worker }
77*2d543d20SAndroid Build Coastguard Worker
78*2d543d20SAndroid Build Coastguard Worker return 0;
79*2d543d20SAndroid Build Coastguard Worker }
80*2d543d20SAndroid Build Coastguard Worker
iface_test_cleanup(void)81*2d543d20SAndroid Build Coastguard Worker int iface_test_cleanup(void)
82*2d543d20SAndroid Build Coastguard Worker {
83*2d543d20SAndroid Build Coastguard Worker if (destroy_test_store() < 0) {
84*2d543d20SAndroid Build Coastguard Worker fprintf(stderr, "Could not destroy test store\n");
85*2d543d20SAndroid Build Coastguard Worker return 1;
86*2d543d20SAndroid Build Coastguard Worker }
87*2d543d20SAndroid Build Coastguard Worker
88*2d543d20SAndroid Build Coastguard Worker return 0;
89*2d543d20SAndroid Build Coastguard Worker }
90*2d543d20SAndroid Build Coastguard Worker
iface_add_tests(CU_pSuite suite)91*2d543d20SAndroid Build Coastguard Worker int iface_add_tests(CU_pSuite suite)
92*2d543d20SAndroid Build Coastguard Worker {
93*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "iface_compare", test_iface_compare);
94*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "iface_compare2", test_iface_compare2);
95*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "iface_key_create", test_iface_key_create);
96*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "iface_key_extract", test_iface_key_extract);
97*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "iface_get_set_name", test_iface_get_set_name);
98*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "iface_get_set_ifcon", test_iface_get_set_ifcon);
99*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "iface_get_set_msgcon", test_iface_get_set_msgcon);
100*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "iface_create)", test_iface_create);
101*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "iface_clone);", test_iface_clone);
102*2d543d20SAndroid Build Coastguard Worker
103*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "iface_query", test_iface_query);
104*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "iface_exists", test_iface_exists);
105*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "iface_count", test_iface_count);
106*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "iface_iterate", test_iface_iterate);
107*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "iface_list", test_iface_list);
108*2d543d20SAndroid Build Coastguard Worker
109*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "iface_modify_del_query_local",
110*2d543d20SAndroid Build Coastguard Worker test_iface_modify_del_query_local);
111*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "iface_exists_local", test_iface_exists_local);
112*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "iface_count_local", test_iface_count_local);
113*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "iface_iterate_local", test_iface_iterate_local);
114*2d543d20SAndroid Build Coastguard Worker CU_add_test(suite, "iface_list_local", test_iface_list_local);
115*2d543d20SAndroid Build Coastguard Worker
116*2d543d20SAndroid Build Coastguard Worker return 0;
117*2d543d20SAndroid Build Coastguard Worker }
118*2d543d20SAndroid Build Coastguard Worker
119*2d543d20SAndroid Build Coastguard Worker /* Helpers */
120*2d543d20SAndroid Build Coastguard Worker
get_iface_nth(int idx)121*2d543d20SAndroid Build Coastguard Worker static semanage_iface_t *get_iface_nth(int idx)
122*2d543d20SAndroid Build Coastguard Worker {
123*2d543d20SAndroid Build Coastguard Worker int res;
124*2d543d20SAndroid Build Coastguard Worker semanage_iface_t **records;
125*2d543d20SAndroid Build Coastguard Worker semanage_iface_t *iface;
126*2d543d20SAndroid Build Coastguard Worker unsigned int count;
127*2d543d20SAndroid Build Coastguard Worker
128*2d543d20SAndroid Build Coastguard Worker if (idx == I_NULL)
129*2d543d20SAndroid Build Coastguard Worker return NULL;
130*2d543d20SAndroid Build Coastguard Worker
131*2d543d20SAndroid Build Coastguard Worker res = semanage_iface_list(sh, &records, &count);
132*2d543d20SAndroid Build Coastguard Worker
133*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_FATAL(res >= 0);
134*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_FATAL(count >= (unsigned int) idx + 1);
135*2d543d20SAndroid Build Coastguard Worker
136*2d543d20SAndroid Build Coastguard Worker iface = records[idx];
137*2d543d20SAndroid Build Coastguard Worker
138*2d543d20SAndroid Build Coastguard Worker for (unsigned int i = 0; i < count; i++)
139*2d543d20SAndroid Build Coastguard Worker if (i != (unsigned int) idx)
140*2d543d20SAndroid Build Coastguard Worker semanage_iface_free(records[i]);
141*2d543d20SAndroid Build Coastguard Worker
142*2d543d20SAndroid Build Coastguard Worker free(records);
143*2d543d20SAndroid Build Coastguard Worker
144*2d543d20SAndroid Build Coastguard Worker return iface;
145*2d543d20SAndroid Build Coastguard Worker }
146*2d543d20SAndroid Build Coastguard Worker
get_iface_key_nth(int idx)147*2d543d20SAndroid Build Coastguard Worker static semanage_iface_key_t *get_iface_key_nth(int idx)
148*2d543d20SAndroid Build Coastguard Worker {
149*2d543d20SAndroid Build Coastguard Worker semanage_iface_key_t *key;
150*2d543d20SAndroid Build Coastguard Worker semanage_iface_t *iface;
151*2d543d20SAndroid Build Coastguard Worker int res;
152*2d543d20SAndroid Build Coastguard Worker
153*2d543d20SAndroid Build Coastguard Worker if (idx == I_NULL)
154*2d543d20SAndroid Build Coastguard Worker return NULL;
155*2d543d20SAndroid Build Coastguard Worker
156*2d543d20SAndroid Build Coastguard Worker iface = get_iface_nth(idx);
157*2d543d20SAndroid Build Coastguard Worker res = semanage_iface_key_extract(sh, iface, &key);
158*2d543d20SAndroid Build Coastguard Worker
159*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_FATAL(res >= 0);
160*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL_FATAL(key);
161*2d543d20SAndroid Build Coastguard Worker
162*2d543d20SAndroid Build Coastguard Worker /* cleanup */
163*2d543d20SAndroid Build Coastguard Worker semanage_iface_free(iface);
164*2d543d20SAndroid Build Coastguard Worker
165*2d543d20SAndroid Build Coastguard Worker return key;
166*2d543d20SAndroid Build Coastguard Worker }
167*2d543d20SAndroid Build Coastguard Worker
add_local_iface(int idx)168*2d543d20SAndroid Build Coastguard Worker static void add_local_iface(int idx)
169*2d543d20SAndroid Build Coastguard Worker {
170*2d543d20SAndroid Build Coastguard Worker semanage_iface_t *iface;
171*2d543d20SAndroid Build Coastguard Worker semanage_iface_key_t *key = NULL;
172*2d543d20SAndroid Build Coastguard Worker
173*2d543d20SAndroid Build Coastguard Worker iface = get_iface_nth(idx);
174*2d543d20SAndroid Build Coastguard Worker
175*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_FATAL(semanage_iface_key_extract(sh, iface, &key) >= 0);
176*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL_FATAL(key);
177*2d543d20SAndroid Build Coastguard Worker
178*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_FATAL(semanage_iface_modify_local(sh, key, iface) >= 0);
179*2d543d20SAndroid Build Coastguard Worker
180*2d543d20SAndroid Build Coastguard Worker /* cleanup */
181*2d543d20SAndroid Build Coastguard Worker semanage_iface_key_free(key);
182*2d543d20SAndroid Build Coastguard Worker semanage_iface_free(iface);
183*2d543d20SAndroid Build Coastguard Worker }
184*2d543d20SAndroid Build Coastguard Worker
delete_local_iface(int idx)185*2d543d20SAndroid Build Coastguard Worker static void delete_local_iface(int idx)
186*2d543d20SAndroid Build Coastguard Worker {
187*2d543d20SAndroid Build Coastguard Worker semanage_iface_key_t *key = NULL;
188*2d543d20SAndroid Build Coastguard Worker key = get_iface_key_nth(idx);
189*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_FATAL(semanage_iface_del_local(sh, key) >= 0);
190*2d543d20SAndroid Build Coastguard Worker
191*2d543d20SAndroid Build Coastguard Worker /* cleanup */
192*2d543d20SAndroid Build Coastguard Worker semanage_iface_key_free(key);
193*2d543d20SAndroid Build Coastguard Worker }
194*2d543d20SAndroid Build Coastguard Worker
195*2d543d20SAndroid Build Coastguard Worker /* Function semanage_iface_compare */
test_iface_compare(void)196*2d543d20SAndroid Build Coastguard Worker static void test_iface_compare(void)
197*2d543d20SAndroid Build Coastguard Worker {
198*2d543d20SAndroid Build Coastguard Worker semanage_iface_t *iface = NULL;
199*2d543d20SAndroid Build Coastguard Worker semanage_iface_key_t *key1 = NULL;
200*2d543d20SAndroid Build Coastguard Worker semanage_iface_key_t *key2 = NULL;
201*2d543d20SAndroid Build Coastguard Worker int res = 42;
202*2d543d20SAndroid Build Coastguard Worker
203*2d543d20SAndroid Build Coastguard Worker /* setup */
204*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
205*2d543d20SAndroid Build Coastguard Worker iface = get_iface_nth(I_FIRST);
206*2d543d20SAndroid Build Coastguard Worker key1 = get_iface_key_nth(I_FIRST);
207*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_key_create(sh, "qwerty", &key2) >= 0);
208*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL(key2);
209*2d543d20SAndroid Build Coastguard Worker
210*2d543d20SAndroid Build Coastguard Worker /* test */
211*2d543d20SAndroid Build Coastguard Worker res = semanage_iface_compare(iface, key1);
212*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(res == 0);
213*2d543d20SAndroid Build Coastguard Worker res = semanage_iface_compare(iface, key2);
214*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(res != 0);
215*2d543d20SAndroid Build Coastguard Worker
216*2d543d20SAndroid Build Coastguard Worker /* cleanup */
217*2d543d20SAndroid Build Coastguard Worker semanage_iface_free(iface);
218*2d543d20SAndroid Build Coastguard Worker semanage_iface_key_free(key1);
219*2d543d20SAndroid Build Coastguard Worker semanage_iface_key_free(key2);
220*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
221*2d543d20SAndroid Build Coastguard Worker }
222*2d543d20SAndroid Build Coastguard Worker
223*2d543d20SAndroid Build Coastguard Worker /* Function semanage_iface_compare2 */
test_iface_compare2(void)224*2d543d20SAndroid Build Coastguard Worker static void test_iface_compare2(void)
225*2d543d20SAndroid Build Coastguard Worker {
226*2d543d20SAndroid Build Coastguard Worker semanage_iface_t *iface1 = NULL;
227*2d543d20SAndroid Build Coastguard Worker semanage_iface_t *iface2 = NULL;
228*2d543d20SAndroid Build Coastguard Worker semanage_iface_t *iface3 = NULL;
229*2d543d20SAndroid Build Coastguard Worker int res = 42;
230*2d543d20SAndroid Build Coastguard Worker
231*2d543d20SAndroid Build Coastguard Worker /* setup */
232*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
233*2d543d20SAndroid Build Coastguard Worker iface1 = get_iface_nth(I_FIRST);
234*2d543d20SAndroid Build Coastguard Worker iface2 = get_iface_nth(I_FIRST);
235*2d543d20SAndroid Build Coastguard Worker iface3 = get_iface_nth(I_SECOND);
236*2d543d20SAndroid Build Coastguard Worker
237*2d543d20SAndroid Build Coastguard Worker /* test */
238*2d543d20SAndroid Build Coastguard Worker res = semanage_iface_compare2(iface1, iface2);
239*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(res == 0);
240*2d543d20SAndroid Build Coastguard Worker res = semanage_iface_compare2(iface1, iface3);
241*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(res != 0);
242*2d543d20SAndroid Build Coastguard Worker
243*2d543d20SAndroid Build Coastguard Worker /* cleanup */
244*2d543d20SAndroid Build Coastguard Worker semanage_iface_free(iface1);
245*2d543d20SAndroid Build Coastguard Worker semanage_iface_free(iface2);
246*2d543d20SAndroid Build Coastguard Worker semanage_iface_free(iface3);
247*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
248*2d543d20SAndroid Build Coastguard Worker }
249*2d543d20SAndroid Build Coastguard Worker
250*2d543d20SAndroid Build Coastguard Worker /* Function semanage_iface_create */
test_iface_key_create(void)251*2d543d20SAndroid Build Coastguard Worker static void test_iface_key_create(void)
252*2d543d20SAndroid Build Coastguard Worker {
253*2d543d20SAndroid Build Coastguard Worker semanage_iface_key_t *key = NULL;
254*2d543d20SAndroid Build Coastguard Worker
255*2d543d20SAndroid Build Coastguard Worker /* setup */
256*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
257*2d543d20SAndroid Build Coastguard Worker
258*2d543d20SAndroid Build Coastguard Worker /* test */
259*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_key_create(sh, "asdf", &key) >= 0);
260*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL(key);
261*2d543d20SAndroid Build Coastguard Worker
262*2d543d20SAndroid Build Coastguard Worker /* cleanup */
263*2d543d20SAndroid Build Coastguard Worker semanage_iface_key_free(key);
264*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
265*2d543d20SAndroid Build Coastguard Worker }
266*2d543d20SAndroid Build Coastguard Worker
267*2d543d20SAndroid Build Coastguard Worker /* Function semanage_iface_extract */
test_iface_key_extract(void)268*2d543d20SAndroid Build Coastguard Worker static void test_iface_key_extract(void)
269*2d543d20SAndroid Build Coastguard Worker {
270*2d543d20SAndroid Build Coastguard Worker semanage_iface_t *iface = NULL;
271*2d543d20SAndroid Build Coastguard Worker semanage_iface_key_t *key = NULL;
272*2d543d20SAndroid Build Coastguard Worker
273*2d543d20SAndroid Build Coastguard Worker /* setup */
274*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
275*2d543d20SAndroid Build Coastguard Worker iface = get_iface_nth(I_FIRST);
276*2d543d20SAndroid Build Coastguard Worker
277*2d543d20SAndroid Build Coastguard Worker /* test */
278*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_key_extract(sh, iface, &key) >= 0);
279*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL(key);
280*2d543d20SAndroid Build Coastguard Worker
281*2d543d20SAndroid Build Coastguard Worker /* cleanup */
282*2d543d20SAndroid Build Coastguard Worker semanage_iface_free(iface);
283*2d543d20SAndroid Build Coastguard Worker semanage_iface_key_free(key);
284*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
285*2d543d20SAndroid Build Coastguard Worker }
286*2d543d20SAndroid Build Coastguard Worker
287*2d543d20SAndroid Build Coastguard Worker /* Function semanage_iface_get_name, semanage_iface_set_name */
test_iface_get_set_name(void)288*2d543d20SAndroid Build Coastguard Worker static void test_iface_get_set_name(void)
289*2d543d20SAndroid Build Coastguard Worker {
290*2d543d20SAndroid Build Coastguard Worker semanage_iface_t *iface = NULL;
291*2d543d20SAndroid Build Coastguard Worker
292*2d543d20SAndroid Build Coastguard Worker /* setup */
293*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
294*2d543d20SAndroid Build Coastguard Worker iface = get_iface_nth(I_FIRST);
295*2d543d20SAndroid Build Coastguard Worker
296*2d543d20SAndroid Build Coastguard Worker /* test */
297*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_set_name(sh, iface, "my_asdf") == 0);
298*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(semanage_iface_get_name(iface), "my_asdf");
299*2d543d20SAndroid Build Coastguard Worker
300*2d543d20SAndroid Build Coastguard Worker /* cleanup */
301*2d543d20SAndroid Build Coastguard Worker semanage_iface_free(iface);
302*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
303*2d543d20SAndroid Build Coastguard Worker }
304*2d543d20SAndroid Build Coastguard Worker
305*2d543d20SAndroid Build Coastguard Worker /* Function semanage_iface_get_ifcon, semanage_iface_set_ifcon */
test_iface_get_set_ifcon(void)306*2d543d20SAndroid Build Coastguard Worker static void test_iface_get_set_ifcon(void)
307*2d543d20SAndroid Build Coastguard Worker {
308*2d543d20SAndroid Build Coastguard Worker semanage_iface_t *iface = NULL;
309*2d543d20SAndroid Build Coastguard Worker semanage_context_t *con1 = NULL;
310*2d543d20SAndroid Build Coastguard Worker semanage_context_t *con2 = NULL;
311*2d543d20SAndroid Build Coastguard Worker
312*2d543d20SAndroid Build Coastguard Worker /* setup */
313*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
314*2d543d20SAndroid Build Coastguard Worker iface = get_iface_nth(I_FIRST);
315*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_context_from_string(sh,
316*2d543d20SAndroid Build Coastguard Worker "my_user_u:my_role_r:my_type_t:s0", &con1) >= 0);
317*2d543d20SAndroid Build Coastguard Worker
318*2d543d20SAndroid Build Coastguard Worker /* test */
319*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_set_ifcon(sh, iface, con1) == 0);
320*2d543d20SAndroid Build Coastguard Worker con2 = semanage_iface_get_ifcon(iface);
321*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_CONTEXT_EQUAL(con1, con2);
322*2d543d20SAndroid Build Coastguard Worker
323*2d543d20SAndroid Build Coastguard Worker /* cleanup */
324*2d543d20SAndroid Build Coastguard Worker semanage_context_free(con1);
325*2d543d20SAndroid Build Coastguard Worker semanage_iface_free(iface);
326*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
327*2d543d20SAndroid Build Coastguard Worker }
328*2d543d20SAndroid Build Coastguard Worker
329*2d543d20SAndroid Build Coastguard Worker /* Function semanage_iface_get_msgcon, semanage_iface_set_msgcon */
test_iface_get_set_msgcon(void)330*2d543d20SAndroid Build Coastguard Worker static void test_iface_get_set_msgcon(void)
331*2d543d20SAndroid Build Coastguard Worker {
332*2d543d20SAndroid Build Coastguard Worker semanage_iface_t *iface = NULL;
333*2d543d20SAndroid Build Coastguard Worker semanage_context_t *con1 = NULL;
334*2d543d20SAndroid Build Coastguard Worker semanage_context_t *con2 = NULL;
335*2d543d20SAndroid Build Coastguard Worker
336*2d543d20SAndroid Build Coastguard Worker /* setup */
337*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
338*2d543d20SAndroid Build Coastguard Worker iface = get_iface_nth(I_FIRST);
339*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_context_from_string(sh,
340*2d543d20SAndroid Build Coastguard Worker "my_user_u:my_role_r:my_type_t:s0", &con1) >= 0);
341*2d543d20SAndroid Build Coastguard Worker
342*2d543d20SAndroid Build Coastguard Worker /* test */
343*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_set_msgcon(sh, iface, con1) == 0);
344*2d543d20SAndroid Build Coastguard Worker con2 = semanage_iface_get_msgcon(iface);
345*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_CONTEXT_EQUAL(con1, con2);
346*2d543d20SAndroid Build Coastguard Worker
347*2d543d20SAndroid Build Coastguard Worker /* cleanup */
348*2d543d20SAndroid Build Coastguard Worker semanage_context_free(con1);
349*2d543d20SAndroid Build Coastguard Worker semanage_iface_free(iface);
350*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
351*2d543d20SAndroid Build Coastguard Worker }
352*2d543d20SAndroid Build Coastguard Worker
353*2d543d20SAndroid Build Coastguard Worker /* Function semanage_iface_create */
test_iface_create(void)354*2d543d20SAndroid Build Coastguard Worker static void test_iface_create(void)
355*2d543d20SAndroid Build Coastguard Worker {
356*2d543d20SAndroid Build Coastguard Worker semanage_iface_t *iface = NULL;
357*2d543d20SAndroid Build Coastguard Worker semanage_context_t *ifcon = NULL;
358*2d543d20SAndroid Build Coastguard Worker semanage_context_t *msgcon = NULL;
359*2d543d20SAndroid Build Coastguard Worker
360*2d543d20SAndroid Build Coastguard Worker /* setup */
361*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
362*2d543d20SAndroid Build Coastguard Worker
363*2d543d20SAndroid Build Coastguard Worker /* test */
364*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_create(sh, &iface) >= 0);
365*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_set_name(sh, iface, "asdf") >= 0);
366*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_context_from_string(sh, "user_u:role_r:type_t:s0",
367*2d543d20SAndroid Build Coastguard Worker &ifcon) >= 0);
368*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_set_ifcon(sh, iface, ifcon) >= 0);
369*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_context_from_string(sh, "user_u:role_r:type_t:s0",
370*2d543d20SAndroid Build Coastguard Worker &msgcon) >= 0);
371*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_set_msgcon(sh, iface, msgcon) >= 0);
372*2d543d20SAndroid Build Coastguard Worker
373*2d543d20SAndroid Build Coastguard Worker /* cleanup */
374*2d543d20SAndroid Build Coastguard Worker semanage_context_free(msgcon);
375*2d543d20SAndroid Build Coastguard Worker semanage_context_free(ifcon);
376*2d543d20SAndroid Build Coastguard Worker semanage_iface_free(iface);
377*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
378*2d543d20SAndroid Build Coastguard Worker }
379*2d543d20SAndroid Build Coastguard Worker
380*2d543d20SAndroid Build Coastguard Worker /* Function semanage_iface_clone */
test_iface_clone(void)381*2d543d20SAndroid Build Coastguard Worker static void test_iface_clone(void)
382*2d543d20SAndroid Build Coastguard Worker {
383*2d543d20SAndroid Build Coastguard Worker semanage_iface_t *iface = NULL;
384*2d543d20SAndroid Build Coastguard Worker semanage_iface_t *iface_clone = NULL;
385*2d543d20SAndroid Build Coastguard Worker semanage_context_t *ifcon = NULL;
386*2d543d20SAndroid Build Coastguard Worker semanage_context_t *ifcon2 = NULL;
387*2d543d20SAndroid Build Coastguard Worker semanage_context_t *msgcon = NULL;
388*2d543d20SAndroid Build Coastguard Worker semanage_context_t *msgcon2 = NULL;
389*2d543d20SAndroid Build Coastguard Worker
390*2d543d20SAndroid Build Coastguard Worker /* setup */
391*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
392*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_create(sh, &iface) >= 0);
393*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_set_name(sh, iface, "asdf") >= 0);
394*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_context_from_string(sh, "user_u:role_r:if_type_t:s0",
395*2d543d20SAndroid Build Coastguard Worker &ifcon) >= 0);
396*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_set_ifcon(sh, iface, ifcon) >= 0);
397*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_context_from_string(sh, "user_u:role_r:msg_type_t:s0",
398*2d543d20SAndroid Build Coastguard Worker &msgcon) >= 0);
399*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_set_msgcon(sh, iface, msgcon) >= 0);
400*2d543d20SAndroid Build Coastguard Worker
401*2d543d20SAndroid Build Coastguard Worker /* test */
402*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_clone(sh, iface, &iface_clone) >= 0);
403*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(semanage_iface_get_name(iface_clone), "asdf");
404*2d543d20SAndroid Build Coastguard Worker
405*2d543d20SAndroid Build Coastguard Worker ifcon2 = semanage_iface_get_ifcon(iface_clone);
406*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_CONTEXT_EQUAL(ifcon, ifcon2);
407*2d543d20SAndroid Build Coastguard Worker
408*2d543d20SAndroid Build Coastguard Worker msgcon2 = semanage_iface_get_msgcon(iface_clone);
409*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_CONTEXT_EQUAL(msgcon, msgcon2);
410*2d543d20SAndroid Build Coastguard Worker
411*2d543d20SAndroid Build Coastguard Worker /* cleanup */
412*2d543d20SAndroid Build Coastguard Worker semanage_context_free(msgcon);
413*2d543d20SAndroid Build Coastguard Worker semanage_context_free(ifcon);
414*2d543d20SAndroid Build Coastguard Worker semanage_iface_free(iface);
415*2d543d20SAndroid Build Coastguard Worker semanage_iface_free(iface_clone);
416*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
417*2d543d20SAndroid Build Coastguard Worker }
418*2d543d20SAndroid Build Coastguard Worker
419*2d543d20SAndroid Build Coastguard Worker /* Function semanage_iface_query */
test_iface_query(void)420*2d543d20SAndroid Build Coastguard Worker static void test_iface_query(void)
421*2d543d20SAndroid Build Coastguard Worker {
422*2d543d20SAndroid Build Coastguard Worker semanage_iface_t *iface = NULL;
423*2d543d20SAndroid Build Coastguard Worker semanage_iface_t *iface_exp = NULL;
424*2d543d20SAndroid Build Coastguard Worker semanage_iface_key_t *key = NULL;
425*2d543d20SAndroid Build Coastguard Worker semanage_context_t *con = NULL;
426*2d543d20SAndroid Build Coastguard Worker semanage_context_t *con_exp = NULL;
427*2d543d20SAndroid Build Coastguard Worker
428*2d543d20SAndroid Build Coastguard Worker /* setup */
429*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
430*2d543d20SAndroid Build Coastguard Worker key = get_iface_key_nth(I_FIRST);
431*2d543d20SAndroid Build Coastguard Worker iface_exp = get_iface_nth(I_FIRST);
432*2d543d20SAndroid Build Coastguard Worker
433*2d543d20SAndroid Build Coastguard Worker /* test */
434*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_query(sh, key, &iface) >= 0);
435*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(semanage_iface_get_name(iface),
436*2d543d20SAndroid Build Coastguard Worker semanage_iface_get_name(iface_exp));
437*2d543d20SAndroid Build Coastguard Worker
438*2d543d20SAndroid Build Coastguard Worker con = semanage_iface_get_ifcon(iface);
439*2d543d20SAndroid Build Coastguard Worker con_exp = semanage_iface_get_ifcon(iface_exp);
440*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_CONTEXT_EQUAL(con, con_exp);
441*2d543d20SAndroid Build Coastguard Worker
442*2d543d20SAndroid Build Coastguard Worker con = semanage_iface_get_msgcon(iface);
443*2d543d20SAndroid Build Coastguard Worker con_exp = semanage_iface_get_msgcon(iface_exp);
444*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_CONTEXT_EQUAL(con, con_exp);
445*2d543d20SAndroid Build Coastguard Worker
446*2d543d20SAndroid Build Coastguard Worker /* cleanup */
447*2d543d20SAndroid Build Coastguard Worker semanage_iface_key_free(key);
448*2d543d20SAndroid Build Coastguard Worker semanage_iface_free(iface);
449*2d543d20SAndroid Build Coastguard Worker semanage_iface_free(iface_exp);
450*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
451*2d543d20SAndroid Build Coastguard Worker }
452*2d543d20SAndroid Build Coastguard Worker
453*2d543d20SAndroid Build Coastguard Worker /* Function semanage_iface_exists */
test_iface_exists(void)454*2d543d20SAndroid Build Coastguard Worker static void test_iface_exists(void)
455*2d543d20SAndroid Build Coastguard Worker {
456*2d543d20SAndroid Build Coastguard Worker semanage_iface_key_t *key1 = NULL;
457*2d543d20SAndroid Build Coastguard Worker semanage_iface_key_t *key2 = NULL;
458*2d543d20SAndroid Build Coastguard Worker int resp = 42;
459*2d543d20SAndroid Build Coastguard Worker
460*2d543d20SAndroid Build Coastguard Worker /* setup */
461*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
462*2d543d20SAndroid Build Coastguard Worker key1 = get_iface_key_nth(I_FIRST);
463*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_key_create(sh, "asdf", &key2) >= 0);
464*2d543d20SAndroid Build Coastguard Worker
465*2d543d20SAndroid Build Coastguard Worker /* test */
466*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_exists(sh, key1, &resp) >= 0);
467*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(resp);
468*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_exists(sh, key2, &resp) >= 0);
469*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(!resp);
470*2d543d20SAndroid Build Coastguard Worker
471*2d543d20SAndroid Build Coastguard Worker /* cleanup */
472*2d543d20SAndroid Build Coastguard Worker semanage_iface_key_free(key1);
473*2d543d20SAndroid Build Coastguard Worker semanage_iface_key_free(key2);
474*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
475*2d543d20SAndroid Build Coastguard Worker }
476*2d543d20SAndroid Build Coastguard Worker
477*2d543d20SAndroid Build Coastguard Worker /* Function semanage_iface_count */
test_iface_count(void)478*2d543d20SAndroid Build Coastguard Worker static void test_iface_count(void)
479*2d543d20SAndroid Build Coastguard Worker {
480*2d543d20SAndroid Build Coastguard Worker unsigned int count = 42;
481*2d543d20SAndroid Build Coastguard Worker
482*2d543d20SAndroid Build Coastguard Worker /* setup */
483*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
484*2d543d20SAndroid Build Coastguard Worker
485*2d543d20SAndroid Build Coastguard Worker /* test */
486*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_count(sh, &count) >= 0);
487*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(count == IFACE_COUNT);
488*2d543d20SAndroid Build Coastguard Worker
489*2d543d20SAndroid Build Coastguard Worker /* cleanup */
490*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
491*2d543d20SAndroid Build Coastguard Worker }
492*2d543d20SAndroid Build Coastguard Worker
493*2d543d20SAndroid Build Coastguard Worker /* Function semanage_iface_iterate */
494*2d543d20SAndroid Build Coastguard Worker
495*2d543d20SAndroid Build Coastguard Worker unsigned int counter_iface_iterate = 0;
496*2d543d20SAndroid Build Coastguard Worker
handler_iface_iterate(const semanage_iface_t * record,void * varg)497*2d543d20SAndroid Build Coastguard Worker static int handler_iface_iterate(const semanage_iface_t *record, void *varg)
498*2d543d20SAndroid Build Coastguard Worker {
499*2d543d20SAndroid Build Coastguard Worker counter_iface_iterate++;
500*2d543d20SAndroid Build Coastguard Worker return 0;
501*2d543d20SAndroid Build Coastguard Worker }
502*2d543d20SAndroid Build Coastguard Worker
test_iface_iterate(void)503*2d543d20SAndroid Build Coastguard Worker static void test_iface_iterate(void)
504*2d543d20SAndroid Build Coastguard Worker {
505*2d543d20SAndroid Build Coastguard Worker /* setup */
506*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
507*2d543d20SAndroid Build Coastguard Worker
508*2d543d20SAndroid Build Coastguard Worker /* test */
509*2d543d20SAndroid Build Coastguard Worker semanage_iface_iterate(sh, handler_iface_iterate, NULL);
510*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(counter_iface_iterate == IFACE_COUNT);
511*2d543d20SAndroid Build Coastguard Worker
512*2d543d20SAndroid Build Coastguard Worker /* cleanup */
513*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
514*2d543d20SAndroid Build Coastguard Worker }
515*2d543d20SAndroid Build Coastguard Worker
516*2d543d20SAndroid Build Coastguard Worker /* Function semanage_iface_list */
test_iface_list(void)517*2d543d20SAndroid Build Coastguard Worker static void test_iface_list(void)
518*2d543d20SAndroid Build Coastguard Worker {
519*2d543d20SAndroid Build Coastguard Worker semanage_iface_t **records = NULL;
520*2d543d20SAndroid Build Coastguard Worker unsigned int count = 42;
521*2d543d20SAndroid Build Coastguard Worker
522*2d543d20SAndroid Build Coastguard Worker /* setup */
523*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_CONNECT);
524*2d543d20SAndroid Build Coastguard Worker
525*2d543d20SAndroid Build Coastguard Worker /* test */
526*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_list(sh, &records, &count) >= 0);
527*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(count == IFACE_COUNT);
528*2d543d20SAndroid Build Coastguard Worker
529*2d543d20SAndroid Build Coastguard Worker for (unsigned int i = 0; i < count; i++)
530*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL(records[i]);
531*2d543d20SAndroid Build Coastguard Worker
532*2d543d20SAndroid Build Coastguard Worker for (unsigned int i = 0; i < count; i++)
533*2d543d20SAndroid Build Coastguard Worker semanage_iface_free(records[i]);
534*2d543d20SAndroid Build Coastguard Worker
535*2d543d20SAndroid Build Coastguard Worker free(records);
536*2d543d20SAndroid Build Coastguard Worker
537*2d543d20SAndroid Build Coastguard Worker /* cleanup */
538*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_CONNECT);
539*2d543d20SAndroid Build Coastguard Worker }
540*2d543d20SAndroid Build Coastguard Worker
541*2d543d20SAndroid Build Coastguard Worker /* Function semanage_iface_modify_local, semanage_iface_del_local,
542*2d543d20SAndroid Build Coastguard Worker * semanage_iface_query_local
543*2d543d20SAndroid Build Coastguard Worker */
test_iface_modify_del_query_local(void)544*2d543d20SAndroid Build Coastguard Worker static void test_iface_modify_del_query_local(void)
545*2d543d20SAndroid Build Coastguard Worker {
546*2d543d20SAndroid Build Coastguard Worker semanage_iface_t *iface;
547*2d543d20SAndroid Build Coastguard Worker semanage_iface_t *iface_local;
548*2d543d20SAndroid Build Coastguard Worker semanage_iface_key_t *key = NULL;
549*2d543d20SAndroid Build Coastguard Worker
550*2d543d20SAndroid Build Coastguard Worker /* setup */
551*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_TRANS);
552*2d543d20SAndroid Build Coastguard Worker iface = get_iface_nth(I_FIRST);
553*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_key_extract(sh, iface, &key) >= 0);
554*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL(key);
555*2d543d20SAndroid Build Coastguard Worker
556*2d543d20SAndroid Build Coastguard Worker /* test */
557*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_modify_local(sh, key, iface) >= 0);
558*2d543d20SAndroid Build Coastguard Worker
559*2d543d20SAndroid Build Coastguard Worker /* write changes to file */
560*2d543d20SAndroid Build Coastguard Worker helper_commit();
561*2d543d20SAndroid Build Coastguard Worker helper_begin_transaction();
562*2d543d20SAndroid Build Coastguard Worker
563*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_query_local(sh, key, &iface_local) >= 0);
564*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL_FATAL(iface_local);
565*2d543d20SAndroid Build Coastguard Worker semanage_iface_free(iface_local);
566*2d543d20SAndroid Build Coastguard Worker
567*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_del_local(sh, key) >= 0);
568*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_query_local(sh, key, &iface_local) < 0);
569*2d543d20SAndroid Build Coastguard Worker
570*2d543d20SAndroid Build Coastguard Worker /* cleanup */
571*2d543d20SAndroid Build Coastguard Worker semanage_iface_key_free(key);
572*2d543d20SAndroid Build Coastguard Worker semanage_iface_free(iface);
573*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_TRANS);
574*2d543d20SAndroid Build Coastguard Worker }
575*2d543d20SAndroid Build Coastguard Worker
576*2d543d20SAndroid Build Coastguard Worker /* Function semanage_iface_exists_local */
test_iface_exists_local(void)577*2d543d20SAndroid Build Coastguard Worker static void test_iface_exists_local(void)
578*2d543d20SAndroid Build Coastguard Worker {
579*2d543d20SAndroid Build Coastguard Worker semanage_iface_key_t *key1 = NULL;
580*2d543d20SAndroid Build Coastguard Worker semanage_iface_key_t *key2 = NULL;
581*2d543d20SAndroid Build Coastguard Worker int resp = 42;
582*2d543d20SAndroid Build Coastguard Worker
583*2d543d20SAndroid Build Coastguard Worker /* setup */
584*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_TRANS);
585*2d543d20SAndroid Build Coastguard Worker add_local_iface(I_FIRST);
586*2d543d20SAndroid Build Coastguard Worker key1 = get_iface_key_nth(I_FIRST);
587*2d543d20SAndroid Build Coastguard Worker key2 = get_iface_key_nth(I_SECOND);
588*2d543d20SAndroid Build Coastguard Worker
589*2d543d20SAndroid Build Coastguard Worker /* test */
590*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_exists_local(sh, key1, &resp) >= 0);
591*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(resp);
592*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_exists_local(sh, key2, &resp) >= 0);
593*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(!resp);
594*2d543d20SAndroid Build Coastguard Worker
595*2d543d20SAndroid Build Coastguard Worker /* cleanup */
596*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_del_local(sh, key1) >= 0);
597*2d543d20SAndroid Build Coastguard Worker semanage_iface_key_free(key1);
598*2d543d20SAndroid Build Coastguard Worker semanage_iface_key_free(key2);
599*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_TRANS);
600*2d543d20SAndroid Build Coastguard Worker }
601*2d543d20SAndroid Build Coastguard Worker
602*2d543d20SAndroid Build Coastguard Worker /* Function semanage_iface_count_local */
test_iface_count_local(void)603*2d543d20SAndroid Build Coastguard Worker static void test_iface_count_local(void)
604*2d543d20SAndroid Build Coastguard Worker {
605*2d543d20SAndroid Build Coastguard Worker unsigned int count = 42;
606*2d543d20SAndroid Build Coastguard Worker
607*2d543d20SAndroid Build Coastguard Worker /* setup */
608*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_TRANS);
609*2d543d20SAndroid Build Coastguard Worker
610*2d543d20SAndroid Build Coastguard Worker /* test */
611*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_count_local(sh, &count) >= 0);
612*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(count == 0);
613*2d543d20SAndroid Build Coastguard Worker
614*2d543d20SAndroid Build Coastguard Worker add_local_iface(I_FIRST);
615*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_count_local(sh, &count) >= 0);
616*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(count == 1);
617*2d543d20SAndroid Build Coastguard Worker
618*2d543d20SAndroid Build Coastguard Worker add_local_iface(I_SECOND);
619*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_count_local(sh, &count) >= 0);
620*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(count == 2);
621*2d543d20SAndroid Build Coastguard Worker
622*2d543d20SAndroid Build Coastguard Worker delete_local_iface(I_SECOND);
623*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_count_local(sh, &count) >= 0);
624*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(count == 1);
625*2d543d20SAndroid Build Coastguard Worker
626*2d543d20SAndroid Build Coastguard Worker delete_local_iface(I_FIRST);
627*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_count_local(sh, &count) >= 0);
628*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(count == 0);
629*2d543d20SAndroid Build Coastguard Worker
630*2d543d20SAndroid Build Coastguard Worker /* cleanup */
631*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_TRANS);
632*2d543d20SAndroid Build Coastguard Worker }
633*2d543d20SAndroid Build Coastguard Worker
634*2d543d20SAndroid Build Coastguard Worker /* Function semanage_iface_iterate_local */
635*2d543d20SAndroid Build Coastguard Worker unsigned int counter_iface_iterate_local = 0;
636*2d543d20SAndroid Build Coastguard Worker
handler_iface_iterate_local(const semanage_iface_t * record,void * varg)637*2d543d20SAndroid Build Coastguard Worker static int handler_iface_iterate_local(const semanage_iface_t *record, void *varg)
638*2d543d20SAndroid Build Coastguard Worker {
639*2d543d20SAndroid Build Coastguard Worker counter_iface_iterate_local++;
640*2d543d20SAndroid Build Coastguard Worker return 0;
641*2d543d20SAndroid Build Coastguard Worker }
642*2d543d20SAndroid Build Coastguard Worker
test_iface_iterate_local(void)643*2d543d20SAndroid Build Coastguard Worker static void test_iface_iterate_local(void)
644*2d543d20SAndroid Build Coastguard Worker {
645*2d543d20SAndroid Build Coastguard Worker /* setup */
646*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_TRANS);
647*2d543d20SAndroid Build Coastguard Worker add_local_iface(I_FIRST);
648*2d543d20SAndroid Build Coastguard Worker add_local_iface(I_SECOND);
649*2d543d20SAndroid Build Coastguard Worker add_local_iface(I_THIRD);
650*2d543d20SAndroid Build Coastguard Worker
651*2d543d20SAndroid Build Coastguard Worker /* test */
652*2d543d20SAndroid Build Coastguard Worker semanage_iface_iterate_local(sh, handler_iface_iterate_local, NULL);
653*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(counter_iface_iterate_local == 3);
654*2d543d20SAndroid Build Coastguard Worker
655*2d543d20SAndroid Build Coastguard Worker /* cleanup */
656*2d543d20SAndroid Build Coastguard Worker delete_local_iface(I_FIRST);
657*2d543d20SAndroid Build Coastguard Worker delete_local_iface(I_SECOND);
658*2d543d20SAndroid Build Coastguard Worker delete_local_iface(I_THIRD);
659*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_TRANS);
660*2d543d20SAndroid Build Coastguard Worker }
661*2d543d20SAndroid Build Coastguard Worker
662*2d543d20SAndroid Build Coastguard Worker /* Function semanage_iface_list_local */
test_iface_list_local(void)663*2d543d20SAndroid Build Coastguard Worker static void test_iface_list_local(void)
664*2d543d20SAndroid Build Coastguard Worker {
665*2d543d20SAndroid Build Coastguard Worker semanage_iface_t **records = NULL;
666*2d543d20SAndroid Build Coastguard Worker unsigned int count = 42;
667*2d543d20SAndroid Build Coastguard Worker
668*2d543d20SAndroid Build Coastguard Worker /* setup */
669*2d543d20SAndroid Build Coastguard Worker setup_handle(SH_TRANS);
670*2d543d20SAndroid Build Coastguard Worker add_local_iface(I_FIRST);
671*2d543d20SAndroid Build Coastguard Worker add_local_iface(I_SECOND);
672*2d543d20SAndroid Build Coastguard Worker add_local_iface(I_THIRD);
673*2d543d20SAndroid Build Coastguard Worker
674*2d543d20SAndroid Build Coastguard Worker /* test */
675*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(semanage_iface_list_local(sh, &records, &count) >= 0);
676*2d543d20SAndroid Build Coastguard Worker CU_ASSERT(count == 3);
677*2d543d20SAndroid Build Coastguard Worker
678*2d543d20SAndroid Build Coastguard Worker for (unsigned int i = 0; i < count; i++)
679*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL(records[i]);
680*2d543d20SAndroid Build Coastguard Worker
681*2d543d20SAndroid Build Coastguard Worker /* cleanup */
682*2d543d20SAndroid Build Coastguard Worker for (unsigned int i = 0; i < count; i++)
683*2d543d20SAndroid Build Coastguard Worker semanage_iface_free(records[i]);
684*2d543d20SAndroid Build Coastguard Worker free(records);
685*2d543d20SAndroid Build Coastguard Worker
686*2d543d20SAndroid Build Coastguard Worker delete_local_iface(I_FIRST);
687*2d543d20SAndroid Build Coastguard Worker delete_local_iface(I_SECOND);
688*2d543d20SAndroid Build Coastguard Worker delete_local_iface(I_THIRD);
689*2d543d20SAndroid Build Coastguard Worker cleanup_handle(SH_TRANS);
690*2d543d20SAndroid Build Coastguard Worker }
691