1b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence/*
2b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * Copyright 2011 Tresys Technology, LLC. All rights reserved.
3b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *
4b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * Redistribution and use in source and binary forms, with or without
5b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * modification, are permitted provided that the following conditions are met:
6b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *
7b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *    1. Redistributions of source code must retain the above copyright notice,
8b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *       this list of conditions and the following disclaimer.
9b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *
10b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *    2. Redistributions in binary form must reproduce the above copyright notice,
11b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *       this list of conditions and the following disclaimer in the documentation
12b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *       and/or other materials provided with the distribution.
13b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *
14b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * THIS SOFTWARE IS PROVIDED BY TRESYS TECHNOLOGY, LLC ``AS IS'' AND ANY EXPRESS
15b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
16b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
17b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * EVENT SHALL TRESYS TECHNOLOGY, LLC OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
18b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
19b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
21b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
22b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
23b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence *
25b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * The views and conclusions contained in the software and documentation are those
26b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * of the authors and should not be interpreted as representing official policies,
27b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence * either expressed or implied, of Tresys Technology, LLC.
28b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence */
29b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
30b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include "CuTest.h"
31b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include "CilTest.h"
32b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
33b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include "../../src/cil_internal.h"
34b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include "../../src/cil_copy_ast.h"
35b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include "../../src/cil_build_ast.h"
36b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#include "../../src/cil_resolve_ast.h"
37b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
38b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence#define CIL_TEST_SYM_SIZE	1
39b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
40b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrenceint __cil_copy_node_helper(struct cil_tree_node *orig, uint32_t *finished, void *extra_args);
41b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
42b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_args_copy {
43b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *dest;
44b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *db;
45b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence};
46b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
47b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencestruct cil_args_copy *gen_copy_args(struct cil_tree_node *node, struct cil_db *db)
48b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence{
49b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *args = cil_malloc(sizeof(*args));
50b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	args->dest = node;
51b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	args->db = db;
52b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
53b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	return args;
54b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
55b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
56b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_list(CuTest *tc) {
57b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "foo1", "foo2", ")", NULL};
58b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
59b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
60b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *cil_l;
61b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
62b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
63b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_list_init(&cil_l);
64b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
65b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_set_to_list(test_tree->root->cl_head, cil_l, 1);
66b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
67b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *copy_list;
68b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_list_init(&copy_list);
69b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
70b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc =cil_copy_list(cil_l, &copy_list);
71b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
72b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, copy_list->head->data, cil_l->head->data);
73b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, copy_list->head->next->data, cil_l->head->next->data);
74b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, copy_list->head->flavor, cil_l->head->flavor);
75b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, copy_list->head->next->flavor, cil_l->head->next->flavor);
76b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
77b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
78b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_list_sublist(CuTest *tc) {
79b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "foo1", "foo2", "(", "foo3", ")", ")", NULL};
80b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
81b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
82b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *cil_l;
83b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
84b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
85b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_list_init(&cil_l);
86b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
87b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_set_to_list(test_tree->root->cl_head, cil_l, 1);
88b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
89b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *copy_list;
90b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_list_init(&copy_list);
91b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
92b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_list(cil_l, &copy_list);
93b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
94b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, copy_list->head->data, cil_l->head->data);
95b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, copy_list->head->next->data, cil_l->head->next->data);
96b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, ((struct cil_list *)copy_list->head->next->next->data)->head->data, ((struct cil_list *)cil_l->head->next->next->data)->head->data);
97b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, copy_list->head->flavor, cil_l->head->flavor);
98b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, copy_list->head->next->flavor, cil_l->head->next->flavor);
99b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, ((struct cil_list *)copy_list->head->next->next->data)->head->flavor, ((struct cil_list *)cil_l->head->next->next->data)->head->flavor);
100b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
101b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
102b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_list_sublist_extra(CuTest *tc) {
103b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "foo1", "foo2", "(", "foo3", ")", "foo4", ")", NULL};
104b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
105b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
106b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *cil_l;
107b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
108b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
109b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_list_init(&cil_l);
110b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
111b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_set_to_list(test_tree->root->cl_head, cil_l, 1);
112b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
113b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *copy_list;
114b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_list_init(&copy_list);
115b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
116b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_list(cil_l, &copy_list);
117b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
118b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, copy_list->head->data, cil_l->head->data);
119b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, copy_list->head->next->data, cil_l->head->next->data);
120b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, ((struct cil_list *)copy_list->head->next->next->data)->head->data, ((struct cil_list *)cil_l->head->next->next->data)->head->data);
121b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, copy_list->head->next->next->next->data, cil_l->head->next->next->next->data);
122b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, copy_list->head->flavor, cil_l->head->flavor);
123b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, copy_list->head->next->flavor, cil_l->head->next->flavor);
124b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, ((struct cil_list *)copy_list->head->next->next->data)->head->flavor, ((struct cil_list *)cil_l->head->next->next->data)->head->flavor);
125b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, copy_list->head->next->next->next->flavor, cil_l->head->next->next->next->flavor);
126b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
127b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
128b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_list_orignull_neg(CuTest *tc) {
129b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "foo1", "foo2", ")", NULL};
130b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
131b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
132b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *cil_l = NULL;
133b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
134b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
135b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
136b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list *copy_list;
137b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_list_init(&copy_list);
138b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
139b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_list(cil_l, &copy_list);
140b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_ERR);
141b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertPtrEquals(tc, copy_list->head, NULL);
142b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
143b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
144b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_block(CuTest *tc) {
145b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "block", "a", "(", "type", "log", ")", ")", NULL};
146b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
147b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
148b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
149b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
150b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_ast_node;
151b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_ast_node);
152b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
153b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
154b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
155b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
156b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->parent = test_db->ast->root;
157b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->line = 1;
158b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
159b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_gen_block(test_db, test_tree->root->cl_head->cl_head, test_ast_node, 0);
160b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
161b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_copy;
162b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_copy);
163b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
164b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
165b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, cil_sym_sizes[CIL_SYM_ARRAY_BLOCK][CIL_SYM_BLOCKS]);
166b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
167b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_block(test_db, test_ast_node->data, &test_copy->data, &sym);
168b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
169b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
170b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
171b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_perm(CuTest *tc) {
172b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "class", "foo", "(", "read", "write", "open", ")", ")", NULL};
173b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
174b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
175b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
176b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
177b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_ast_node;
178b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_ast_node);
179b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
180b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
181b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
182b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
183b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_class *new_node;
184b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_class_init(&new_node);
185b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
186b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *new_tree_node;
187b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&new_tree_node);
188b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	new_tree_node->data = new_node;
189b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	new_tree_node->flavor = CIL_CLASS;
190b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
191b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->parent = new_tree_node;
192b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->line = 1;
193b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
194b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_copy;
195b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_copy);
196b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
197b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
198b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_CLASS_SYM_SIZE);
199b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
200b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_gen_perm(test_db, test_tree->root->cl_head->cl_head->next->next->cl_head, test_ast_node);
201b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_perm(test_db, test_ast_node->data, &test_copy->data, &sym);
202b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
203b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_gen_perm(test_db, test_tree->root->cl_head->cl_head->next->next->cl_head->next, test_ast_node);
204b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	rc = cil_copy_perm(test_db, test_ast_node->data, &test_copy->data, &sym);
205b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
206b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_gen_perm(test_db, test_tree->root->cl_head->cl_head->next->next->cl_head->next->next, test_ast_node);
207b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	rc = cil_copy_perm(test_db, test_ast_node->data, &test_copy->data, &sym);
208b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
209b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
210b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
211b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
212b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_class(CuTest *tc) {
213b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "class", "file", "(", "read", "write", "open", ")", ")", NULL};
214b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
215b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
216b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
217b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
218b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_ast_node;
219b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_ast_node);
220b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
221b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
222b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
223b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
224b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->parent = test_db->ast->root;
225b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->line = 1;
226b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
227b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_gen_class(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
228b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
229b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_copy;
230b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_copy);
231b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
232b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
233b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_CLASS_SYM_SIZE);
234b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
235b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_class(test_db, test_ast_node->data, &test_copy->data, &sym);
236b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
237b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
238b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
239b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_common(CuTest *tc) {
240b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "common", "test", "(", "read", "write", ")", ")", NULL};
241b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
242b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
243b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
244b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
245b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_ast_node;
246b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_ast_node);
247b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
248b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
249b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
250b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
251b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->parent = test_db->ast->root;
252b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->line = 1;
253b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
254b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_gen_common(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
255b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
256b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_copy;
257b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_copy);
258b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
259b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
260b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_CLASS_SYM_SIZE);
261b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
262b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_common(test_db, test_ast_node->data, &test_copy->data, &sym);
263b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
264b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
265b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
266b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_classcommon(CuTest *tc) {
267b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "classcommon", "file", "file", NULL};
268b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
269b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree *test_tree;
270b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        gen_test_tree(&test_tree, line);
271b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
272b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree_node *test_ast_node;
273b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_tree_node_init(&test_ast_node);
274b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
275b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_db *test_db;
276b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_db_init(&test_db);
277b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
278b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        char *test_key = test_tree->root->cl_head->cl_head->next->data;
279b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_class *test_cls;
280b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_class_init(&test_cls);
281b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
282b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->parent = test_db->ast->root;
283b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->line = 1;
284b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
285b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_symtab_insert(&test_db->symtab[CIL_SYM_CLASSES], (hashtab_key_t)test_key, (struct cil_symtab_datum*)test_cls, test_ast_node);
286b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
287b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->data = test_cls;
288b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->flavor = CIL_CLASS;
289b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
290b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_gen_classcommon(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
291b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
292b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_classcommon *test_copy;
293b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_classcommon_init(&test_copy);
294b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
295b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
296b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_CLASS_SYM_SIZE);
297b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
298b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_classcommon(test_db, test_ast_node->data, (void**)&test_copy, &sym);
299b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
300b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, ((struct cil_classcommon *)test_ast_node->data)->class_str, test_copy->class_str);
301b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, ((struct cil_classcommon *)test_ast_node->data)->common_str, test_copy->common_str);
302b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
303b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
304b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_sid(CuTest *tc) {
305b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "sid", "test", ")", NULL};
306b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
307b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
308b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
309b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
310b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_ast_node;
311b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_ast_node);
312b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
313b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
314b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
315b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
316b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->parent = test_db->ast->root;
317b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->line = 1;
318b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
319b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_gen_sid(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
320b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
321b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_copy;
322b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_copy);
323b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
324b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
325b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
326b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
327b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_sid(test_db, test_ast_node->data, &test_copy->data, &sym);
328b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
329b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
330b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
331b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_sidcontext(CuTest *tc) {
332b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "sidcontext", "test", "(", "blah_u", "blah_r", "blah_t", "(", "low", "high", ")", ")", ")", NULL};
333b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
334b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
335b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
336b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
337b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_ast_node;
338b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_ast_node);
339b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
340b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
341b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
342b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
343b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->parent = test_db->ast->root;
344b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->line = 1;
345b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
346b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_gen_sidcontext(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
347b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
348b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_copy;
349b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_copy);
350b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
351b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
352b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
353b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
354b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_sidcontext(test_db, test_ast_node->data, &test_copy->data, &sym);
355b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
356b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, ((struct cil_user *)test_copy->data)->datum.name,
357b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_user *)test_ast_node->data)->datum.name);
358b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
359b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
360b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_user(CuTest *tc) {
361b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "user", "sysadm", ")", NULL};
362b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
363b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
364b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
365b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
366b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_ast_node;
367b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_ast_node);
368b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
369b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
370b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
371b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
372b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->parent = test_db->ast->root;
373b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->line = 1;
374b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
375b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_gen_user(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
376b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
377b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_copy;
378b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_copy);
379b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
380b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
381b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
382b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
383b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_user(test_db, test_ast_node->data, &test_copy->data, &sym);
384b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
385b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
386b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
387b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_role(CuTest *tc) {
388b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "role", "role_r", ")", NULL};
389b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
390b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
391b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
392b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
393b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_ast_node;
394b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_ast_node);
395b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
396b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
397b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
398b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
399b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->parent = test_db->ast->root;
400b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->line = 1;
401b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
402b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_gen_role(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
403b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
404b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_copy;
405b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_copy);
406b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
407b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
408b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
409b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
410b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_role(test_db, test_ast_node->data, &test_copy->data, &sym);
411b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
412b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
413b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
414b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_userrole(CuTest *tc) {
415b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "userrole", "staff_u", "staff_r", ")", NULL};
416b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
417b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
418b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
419b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
420b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_ast_node;
421b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_ast_node);
422b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
423b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
424b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
425b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
426b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->parent = test_db->ast->root;
427b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->line = 1;
428b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
429b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_gen_userrole(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
430b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
431b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_userrole *test_copy;
432b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_userrole_init(&test_copy);
433b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
434b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
435b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
436b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
437b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_userrole(test_db, test_ast_node->data, (void**)&test_copy, &sym);
438b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
439b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, ((struct cil_userrole *)test_ast_node->data)->user_str, test_copy->user_str);
440b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, ((struct cil_userrole *)test_ast_node->data)->role_str, test_copy->role_str);
441b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
442b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
443b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_type(CuTest *tc) {
444b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "type", "test", ")", NULL};
445b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
446b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
447b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
448b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
449b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_ast_node;
450b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_ast_node);
451b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
452b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
453b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
454b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
455b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->parent = test_db->ast->root;
456b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->line = 1;
457b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
458b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_gen_type(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
459b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
460b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_copy;
461b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_copy);
462b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
463b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
464b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
465b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
466b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_type(test_db, test_ast_node->data, &test_copy->data, &sym);
467b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
468b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
469b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
470b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_typealias(CuTest *tc) {
471b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "typealias", ".test.type", "type_t", ")", "(", "type", "test", ")", NULL};
472b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
473b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
474b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
475b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
476b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_ast_node;
477b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_ast_node);
478b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
479b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
480b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
481b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
482b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->parent = test_db->ast->root;
483b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->line = 1;
484b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
485b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_gen_typealias(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
486b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
487b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_copy;
488b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_copy);
489b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
490b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
491b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
492b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
493b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_typealias(test_db, test_ast_node->data, &test_copy->data, &sym);
494b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
495b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
496b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
497b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_typeattribute(CuTest *tc) {
498b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "typettribute", "type_t", ")", NULL};
499b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
500b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
501b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
502b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
503b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_ast_node;
504b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_ast_node);
505b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
506b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
507b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
508b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
509b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->parent = test_db->ast->root;
510b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->line = 1;
511b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
512b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_gen_typeattribute(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
513b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
514b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_copy;
515b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_copy);
516b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
517b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
518b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
519b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
520b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_typeattribute(test_db, test_ast_node->data, &test_copy->data, &sym);
521b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
522b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
523b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
524b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_bool(CuTest *tc) {
525b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "boolean", "foo", "true", ")", NULL};
526b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
527b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
528b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
529b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
530b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_ast_node;
531b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_ast_node);
532b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
533b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
534b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
535b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
536b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->parent = test_db->ast->root;
537b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->line = 1;
538b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
539b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_gen_bool(test_db, test_tree->root->cl_head->cl_head, test_ast_node, CIL_BOOL);
540b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
541b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_copy;
542b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_copy);
543b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
544b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
545b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
546b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
547b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_bool(test_db, test_ast_node->data, &test_copy->data, &sym);
548b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
549b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, ((struct cil_bool *)test_copy->data)->value,
550b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_bool *)test_ast_node->data)->value);
551b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
552b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
553b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_type_rule(CuTest *tc) {
554b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "typetransition", "foo", "bar", "file", "foobar", ")", NULL};
555b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
556b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
557b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
558b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
559b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_ast_node;
560b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_ast_node);
561b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
562b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
563b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
564b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
565b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->parent = test_db->ast->root;
566b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->line = 1;
567b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
568b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_gen_type_rule(test_tree->root->cl_head->cl_head, test_ast_node, CIL_TYPE_TRANSITION);
569b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
570b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_type_rule *test_copy;
571b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_type_rule_init(&test_copy);
572b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
573b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
574b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
575b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
576b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_type_rule(test_db, test_ast_node->data, (void**)&test_copy, &sym);
577b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
578b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, ((struct cil_type_rule *)test_ast_node->data)->rule_kind, test_copy->rule_kind);
579b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, ((struct cil_type_rule *)test_ast_node->data)->src_str, test_copy->src_str);
580b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, ((struct cil_type_rule *)test_ast_node->data)->tgt_str, test_copy->tgt_str);
581b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, ((struct cil_type_rule *)test_ast_node->data)->obj_str, test_copy->obj_str);
582b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
583b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
584b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_avrule(CuTest *tc) {
585b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "allow", "test", "foo", "(", "bar", "(", "read", "write", ")", ")", ")", NULL};
586b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
587b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
588b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
589b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
590b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_ast_node;
591b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_ast_node);
592b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
593b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
594b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
595b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
596b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->parent = test_db->ast->root;
597b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->line = 1;
598b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
599b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_current;
600b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_current = test_tree->root->cl_head->cl_head;
601b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
602b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_gen_avrule(test_current, test_ast_node, CIL_AVRULE_ALLOWED);
603b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
604b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_avrule *test_copy;
605b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_avrule_init(&test_copy);
606b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
607b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
608b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
609b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
610b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_avrule(test_db, test_ast_node->data, (void**)&test_copy, &sym);
611b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
612b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, ((struct cil_avrule *)test_ast_node->data)->rule_kind, test_copy->rule_kind);
613b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, ((struct cil_avrule *)test_ast_node->data)->src_str, test_copy->src_str);
614b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, ((struct cil_avrule *)test_ast_node->data)->tgt_str, test_copy->tgt_str);
615b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, ((struct cil_avrule *)test_ast_node->data)->classpermset->class_str, test_copy->classpermset->class_str);
616b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, ((struct cil_avrule *)test_ast_node->data)->classpermset->permset->perms_list_str->head->flavor, test_copy->classpermset->permset->perms_list_str->head->flavor);
617b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, (char*)((struct cil_avrule *)test_ast_node->data)->classpermset->permset->perms_list_str->head->data, (char*)test_copy->classpermset->permset->perms_list_str->head->data);
618b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, ((struct cil_avrule *)test_ast_node->data)->classpermset->permset->perms_list_str->head->next->flavor, test_copy->classpermset->permset->perms_list_str->head->next->flavor);
619b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, (char*)((struct cil_avrule *)test_ast_node->data)->classpermset->permset->perms_list_str->head->next->data, (char*)test_copy->classpermset->permset->perms_list_str->head->next->data);
620b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
621b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
622b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_sens(CuTest *tc) {
623b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "sensitivity", "s0", ")", NULL};
624b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
625b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
626b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
627b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
628b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
629b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
630b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
631b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_ast_node;
632b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_ast_node);
633b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
634b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->parent = test_db->ast->root;
635b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->line = 1;
636b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
637b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_gen_sensitivity(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
638b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
639b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_copy;
640b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_copy);
641b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
642b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
643b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
644b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
645b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_sens(test_db, test_ast_node->data, &test_copy->data, &sym);
646b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
647b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
648b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
649b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_sensalias(CuTest *tc) {
650b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "sensitivityalias", "s0", "alias", ")", NULL};
651b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
652b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
653b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
654b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
655b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
656b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
657b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
658b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_ast_node;
659b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_ast_node);
660b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
661b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->parent = test_db->ast->root;
662b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->line = 1;
663b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
664b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_gen_sensalias(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
665b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
666b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_copy;
667b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_copy);
668b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
669b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
670b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
671b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
672b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_sensalias(test_db, test_ast_node->data, &test_copy->data, &sym);
673b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
674b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, ((struct cil_sensalias *)test_copy->data)->sens_str,
675b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_sensalias *)test_ast_node->data)->sens_str);
676b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
677b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
678b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_cat(CuTest *tc) {
679b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "category", "c0", ")", NULL};
680b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
681b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
682b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
683b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
684b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
685b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
686b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
687b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_ast_node;
688b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_ast_node);
689b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
690b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->parent = test_db->ast->root;
691b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->line = 1;
692b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
693b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_gen_category(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
694b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
695b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_copy;
696b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_copy);
697b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
698b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
699b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
700b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
701b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_cat(test_db, test_ast_node->data, &test_copy->data, &sym);
702b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
703b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
704b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
705b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_catalias(CuTest *tc) {
706b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "categoryalias", "c0", "red", ")", NULL};
707b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
708b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
709b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
710b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
711b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
712b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
713b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
714b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_ast_node;
715b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_ast_node);
716b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
717b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->parent = test_db->ast->root;
718b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->line = 1;
719b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
720b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_gen_catalias(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
721b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
722b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_copy;
723b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_copy);
724b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
725b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
726b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
727b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
728b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_catalias(test_db, test_ast_node->data, &test_copy->data, &sym);
729b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
730b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, ((struct cil_catalias *)test_copy->data)->cat_str,
731b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_catalias *)test_ast_node->data)->cat_str);
732b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
733b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
734b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_senscat(CuTest *tc) {
735b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "sensitivity", "s0", ")",
736b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence                        "(", "sensitivity", "s1", ")",
737b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence                        "(", "dominance", "(", "s0", "s1", ")", ")",
738b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence			"(", "category", "c0", ")",
739b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence			"(", "category", "c255", ")",
740b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence			"(", "categoryorder", "(", "c0", "c255", ")", ")",
741b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence			"(", "sensitivitycategory", "s1", "(", "c0", "c255", ")", ")", NULL};
742b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
743b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree *test_tree;
744b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        gen_test_tree(&test_tree, line);
745b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
746b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree_node *test_ast_node;
747b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_tree_node_init(&test_ast_node);
748b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
749b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_db *test_db;
750b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_db_init(&test_db);
751b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
752b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->parent = test_db->ast->root;
753b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->line = 1;
754b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
755b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_gen_senscat(test_db, test_tree->root->cl_head->next->next->next->next->next->next->cl_head, test_ast_node);
756b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
757b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_senscat *test_copy;
758b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_senscat_init(&test_copy);
759b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
760b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
761b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
762b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
763b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_senscat(test_db, test_ast_node->data, (void**)&test_copy, &sym);
764b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
765b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, ((struct cil_senscat *)test_ast_node->data)->sens_str, test_copy->sens_str);
766b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, (char*)((struct cil_senscat *)test_ast_node->data)->catset->cat_list_str->head->data,
767b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	                      (char*)test_copy->catset->cat_list_str->head->data);
768b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, (char*)((struct cil_senscat *)test_ast_node->data)->catset->cat_list_str->head->next->data,
769b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	                      (char*)test_copy->catset->cat_list_str->head->next->data);
770b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
771b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
772b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_catorder(CuTest *tc) {
773b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "category", "c0", ")",
774b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence			"(", "category", "c255", ")",
775b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence			"(", "categoryorder", "(", "c0", "c255", ")", ")", NULL};
776b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
777b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
778b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
779b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
780b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
781b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
782b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
783b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_ast_node;
784b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_ast_node);
785b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
786b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->parent = test_db->ast->root;
787b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->line = 1;
788b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
789b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_gen_catorder(test_db, test_tree->root->cl_head->next->next->cl_head, test_ast_node);
790b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
791b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_catorder *test_copy;
792b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_catorder_init(&test_copy);
793b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
794b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
795b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
796b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
797b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_catorder(test_db, test_ast_node->data, (void**)&test_copy, &sym);
798b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
799b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, (char*)((struct cil_catorder *)test_ast_node->data)->cat_list_str->head->data, (char*)test_copy->cat_list_str->head->data);
800b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, (char*)((struct cil_catorder *)test_ast_node->data)->cat_list_str->head->next->data, (char*)test_copy->cat_list_str->head->next->data);
801b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
802b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
803b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_dominance(CuTest *tc) {
804b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        char *line[] = {"(", "sensitivity", "s0", ")",
805b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence                        "(", "sensitivity", "s1", ")",
806b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence                        "(", "sensitivity", "s2", ")",
807b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence                        "(", "dominance", "(", "s0", "s1", ")", ")", NULL};
808b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
809b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree *test_tree;
810b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        gen_test_tree(&test_tree, line);
811b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
812b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree_node *test_ast_node;
813b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_tree_node_init(&test_ast_node);
814b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
815b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_db *test_db;
816b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_db_init(&test_db);
817b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
818b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->parent = test_db->ast->root;
819b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->line = 1;
820b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
821b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_gen_dominance(test_db, test_tree->root->cl_head->next->next->next->cl_head, test_ast_node);
822b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
823b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_sens_dominates *test_copy;
824b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_sens_dominates_init(&test_copy);
825b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
826b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
827b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
828b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
829b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_dominance(test_db, test_ast_node->data, (void**)&test_copy, &sym);
830b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
831b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, (char*)((struct cil_sens_dominates *)test_ast_node->data)->sens_list_str->head->data, (char*)test_copy->sens_list_str->head->data);
832b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, (char*)((struct cil_sens_dominates *)test_ast_node->data)->sens_list_str->head->next->data, (char*)test_copy->sens_list_str->head->next->data);
833b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
834b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
835b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_level(CuTest *tc) {
836b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "level", "low", "(", "s0", "(", "c1", ")", ")", ")", NULL};
837b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
838b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree *test_tree;
839b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        gen_test_tree(&test_tree, line);
840b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
841b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree_node *test_ast_node;
842b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_tree_node_init(&test_ast_node);
843b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
844b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_db *test_db;
845b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_db_init(&test_db);
846b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
847b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->parent = test_db->ast->root;
848b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->line = 1;
849b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
850b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_gen_level(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
851b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
852b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_copy;
853b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_copy);
854b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
855b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
856b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
857b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
858b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_level(test_db, test_ast_node->data, &test_copy->data, &sym);
859b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
860b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
861b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
862b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_fill_level(CuTest *tc) {
863b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "level", "low", "(", "s0", "(", "c1", ")", ")", ")", NULL};
864b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
865b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree *test_tree;
866b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        gen_test_tree(&test_tree, line);
867b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
868b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree_node *test_ast_node;
869b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_tree_node_init(&test_ast_node);
870b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
871b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_db *test_db;
872b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_db_init(&test_db);
873b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
874b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->parent = test_db->ast->root;
875b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->line = 1;
876b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
877b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_gen_level(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
878b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
879b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_copy;
880b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_copy);
881b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_level_init((struct cil_level**)&test_copy->data);
882b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
883b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
884b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
885b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
886b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_fill_level((struct cil_level*)test_ast_node->data, (struct cil_level*)test_copy->data);
887b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
888b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, ((struct cil_level *)test_copy->data)->sens_str,
889b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_level *)test_ast_node->data)->sens_str);
890b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
891b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
892b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_context(CuTest *tc) {
893b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "context", "packet_default", "(", "system_u", "object_r", "etc_t", "(", "low", "high", ")", ")", ")", NULL};
894b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
895b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree *test_tree;
896b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        gen_test_tree(&test_tree, line);
897b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
898b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree_node *test_ast_node;
899b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_tree_node_init(&test_ast_node);
900b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
901b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_db *test_db;
902b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_db_init(&test_db);
903b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
904b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->parent = test_db->ast->root;
905b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->line = 1;
906b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
907b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_gen_context(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
908b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
909b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_copy;
910b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_copy);
911b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
912b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
913b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
914b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
915b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_context(test_db, test_ast_node->data, &test_copy->data, &sym);
916b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
917b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
918b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
919b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_netifcon(CuTest *tc) {
920b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "netifcon", "eth0", "if_default", "packet_default", ")", NULL};
921b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
922b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree *test_tree;
923b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        gen_test_tree(&test_tree, line);
924b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
925b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree_node *test_ast_node;
926b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_tree_node_init(&test_ast_node);
927b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
928b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_db *test_db;
929b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_db_init(&test_db);
930b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
931b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->parent = test_db->ast->root;
932b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->line = 1;
933b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
934b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_gen_netifcon(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
935b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
936b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_netifcon *test_copy;
937b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
938b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
939b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
940b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
941b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_netifcon(test_db, test_ast_node->data, (void**)&test_copy, &sym);
942b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
943b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, test_copy->interface_str,
944b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_netifcon *)test_ast_node->data)->interface_str);
945b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, test_copy->if_context_str,
946b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_netifcon *)test_ast_node->data)->if_context_str);
947b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, test_copy->packet_context_str,
948b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_netifcon *)test_ast_node->data)->packet_context_str);
949b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
950b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
951b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_netifcon_nested(CuTest *tc) {
952b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "netifcon", "eth1",
953b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence			"(", "system_u", "object_r", "netif_t", "(", "low", "high", ")", ")",
954b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence			"(", "system_u", "object_r", "netif_t", "(", "low", "high", ")", ")", ")", NULL};
955b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
956b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree *test_tree;
957b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        gen_test_tree(&test_tree, line);
958b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
959b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree_node *test_ast_node;
960b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_tree_node_init(&test_ast_node);
961b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
962b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_db *test_db;
963b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_db_init(&test_db);
964b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
965b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->parent = test_db->ast->root;
966b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->line = 1;
967b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
968b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_gen_netifcon(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
969b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
970b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_netifcon *test_copy;
971b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
972b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
973b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
974b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
975b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_netifcon(test_db, test_ast_node->data, (void**)&test_copy, &sym);
976b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
977b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, test_copy->interface_str,
978b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_netifcon *)test_ast_node->data)->interface_str);
979b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, test_copy->if_context_str,
980b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_netifcon *)test_ast_node->data)->if_context_str);
981b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, test_copy->packet_context_str,
982b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_netifcon *)test_ast_node->data)->packet_context_str);
983b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, test_copy->packet_context->user_str,
984b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_netifcon *)test_ast_node->data)->packet_context->user_str);
985b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, test_copy->packet_context->role_str,
986b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_netifcon *)test_ast_node->data)->packet_context->role_str);
987b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, test_copy->packet_context->type_str,
988b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_netifcon *)test_ast_node->data)->packet_context->type_str);
989b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, test_copy->packet_context->range_str,
990b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_netifcon *)test_ast_node->data)->packet_context->range_str);
991b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
992b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
993b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_fill_context(CuTest *tc) {
994b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "context", "packet_default", "(", "system_u", "object_r", "etc_t", "range", ")", ")", NULL};
995b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
996b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree *test_tree;
997b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        gen_test_tree(&test_tree, line);
998b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
999b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree_node *test_ast_node;
1000b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_tree_node_init(&test_ast_node);
1001b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1002b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_db *test_db;
1003b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_db_init(&test_db);
1004b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1005b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->parent = test_db->ast->root;
1006b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->line = 1;
1007b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1008b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_gen_context(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
1009b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1010b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_copy;
1011b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_copy);
1012b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_context_init((struct cil_context**)&test_copy->data);
1013b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1014b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
1015b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
1016b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1017b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_fill_context((struct cil_context*)test_ast_node->data, (struct cil_context*)test_copy->data);
1018b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
1019b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, ((struct cil_context *)test_copy->data)->user_str,
1020b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_context *)test_ast_node->data)->user_str);
1021b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, ((struct cil_context *)test_copy->data)->role_str,
1022b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_context *)test_ast_node->data)->role_str);
1023b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, ((struct cil_context *)test_copy->data)->type_str,
1024b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_context *)test_ast_node->data)->type_str);
1025b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, ((struct cil_context *)test_copy->data)->range_str,
1026b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_context *)test_ast_node->data)->range_str);
1027b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1028b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1029b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_fill_context_anonrange(CuTest *tc) {
1030b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "context", "packet_default", "(", "system_u", "object_r", "etc_t", "(", "low", "high", ")", ")", ")", NULL};
1031b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1032b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree *test_tree;
1033b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        gen_test_tree(&test_tree, line);
1034b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1035b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree_node *test_ast_node;
1036b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_tree_node_init(&test_ast_node);
1037b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1038b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_db *test_db;
1039b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_db_init(&test_db);
1040b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1041b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->parent = test_db->ast->root;
1042b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->line = 1;
1043b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1044b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_gen_context(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
1045b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1046b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_copy;
1047b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_copy);
1048b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_context_init((struct cil_context**)&test_copy->data);
1049b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1050b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
1051b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
1052b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1053b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_fill_context((struct cil_context*)test_ast_node->data, (struct cil_context*)test_copy->data);
1054b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
1055b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, ((struct cil_context *)test_copy->data)->user_str,
1056b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_context *)test_ast_node->data)->user_str);
1057b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, ((struct cil_context *)test_copy->data)->role_str,
1058b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_context *)test_ast_node->data)->role_str);
1059b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, ((struct cil_context *)test_copy->data)->type_str,
1060b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_context *)test_ast_node->data)->type_str);
1061b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, ((struct cil_context *)test_copy->data)->range_str,
1062b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_context *)test_ast_node->data)->range_str);
1063b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1064b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1065b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_call(CuTest *tc) {
1066b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "call", "mm", "(", "foo", ")", ")", NULL};
1067b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1068b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree *test_tree;
1069b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        gen_test_tree(&test_tree, line);
1070b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1071b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree_node *test_ast_node;
1072b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_tree_node_init(&test_ast_node);
1073b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1074b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_db *test_db;
1075b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_db_init(&test_db);
1076b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1077b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->parent = test_db->ast->root;
1078b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->line = 1;
1079b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1080b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_gen_call(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
1081b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1082b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_call *test_copy;
1083b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1084b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
1085b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
1086b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1087b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_call(test_db, test_ast_node->data, (void**)&test_copy, &sym);
1088b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
1089b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, test_copy->macro_str, ((struct cil_call *)test_ast_node->data)->macro_str);
1090b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1091b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1092b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_optional(CuTest *tc) {
1093b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "optional", "opt", "(", "allow", "foo", "bar", "(", "file", "(", "read", ")", ")", ")", ")", NULL};
1094b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1095b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree *test_tree;
1096b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        gen_test_tree(&test_tree, line);
1097b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1098b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree_node *test_ast_node;
1099b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_tree_node_init(&test_ast_node);
1100b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1101b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_db *test_db;
1102b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_db_init(&test_db);
1103b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1104b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->parent = test_db->ast->root;
1105b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->line = 1;
1106b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1107b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_gen_optional(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
1108b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1109b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_copy;
1110b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_copy);
1111b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1112b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
1113b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
1114b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1115b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_optional(test_db, test_ast_node->data, &test_copy->data, &sym);
1116b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
1117b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1118b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1119b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_nodecon(CuTest *tc) {
1120b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "nodecon", "ipaddr", "ipaddr", "con", ")", NULL};
1121b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1122b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree *test_tree;
1123b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        gen_test_tree(&test_tree, line);
1124b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1125b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree_node *test_ast_node;
1126b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_tree_node_init(&test_ast_node);
1127b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1128b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_db *test_db;
1129b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_db_init(&test_db);
1130b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1131b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->parent = test_db->ast->root;
1132b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->line = 1;
1133b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1134b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_gen_nodecon(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
1135b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1136b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_nodecon *test_copy;
1137b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1138b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
1139b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
1140b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1141b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_nodecon(test_db, test_ast_node->data, (void**)&test_copy, &sym);
1142b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
1143b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, test_copy->addr_str,
1144b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_nodecon *)test_ast_node->data)->addr_str);
1145b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, test_copy->mask_str,
1146b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_nodecon *)test_ast_node->data)->mask_str);
1147b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, test_copy->context_str,
1148b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_nodecon *)test_ast_node->data)->context_str);
1149b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1150b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1151b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_nodecon_anon(CuTest *tc) {
1152b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "nodecon", "(", "192.168.1.1", ")", "(", "192.168.1.1", ")", "(", "user", "role", "type", "(", "low", "high", ")", ")", ")", NULL};
1153b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1154b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree *test_tree;
1155b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        gen_test_tree(&test_tree, line);
1156b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1157b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree_node *test_ast_node;
1158b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_tree_node_init(&test_ast_node);
1159b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1160b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_db *test_db;
1161b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_db_init(&test_db);
1162b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1163b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->parent = test_db->ast->root;
1164b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->line = 1;
1165b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1166b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_gen_nodecon(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
1167b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1168b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_nodecon *test_copy;
1169b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1170b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
1171b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
1172b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1173b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_nodecon(test_db, test_ast_node->data, (void**)&test_copy, &sym);
1174b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
1175b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, test_copy->addr_str,
1176b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_nodecon *)test_ast_node->data)->addr_str);
1177b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, test_copy->mask_str,
1178b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_nodecon *)test_ast_node->data)->mask_str);
1179b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, test_copy->context_str,
1180b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence		((struct cil_nodecon *)test_ast_node->data)->context_str);
1181b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1182b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1183b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_fill_ipaddr(CuTest *tc) {
1184b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "ipaddr", "ip", "192.168.1.1", ")", NULL};
1185b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1186b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree *test_tree;
1187b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        gen_test_tree(&test_tree, line);
1188b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1189b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree_node *test_ast_node;
1190b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_tree_node_init(&test_ast_node);
1191b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1192b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_db *test_db;
1193b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_db_init(&test_db);
1194b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1195b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->parent = test_db->ast->root;
1196b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->line = 1;
1197b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1198b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_gen_ipaddr(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
1199b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1200b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
1201b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
1202b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1203b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_ipaddr *new;
1204b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_ipaddr_init(&new);
1205b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_ipaddr *old;
1206b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_ipaddr_init(&new);
1207b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1208b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	old = (struct cil_ipaddr*)test_ast_node->data;
1209b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_fill_ipaddr(old, new);
1210b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
1211b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1212b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, old->family, new->family);
1213b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1214b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1215b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_ipaddr(CuTest *tc) {
1216b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "ipaddr", "ip", "192.168.1.1", ")", NULL};
1217b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1218b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree *test_tree;
1219b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        gen_test_tree(&test_tree, line);
1220b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1221b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree_node *test_ast_node;
1222b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_tree_node_init(&test_ast_node);
1223b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1224b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_db *test_db;
1225b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_db_init(&test_db);
1226b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1227b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->parent = test_db->ast->root;
1228b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->line = 1;
1229b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1230b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_gen_ipaddr(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
1231b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1232b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_copy;
1233b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_copy);
1234b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1235b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
1236b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
1237b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1238b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_ipaddr(test_db, test_ast_node->data, &test_copy->data, &sym);
1239b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
1240b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1241b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1242b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_conditional(CuTest *tc) {
1243b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "booleanif", "(", "and", "foo", "bar", ")",
1244b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence			"(", "true",
1245b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence			"(", "allow", "foo", "bar", "(", "file", "(", "read", ")", ")", ")", ")", ")", NULL};
1246b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1247b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1248b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1249b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1250b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_ast_node;
1251b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_ast_node);
1252b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1253b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1254b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1255b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1256b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->parent = test_db->ast->root;
1257b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->line = 1;
1258b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1259b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_gen_boolif(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
1260b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1261b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_list_item *curr_old;
1262b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	curr_old = ((struct cil_booleanif*)test_ast_node->data)->expr_stack->head;
1263b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1264b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_conditional *cond_new;
1265b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1266b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
1267b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
1268b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1269b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_conditional(test_db, curr_old->data, (void**)&cond_new, &sym);
1270b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
1271b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1272b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, ((struct cil_conditional*)curr_old->data)->str, cond_new->str);
1273b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, ((struct cil_conditional*)curr_old->data)->flavor, cond_new->flavor);
1274b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1275b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1276b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_boolif(CuTest *tc) {
1277b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "booleanif", "(", "and", "foo", "bar", ")",
1278b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence			"(", "true",
1279b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence			"(", "allow", "foo", "bar", "(", "file", "(", "read", ")", ")", ")", ")", ")", NULL};
1280b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1281b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1282b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1283b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1284b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_ast_node;
1285b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&test_ast_node);
1286b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1287b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1288b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1289b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1290b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->parent = test_db->ast->root;
1291b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_ast_node->line = 1;
1292b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1293b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_gen_boolif(test_db, test_tree->root->cl_head->cl_head, test_ast_node);
1294b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1295b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_booleanif *test_copy;
1296b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1297b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
1298b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
1299b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1300b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_boolif(test_db, test_ast_node->data, (void**)&test_copy, &sym);
1301b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
1302b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1303b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1304b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_constrain(CuTest *tc) {
1305b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "mlsconstrain", "(", "file", "(", "create", "relabelto", ")", ")", "(", "eq", "l2", "h2", ")", ")", NULL};
1306b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1307b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree *test_tree;
1308b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        gen_test_tree(&test_tree, line);
1309b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1310b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree_node *test_ast_node;
1311b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_tree_node_init(&test_ast_node);
1312b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1313b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_db *test_db;
1314b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_db_init(&test_db);
1315b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1316b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->parent = test_db->ast->root;
1317b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->line = 1;
1318b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1319b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_gen_constrain(test_db, test_tree->root->cl_head->cl_head, test_ast_node, CIL_MLSCONSTRAIN);
1320b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1321b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_constrain *test_copy;
1322b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1323b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_t sym;
1324b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	symtab_init(&sym, CIL_TEST_SYM_SIZE);
1325b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1326b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_constrain(test_db, test_ast_node->data, (void**)&test_copy, &sym);
1327b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
1328b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertStrEquals(tc, ((struct cil_constrain*)test_copy)->classpermset->class_str, ((struct cil_constrain *)test_ast_node->data)->classpermset->class_str);
1329b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1330b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence/*
1331b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_ast(CuTest *tc) {
1332b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "mlsconstrain", "(", "file", "dir", ")", "(", "create", "relabelto", ")", "(", "eq", "l2", "h2", ")", ")", NULL};
1333b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1334b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree *test_tree;
1335b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        gen_test_tree(&test_tree, line);
1336b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1337b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree_node *test_ast_node;
1338b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_tree_node_init(&test_ast_node);
1339b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1340b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_db *test_db;
1341b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_db_init(&test_db);
1342b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1343b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->parent = test_db->ast->root;
1344b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->line = 1;
1345b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1346b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_gen_constrain(test_db, test_tree->root->cl_head->cl_head, test_ast_node, CIL_MLSCONSTRAIN);
1347b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1348b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_current;
1349b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_current = test_tree->root->cl_head->cl_head;
1350b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1351b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_constrain *test_copy;
1352b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_constrain_init(&test_copy);
1353b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_list_init(&test_copy->expr);
1354b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1355b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_ast(((struct cil_constrain *)test_ast_node->data)->expr, test_copy->expr);
1356b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_OK);
1357b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1358b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1359b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_ast_neg(CuTest *tc) {
1360b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "mlsconstrain", ")", NULL};
1361b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1362b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree *test_tree;
1363b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        gen_test_tree(&test_tree, line);
1364b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1365b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_tree_node *test_ast_node;
1366b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_tree_node_init(&test_ast_node);
1367b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1368b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        struct cil_db *test_db;
1369b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_db_init(&test_db);
1370b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1371b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->parent = test_db->ast->root;
1372b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        test_ast_node->line = 1;
1373b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1374b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        cil_gen_constrain(test_db, test_tree->root->cl_head->cl_head, test_ast_node, CIL_MLSCONSTRAIN);
1375b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1376b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *test_current;
1377b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	test_current = test_tree->root->cl_head->cl_head;
1378b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1379b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_constrain *test_copy;
1380b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_constrain_init(&test_copy);
1381b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_list_init(&test_copy->expr);
1382b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1383b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = cil_copy_ast(((struct cil_constrain *)test_ast_node->data)->expr, test_copy->expr);
1384b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, rc, SEPOL_ERR);
1385b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1386b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence*/
1387b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence/* node_helper functions */
1388b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1389b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_block(CuTest *tc) {
1390b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "block", "a", "(", "type", "log", ")", ")", NULL};
1391b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1392b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1393b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1394b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1395b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1396b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1397b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1398b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
1399b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
1400b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1401b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
1402b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1403b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2);
1404b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1405b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
1406b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1407b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
1408b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
1409b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
1410b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1411b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1412b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_block_merge(CuTest *tc) {
1413b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "block", "a", "(", "type", "log", ")", ")", NULL};
1414b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1415b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1416b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1417b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1418b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1419b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1420b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1421b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
1422b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1423b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db);
1424b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1425b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
1426b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1427b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
1428b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
1429b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
1430b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1431b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1432b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_perm(CuTest *tc) {
1433b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "class", "foo", "(", "read", "write", "open", ")", ")", NULL};
1434b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1435b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1436b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1437b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1438b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1439b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1440b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1441b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
1442b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
1443b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1444b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
1445b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1446b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_class *test_class;
1447b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_class_init(&test_class);
1448b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1449b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *parent_node;
1450b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&parent_node);
1451b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	parent_node->flavor = CIL_CLASS;
1452b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	parent_node->data = test_class;
1453b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *root;
1454b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&root);
1455b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	root->flavor = CIL_ROOT;
1456b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	parent_node->parent = root;
1457b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1458b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(parent_node, test_db2);
1459b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1460b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
1461b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1462b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head->cl_head, &finished, extra_args);
1463b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
1464b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
1465b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1466b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1467b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_perm_neg(CuTest *tc) {
1468b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "class", "foo", "(", "read", "write", "open", ")", ")", NULL};
1469b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1470b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1471b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1472b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1473b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1474b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1475b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1476b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
1477b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1478b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db);
1479b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1480b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
1481b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1482b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head->cl_head, &finished, extra_args);
1483b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
1484b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_ERR, rc);
1485b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1486b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1487b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_class(CuTest *tc) {
1488b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "class", "file", "(", "read", "write", "open", ")", ")", NULL};
1489b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1490b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1491b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1492b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1493b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1494b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1495b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1496b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
1497b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
1498b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1499b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
1500b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1501b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2);
1502b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1503b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
1504b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1505b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
1506b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
1507b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
1508b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1509b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1510b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_class_dup_neg(CuTest *tc) {
1511b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "class", "test", "(", "read", "write", ")", ")", NULL};
1512b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1513b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1514b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1515b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1516b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1517b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1518b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1519b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
1520b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1521b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db);
1522b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1523b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
1524b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1525b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
1526b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
1527b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_ERR, rc);
1528b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1529b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1530b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_common(CuTest *tc) {
1531b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "common", "test", "(", "read", "write", ")", ")", NULL};
1532b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1533b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1534b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1535b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1536b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1537b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1538b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1539b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
1540b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
1541b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1542b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
1543b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1544b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2);
1545b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1546b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
1547b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1548b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
1549b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
1550b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
1551b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1552b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1553b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_common_dup_neg(CuTest *tc) {
1554b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "class", "file", "(", "read", "write", "open", ")", ")", NULL};
1555b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1556b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1557b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1558b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1559b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1560b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1561b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1562b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
1563b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1564b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db);
1565b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1566b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
1567b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1568b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
1569b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
1570b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_ERR, rc);
1571b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1572b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1573b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_classcommon(CuTest *tc) {
1574b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "classcommon", "file", "file", NULL};
1575b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1576b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1577b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1578b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1579b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1580b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1581b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1582b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
1583b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
1584b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1585b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
1586b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1587b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2);
1588b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1589b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
1590b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1591b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
1592b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
1593b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
1594b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1595b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1596b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_sid(CuTest *tc) {
1597b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "sid", "test", ")", NULL};
1598b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1599b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1600b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1601b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1602b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1603b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1604b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1605b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
1606b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
1607b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1608b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
1609b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1610b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2);
1611b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1612b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
1613b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1614b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
1615b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
1616b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
1617b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1618b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1619b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_sid_merge(CuTest *tc) {
1620b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "sid", "test", ")", NULL};
1621b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1622b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1623b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1624b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1625b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1626b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1627b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1628b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
1629b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1630b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db);
1631b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1632b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
1633b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1634b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
1635b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
1636b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
1637b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1638b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1639b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_sidcontext(CuTest *tc) {
1640b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "sidcontext", "test", "(", "blah_u", "blah_r", "blah_t", "(", "low", "high", ")", ")", ")", NULL};
1641b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1642b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1643b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1644b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1645b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1646b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1647b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1648b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
1649b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
1650b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1651b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
1652b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1653b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2);
1654b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1655b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
1656b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1657b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
1658b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
1659b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
1660b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1661b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1662b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_user(CuTest *tc) {
1663b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "user", "sysadm", ")", NULL};
1664b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1665b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1666b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1667b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1668b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1669b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1670b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1671b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
1672b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
1673b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1674b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
1675b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1676b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2);
1677b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1678b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
1679b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1680b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
1681b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
1682b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
1683b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1684b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1685b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_user_merge(CuTest *tc) {
1686b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "user", "sysadm", ")", NULL};
1687b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1688b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1689b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1690b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1691b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1692b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1693b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1694b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
1695b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1696b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db);
1697b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1698b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
1699b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1700b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
1701b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
1702b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
1703b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1704b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1705b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_role(CuTest *tc) {
1706b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "role", "role_r", ")", NULL};
1707b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1708b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1709b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1710b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1711b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1712b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1713b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1714b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
1715b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
1716b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1717b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
1718b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1719b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2);
1720b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1721b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
1722b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1723b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
1724b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
1725b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
1726b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1727b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1728b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_role_merge(CuTest *tc) {
1729b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "role", "role_r", ")", NULL};
1730b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1731b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1732b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1733b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1734b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1735b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1736b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1737b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
1738b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1739b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db);
1740b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1741b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
1742b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1743b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
1744b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
1745b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
1746b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1747b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1748b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_userrole(CuTest *tc) {
1749b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "userrole", "staff_u", "staff_r", ")", NULL};
1750b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1751b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1752b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1753b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1754b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1755b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1756b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1757b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
1758b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
1759b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1760b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
1761b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1762b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2);
1763b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1764b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
1765b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1766b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
1767b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
1768b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
1769b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1770b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1771b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_type(CuTest *tc) {
1772b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "type", "type_t", ")", NULL};
1773b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1774b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1775b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1776b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1777b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1778b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1779b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1780b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
1781b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
1782b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1783b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
1784b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1785b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2);
1786b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1787b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
1788b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1789b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
1790b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
1791b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
1792b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1793b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1794b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_type_merge(CuTest *tc) {
1795b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "type", "type_t", ")", NULL};
1796b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1797b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1798b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1799b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1800b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1801b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1802b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1803b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
1804b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1805b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db);
1806b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1807b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
1808b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1809b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
1810b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
1811b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
1812b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1813b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1814b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_typeattribute(CuTest *tc) {
1815b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "typeattribute", "bar", ")", NULL};
1816b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1817b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1818b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1819b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1820b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1821b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1822b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1823b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
1824b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
1825b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1826b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
1827b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1828b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2);
1829b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1830b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
1831b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1832b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
1833b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
1834b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
1835b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1836b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1837b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_typeattribute_merge(CuTest *tc) {
1838b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "typeattribute", "bar", ")", NULL};
1839b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1840b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1841b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1842b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1843b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1844b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1845b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1846b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
1847b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1848b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db);
1849b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1850b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
1851b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1852b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
1853b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
1854b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
1855b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1856b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1857b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_typealias(CuTest *tc) {
1858b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "typealias", ".test.type", "type_t", ")", "(", "type", "test", ")", NULL};
1859b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1860b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1861b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1862b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1863b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1864b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1865b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1866b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
1867b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
1868b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1869b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
1870b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1871b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2);
1872b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1873b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
1874b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1875b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
1876b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
1877b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
1878b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1879b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1880b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_typealias_dup_neg(CuTest *tc) {
1881b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "typealias", ".test.type", "type_t", ")", "(", "type", "test", ")", NULL};
1882b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1883b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1884b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1885b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1886b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1887b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1888b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1889b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
1890b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1891b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db);
1892b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1893b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
1894b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1895b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
1896b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
1897b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_ERR, rc);
1898b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1899b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1900b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_bool(CuTest *tc) {
1901b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "boolean", "foo", "true", ")", NULL};
1902b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1903b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1904b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1905b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1906b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1907b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1908b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1909b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
1910b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
1911b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1912b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
1913b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1914b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2);
1915b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1916b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
1917b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1918b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
1919b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
1920b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
1921b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1922b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1923b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_bool_dup_neg(CuTest *tc) {
1924b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "boolean", "foo", "true", ")", NULL};
1925b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1926b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1927b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1928b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1929b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1930b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1931b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1932b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
1933b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1934b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db);
1935b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1936b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
1937b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1938b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
1939b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
1940b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_ERR, rc);
1941b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1942b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1943b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_avrule(CuTest *tc) {
1944b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "allow", "test", "foo", "(", "file", "(", "read", "write", ")", ")", ")", NULL};
1945b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1946b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1947b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1948b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1949b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1950b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1951b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1952b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
1953b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
1954b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1955b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
1956b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1957b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2);
1958b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1959b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
1960b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1961b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
1962b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
1963b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
1964b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1965b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1966b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_type_rule(CuTest *tc) {
1967b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "typetransition", "foo", "bar", "file", "foobar", ")", NULL};
1968b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1969b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1970b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1971b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1972b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1973b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1974b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1975b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
1976b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
1977b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1978b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
1979b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1980b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2);
1981b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1982b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
1983b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1984b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
1985b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
1986b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
1987b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
1988b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1989b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_sens(CuTest *tc) {
1990b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "sensitivity", "s0", ")", NULL};
1991b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1992b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
1993b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
1994b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1995b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
1996b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
1997b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
1998b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
1999b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
2000b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2001b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
2002b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2003b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2);
2004b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2005b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
2006b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2007b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
2008b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
2009b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
2010b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
2011b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2012b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_sens_merge(CuTest *tc) {
2013b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "sensitivity", "s0", ")", NULL};
2014b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2015b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
2016b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
2017b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2018b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
2019b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
2020b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2021b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
2022b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2023b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db);
2024b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2025b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
2026b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2027b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
2028b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
2029b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
2030b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
2031b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2032b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_sensalias(CuTest *tc) {
2033b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "sensitivityalias", "s0", "alias", ")", NULL};
2034b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2035b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
2036b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
2037b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2038b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
2039b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
2040b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2041b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
2042b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
2043b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2044b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
2045b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2046b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2);
2047b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2048b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
2049b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2050b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
2051b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
2052b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
2053b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
2054b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2055b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_sensalias_dup_neg(CuTest *tc) {
2056b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "sensitivityalias", "s0", "alias", ")", NULL};
2057b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2058b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
2059b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
2060b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2061b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
2062b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
2063b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2064b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
2065b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2066b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db);
2067b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2068b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
2069b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2070b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
2071b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
2072b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_ERR, rc);
2073b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
2074b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2075b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_cat(CuTest *tc) {
2076b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "category", "c0", ")", NULL};
2077b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2078b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
2079b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
2080b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2081b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
2082b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
2083b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2084b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
2085b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
2086b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2087b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
2088b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2089b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2);
2090b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2091b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
2092b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2093b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
2094b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
2095b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
2096b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
2097b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2098b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_cat_merge(CuTest *tc) {
2099b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "category", "c0", ")", NULL};
2100b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2101b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
2102b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
2103b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2104b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
2105b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
2106b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2107b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
2108b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2109b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db);
2110b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2111b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
2112b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2113b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
2114b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
2115b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
2116b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
2117b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2118b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_catalias(CuTest *tc) {
2119b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "categoryalias", "c0", "red", ")", NULL};
2120b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2121b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
2122b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
2123b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2124b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
2125b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
2126b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2127b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
2128b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
2129b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2130b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
2131b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2132b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2);
2133b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2134b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
2135b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2136b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
2137b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
2138b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
2139b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
2140b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2141b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_catalias_dup_neg(CuTest *tc) {
2142b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "categoryalias", "c0", "red", ")", NULL};
2143b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2144b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
2145b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
2146b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2147b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
2148b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
2149b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2150b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
2151b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2152b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db);
2153b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2154b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
2155b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2156b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
2157b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
2158b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_ERR, rc);
2159b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
2160b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2161b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_senscat(CuTest *tc) {
2162b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "sensitivity", "s0", ")",
2163b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence                        "(", "sensitivity", "s1", ")",
2164b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence                        "(", "dominance", "(", "s0", "s1", ")", ")",
2165b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence			"(", "category", "c0", ")",
2166b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence			"(", "category", "c255", ")",
2167b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence			"(", "categoryorder", "(", "c0", "c255", ")", ")",
2168b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence			"(", "sensitivitycategory", "s1", "(", "c0", "c255", ")", ")", NULL};
2169b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2170b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
2171b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
2172b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2173b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
2174b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
2175b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2176b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
2177b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
2178b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2179b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
2180b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2181b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_senscat *test_senscat;
2182b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_senscat_init(&test_senscat);
2183b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2184b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *parent_node;
2185b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&parent_node);
2186b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	parent_node->flavor = CIL_SENSCAT;
2187b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	parent_node->data = test_senscat;
2188b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2189b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(parent_node, test_db2);
2190b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2191b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
2192b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2193b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head->next->next->next->next->next->next, &finished, extra_args);
2194b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
2195b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
2196b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
2197b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2198b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_catorder(CuTest *tc) {
2199b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "category", "c0", ")",
2200b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence			"(", "category", "c255", ")",
2201b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence			"(", "categoryorder", "(", "c0", "c255", ")", ")", NULL};
2202b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2203b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
2204b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
2205b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2206b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
2207b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
2208b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2209b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
2210b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
2211b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2212b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
2213b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2214b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_catorder *test_catorder;
2215b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_catorder_init(&test_catorder);
2216b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2217b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *parent_node;
2218b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&parent_node);
2219b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	parent_node->flavor = CIL_CATORDER;
2220b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	parent_node->data = test_catorder;
2221b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2222b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(parent_node, test_db2);
2223b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2224b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
2225b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2226b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head->next->next, &finished, extra_args);
2227b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
2228b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
2229b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
2230b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2231b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_dominance(CuTest *tc) {
2232b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence        char *line[] = {"(", "sensitivity", "s0", ")",
2233b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence                        "(", "sensitivity", "s1", ")",
2234b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence                        "(", "sensitivity", "s2", ")",
2235b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence                        "(", "dominance", "(", "s0", "s1", ")", ")", NULL};
2236b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2237b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
2238b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
2239b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2240b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
2241b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
2242b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2243b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
2244b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
2245b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2246b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
2247b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2248b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_sens *test_sens;
2249b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_sens_init(&test_sens);
2250b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2251b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree_node *parent_node;
2252b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_tree_node_init(&parent_node);
2253b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	parent_node->flavor = CIL_SENS;
2254b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	parent_node->data = test_sens;
2255b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2256b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(parent_node, test_db2);
2257b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2258b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
2259b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2260b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head->next->next->next, &finished, extra_args);
2261b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
2262b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
2263b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
2264b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2265b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_level(CuTest *tc) {
2266b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "level", "low", "(", "s0", "(", "c1", ")", ")", ")", NULL};
2267b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2268b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
2269b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
2270b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2271b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
2272b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
2273b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2274b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
2275b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
2276b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2277b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
2278b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2279b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2);
2280b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2281b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
2282b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2283b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
2284b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
2285b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
2286b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
2287b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2288b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_level_dup_neg(CuTest *tc) {
2289b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "level", "low", "(", "s0", "(", "c1", ")", ")", ")", NULL};
2290b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2291b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
2292b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
2293b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2294b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
2295b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
2296b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2297b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
2298b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2299b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db);
2300b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2301b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
2302b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2303b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
2304b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
2305b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_ERR, rc);
2306b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
2307b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2308b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_context(CuTest *tc) {
2309b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "context", "packet_default", "(", "system_u", "object_r", "etc_t", "(", "low", "high", ")", ")", ")", NULL};
2310b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2311b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
2312b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
2313b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2314b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
2315b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
2316b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2317b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
2318b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
2319b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2320b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
2321b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2322b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2);
2323b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2324b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
2325b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2326b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
2327b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
2328b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
2329b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
2330b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2331b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_context_dup_neg(CuTest *tc) {
2332b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "context", "packet_default", "(", "system_u", "object_r", "etc_t", "(", "low", "high", ")",  ")", ")", NULL};
2333b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2334b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
2335b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
2336b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2337b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
2338b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
2339b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2340b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
2341b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2342b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db);
2343b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2344b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
2345b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2346b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
2347b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
2348b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_ERR, rc);
2349b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
2350b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2351b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_netifcon(CuTest *tc) {
2352b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "netifcon", "eth0", "if_default", "packet_default", ")", NULL};
2353b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2354b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
2355b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
2356b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2357b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
2358b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
2359b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2360b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
2361b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
2362b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2363b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
2364b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2365b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2);
2366b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2367b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
2368b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2369b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
2370b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
2371b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
2372b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
2373b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2374b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_call(CuTest *tc) {
2375b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "call", "mm", "(", "foo", ")", ")", NULL};
2376b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2377b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
2378b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
2379b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2380b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
2381b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
2382b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2383b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
2384b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
2385b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2386b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
2387b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2388b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2);
2389b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2390b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
2391b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2392b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
2393b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
2394b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
2395b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
2396b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2397b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_optional(CuTest *tc) {
2398b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "optional", "opt", "(", "allow", "foo", "bar", "(", "file", "(", "read", ")", ")", ")", ")", NULL};
2399b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2400b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
2401b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
2402b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2403b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
2404b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
2405b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2406b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
2407b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
2408b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2409b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
2410b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2411b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2);
2412b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2413b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
2414b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2415b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
2416b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
2417b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
2418b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
2419b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2420b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_optional_merge(CuTest *tc) {
2421b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "optional", "opt", "(", "allow", "foo", "bar", "(", "file", "(", "read", ")", ")", ")", ")", NULL};
2422b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2423b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
2424b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
2425b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2426b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
2427b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
2428b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2429b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
2430b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2431b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db);
2432b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2433b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
2434b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2435b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
2436b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
2437b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
2438b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
2439b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2440b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_ipaddr(CuTest *tc) {
2441b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "ipaddr", "ip", "192.168.1.1", ")", NULL};
2442b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2443b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
2444b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
2445b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2446b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
2447b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
2448b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2449b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
2450b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
2451b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2452b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
2453b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2454b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2);
2455b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2456b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
2457b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2458b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
2459b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
2460b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
2461b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
2462b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2463b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_ipaddr_dup_neg(CuTest *tc) {
2464b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "ipaddr", "ip", "192.168.1.1", ")", NULL};
2465b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2466b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
2467b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
2468b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2469b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
2470b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
2471b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2472b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
2473b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2474b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db->ast->root, test_db);
2475b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2476b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
2477b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2478b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
2479b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
2480b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_ERR, rc);
2481b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
2482b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2483b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_boolif(CuTest *tc) {
2484b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "booleanif", "(", "and", "foo", "bar", ")",
2485b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence			"(", "true",
2486b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence			"(", "allow", "foo", "bar", "(", "file", "(", "read", ")", ")", ")", ")", ")", NULL};
2487b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2488b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
2489b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
2490b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2491b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
2492b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
2493b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2494b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
2495b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
2496b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2497b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
2498b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2499b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2);
2500b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2501b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
2502b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2503b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
2504b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
2505b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
2506b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
2507b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2508b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_mlsconstrain(CuTest *tc) {
2509b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "mlsconstrain", "(", "file", "(", "create", "relabelto", ")", ")", "(", "eq", "l1", "l2", ")", ")", NULL};
2510b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2511b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
2512b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
2513b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2514b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
2515b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
2516b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2517b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
2518b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
2519b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2520b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
2521b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2522b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2);
2523b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2524b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
2525b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2526b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
2527b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, finished, 0);
2528b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_OK, rc);
2529b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
2530b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2531b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_orignull_neg(CuTest *tc) {
2532b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", ")", NULL};
2533b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2534b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
2535b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
2536b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2537b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
2538b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
2539b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2540b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
2541b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
2542b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2543b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
2544b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2545b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = gen_copy_args(test_db2->ast->root, test_db2);
2546b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2547b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
2548b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_ERR, rc);
2549b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
2550b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2551b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrencevoid test_cil_copy_node_helper_extraargsnull_neg(CuTest *tc) {
2552b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	char *line[] = {"(", "mlsconstrain", "(", "file", "dir", ")", "(", "create", "relabelto", ")", "(", "eq", "l1", "l2", ")", ")", NULL};
2553b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2554b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_tree *test_tree;
2555b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	gen_test_tree(&test_tree, line);
2556b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2557b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db;
2558b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db);
2559b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2560b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_db *test_db2;
2561b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_db_init(&test_db2);
2562b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2563b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	struct cil_args_copy *extra_args = NULL;
2564b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2565b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	uint32_t finished = 0;
2566b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2567b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	cil_build_ast(test_db, test_tree->root, test_db->ast->root);
2568b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence
2569b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	int rc = __cil_copy_node_helper(test_db->ast->root->cl_head, &finished, extra_args);
2570b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence	CuAssertIntEquals(tc, SEPOL_ERR, rc);
2571b19eafb97feb6389d78e1693f276fc5b10e25bdSteve Lawrence}
2572