rules-tests.h File Reference


Detailed Description

Header file for libpoldiff's correctness of rules.

Author:
Paul Rosenfeld prosenfeld@tresys.com
Copyright (C) 2007 Tresys Technology, LLC

This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

Definition in file rules-tests.h.

Go to the source code of this file.


Functions

int rules_test_init ()
int rules_test_cleanup ()
void rules_avrules_tests ()
void rules_roleallow_tests ()
void rules_roletrans_tests ()
void rules_terules_tests ()
void build_avrule_vecs ()
void build_terule_vecs ()
void build_roletrans_vecs ()
void build_roleallow_vecs ()

Function Documentation

int rules_test_init  ) 
 

Definition at line 907 of file rules-tests.c.

References diff, init_poldiff(), RULES_MOD_POLICY, and RULES_ORIG_POLICY.

00908 {
00909         if (!(diff = init_poldiff(RULES_ORIG_POLICY, RULES_MOD_POLICY))) {
00910                 return 1;
00911         } else {
00912                 return 0;
00913         }
00914 }

int rules_test_cleanup  ) 
 

void rules_avrules_tests  ) 
 

Definition at line 871 of file rules-tests.c.

References added_avrules, cleanup_test(), init_answer_vectors(), modified_avrules, poldiff_test_answers_t, removed_avrules, run_test(), test_numbers_e, and unchanged_avrules.

Referenced by main().

00872 {
00873         test_numbers_e test_num = RULES_AVRULE;
00874         poldiff_test_answers_t *answers = init_answer_vectors(added_avrules, removed_avrules, unchanged_avrules, modified_avrules);
00875         run_test(NULL, answers, test_num);
00876         cleanup_test(answers);
00877 }

void rules_roleallow_tests  ) 
 

Definition at line 887 of file rules-tests.c.

References added_roleallowrules, cleanup_test(), init_answer_vectors(), modified_roleallowrules, poldiff_test_answers_t, removed_roleallowrules, run_test(), test_numbers_e, and unchanged_roleallowrules.

Referenced by main().

00888 {
00889         test_numbers_e test_num = RULES_ROLEALLOW;
00890         poldiff_test_answers_t *answers =
00891                 init_answer_vectors(added_roleallowrules, removed_roleallowrules, unchanged_roleallowrules,
00892                                     modified_roleallowrules);
00893         run_test(NULL, answers, test_num);
00894         cleanup_test(answers);
00895 }

void rules_roletrans_tests  ) 
 

Definition at line 897 of file rules-tests.c.

References added_roletrans_rules, cleanup_test(), init_answer_vectors(), modified_roletrans_rules, poldiff_test_answers_t, removed_roletrans_rules, run_test(), test_numbers_e, and unchanged_roletrans_rules.

Referenced by main().

00898 {
00899         test_numbers_e test_num = RULES_ROLETRANS;
00900         poldiff_test_answers_t *answers =
00901                 init_answer_vectors(added_roletrans_rules, removed_roletrans_rules, unchanged_roletrans_rules,
00902                                     modified_roletrans_rules);
00903         run_test(NULL, answers, test_num);
00904         cleanup_test(answers);
00905 }

void rules_terules_tests  ) 
 

Definition at line 879 of file rules-tests.c.

References added_terules, cleanup_test(), init_answer_vectors(), modified_terules, poldiff_test_answers_t, removed_terules, run_test(), test_numbers_e, and unchanged_terules.

Referenced by main().

00880 {
00881         test_numbers_e test_num = RULES_TERULE;
00882         poldiff_test_answers_t *answers = init_answer_vectors(added_terules, removed_terules, unchanged_terules, modified_terules);
00883         run_test(NULL, answers, test_num);
00884         cleanup_test(answers);
00885 }

void build_avrule_vecs  ) 
 

Definition at line 801 of file rules-tests.c.

References added_type_avrules, added_type_rules_v, added_v, apol_vector_append(), apol_vector_cat(), apol_vector_compare(), apol_vector_create(), apol_vector_destroy(), apol_vector_get_element(), apol_vector_get_size(), apol_vector_sort(), apol_vector_t, avrule_to_string(), compare_str(), correct_added_type_rules_v, correct_removed_type_rules_v, diff, modified_name_only_v, modified_v, poldiff_avrule_get_form(), POLDIFF_FORM_ADD_TYPE, POLDIFF_FORM_ADDED, poldiff_form_e, POLDIFF_FORM_MODIFIED, POLDIFF_FORM_REMOVE_TYPE, POLDIFF_FORM_REMOVED, poldiff_get_avrule_vector_allow(), poldiff_get_avrule_vector_auditallow(), poldiff_get_avrule_vector_dontaudit(), poldiff_get_avrule_vector_neverallow(), removed_type_avrules, removed_type_rules_v, removed_v, and string_array_to_vector().

Referenced by run_test().

00802 {
00803         added_type_rules_v = apol_vector_create(free);
00804         removed_type_rules_v = apol_vector_create(free);
00805         correct_added_type_rules_v = string_array_to_vector(added_type_avrules);
00806         correct_removed_type_rules_v = string_array_to_vector(removed_type_avrules);
00807 
00808         size_t i;
00809         char *str = NULL, *name_only = NULL;
00810         const void *item = NULL;
00811         const apol_vector_t *allow_v = NULL, *neverallow_v = NULL, *auditallow_v = NULL, *dontaudit_v = NULL;
00812         apol_vector_t *all_avrules_v = apol_vector_create(NULL);
00813 
00814         allow_v = poldiff_get_avrule_vector_allow(diff);
00815         neverallow_v = poldiff_get_avrule_vector_neverallow(diff);
00816         auditallow_v = poldiff_get_avrule_vector_auditallow(diff);
00817         dontaudit_v = poldiff_get_avrule_vector_dontaudit(diff);
00818 
00819         apol_vector_cat(all_avrules_v, allow_v);
00820         apol_vector_cat(all_avrules_v, neverallow_v);
00821         apol_vector_cat(all_avrules_v, auditallow_v);
00822         apol_vector_cat(all_avrules_v, dontaudit_v);
00823 
00824         for (i = 0; i < apol_vector_get_size(all_avrules_v); i++) {
00825                 item = apol_vector_get_element(all_avrules_v, i);
00826                 if (!item)
00827                         return;
00828                 poldiff_form_e form = poldiff_avrule_get_form(item);
00829                 str = avrule_to_string(item, form, 1);
00830                 if (!str)
00831                         break;
00832                 switch (form) {
00833                 case POLDIFF_FORM_ADDED:
00834                         apol_vector_append(added_v, str);
00835                         break;
00836                 case POLDIFF_FORM_REMOVED:
00837                         apol_vector_append(removed_v, str);
00838                         break;
00839                 case POLDIFF_FORM_ADD_TYPE:
00840                         apol_vector_append(added_type_rules_v, str);
00841                         break;
00842                 case POLDIFF_FORM_REMOVE_TYPE:
00843                         apol_vector_append(removed_type_rules_v, str);
00844                         break;
00845                 case POLDIFF_FORM_MODIFIED:
00846                         name_only = avrule_to_string(item, form, 0);
00847                         apol_vector_append(modified_name_only_v, name_only);
00848                         apol_vector_append(modified_v, str);
00849                         break;
00850                 default:
00851                         // should never get here
00852                         assert(0);
00853                 }
00854         }
00855         size_t first_diff = 0;
00856         apol_vector_sort(added_type_rules_v, compare_str, NULL);
00857         apol_vector_sort(correct_added_type_rules_v, compare_str, NULL);
00858         CU_ASSERT_FALSE(apol_vector_compare(added_type_rules_v, correct_added_type_rules_v, compare_str, NULL, &first_diff));
00859 
00860         apol_vector_sort(removed_type_rules_v, compare_str, NULL);
00861         apol_vector_sort(correct_removed_type_rules_v, compare_str, NULL);
00862         CU_ASSERT_FALSE(apol_vector_compare(removed_type_rules_v, correct_removed_type_rules_v, compare_str, NULL, &first_diff));
00863 
00864         apol_vector_destroy(&removed_type_rules_v);
00865         apol_vector_destroy(&correct_removed_type_rules_v);
00866         apol_vector_destroy(&added_type_rules_v);
00867         apol_vector_destroy(&correct_added_type_rules_v);
00868         apol_vector_destroy(&all_avrules_v);
00869 }

void build_terule_vecs  ) 
 

Definition at line 726 of file rules-tests.c.

References added_type_rules_v, added_type_terules, added_v, apol_vector_append(), apol_vector_cat(), apol_vector_compare(), apol_vector_create(), apol_vector_destroy(), apol_vector_get_element(), apol_vector_get_size(), apol_vector_sort(), apol_vector_t, compare_str(), correct_added_type_rules_v, correct_removed_type_rules_v, diff, modified_name_only_v, modified_v, POLDIFF_FORM_ADD_TYPE, POLDIFF_FORM_ADDED, poldiff_form_e, POLDIFF_FORM_MODIFIED, POLDIFF_FORM_REMOVE_TYPE, POLDIFF_FORM_REMOVED, poldiff_get_terule_vector_change(), poldiff_get_terule_vector_member(), poldiff_get_terule_vector_trans(), poldiff_terule_get_form(), print_test_failure(), removed_type_rules_v, removed_type_terules, removed_v, string_array_to_vector(), and terule_to_string().

Referenced by run_test().

00727 {
00728         added_type_rules_v = apol_vector_create(free);
00729         removed_type_rules_v = apol_vector_create(free);
00730         correct_added_type_rules_v = string_array_to_vector(added_type_terules);
00731         correct_removed_type_rules_v = string_array_to_vector(removed_type_terules);
00732 
00733         size_t i;
00734         char *str = NULL;
00735         const void *item = NULL;
00736         const apol_vector_t *member_v = NULL, *change_v = NULL, *trans_v = NULL;
00737         member_v = poldiff_get_terule_vector_member(diff);
00738         change_v = poldiff_get_terule_vector_change(diff);
00739         trans_v = poldiff_get_terule_vector_trans(diff);
00740         apol_vector_t *all_terules = apol_vector_create(NULL);
00741         apol_vector_cat(all_terules, member_v);
00742         apol_vector_cat(all_terules, change_v);
00743         apol_vector_cat(all_terules, trans_v);
00744 
00745         for (i = 0; i < apol_vector_get_size(all_terules); i++) {
00746                 item = apol_vector_get_element(all_terules, i);
00747                 if (!item)
00748                         return;
00749                 poldiff_form_e form = poldiff_terule_get_form(item);
00750                 str = terule_to_string(item, form, 1);
00751                 if (!str)
00752                         break;
00753                 char *name_only = NULL;
00754                 switch (form) {
00755                 case POLDIFF_FORM_ADDED:
00756                         apol_vector_append(added_v, str);
00757                         break;
00758                 case POLDIFF_FORM_REMOVED:
00759                         apol_vector_append(removed_v, str);
00760                         break;
00761                 case POLDIFF_FORM_ADD_TYPE:
00762                         apol_vector_append(added_type_rules_v, str);
00763                         break;
00764                 case POLDIFF_FORM_REMOVE_TYPE:
00765                         apol_vector_append(removed_type_rules_v, str);
00766                         break;
00767                 case POLDIFF_FORM_MODIFIED:
00768                         name_only = terule_to_string(item, form, 0);
00769                         apol_vector_append(modified_name_only_v, name_only);
00770                         apol_vector_append(modified_v, str);
00771                         break;
00772                 default:
00773                         // should never get here
00774                         assert(0);
00775                 }
00776         }
00777         size_t first_diff = 0;
00778         int test_result = 0;
00779         apol_vector_sort(added_type_rules_v, compare_str, NULL);
00780         apol_vector_sort(correct_added_type_rules_v, compare_str, NULL);
00781         CU_ASSERT_FALSE(test_result =
00782                         apol_vector_compare(added_type_rules_v, correct_added_type_rules_v, compare_str, NULL, &first_diff));
00783         if (test_result) {
00784                 print_test_failure(added_type_rules_v, correct_added_type_rules_v, first_diff, "Added Rules (due to types)");
00785         }
00786 
00787         apol_vector_sort(removed_type_rules_v, compare_str, NULL);
00788         apol_vector_sort(correct_removed_type_rules_v, compare_str, NULL);
00789         CU_ASSERT_FALSE(test_result =
00790                         apol_vector_compare(removed_type_rules_v, correct_removed_type_rules_v, compare_str, NULL, &first_diff));
00791         if (test_result) {
00792                 print_test_failure(removed_type_rules_v, correct_removed_type_rules_v, first_diff, "Removed Rules (due to types)");
00793         }
00794         apol_vector_destroy(&all_terules);
00795         apol_vector_destroy(&added_type_rules_v);
00796         apol_vector_destroy(&correct_added_type_rules_v);
00797         apol_vector_destroy(&removed_type_rules_v);
00798         apol_vector_destroy(&correct_removed_type_rules_v);
00799 }

void build_roletrans_vecs  ) 
 

Definition at line 661 of file rules-tests.c.

References added_roletrans_type, added_type_rules_v, added_v, apol_vector_append(), apol_vector_compare(), apol_vector_create(), apol_vector_destroy(), apol_vector_get_element(), apol_vector_get_size(), apol_vector_sort(), apol_vector_t, compare_str(), correct_added_type_rules_v, correct_removed_type_rules_v, diff, modified_name_only_v, modified_v, POLDIFF_FORM_ADD_TYPE, POLDIFF_FORM_ADDED, poldiff_form_e, POLDIFF_FORM_MODIFIED, POLDIFF_FORM_REMOVE_TYPE, POLDIFF_FORM_REMOVED, poldiff_get_role_trans_vector(), poldiff_role_trans_get_form(), print_test_failure(), removed_roletrans_type, removed_type_rules_v, removed_v, roletrans_to_string(), and string_array_to_vector().

Referenced by run_test().

00662 {
00663         added_type_rules_v = apol_vector_create(free);
00664         removed_type_rules_v = apol_vector_create(free);
00665         correct_added_type_rules_v = string_array_to_vector(added_roletrans_type);
00666         correct_removed_type_rules_v = string_array_to_vector(removed_roletrans_type);
00667 
00668         char *str = NULL, *name_only;
00669         size_t i;
00670         const void *item = NULL;
00671         const apol_vector_t *v = NULL;
00672         v = poldiff_get_role_trans_vector(diff);
00673         for (i = 0; i < apol_vector_get_size(v); i++) {
00674                 item = apol_vector_get_element(v, i);
00675                 if (!item)
00676                         return;
00677                 poldiff_form_e form = poldiff_role_trans_get_form(item);
00678                 str = roletrans_to_string(item, form, 1);
00679                 if (!str)
00680                         break;
00681                 switch (form) {
00682                 case POLDIFF_FORM_ADDED:
00683                         apol_vector_append(added_v, str);
00684                         break;
00685                 case POLDIFF_FORM_REMOVED:
00686                         apol_vector_append(removed_v, str);
00687                         break;
00688                 case POLDIFF_FORM_ADD_TYPE:
00689                         apol_vector_append(added_type_rules_v, str);
00690                         break;
00691                 case POLDIFF_FORM_REMOVE_TYPE:
00692                         apol_vector_append(removed_type_rules_v, str);
00693                         break;
00694                 case POLDIFF_FORM_MODIFIED:
00695                         name_only = roletrans_to_string(item, form, 0);
00696                         apol_vector_append(modified_name_only_v, name_only);
00697                         apol_vector_append(modified_v, str);
00698                         break;
00699                 default:
00700                         // should never get here
00701                         assert(0);
00702                 }
00703         }
00704         int test_result;
00705         size_t first_diff = 0;
00706         apol_vector_sort(added_type_rules_v, compare_str, NULL);
00707         apol_vector_sort(correct_added_type_rules_v, compare_str, NULL);
00708         CU_ASSERT_FALSE(test_result =
00709                         apol_vector_compare(added_type_rules_v, correct_added_type_rules_v, compare_str, NULL, &first_diff));
00710         if (test_result) {
00711                 print_test_failure(added_type_rules_v, correct_added_type_rules_v, first_diff, "Added Rule (due to Type)");
00712         }
00713         apol_vector_sort(removed_type_rules_v, compare_str, NULL);
00714         apol_vector_sort(correct_removed_type_rules_v, compare_str, NULL);
00715         CU_ASSERT_FALSE(test_result =
00716                         apol_vector_compare(removed_type_rules_v, correct_removed_type_rules_v, compare_str, NULL, &first_diff));
00717         if (test_result) {
00718                 print_test_failure(removed_type_rules_v, correct_removed_type_rules_v, first_diff, "Removed Rule (due to Type)");
00719         }
00720         apol_vector_destroy(&added_type_rules_v);
00721         apol_vector_destroy(&correct_added_type_rules_v);
00722         apol_vector_destroy(&removed_type_rules_v);
00723         apol_vector_destroy(&correct_removed_type_rules_v);
00724 }

void build_roleallow_vecs  ) 
 

Definition at line 627 of file rules-tests.c.

References added_v, apol_vector_append(), apol_vector_get_element(), apol_vector_get_size(), apol_vector_t, diff, modified_name_only_v, modified_v, POLDIFF_FORM_ADDED, poldiff_form_e, POLDIFF_FORM_MODIFIED, POLDIFF_FORM_REMOVED, poldiff_get_role_allow_vector(), poldiff_role_allow_get_form(), removed_v, and roleallow_to_string().

Referenced by run_test().

00628 {
00629         char *str = NULL, *name_only = NULL;
00630         size_t i;
00631         const void *item = NULL;
00632         const apol_vector_t *v = NULL;
00633         v = poldiff_get_role_allow_vector(diff);
00634         for (i = 0; i < apol_vector_get_size(v); i++) {
00635                 item = apol_vector_get_element(v, i);
00636                 if (!item)
00637                         return;
00638                 poldiff_form_e form = poldiff_role_allow_get_form(item);
00639                 str = roleallow_to_string(item, form, 1);
00640                 if (!str)
00641                         break;
00642                 switch (form) {
00643                 case POLDIFF_FORM_ADDED:
00644                         apol_vector_append(added_v, str);
00645                         break;
00646                 case POLDIFF_FORM_REMOVED:
00647                         apol_vector_append(removed_v, str);
00648                         break;
00649                 case POLDIFF_FORM_MODIFIED:
00650                         name_only = roleallow_to_string(item, form, 0);
00651                         apol_vector_append(modified_name_only_v, name_only);
00652                         apol_vector_append(modified_v, str);
00653                         break;
00654                 default:
00655                         // should never get here
00656                         assert(0);
00657                 }
00658         }
00659 }