1255e72915d4cbddceb435e13d81601755714e9fSE Android/* 2255e72915d4cbddceb435e13d81601755714e9fSE Android * Author: Joshua Brindle <jbrindle@tresys.com> 3255e72915d4cbddceb435e13d81601755714e9fSE Android * Chad Sellers <csellers@tresys.com> 4255e72915d4cbddceb435e13d81601755714e9fSE Android * 5255e72915d4cbddceb435e13d81601755714e9fSE Android * Copyright (C) 2006 Tresys Technology, LLC 6255e72915d4cbddceb435e13d81601755714e9fSE Android * 7255e72915d4cbddceb435e13d81601755714e9fSE Android * This library is free software; you can redistribute it and/or 8255e72915d4cbddceb435e13d81601755714e9fSE Android * modify it under the terms of the GNU Lesser General Public 9255e72915d4cbddceb435e13d81601755714e9fSE Android * License as published by the Free Software Foundation; either 10255e72915d4cbddceb435e13d81601755714e9fSE Android * version 2.1 of the License, or (at your option) any later version. 11255e72915d4cbddceb435e13d81601755714e9fSE Android * 12255e72915d4cbddceb435e13d81601755714e9fSE Android * This library is distributed in the hope that it will be useful, 13255e72915d4cbddceb435e13d81601755714e9fSE Android * but WITHOUT ANY WARRANTY; without even the implied warranty of 14255e72915d4cbddceb435e13d81601755714e9fSE Android * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15255e72915d4cbddceb435e13d81601755714e9fSE Android * Lesser General Public License for more details. 16255e72915d4cbddceb435e13d81601755714e9fSE Android * 17255e72915d4cbddceb435e13d81601755714e9fSE Android * You should have received a copy of the GNU Lesser General Public 18255e72915d4cbddceb435e13d81601755714e9fSE Android * License along with this library; if not, write to the Free Software 19255e72915d4cbddceb435e13d81601755714e9fSE Android * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 20255e72915d4cbddceb435e13d81601755714e9fSE Android */ 21255e72915d4cbddceb435e13d81601755714e9fSE Android 22255e72915d4cbddceb435e13d81601755714e9fSE Android#include "parse_util.h" 23255e72915d4cbddceb435e13d81601755714e9fSE Android#include "helpers.h" 24255e72915d4cbddceb435e13d81601755714e9fSE Android#include "test-common.h" 25255e72915d4cbddceb435e13d81601755714e9fSE Android 26255e72915d4cbddceb435e13d81601755714e9fSE Android#include <sepol/policydb/policydb.h> 27255e72915d4cbddceb435e13d81601755714e9fSE Android#include <sepol/policydb/link.h> 28255e72915d4cbddceb435e13d81601755714e9fSE Android 29255e72915d4cbddceb435e13d81601755714e9fSE Android#include <CUnit/Basic.h> 30255e72915d4cbddceb435e13d81601755714e9fSE Android#include <stdlib.h> 31255e72915d4cbddceb435e13d81601755714e9fSE Android 32255e72915d4cbddceb435e13d81601755714e9fSE Android/* Tests for types: 33255e72915d4cbddceb435e13d81601755714e9fSE Android * Test for each of these for 34255e72915d4cbddceb435e13d81601755714e9fSE Android * - type in appropriate symtab (global and decl) 35255e72915d4cbddceb435e13d81601755714e9fSE Android * - datum in the decl symtab has correct type bitmap (if attr) 36255e72915d4cbddceb435e13d81601755714e9fSE Android * - primary is set correctly 37255e72915d4cbddceb435e13d81601755714e9fSE Android * - scope datum has correct decl ids 38255e72915d4cbddceb435e13d81601755714e9fSE Android * Tests: 39255e72915d4cbddceb435e13d81601755714e9fSE Android * - type in base, no modules 40255e72915d4cbddceb435e13d81601755714e9fSE Android * - type in base optional, no modules 41255e72915d4cbddceb435e13d81601755714e9fSE Android * - type a in base, b in module 42255e72915d4cbddceb435e13d81601755714e9fSE Android * - type a in base optional, b in module 43255e72915d4cbddceb435e13d81601755714e9fSE Android * - type a in base, b in module optional 44255e72915d4cbddceb435e13d81601755714e9fSE Android * - type a in base optional, b in module optional 45255e72915d4cbddceb435e13d81601755714e9fSE Android * - attr in base, no modules 46255e72915d4cbddceb435e13d81601755714e9fSE Android * - attr in base optional, no modules 47255e72915d4cbddceb435e13d81601755714e9fSE Android * - attr a in base, b in module 48255e72915d4cbddceb435e13d81601755714e9fSE Android * - attr a in base optional, b in module 49255e72915d4cbddceb435e13d81601755714e9fSE Android * - attr a in base, b in module optional 50255e72915d4cbddceb435e13d81601755714e9fSE Android * - attr a in base optional, b in module optional 51255e72915d4cbddceb435e13d81601755714e9fSE Android * - attr a declared in base, added to in module 52255e72915d4cbddceb435e13d81601755714e9fSE Android * - attr a declared in base, added to in module optional 53255e72915d4cbddceb435e13d81601755714e9fSE Android * - attr a declared in base, added to in 2 modules 54255e72915d4cbddceb435e13d81601755714e9fSE Android * - attr a declared in base, added to in 2 modules (optional and global) 55255e72915d4cbddceb435e13d81601755714e9fSE Android * - attr a declared in base optional, added to in module 56255e72915d4cbddceb435e13d81601755714e9fSE Android * - attr a declared in base optional, added to in module optional 57255e72915d4cbddceb435e13d81601755714e9fSE Android * - attr a added to in base optional, declared in module 58255e72915d4cbddceb435e13d81601755714e9fSE Android * - attr a added to in base optional, declared in module optional 59255e72915d4cbddceb435e13d81601755714e9fSE Android * - attr a added to in base optional, declared in module, added to in other module 60255e72915d4cbddceb435e13d81601755714e9fSE Android * - attr a added to in base optional, declared in module optional, added to in other module 61255e72915d4cbddceb435e13d81601755714e9fSE Android * - attr a added to in base optional, declared in module , added to in other module optional 62255e72915d4cbddceb435e13d81601755714e9fSE Android * - attr a added to in base optional, declared in module optional, added to in other module optional 63255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias in base of primary type in base, no modules 64255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias in base optional of primary type in base, no modules 65255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias in base optional of primary type in base optional 66255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias in module of primary type in base 67255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias in module optional of primary type in base 68255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias in module optional of primary type in base optional 69255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias in module of primary type in module 70255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias in module optional of primary type in module 71255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias in module optional of primary type in module optional 72255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias a in base, b in module, primary type in base 73255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias a in base, b in module, primary type in module 74255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias a in base optional, b in module, primary type in base 75255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias a in base optional, b in module, primary type in module 76255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias a in base, b in module optional, primary type in base 77255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias a in base, b in module optional, primary type in module 78255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias a in base optional, b in module optional, primary type in base 79255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias a in base optional, b in module optional, primary type in module 80255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias a in base, required in module, primary type in base 81255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias a in base, required in base optional, primary type in base 82255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias a in base, required in module optional, primary type in base 83255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias a in module, required in base optional, primary type in base 84255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias a in module, required in module optional, primary type in base 85255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias a in base optional, required in module, primary type in base 86255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias a in base optional, required in different base optional, primary type in base 87255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias a in base optional, required in module optional, primary type in base 88255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias a in module optional, required in base optional, primary type in base 89255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias a in module optional, required in module optional, primary type in base 90255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias a in module, required in base optional, primary type in module 91255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias a in module, required in module optional, primary type in module 92255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias a in base optional, required in module, primary type in module 93255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias a in base optional, required in different base optional, primary type in module 94255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias a in base optional, required in module optional, primary type in module 95255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias a in module optional, required in base optional, primary type in module 96255e72915d4cbddceb435e13d81601755714e9fSE Android * - alias a in module optional, required in module optional, primary type in module 97255e72915d4cbddceb435e13d81601755714e9fSE Android */ 98255e72915d4cbddceb435e13d81601755714e9fSE Android 99255e72915d4cbddceb435e13d81601755714e9fSE Android/* Don't pass in decls from global blocks since symbols aren't stored in their symtab */ 100255e72915d4cbddceb435e13d81601755714e9fSE Androidstatic void test_type_datum(policydb_t * p, char *id, unsigned int *decls, int len, unsigned int primary) 101255e72915d4cbddceb435e13d81601755714e9fSE Android{ 102255e72915d4cbddceb435e13d81601755714e9fSE Android int i; 103255e72915d4cbddceb435e13d81601755714e9fSE Android unsigned int value; 104255e72915d4cbddceb435e13d81601755714e9fSE Android type_datum_t *type; 105255e72915d4cbddceb435e13d81601755714e9fSE Android 106255e72915d4cbddceb435e13d81601755714e9fSE Android /* just test the type datums for each decl to see if it is what we expect */ 107255e72915d4cbddceb435e13d81601755714e9fSE Android type = hashtab_search(p->p_types.table, id); 108255e72915d4cbddceb435e13d81601755714e9fSE Android 109255e72915d4cbddceb435e13d81601755714e9fSE Android CU_ASSERT_FATAL(type != NULL); 110255e72915d4cbddceb435e13d81601755714e9fSE Android CU_ASSERT(type->primary == primary); 111255e72915d4cbddceb435e13d81601755714e9fSE Android CU_ASSERT(type->flavor == TYPE_TYPE); 112255e72915d4cbddceb435e13d81601755714e9fSE Android 113255e72915d4cbddceb435e13d81601755714e9fSE Android value = type->s.value; 114255e72915d4cbddceb435e13d81601755714e9fSE Android 115255e72915d4cbddceb435e13d81601755714e9fSE Android for (i = 0; i < len; i++) { 116255e72915d4cbddceb435e13d81601755714e9fSE Android type = hashtab_search(p->decl_val_to_struct[decls[i] - 1]->p_types.table, id); 117255e72915d4cbddceb435e13d81601755714e9fSE Android CU_ASSERT_FATAL(type != NULL); 118255e72915d4cbddceb435e13d81601755714e9fSE Android CU_ASSERT(type->primary == primary); 119255e72915d4cbddceb435e13d81601755714e9fSE Android CU_ASSERT(type->flavor == TYPE_TYPE); 120255e72915d4cbddceb435e13d81601755714e9fSE Android CU_ASSERT(type->s.value == value); 121255e72915d4cbddceb435e13d81601755714e9fSE Android } 122255e72915d4cbddceb435e13d81601755714e9fSE Android 123255e72915d4cbddceb435e13d81601755714e9fSE Android} 124255e72915d4cbddceb435e13d81601755714e9fSE Android 125255e72915d4cbddceb435e13d81601755714e9fSE Androidvoid base_type_tests(policydb_t * base) 126255e72915d4cbddceb435e13d81601755714e9fSE Android{ 127255e72915d4cbddceb435e13d81601755714e9fSE Android unsigned int decls[2]; 128255e72915d4cbddceb435e13d81601755714e9fSE Android char *types[2]; 129255e72915d4cbddceb435e13d81601755714e9fSE Android 130255e72915d4cbddceb435e13d81601755714e9fSE Android /* These tests look at types in the base only, the desire is to ensure that 131255e72915d4cbddceb435e13d81601755714e9fSE Android * types are not destroyed or otherwise removed during the link process. 132255e72915d4cbddceb435e13d81601755714e9fSE Android * if this happens these tests won't work anyway since we are using types to 133255e72915d4cbddceb435e13d81601755714e9fSE Android * mark blocks */ 134255e72915d4cbddceb435e13d81601755714e9fSE Android 135255e72915d4cbddceb435e13d81601755714e9fSE Android /**** test for g_b_type_1 in base and decl 1 (global) ****/ 136255e72915d4cbddceb435e13d81601755714e9fSE Android decls[0] = (test_find_decl_by_sym(base, SYM_TYPES, "tag_g_b"))->decl_id; 137255e72915d4cbddceb435e13d81601755714e9fSE Android test_sym_presence(base, "g_b_type_1", SYM_TYPES, SCOPE_DECL, decls, 1); 138255e72915d4cbddceb435e13d81601755714e9fSE Android test_type_datum(base, "g_b_type_1", NULL, 0, 1); 139255e72915d4cbddceb435e13d81601755714e9fSE Android /* this attr is in the same decl as the type */ 140255e72915d4cbddceb435e13d81601755714e9fSE Android test_sym_presence(base, "g_b_attr_1", SYM_TYPES, SCOPE_DECL, decls, 1); 141255e72915d4cbddceb435e13d81601755714e9fSE Android types[0] = "g_b_type_1"; 142255e72915d4cbddceb435e13d81601755714e9fSE Android test_attr_types(base, "g_b_attr_1", NULL, types, 1); 143255e72915d4cbddceb435e13d81601755714e9fSE Android 144255e72915d4cbddceb435e13d81601755714e9fSE Android /**** test for o1_b_type_1 in optional (decl 2) ****/ 145255e72915d4cbddceb435e13d81601755714e9fSE Android decls[0] = (test_find_decl_by_sym(base, SYM_TYPES, "tag_o1_b"))->decl_id; 146255e72915d4cbddceb435e13d81601755714e9fSE Android test_sym_presence(base, "o1_b_type_1", SYM_TYPES, SCOPE_DECL, decls, 1); 147255e72915d4cbddceb435e13d81601755714e9fSE Android test_type_datum(base, "o1_b_type_1", NULL, 0, 1); 148255e72915d4cbddceb435e13d81601755714e9fSE Android /* this attr is in the same decl as the type */ 149255e72915d4cbddceb435e13d81601755714e9fSE Android test_sym_presence(base, "o1_b_attr_1", SYM_TYPES, SCOPE_DECL, decls, 1); 150255e72915d4cbddceb435e13d81601755714e9fSE Android types[0] = "o1_b_type_1"; 151255e72915d4cbddceb435e13d81601755714e9fSE Android test_attr_types(base, "o1_b_attr_1", base->decl_val_to_struct[decls[0] - 1], types, 1); 152255e72915d4cbddceb435e13d81601755714e9fSE Android 153255e72915d4cbddceb435e13d81601755714e9fSE Android /* tests for aliases */ 154255e72915d4cbddceb435e13d81601755714e9fSE Android decls[0] = (test_find_decl_by_sym(base, SYM_TYPES, "tag_g_b"))->decl_id; 155255e72915d4cbddceb435e13d81601755714e9fSE Android test_sym_presence(base, "g_b_alias_1", SYM_TYPES, SCOPE_DECL, decls, 1); 156255e72915d4cbddceb435e13d81601755714e9fSE Android test_alias_datum(base, "g_b_alias_1", "g_b_type_3", 1, 0); 157255e72915d4cbddceb435e13d81601755714e9fSE Android decls[0] = (test_find_decl_by_sym(base, SYM_TYPES, "tag_o6_b"))->decl_id; 158255e72915d4cbddceb435e13d81601755714e9fSE Android test_sym_presence(base, "g_b_alias_2", SYM_TYPES, SCOPE_DECL, decls, 1); 159255e72915d4cbddceb435e13d81601755714e9fSE Android test_alias_datum(base, "g_b_alias_2", "g_b_type_3", 1, 0); 160255e72915d4cbddceb435e13d81601755714e9fSE Android 161255e72915d4cbddceb435e13d81601755714e9fSE Android} 162255e72915d4cbddceb435e13d81601755714e9fSE Android 163255e72915d4cbddceb435e13d81601755714e9fSE Androidvoid module_type_tests(policydb_t * base) 164255e72915d4cbddceb435e13d81601755714e9fSE Android{ 165255e72915d4cbddceb435e13d81601755714e9fSE Android unsigned int decls[2]; 166255e72915d4cbddceb435e13d81601755714e9fSE Android char *types[2]; 167255e72915d4cbddceb435e13d81601755714e9fSE Android avrule_decl_t *d; 168255e72915d4cbddceb435e13d81601755714e9fSE Android 169255e72915d4cbddceb435e13d81601755714e9fSE Android /* These tests look at types that were copied from modules or attributes 170255e72915d4cbddceb435e13d81601755714e9fSE Android * that were modified and declared in modules and base. These apply to 171255e72915d4cbddceb435e13d81601755714e9fSE Android * declarations and modifications in and out of optionals. These tests 172255e72915d4cbddceb435e13d81601755714e9fSE Android * should ensure that types and attributes are correctly copied from modules 173255e72915d4cbddceb435e13d81601755714e9fSE Android * and that attribute type sets are correctly copied and mapped. */ 174255e72915d4cbddceb435e13d81601755714e9fSE Android 175255e72915d4cbddceb435e13d81601755714e9fSE Android /* note: scope for attributes is currently smashed if the attribute is declared 176255e72915d4cbddceb435e13d81601755714e9fSE Android * somewhere so the scope test only looks at global, the type bitmap test looks 177255e72915d4cbddceb435e13d81601755714e9fSE Android * at the appropriate decl symtab */ 178255e72915d4cbddceb435e13d81601755714e9fSE Android 179255e72915d4cbddceb435e13d81601755714e9fSE Android /* test for type in module 1 (global) */ 180255e72915d4cbddceb435e13d81601755714e9fSE Android decls[0] = (test_find_decl_by_sym(base, SYM_TYPES, "tag_g_m1"))->decl_id; 181255e72915d4cbddceb435e13d81601755714e9fSE Android test_sym_presence(base, "g_m1_type_1", SYM_TYPES, SCOPE_DECL, decls, 1); 182255e72915d4cbddceb435e13d81601755714e9fSE Android test_type_datum(base, "g_m1_type_1", NULL, 0, 1); 183255e72915d4cbddceb435e13d81601755714e9fSE Android /* attr has is in the same decl as the above type */ 184255e72915d4cbddceb435e13d81601755714e9fSE Android test_sym_presence(base, "g_m1_attr_1", SYM_TYPES, SCOPE_DECL, decls, 1); 185255e72915d4cbddceb435e13d81601755714e9fSE Android types[0] = "g_m1_type_1"; 186255e72915d4cbddceb435e13d81601755714e9fSE Android types[1] = "g_m1_type_2"; 187255e72915d4cbddceb435e13d81601755714e9fSE Android test_attr_types(base, "g_m1_attr_1", NULL, types, 2); 188255e72915d4cbddceb435e13d81601755714e9fSE Android 189255e72915d4cbddceb435e13d81601755714e9fSE Android /* test for type in module 1 (optional) */ 190255e72915d4cbddceb435e13d81601755714e9fSE Android decls[0] = (test_find_decl_by_sym(base, SYM_TYPES, "tag_o1_m1"))->decl_id; 191255e72915d4cbddceb435e13d81601755714e9fSE Android test_sym_presence(base, "o1_m1_type_1", SYM_TYPES, SCOPE_DECL, decls, 1); 192255e72915d4cbddceb435e13d81601755714e9fSE Android test_type_datum(base, "o1_m1_type_1", NULL, 0, 1); 193255e72915d4cbddceb435e13d81601755714e9fSE Android /* attr has is in the same decl as the above type */ 194255e72915d4cbddceb435e13d81601755714e9fSE Android test_sym_presence(base, "o1_m1_attr_1", SYM_TYPES, SCOPE_DECL, decls, 1); 195255e72915d4cbddceb435e13d81601755714e9fSE Android types[0] = "o1_m1_type_2"; 196255e72915d4cbddceb435e13d81601755714e9fSE Android test_attr_types(base, "o1_m1_attr_1", base->decl_val_to_struct[decls[0] - 1], types, 1); 197255e72915d4cbddceb435e13d81601755714e9fSE Android 198255e72915d4cbddceb435e13d81601755714e9fSE Android /* test for attr declared in base, added to in module (global). 199255e72915d4cbddceb435e13d81601755714e9fSE Android * Since these are both global it'll be merged in the main symtab */ 200255e72915d4cbddceb435e13d81601755714e9fSE Android decls[0] = (test_find_decl_by_sym(base, SYM_TYPES, "tag_g_b"))->decl_id; 201255e72915d4cbddceb435e13d81601755714e9fSE Android test_sym_presence(base, "g_b_attr_3", SYM_TYPES, SCOPE_DECL, decls, 1); 202255e72915d4cbddceb435e13d81601755714e9fSE Android types[0] = "g_m1_type_3"; 203255e72915d4cbddceb435e13d81601755714e9fSE Android test_attr_types(base, "g_b_attr_3", NULL, types, 1); 204255e72915d4cbddceb435e13d81601755714e9fSE Android 205255e72915d4cbddceb435e13d81601755714e9fSE Android /* test for attr declared in base, added to in module (optional). */ 206255e72915d4cbddceb435e13d81601755714e9fSE Android decls[0] = (test_find_decl_by_sym(base, SYM_TYPES, "tag_g_b"))->decl_id; 207255e72915d4cbddceb435e13d81601755714e9fSE Android test_sym_presence(base, "g_b_attr_4", SYM_TYPES, SCOPE_DECL, decls, 1); 208255e72915d4cbddceb435e13d81601755714e9fSE Android 209255e72915d4cbddceb435e13d81601755714e9fSE Android decls[0] = (test_find_decl_by_sym(base, SYM_TYPES, "tag_o1_m1"))->decl_id; 210255e72915d4cbddceb435e13d81601755714e9fSE Android types[0] = "o1_m1_type_3"; 211255e72915d4cbddceb435e13d81601755714e9fSE Android test_attr_types(base, "g_b_attr_4", base->decl_val_to_struct[decls[0] - 1], types, 1); 212255e72915d4cbddceb435e13d81601755714e9fSE Android 213255e72915d4cbddceb435e13d81601755714e9fSE Android /* test for attr declared in base, added to in 2 modules (global). (merged in main symtab) */ 214255e72915d4cbddceb435e13d81601755714e9fSE Android decls[0] = (test_find_decl_by_sym(base, SYM_TYPES, "tag_g_b"))->decl_id; 215255e72915d4cbddceb435e13d81601755714e9fSE Android test_sym_presence(base, "g_b_attr_5", SYM_TYPES, SCOPE_DECL, decls, 1); 216255e72915d4cbddceb435e13d81601755714e9fSE Android types[0] = "g_m1_type_4"; 217255e72915d4cbddceb435e13d81601755714e9fSE Android types[1] = "g_m2_type_4"; 218255e72915d4cbddceb435e13d81601755714e9fSE Android test_attr_types(base, "g_b_attr_5", NULL, types, 2); 219255e72915d4cbddceb435e13d81601755714e9fSE Android 220255e72915d4cbddceb435e13d81601755714e9fSE Android /* test for attr declared in base, added to in 2 modules (optional/global). */ 221255e72915d4cbddceb435e13d81601755714e9fSE Android decls[0] = (test_find_decl_by_sym(base, SYM_TYPES, "tag_g_b"))->decl_id; 222255e72915d4cbddceb435e13d81601755714e9fSE Android test_sym_presence(base, "g_b_attr_6", SYM_TYPES, SCOPE_DECL, decls, 1); 223255e72915d4cbddceb435e13d81601755714e9fSE Android /* module 2 was global to its type is in main symtab */ 224255e72915d4cbddceb435e13d81601755714e9fSE Android types[0] = "g_m2_type_5"; 225255e72915d4cbddceb435e13d81601755714e9fSE Android test_attr_types(base, "g_b_attr_6", NULL, types, 1); 226255e72915d4cbddceb435e13d81601755714e9fSE Android d = (test_find_decl_by_sym(base, SYM_TYPES, "tag_o3_m1")); 227255e72915d4cbddceb435e13d81601755714e9fSE Android types[0] = "o3_m1_type_2"; 228255e72915d4cbddceb435e13d81601755714e9fSE Android test_attr_types(base, "g_b_attr_6", d, types, 1); 229255e72915d4cbddceb435e13d81601755714e9fSE Android 230255e72915d4cbddceb435e13d81601755714e9fSE Android /* test for attr declared in base optional, added to in module (global). */ 231255e72915d4cbddceb435e13d81601755714e9fSE Android decls[0] = (test_find_decl_by_sym(base, SYM_TYPES, "tag_o4_b"))->decl_id; 232255e72915d4cbddceb435e13d81601755714e9fSE Android test_sym_presence(base, "o4_b_attr_1", SYM_TYPES, SCOPE_DECL, decls, 1); 233255e72915d4cbddceb435e13d81601755714e9fSE Android types[0] = "g_m1_type_5"; 234255e72915d4cbddceb435e13d81601755714e9fSE Android test_attr_types(base, "o4_b_attr_1", NULL, types, 1); 235255e72915d4cbddceb435e13d81601755714e9fSE Android 236255e72915d4cbddceb435e13d81601755714e9fSE Android /* test for attr declared in base optional, added to in module (optional). */ 237255e72915d4cbddceb435e13d81601755714e9fSE Android decls[0] = (test_find_decl_by_sym(base, SYM_TYPES, "tag_o1_b"))->decl_id; 238255e72915d4cbddceb435e13d81601755714e9fSE Android test_sym_presence(base, "o1_b_attr_2", SYM_TYPES, SCOPE_DECL, decls, 1); 239255e72915d4cbddceb435e13d81601755714e9fSE Android d = test_find_decl_by_sym(base, SYM_TYPES, "tag_o1_m1"); 240255e72915d4cbddceb435e13d81601755714e9fSE Android types[0] = "o1_m1_type_5"; 241255e72915d4cbddceb435e13d81601755714e9fSE Android test_attr_types(base, "o1_b_attr_2", d, types, 1); 242255e72915d4cbddceb435e13d81601755714e9fSE Android 243255e72915d4cbddceb435e13d81601755714e9fSE Android /* test for attr declared in module, added to in base optional */ 244255e72915d4cbddceb435e13d81601755714e9fSE Android decls[0] = (test_find_decl_by_sym(base, SYM_TYPES, "tag_g_m1"))->decl_id; 245255e72915d4cbddceb435e13d81601755714e9fSE Android test_sym_presence(base, "g_m1_attr_2", SYM_TYPES, SCOPE_DECL, decls, 1); 246255e72915d4cbddceb435e13d81601755714e9fSE Android d = test_find_decl_by_sym(base, SYM_TYPES, "tag_o1_b"); 247255e72915d4cbddceb435e13d81601755714e9fSE Android types[0] = "o1_b_type_2"; 248255e72915d4cbddceb435e13d81601755714e9fSE Android test_attr_types(base, "g_m1_attr_2", d, types, 1); 249255e72915d4cbddceb435e13d81601755714e9fSE Android 250255e72915d4cbddceb435e13d81601755714e9fSE Android /* test for attr declared in module optional, added to in base optional */ 251255e72915d4cbddceb435e13d81601755714e9fSE Android decls[0] = (test_find_decl_by_sym(base, SYM_TYPES, "tag_o3_m1"))->decl_id; 252255e72915d4cbddceb435e13d81601755714e9fSE Android test_sym_presence(base, "o3_m1_attr_1", SYM_TYPES, SCOPE_DECL, decls, 1); 253255e72915d4cbddceb435e13d81601755714e9fSE Android d = test_find_decl_by_sym(base, SYM_TYPES, "tag_o4_b"); 254255e72915d4cbddceb435e13d81601755714e9fSE Android types[0] = "o4_b_type_1"; 255255e72915d4cbddceb435e13d81601755714e9fSE Android test_attr_types(base, "o3_m1_attr_1", d, types, 1); 256255e72915d4cbddceb435e13d81601755714e9fSE Android 257255e72915d4cbddceb435e13d81601755714e9fSE Android /* attr a added to in base optional, declared/added to in module, added to in other module */ 258255e72915d4cbddceb435e13d81601755714e9fSE Android /* first the module declare/add and module 2 add (since its global it'll be in the main symtab */ 259255e72915d4cbddceb435e13d81601755714e9fSE Android decls[0] = (test_find_decl_by_sym(base, SYM_TYPES, "tag_g_m1"))->decl_id; 260255e72915d4cbddceb435e13d81601755714e9fSE Android test_sym_presence(base, "g_m1_attr_3", SYM_TYPES, SCOPE_DECL, decls, 1); 261255e72915d4cbddceb435e13d81601755714e9fSE Android types[0] = "g_m1_type_6"; 262255e72915d4cbddceb435e13d81601755714e9fSE Android types[1] = "g_m2_type_3"; 263255e72915d4cbddceb435e13d81601755714e9fSE Android test_attr_types(base, "g_m1_attr_3", NULL, types, 2); 264255e72915d4cbddceb435e13d81601755714e9fSE Android /* base add */ 265255e72915d4cbddceb435e13d81601755714e9fSE Android d = test_find_decl_by_sym(base, SYM_TYPES, "tag_o4_b"); 266255e72915d4cbddceb435e13d81601755714e9fSE Android types[0] = "o4_b_type_2"; 267255e72915d4cbddceb435e13d81601755714e9fSE Android test_attr_types(base, "g_m1_attr_3", d, types, 1); 268255e72915d4cbddceb435e13d81601755714e9fSE Android 269255e72915d4cbddceb435e13d81601755714e9fSE Android /* attr a added to in base optional, declared/added in module optional, added to in other module */ 270255e72915d4cbddceb435e13d81601755714e9fSE Android d = test_find_decl_by_sym(base, SYM_TYPES, "tag_o3_m1"); 271255e72915d4cbddceb435e13d81601755714e9fSE Android decls[0] = d->decl_id; 272255e72915d4cbddceb435e13d81601755714e9fSE Android test_sym_presence(base, "o3_m1_attr_2", SYM_TYPES, SCOPE_DECL, decls, 1); 273255e72915d4cbddceb435e13d81601755714e9fSE Android types[0] = "o3_m1_type_3"; 274255e72915d4cbddceb435e13d81601755714e9fSE Android test_attr_types(base, "o3_m1_attr_2", d, types, 1); 275255e72915d4cbddceb435e13d81601755714e9fSE Android /* module 2's type will be in the main symtab */ 276255e72915d4cbddceb435e13d81601755714e9fSE Android types[0] = "g_m2_type_6"; 277255e72915d4cbddceb435e13d81601755714e9fSE Android test_attr_types(base, "o3_m1_attr_2", NULL, types, 1); 278255e72915d4cbddceb435e13d81601755714e9fSE Android /* base add */ 279255e72915d4cbddceb435e13d81601755714e9fSE Android d = test_find_decl_by_sym(base, SYM_TYPES, "tag_o2_b"); 280255e72915d4cbddceb435e13d81601755714e9fSE Android types[0] = "o2_b_type_1"; 281255e72915d4cbddceb435e13d81601755714e9fSE Android test_attr_types(base, "o3_m1_attr_2", d, types, 1); 282255e72915d4cbddceb435e13d81601755714e9fSE Android 283255e72915d4cbddceb435e13d81601755714e9fSE Android /* attr a added to in base optional, declared/added in module , added to in other module optional */ 284255e72915d4cbddceb435e13d81601755714e9fSE Android decls[0] = (test_find_decl_by_sym(base, SYM_TYPES, "tag_g_m1"))->decl_id; 285255e72915d4cbddceb435e13d81601755714e9fSE Android test_sym_presence(base, "g_m1_attr_4", SYM_TYPES, SCOPE_DECL, decls, 1); 286255e72915d4cbddceb435e13d81601755714e9fSE Android types[0] = "g_m1_type_7"; 287255e72915d4cbddceb435e13d81601755714e9fSE Android test_attr_types(base, "g_m1_attr_4", NULL, types, 1); 288255e72915d4cbddceb435e13d81601755714e9fSE Android /* module 2 */ 289255e72915d4cbddceb435e13d81601755714e9fSE Android d = test_find_decl_by_sym(base, SYM_TYPES, "tag_o2_m2"); 290255e72915d4cbddceb435e13d81601755714e9fSE Android types[0] = "o2_m2_type_1"; 291255e72915d4cbddceb435e13d81601755714e9fSE Android test_attr_types(base, "g_m1_attr_4", d, types, 1); 292255e72915d4cbddceb435e13d81601755714e9fSE Android /* base add */ 293255e72915d4cbddceb435e13d81601755714e9fSE Android d = test_find_decl_by_sym(base, SYM_TYPES, "tag_o5_b"); 294255e72915d4cbddceb435e13d81601755714e9fSE Android types[0] = "o5_b_type_1"; 295255e72915d4cbddceb435e13d81601755714e9fSE Android test_attr_types(base, "g_m1_attr_4", d, types, 1); 296255e72915d4cbddceb435e13d81601755714e9fSE Android 297255e72915d4cbddceb435e13d81601755714e9fSE Android /* attr a added to in base optional, declared/added in module optional, added to in other module optional */ 298255e72915d4cbddceb435e13d81601755714e9fSE Android d = test_find_decl_by_sym(base, SYM_TYPES, "tag_o4_m1"); 299255e72915d4cbddceb435e13d81601755714e9fSE Android decls[0] = d->decl_id; 300255e72915d4cbddceb435e13d81601755714e9fSE Android test_sym_presence(base, "o4_m1_attr_1", SYM_TYPES, SCOPE_DECL, decls, 1); 301255e72915d4cbddceb435e13d81601755714e9fSE Android types[0] = "o4_m1_type_1"; 302255e72915d4cbddceb435e13d81601755714e9fSE Android test_attr_types(base, "o4_m1_attr_1", d, types, 1); 303255e72915d4cbddceb435e13d81601755714e9fSE Android /* module 2 */ 304255e72915d4cbddceb435e13d81601755714e9fSE Android d = test_find_decl_by_sym(base, SYM_TYPES, "tag_o2_m2"); 305255e72915d4cbddceb435e13d81601755714e9fSE Android types[0] = "o2_m2_type_2"; 306255e72915d4cbddceb435e13d81601755714e9fSE Android test_attr_types(base, "o4_m1_attr_1", d, types, 1); 307255e72915d4cbddceb435e13d81601755714e9fSE Android /* base add */ 308255e72915d4cbddceb435e13d81601755714e9fSE Android d = test_find_decl_by_sym(base, SYM_TYPES, "tag_o5_b"); 309255e72915d4cbddceb435e13d81601755714e9fSE Android types[0] = "o5_b_type_2"; 310255e72915d4cbddceb435e13d81601755714e9fSE Android test_attr_types(base, "o4_m1_attr_1", d, types, 1); 311255e72915d4cbddceb435e13d81601755714e9fSE Android 312255e72915d4cbddceb435e13d81601755714e9fSE Android /* tests for aliases */ 313255e72915d4cbddceb435e13d81601755714e9fSE Android decls[0] = (test_find_decl_by_sym(base, SYM_TYPES, "tag_g_m1"))->decl_id; 314255e72915d4cbddceb435e13d81601755714e9fSE Android test_sym_presence(base, "g_m_alias_1", SYM_TYPES, SCOPE_DECL, decls, 1); 315255e72915d4cbddceb435e13d81601755714e9fSE Android test_alias_datum(base, "g_m_alias_1", "g_b_type_3", 1, 0); 316255e72915d4cbddceb435e13d81601755714e9fSE Android 317255e72915d4cbddceb435e13d81601755714e9fSE Android} 318