1*2d543d20SAndroid Build Coastguard Worker /* Authors: Mark Goldman <[email protected]>
2*2d543d20SAndroid Build Coastguard Worker *
3*2d543d20SAndroid Build Coastguard Worker * Copyright (C) 2007 Tresys Technology, LLC
4*2d543d20SAndroid Build Coastguard Worker *
5*2d543d20SAndroid Build Coastguard Worker * This library is free software; you can redistribute it and/or
6*2d543d20SAndroid Build Coastguard Worker * modify it under the terms of the GNU Lesser General Public
7*2d543d20SAndroid Build Coastguard Worker * License as published by the Free Software Foundation; either
8*2d543d20SAndroid Build Coastguard Worker * version 2.1 of the License, or (at your option) any later version.
9*2d543d20SAndroid Build Coastguard Worker *
10*2d543d20SAndroid Build Coastguard Worker * This library is distributed in the hope that it will be useful,
11*2d543d20SAndroid Build Coastguard Worker * but WITHOUT ANY WARRANTY; without even the implied warranty of
12*2d543d20SAndroid Build Coastguard Worker * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13*2d543d20SAndroid Build Coastguard Worker * Lesser General Public License for more details.
14*2d543d20SAndroid Build Coastguard Worker *
15*2d543d20SAndroid Build Coastguard Worker * You should have received a copy of the GNU Lesser General Public
16*2d543d20SAndroid Build Coastguard Worker * License along with this library; if not, write to the Free Software
17*2d543d20SAndroid Build Coastguard Worker * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18*2d543d20SAndroid Build Coastguard Worker */
19*2d543d20SAndroid Build Coastguard Worker
20*2d543d20SAndroid Build Coastguard Worker /* The purpose of this file is to provide unit tests of the functions in:
21*2d543d20SAndroid Build Coastguard Worker *
22*2d543d20SAndroid Build Coastguard Worker * libsemanage/src/utilities.c
23*2d543d20SAndroid Build Coastguard Worker *
24*2d543d20SAndroid Build Coastguard Worker */
25*2d543d20SAndroid Build Coastguard Worker
26*2d543d20SAndroid Build Coastguard Worker #include <CUnit/Basic.h>
27*2d543d20SAndroid Build Coastguard Worker #include <CUnit/Console.h>
28*2d543d20SAndroid Build Coastguard Worker #include <CUnit/TestDB.h>
29*2d543d20SAndroid Build Coastguard Worker
30*2d543d20SAndroid Build Coastguard Worker #include <utilities.h>
31*2d543d20SAndroid Build Coastguard Worker #include <stdio.h>
32*2d543d20SAndroid Build Coastguard Worker #include <getopt.h>
33*2d543d20SAndroid Build Coastguard Worker #include <stdlib.h>
34*2d543d20SAndroid Build Coastguard Worker #include <string.h>
35*2d543d20SAndroid Build Coastguard Worker #include <unistd.h>
36*2d543d20SAndroid Build Coastguard Worker
37*2d543d20SAndroid Build Coastguard Worker #include "utilities.h"
38*2d543d20SAndroid Build Coastguard Worker #include "test_utilities.h"
39*2d543d20SAndroid Build Coastguard Worker
40*2d543d20SAndroid Build Coastguard Worker static void test_semanage_is_prefix(void);
41*2d543d20SAndroid Build Coastguard Worker static void test_semanage_split_on_space(void);
42*2d543d20SAndroid Build Coastguard Worker static void test_semanage_split(void);
43*2d543d20SAndroid Build Coastguard Worker static void test_semanage_list(void);
44*2d543d20SAndroid Build Coastguard Worker static void test_semanage_str_count(void);
45*2d543d20SAndroid Build Coastguard Worker static void test_semanage_rtrim(void);
46*2d543d20SAndroid Build Coastguard Worker static void test_semanage_str_replace(void);
47*2d543d20SAndroid Build Coastguard Worker static void test_semanage_findval(void);
48*2d543d20SAndroid Build Coastguard Worker static void test_slurp_file_filter(void);
49*2d543d20SAndroid Build Coastguard Worker
50*2d543d20SAndroid Build Coastguard Worker char fname[] = {
51*2d543d20SAndroid Build Coastguard Worker 'T', 'E', 'S', 'T', '_', 'T', 'E', 'M', 'P', '_', 'X', 'X', 'X', 'X',
52*2d543d20SAndroid Build Coastguard Worker 'X', 'X', '\0'
53*2d543d20SAndroid Build Coastguard Worker };
54*2d543d20SAndroid Build Coastguard Worker int fd;
55*2d543d20SAndroid Build Coastguard Worker FILE *fptr;
56*2d543d20SAndroid Build Coastguard Worker
semanage_utilities_test_init(void)57*2d543d20SAndroid Build Coastguard Worker int semanage_utilities_test_init(void)
58*2d543d20SAndroid Build Coastguard Worker {
59*2d543d20SAndroid Build Coastguard Worker fd = mkstemp(fname);
60*2d543d20SAndroid Build Coastguard Worker
61*2d543d20SAndroid Build Coastguard Worker if (fd < 0) {
62*2d543d20SAndroid Build Coastguard Worker perror("test_semanage_findval: ");
63*2d543d20SAndroid Build Coastguard Worker CU_FAIL_FATAL
64*2d543d20SAndroid Build Coastguard Worker ("Error opening temporary file, test cannot start.");
65*2d543d20SAndroid Build Coastguard Worker }
66*2d543d20SAndroid Build Coastguard Worker
67*2d543d20SAndroid Build Coastguard Worker fptr = fdopen(fd, "w+");
68*2d543d20SAndroid Build Coastguard Worker if (!fptr) {
69*2d543d20SAndroid Build Coastguard Worker perror("test_semanage_findval file: ");
70*2d543d20SAndroid Build Coastguard Worker CU_FAIL_FATAL("Error opening file stream, test cannot start.");
71*2d543d20SAndroid Build Coastguard Worker }
72*2d543d20SAndroid Build Coastguard Worker
73*2d543d20SAndroid Build Coastguard Worker fprintf(fptr, "one\ntwo\nthree\nsigma=foo\n#boo\n#bar\n");
74*2d543d20SAndroid Build Coastguard Worker
75*2d543d20SAndroid Build Coastguard Worker rewind(fptr);
76*2d543d20SAndroid Build Coastguard Worker return 0;
77*2d543d20SAndroid Build Coastguard Worker }
78*2d543d20SAndroid Build Coastguard Worker
semanage_utilities_test_cleanup(void)79*2d543d20SAndroid Build Coastguard Worker int semanage_utilities_test_cleanup(void)
80*2d543d20SAndroid Build Coastguard Worker {
81*2d543d20SAndroid Build Coastguard Worker unlink(fname);
82*2d543d20SAndroid Build Coastguard Worker return 0;
83*2d543d20SAndroid Build Coastguard Worker }
84*2d543d20SAndroid Build Coastguard Worker
semanage_utilities_add_tests(CU_pSuite suite)85*2d543d20SAndroid Build Coastguard Worker int semanage_utilities_add_tests(CU_pSuite suite)
86*2d543d20SAndroid Build Coastguard Worker {
87*2d543d20SAndroid Build Coastguard Worker if (NULL == CU_add_test(suite, "semanage_is_prefix",
88*2d543d20SAndroid Build Coastguard Worker test_semanage_is_prefix)) {
89*2d543d20SAndroid Build Coastguard Worker goto err;
90*2d543d20SAndroid Build Coastguard Worker }
91*2d543d20SAndroid Build Coastguard Worker if (NULL == CU_add_test(suite, "semanage_split_on_space",
92*2d543d20SAndroid Build Coastguard Worker test_semanage_split_on_space)) {
93*2d543d20SAndroid Build Coastguard Worker goto err;
94*2d543d20SAndroid Build Coastguard Worker }
95*2d543d20SAndroid Build Coastguard Worker if (NULL == CU_add_test(suite, "semanage_split", test_semanage_split)) {
96*2d543d20SAndroid Build Coastguard Worker goto err;
97*2d543d20SAndroid Build Coastguard Worker }
98*2d543d20SAndroid Build Coastguard Worker if (NULL == CU_add_test(suite, "semanage_list", test_semanage_list)) {
99*2d543d20SAndroid Build Coastguard Worker goto err;
100*2d543d20SAndroid Build Coastguard Worker }
101*2d543d20SAndroid Build Coastguard Worker if (NULL == CU_add_test(suite, "semanage_str_count",
102*2d543d20SAndroid Build Coastguard Worker test_semanage_str_count)) {
103*2d543d20SAndroid Build Coastguard Worker goto err;
104*2d543d20SAndroid Build Coastguard Worker }
105*2d543d20SAndroid Build Coastguard Worker if (NULL == CU_add_test(suite, "semanage_rtrim", test_semanage_rtrim)) {
106*2d543d20SAndroid Build Coastguard Worker goto err;
107*2d543d20SAndroid Build Coastguard Worker }
108*2d543d20SAndroid Build Coastguard Worker if (NULL == CU_add_test(suite, "semanage_str_replace",
109*2d543d20SAndroid Build Coastguard Worker test_semanage_str_replace)) {
110*2d543d20SAndroid Build Coastguard Worker goto err;
111*2d543d20SAndroid Build Coastguard Worker }
112*2d543d20SAndroid Build Coastguard Worker if (NULL == CU_add_test(suite, "semanage_findval",
113*2d543d20SAndroid Build Coastguard Worker test_semanage_findval)) {
114*2d543d20SAndroid Build Coastguard Worker goto err;
115*2d543d20SAndroid Build Coastguard Worker }
116*2d543d20SAndroid Build Coastguard Worker if (NULL == CU_add_test(suite, "slurp_file_filter",
117*2d543d20SAndroid Build Coastguard Worker test_slurp_file_filter)) {
118*2d543d20SAndroid Build Coastguard Worker goto err;
119*2d543d20SAndroid Build Coastguard Worker }
120*2d543d20SAndroid Build Coastguard Worker return 0;
121*2d543d20SAndroid Build Coastguard Worker err:
122*2d543d20SAndroid Build Coastguard Worker CU_cleanup_registry();
123*2d543d20SAndroid Build Coastguard Worker return CU_get_error();
124*2d543d20SAndroid Build Coastguard Worker }
125*2d543d20SAndroid Build Coastguard Worker
test_semanage_is_prefix(void)126*2d543d20SAndroid Build Coastguard Worker static void test_semanage_is_prefix(void)
127*2d543d20SAndroid Build Coastguard Worker {
128*2d543d20SAndroid Build Coastguard Worker const char *str = "some string";
129*2d543d20SAndroid Build Coastguard Worker const char *pre = "some";
130*2d543d20SAndroid Build Coastguard Worker const char *not_pre = "not this";
131*2d543d20SAndroid Build Coastguard Worker
132*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_TRUE(semanage_is_prefix(str, pre));
133*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_TRUE(semanage_is_prefix(str, ""));
134*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_TRUE(semanage_is_prefix(str, NULL));
135*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_FALSE(semanage_is_prefix(str, not_pre));
136*2d543d20SAndroid Build Coastguard Worker }
137*2d543d20SAndroid Build Coastguard Worker
test_semanage_split_on_space(void)138*2d543d20SAndroid Build Coastguard Worker static void test_semanage_split_on_space(void)
139*2d543d20SAndroid Build Coastguard Worker {
140*2d543d20SAndroid Build Coastguard Worker char *str = strdup(" foo bar baz");
141*2d543d20SAndroid Build Coastguard Worker char *temp;
142*2d543d20SAndroid Build Coastguard Worker
143*2d543d20SAndroid Build Coastguard Worker if (!str) {
144*2d543d20SAndroid Build Coastguard Worker CU_FAIL
145*2d543d20SAndroid Build Coastguard Worker ("semanage_split_on_space: unable to perform test, no memory");
146*2d543d20SAndroid Build Coastguard Worker return;
147*2d543d20SAndroid Build Coastguard Worker }
148*2d543d20SAndroid Build Coastguard Worker temp = semanage_split_on_space(str);
149*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL_FATAL(temp);
150*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(temp, "bar baz");
151*2d543d20SAndroid Build Coastguard Worker free(str);
152*2d543d20SAndroid Build Coastguard Worker str = temp;
153*2d543d20SAndroid Build Coastguard Worker
154*2d543d20SAndroid Build Coastguard Worker temp = semanage_split_on_space(str);
155*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL_FATAL(temp);
156*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(temp, "baz");
157*2d543d20SAndroid Build Coastguard Worker free(str);
158*2d543d20SAndroid Build Coastguard Worker str = temp;
159*2d543d20SAndroid Build Coastguard Worker
160*2d543d20SAndroid Build Coastguard Worker temp = semanage_split_on_space(str);
161*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL_FATAL(temp);
162*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(temp, "");
163*2d543d20SAndroid Build Coastguard Worker free(str);
164*2d543d20SAndroid Build Coastguard Worker free(temp);
165*2d543d20SAndroid Build Coastguard Worker }
166*2d543d20SAndroid Build Coastguard Worker
test_semanage_split(void)167*2d543d20SAndroid Build Coastguard Worker static void test_semanage_split(void)
168*2d543d20SAndroid Build Coastguard Worker {
169*2d543d20SAndroid Build Coastguard Worker char *str = strdup("foo1 foo2 foo:bar:");
170*2d543d20SAndroid Build Coastguard Worker char *temp;
171*2d543d20SAndroid Build Coastguard Worker
172*2d543d20SAndroid Build Coastguard Worker if (!str) {
173*2d543d20SAndroid Build Coastguard Worker CU_FAIL
174*2d543d20SAndroid Build Coastguard Worker ("semanage_split_on_space: unable to perform test, no memory");
175*2d543d20SAndroid Build Coastguard Worker return;
176*2d543d20SAndroid Build Coastguard Worker }
177*2d543d20SAndroid Build Coastguard Worker temp = semanage_split(str, NULL);
178*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL_FATAL(temp);
179*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(temp, "foo2 foo:bar:");
180*2d543d20SAndroid Build Coastguard Worker free(str);
181*2d543d20SAndroid Build Coastguard Worker str = temp;
182*2d543d20SAndroid Build Coastguard Worker
183*2d543d20SAndroid Build Coastguard Worker temp = semanage_split(str, "");
184*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL_FATAL(temp);
185*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(temp, "foo:bar:");
186*2d543d20SAndroid Build Coastguard Worker free(str);
187*2d543d20SAndroid Build Coastguard Worker str = temp;
188*2d543d20SAndroid Build Coastguard Worker
189*2d543d20SAndroid Build Coastguard Worker temp = semanage_split(str, ":");
190*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL_FATAL(temp);
191*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(temp, "bar:");
192*2d543d20SAndroid Build Coastguard Worker free(str);
193*2d543d20SAndroid Build Coastguard Worker str = temp;
194*2d543d20SAndroid Build Coastguard Worker
195*2d543d20SAndroid Build Coastguard Worker temp = semanage_split(str, ":");
196*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL_FATAL(temp);
197*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(temp, "");
198*2d543d20SAndroid Build Coastguard Worker free(str);
199*2d543d20SAndroid Build Coastguard Worker free(temp);
200*2d543d20SAndroid Build Coastguard Worker }
201*2d543d20SAndroid Build Coastguard Worker
test_semanage_list(void)202*2d543d20SAndroid Build Coastguard Worker static void test_semanage_list(void)
203*2d543d20SAndroid Build Coastguard Worker {
204*2d543d20SAndroid Build Coastguard Worker semanage_list_t *list = NULL;
205*2d543d20SAndroid Build Coastguard Worker semanage_list_t *ptr = NULL;
206*2d543d20SAndroid Build Coastguard Worker char *temp = NULL;
207*2d543d20SAndroid Build Coastguard Worker int retval = 0;
208*2d543d20SAndroid Build Coastguard Worker
209*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_FALSE(semanage_list_push(&list, "foo"));
210*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL(list);
211*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_FALSE(semanage_list_push(&list, "bar"));
212*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_FALSE(semanage_list_push(&list, "gonk"));
213*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_FALSE(semanage_list_push(&list, "zebra"));
214*2d543d20SAndroid Build Coastguard Worker
215*2d543d20SAndroid Build Coastguard Worker for (ptr = list; ptr; ptr = ptr->next)
216*2d543d20SAndroid Build Coastguard Worker retval++;
217*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(retval, 4);
218*2d543d20SAndroid Build Coastguard Worker
219*2d543d20SAndroid Build Coastguard Worker temp = semanage_list_pop(&list);
220*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(temp, "zebra");
221*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_FALSE(semanage_list_push(&list, temp));
222*2d543d20SAndroid Build Coastguard Worker free(temp);
223*2d543d20SAndroid Build Coastguard Worker temp = NULL;
224*2d543d20SAndroid Build Coastguard Worker
225*2d543d20SAndroid Build Coastguard Worker retval = 0;
226*2d543d20SAndroid Build Coastguard Worker for (ptr = list; ptr; ptr = ptr->next)
227*2d543d20SAndroid Build Coastguard Worker retval++;
228*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(retval, 4);
229*2d543d20SAndroid Build Coastguard Worker
230*2d543d20SAndroid Build Coastguard Worker retval = semanage_list_sort(&list);
231*2d543d20SAndroid Build Coastguard Worker if (retval) {
232*2d543d20SAndroid Build Coastguard Worker CU_FAIL
233*2d543d20SAndroid Build Coastguard Worker ("semanage_list_sort: error unrelated to sort (memory?)");
234*2d543d20SAndroid Build Coastguard Worker goto past_sort;
235*2d543d20SAndroid Build Coastguard Worker }
236*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(list->data, "bar");
237*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(list->next->data, "foo");
238*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(list->next->next->data, "gonk");
239*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(list->next->next->next->data, "zebra");
240*2d543d20SAndroid Build Coastguard Worker
241*2d543d20SAndroid Build Coastguard Worker past_sort:
242*2d543d20SAndroid Build Coastguard Worker ptr = semanage_list_find(list, "zebra");
243*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL(ptr);
244*2d543d20SAndroid Build Coastguard Worker ptr = semanage_list_find(list, "bogus");
245*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NULL(ptr);
246*2d543d20SAndroid Build Coastguard Worker
247*2d543d20SAndroid Build Coastguard Worker semanage_list_destroy(&list);
248*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NULL(list);
249*2d543d20SAndroid Build Coastguard Worker }
250*2d543d20SAndroid Build Coastguard Worker
test_semanage_str_count(void)251*2d543d20SAndroid Build Coastguard Worker static void test_semanage_str_count(void)
252*2d543d20SAndroid Build Coastguard Worker {
253*2d543d20SAndroid Build Coastguard Worker const char *test_string = "abaababbaaaba";
254*2d543d20SAndroid Build Coastguard Worker
255*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(semanage_str_count(test_string, 'z'), 0);
256*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(semanage_str_count(test_string, 'a'), 8);
257*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(semanage_str_count(test_string, 'b'), 5);
258*2d543d20SAndroid Build Coastguard Worker }
259*2d543d20SAndroid Build Coastguard Worker
test_semanage_rtrim(void)260*2d543d20SAndroid Build Coastguard Worker static void test_semanage_rtrim(void)
261*2d543d20SAndroid Build Coastguard Worker {
262*2d543d20SAndroid Build Coastguard Worker char *str = strdup("/blah/foo/bar/baz/");
263*2d543d20SAndroid Build Coastguard Worker
264*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL_FATAL(str);
265*2d543d20SAndroid Build Coastguard Worker
266*2d543d20SAndroid Build Coastguard Worker semanage_rtrim(str, 'Q');
267*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(str, "/blah/foo/bar/baz/");
268*2d543d20SAndroid Build Coastguard Worker semanage_rtrim(str, 'a');
269*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(str, "/blah/foo/bar/b");
270*2d543d20SAndroid Build Coastguard Worker semanage_rtrim(str, '/');
271*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(str, "/blah/foo/bar");
272*2d543d20SAndroid Build Coastguard Worker
273*2d543d20SAndroid Build Coastguard Worker free(str);
274*2d543d20SAndroid Build Coastguard Worker }
275*2d543d20SAndroid Build Coastguard Worker
test_semanage_str_replace(void)276*2d543d20SAndroid Build Coastguard Worker static void test_semanage_str_replace(void)
277*2d543d20SAndroid Build Coastguard Worker {
278*2d543d20SAndroid Build Coastguard Worker const char *test_str = "Hello, I am %{USERNAME} and my id is %{USERID}";
279*2d543d20SAndroid Build Coastguard Worker char *str1, *str2;
280*2d543d20SAndroid Build Coastguard Worker
281*2d543d20SAndroid Build Coastguard Worker str1 = semanage_str_replace("%{USERNAME}", "root", test_str, 0);
282*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(str1, "Hello, I am root and my id is %{USERID}");
283*2d543d20SAndroid Build Coastguard Worker
284*2d543d20SAndroid Build Coastguard Worker str2 = semanage_str_replace("%{USERID}", "0", str1, 1);
285*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(str2, "Hello, I am root and my id is 0");
286*2d543d20SAndroid Build Coastguard Worker free(str1);
287*2d543d20SAndroid Build Coastguard Worker free(str2);
288*2d543d20SAndroid Build Coastguard Worker
289*2d543d20SAndroid Build Coastguard Worker str1 = semanage_str_replace(":(", ";)", "Test :( :) ! :(:(:))(:(", 0);
290*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(str1, "Test ;) :) ! ;);):))(;)");
291*2d543d20SAndroid Build Coastguard Worker free(str1);
292*2d543d20SAndroid Build Coastguard Worker
293*2d543d20SAndroid Build Coastguard Worker str1 = semanage_str_replace(":(", ";)", "Test :( :) ! :(:(:))(:(", 3);
294*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(str1, "Test ;) :) ! ;);):))(:(");
295*2d543d20SAndroid Build Coastguard Worker free(str1);
296*2d543d20SAndroid Build Coastguard Worker
297*2d543d20SAndroid Build Coastguard Worker str1 = semanage_str_replace("", "empty search string", "test", 0);
298*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(str1, NULL);
299*2d543d20SAndroid Build Coastguard Worker
300*2d543d20SAndroid Build Coastguard Worker str1 = semanage_str_replace("a", "", "abracadabra", 0);
301*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(str1, "brcdbr");
302*2d543d20SAndroid Build Coastguard Worker free(str1);
303*2d543d20SAndroid Build Coastguard Worker }
304*2d543d20SAndroid Build Coastguard Worker
test_semanage_findval(void)305*2d543d20SAndroid Build Coastguard Worker static void test_semanage_findval(void)
306*2d543d20SAndroid Build Coastguard Worker {
307*2d543d20SAndroid Build Coastguard Worker char *tok;
308*2d543d20SAndroid Build Coastguard Worker if (!fptr) {
309*2d543d20SAndroid Build Coastguard Worker CU_FAIL_FATAL("Temporary file was not created, aborting test.");
310*2d543d20SAndroid Build Coastguard Worker }
311*2d543d20SAndroid Build Coastguard Worker tok = semanage_findval(fname, "one", NULL);
312*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL_FATAL(tok);
313*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(tok, "");
314*2d543d20SAndroid Build Coastguard Worker free(tok);
315*2d543d20SAndroid Build Coastguard Worker rewind(fptr);
316*2d543d20SAndroid Build Coastguard Worker tok = semanage_findval(fname, "one", "");
317*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL_FATAL(tok);
318*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(tok, "");
319*2d543d20SAndroid Build Coastguard Worker free(tok);
320*2d543d20SAndroid Build Coastguard Worker rewind(fptr);
321*2d543d20SAndroid Build Coastguard Worker tok = semanage_findval(fname, "sigma", "=");
322*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL_FATAL(tok);
323*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_STRING_EQUAL(tok, "foo");
324*2d543d20SAndroid Build Coastguard Worker free(tok);
325*2d543d20SAndroid Build Coastguard Worker }
326*2d543d20SAndroid Build Coastguard Worker
PREDICATE(const char * str)327*2d543d20SAndroid Build Coastguard Worker static int PREDICATE(const char *str)
328*2d543d20SAndroid Build Coastguard Worker {
329*2d543d20SAndroid Build Coastguard Worker return semanage_is_prefix(str, "#");
330*2d543d20SAndroid Build Coastguard Worker }
331*2d543d20SAndroid Build Coastguard Worker
test_slurp_file_filter(void)332*2d543d20SAndroid Build Coastguard Worker static void test_slurp_file_filter(void)
333*2d543d20SAndroid Build Coastguard Worker {
334*2d543d20SAndroid Build Coastguard Worker semanage_list_t *data, *tmp;
335*2d543d20SAndroid Build Coastguard Worker int cnt = 0;
336*2d543d20SAndroid Build Coastguard Worker
337*2d543d20SAndroid Build Coastguard Worker if (!fptr) {
338*2d543d20SAndroid Build Coastguard Worker CU_FAIL_FATAL("Temporary file was not created, aborting test.");
339*2d543d20SAndroid Build Coastguard Worker }
340*2d543d20SAndroid Build Coastguard Worker rewind(fptr);
341*2d543d20SAndroid Build Coastguard Worker data = semanage_slurp_file_filter(fptr, PREDICATE);
342*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_PTR_NOT_NULL_FATAL(data);
343*2d543d20SAndroid Build Coastguard Worker for (tmp = data; tmp; tmp = tmp->next)
344*2d543d20SAndroid Build Coastguard Worker cnt++;
345*2d543d20SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(cnt, 2);
346*2d543d20SAndroid Build Coastguard Worker
347*2d543d20SAndroid Build Coastguard Worker semanage_list_destroy(&data);
348*2d543d20SAndroid Build Coastguard Worker }
349