components-tests.c File Reference


Detailed Description

Test the libpoldiff's correctness for components.

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 components-tests.c.

#include <config.h>
#include "libpoldiff-tests.h"
#include "components-tests.h"
#include "policy-defs.h"
#include <CUnit/Basic.h>
#include <CUnit/TestDB.h>
#include <apol/util.h>
#include <stdio.h>
#include <errno.h>
#include <getopt.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>

Go to the source code of this file.


Functions

void build_component_vecs (component_funcs_t *component_funcs)
void components_types_tests ()
void components_bools_tests ()
void components_users_tests ()
void components_roles_tests ()
void components_commons_tests ()
void components_attributes_tests ()
void components_class_tests ()
int components_test_init ()

Variables

char * unchanged_attributes []
char * added_attributes []
char * removed_attributes []
char * modified_attributes []
char * unchanged_bools []
char * added_bools []
char * removed_bools []
char * modified_bools []
char * unchanged_classes []
char * added_classes []
char * removed_classes []
char * modified_classes []
char * unchanged_commons []
char * added_commons []
char * removed_commons []
char * modified_commons []
char * unchanged_roles []
char * added_roles []
char * removed_roles []
char * modified_roles []
char * unchanged_types []
char * added_types []
char * removed_types []
char * modified_types []
char * aliased_types []
char * unchanged_users []
char * added_users []
char * removed_users []
char * modified_users []

Function Documentation

void build_component_vecs component_funcs_t component_funcs  ) 
 

Definition at line 337 of file components-tests.c.

References added_v, apol_str_appendf(), apol_vector_append(), apol_vector_get_element(), apol_vector_get_size(), apol_vector_t, component_funcs_t, diff, modified_name_only_v, modified_v, and removed_v.

Referenced by run_test().

00338 {
00339         size_t i;
00340         const void *item = NULL;
00341         const apol_vector_t *v = NULL;
00342         v = component_funcs->get_diff_vector(diff);
00343         for (i = 0; i < apol_vector_get_size(v); i++) {
00344                 item = apol_vector_get_element(v, i);
00345                 const char *name_only = NULL;
00346                 name_only = component_funcs->get_name(item);
00347                 if (component_funcs->get_form(item) == POLDIFF_FORM_ADDED) {
00348                         apol_vector_append(added_v, strdup(name_only));
00349                 } else if (component_funcs->get_form(item) == POLDIFF_FORM_REMOVED) {
00350                         apol_vector_append(removed_v, strdup(name_only));
00351                 } else if (component_funcs->get_form(item) == POLDIFF_FORM_MODIFIED) {
00352                         apol_vector_append(modified_name_only_v, strdup(name_only));
00353                         size_t j;
00354                         if (component_funcs->get_added) {
00355                                 const apol_vector_t *added_elements = component_funcs->get_added(item);
00356                                 for (j = 0; j < apol_vector_get_size(added_elements); ++j) {
00357                                         char *added_element;
00358                                         added_element = apol_vector_get_element(added_elements, j);
00359                                         char *modification_str = NULL;
00360                                         size_t modification_str_len = 0;
00361                                         apol_str_appendf(&modification_str, &modification_str_len, "%s %s%s", name_only, "+",
00362                                                          added_element);
00363                                         apol_vector_append(modified_v, modification_str);
00364                                 }
00365                         }
00366                         if (component_funcs->get_removed) {
00367                                 const apol_vector_t *removed_elements = component_funcs->get_removed(item);
00368                                 for (j = 0; j < apol_vector_get_size(removed_elements); ++j) {
00369                                         char *removed_element;
00370                                         removed_element = apol_vector_get_element(removed_elements, j);
00371                                         char *modification_str = NULL;
00372                                         size_t modification_str_len = 0;
00373                                         apol_str_appendf(&modification_str, &modification_str_len, "%s %s%s", name_only, "-",
00374                                                          removed_element);
00375                                         apol_vector_append(modified_v, modification_str);
00376                                 }
00377                         }
00378                         if (!(component_funcs->get_added && component_funcs)) {
00379                                 apol_vector_append(modified_v, strdup(name_only));
00380                         }
00381                 }
00382         }
00383 }

void components_types_tests  ) 
 

Definition at line 385 of file components-tests.c.

References added_types, aliased_types, apol_policy_get_qpol(), apol_str_append(), apol_str_appendf(), apol_str_strcmp(), apol_vector_append(), apol_vector_compare(), apol_vector_create(), apol_vector_create_from_intersection(), apol_vector_destroy(), apol_vector_get_element(), apol_vector_get_size(), apol_vector_sort(), apol_vector_t, cleanup_test(), compare_str(), COMPONENT, component_funcs_t, init_answer_vectors(), init_test_funcs(), mod_policy, modified_types, orig_policy, poldiff_get_type_vector(), poldiff_test_answers_t, poldiff_type_get_form(), print_test_failure(), qpol_iterator_destroy(), qpol_iterator_end(), qpol_iterator_get_item(), qpol_iterator_next(), qpol_iterator_t, qpol_policy_get_type_by_name(), qpol_policy_get_type_iter(), qpol_policy_t, qpol_type_get_alias_iter(), qpol_type_get_isalias(), qpol_type_get_name(), qpol_type_t, removed_types, run_test(), string_array_to_vector(), and unchanged_types.

Referenced by main().

00386 {
00387         poldiff_test_answers_t *answers = init_answer_vectors(added_types, removed_types, unchanged_types, modified_types);
00388         component_funcs_t *funcs = init_test_funcs(poldiff_get_type_vector, poldiff_type_get_name_w,
00389                                                    poldiff_type_get_form, poldiff_type_get_added_attribs_w,
00390                                                    poldiff_type_get_removed_attribs_w);
00391         run_test(funcs, answers, COMPONENT);
00392         free(funcs);
00393         /* this is for the alias tests */
00394         size_t i;
00395         apol_vector_t *orig_aliases_v = apol_vector_create(free);
00396         apol_vector_t *mod_aliases_v = apol_vector_create(free);
00397         apol_vector_t *final_aliases_v = apol_vector_create(free);
00398         apol_vector_t *correct_final_aliases_v = string_array_to_vector(aliased_types);
00399         apol_vector_t *changed_aliases_v;
00400 
00401         qpol_policy_t *orig_qpolicy = apol_policy_get_qpol(orig_policy);
00402         qpol_policy_t *mod_qpolicy = apol_policy_get_qpol(mod_policy);
00403 
00404         qpol_iterator_t *orig_types;
00405         qpol_iterator_t *mod_types;
00406 
00407         qpol_policy_get_type_iter(mod_qpolicy, &orig_types);
00408         for (; !qpol_iterator_end(orig_types); qpol_iterator_next(orig_types)) {
00409                 unsigned char isalias = 0;
00410                 qpol_type_t *qpol_type;
00411                 const char *name;
00412                 qpol_iterator_get_item(orig_types, (void **)&qpol_type);
00413                 qpol_type_get_name(orig_qpolicy, qpol_type, &name);
00414                 qpol_type_get_isalias(orig_qpolicy, qpol_type, &isalias);
00415                 if (!isalias) {
00416                         apol_vector_append(orig_aliases_v, strdup(name));
00417                 }
00418         }
00419         qpol_policy_get_type_iter(mod_qpolicy, &mod_types);
00420         for (; !qpol_iterator_end(mod_types); qpol_iterator_next(mod_types)) {
00421                 unsigned char isalias = 0;
00422                 const qpol_type_t *qpol_type;
00423                 const char *name;
00424                 qpol_iterator_get_item(mod_types, (void **)&qpol_type);
00425                 qpol_type_get_name(mod_qpolicy, qpol_type, &name);
00426                 qpol_type_get_isalias(mod_qpolicy, qpol_type, &isalias);
00427                 if (isalias) {
00428                         apol_vector_append(mod_aliases_v, strdup(name));
00429                 }
00430         }
00431 
00432         changed_aliases_v = apol_vector_create_from_intersection(orig_aliases_v, mod_aliases_v, apol_str_strcmp, NULL);
00433         char *alias_str = NULL, *str = NULL;
00434         size_t alias_str_len = 0, str_len = 0;
00435         for (i = 0; i < apol_vector_get_size(changed_aliases_v); ++i) {
00436                 char *name = apol_vector_get_element(changed_aliases_v, i);
00437                 qpol_iterator_t *aliased_to;
00438                 const qpol_type_t *qtype;
00439                 qpol_policy_get_type_by_name(mod_qpolicy, name, &qtype);
00440                 qpol_type_get_alias_iter(mod_qpolicy, qtype, &aliased_to);
00441                 for (; !qpol_iterator_end(aliased_to); qpol_iterator_next(aliased_to)) {
00442                         const char *name;
00443                         qpol_iterator_get_item(aliased_to, (void **)&name);
00444                         apol_str_append(&alias_str, &alias_str_len, name);
00445                 }
00446                 apol_str_appendf(&str, &str_len, "%s -> %s", name, alias_str);
00447                 free(alias_str);
00448                 apol_vector_append(final_aliases_v, str);
00449                 qpol_iterator_destroy(&aliased_to);
00450         }
00451         apol_vector_sort(final_aliases_v, compare_str, NULL);
00452         apol_vector_sort(correct_final_aliases_v, compare_str, NULL);
00453         size_t first_diff = 0;
00454         int test_result;
00455 
00456         CU_ASSERT_FALSE(test_result =
00457                         apol_vector_compare(final_aliases_v, correct_final_aliases_v, compare_str, NULL, &first_diff));
00458         if (test_result) {
00459                 print_test_failure(final_aliases_v, correct_final_aliases_v, first_diff, "Aliases");
00460         }
00461         apol_vector_destroy(&orig_aliases_v);
00462         apol_vector_destroy(&mod_aliases_v);
00463         apol_vector_destroy(&final_aliases_v);
00464         apol_vector_destroy(&correct_final_aliases_v);
00465         apol_vector_destroy(&changed_aliases_v);
00466         qpol_iterator_destroy(&mod_types);
00467         qpol_iterator_destroy(&orig_types);
00468 
00469         cleanup_test(answers);
00470 }

void components_bools_tests  ) 
 

Definition at line 472 of file components-tests.c.

References added_bools, cleanup_test(), COMPONENT, component_funcs_t, init_answer_vectors(), init_test_funcs(), modified_bools, poldiff_bool_get_form(), poldiff_get_bool_vector(), poldiff_test_answers_t, removed_bools, run_test(), and unchanged_bools.

Referenced by main().

00473 {
00474         poldiff_test_answers_t *answers = init_answer_vectors(added_bools, removed_bools, unchanged_bools, modified_bools);
00475         component_funcs_t *funcs = init_test_funcs(poldiff_get_bool_vector, poldiff_bool_get_name_w,
00476                                                    poldiff_bool_get_form, NULL, NULL);
00477         run_test(funcs, answers, COMPONENT);
00478         free(funcs);
00479         cleanup_test(answers);
00480 }

void components_users_tests  ) 
 

Definition at line 482 of file components-tests.c.

References added_users, cleanup_test(), COMPONENT, component_funcs_t, init_answer_vectors(), init_test_funcs(), modified_users, poldiff_get_user_vector(), poldiff_test_answers_t, poldiff_user_get_form(), removed_users, run_test(), and unchanged_users.

Referenced by main().

00483 {
00484         poldiff_test_answers_t *answers = init_answer_vectors(added_users, removed_users, unchanged_users, modified_users);
00485         component_funcs_t *funcs = init_test_funcs(poldiff_get_user_vector, poldiff_user_get_name_w,
00486                                                    poldiff_user_get_form, poldiff_user_get_added_roles_w,
00487                                                    poldiff_user_get_removed_roles_w);
00488         run_test(funcs, answers, COMPONENT);
00489         free(funcs);
00490         cleanup_test(answers);
00491 }

void components_roles_tests  ) 
 

Definition at line 493 of file components-tests.c.

References added_roles, cleanup_test(), COMPONENT, component_funcs_t, init_answer_vectors(), init_test_funcs(), modified_roles, poldiff_get_role_vector(), poldiff_role_get_form(), poldiff_test_answers_t, removed_roles, run_test(), and unchanged_roles.

Referenced by main().

00494 {
00495         poldiff_test_answers_t *answers = init_answer_vectors(added_roles, removed_roles, unchanged_roles, modified_roles);
00496         component_funcs_t *funcs = init_test_funcs(poldiff_get_role_vector, poldiff_role_get_name_w, poldiff_role_get_form,
00497                                                    poldiff_role_get_added_types_w, poldiff_role_get_removed_types_w);
00498         run_test(funcs, answers, COMPONENT);
00499         free(funcs);
00500         cleanup_test(answers);
00501 }

void components_commons_tests  ) 
 

Definition at line 503 of file components-tests.c.

References added_commons, cleanup_test(), COMPONENT, component_funcs_t, init_answer_vectors(), init_test_funcs(), modified_commons, poldiff_common_get_form(), poldiff_get_common_vector(), poldiff_test_answers_t, removed_commons, run_test(), and unchanged_commons.

Referenced by main().

00504 {
00505         poldiff_test_answers_t *answers = init_answer_vectors(added_commons, removed_commons, unchanged_commons, modified_commons);
00506         component_funcs_t *funcs = init_test_funcs(poldiff_get_common_vector, poldiff_common_get_name_w, poldiff_common_get_form,
00507                                                    poldiff_common_get_added_perms_w, poldiff_common_get_removed_perms_w);
00508         run_test(funcs, answers, COMPONENT);
00509         free(funcs);
00510         cleanup_test(answers);
00511 }

void components_attributes_tests  ) 
 

Definition at line 513 of file components-tests.c.

References added_attributes, cleanup_test(), COMPONENT, component_funcs_t, init_answer_vectors(), init_test_funcs(), modified_attributes, poldiff_attrib_get_form(), poldiff_get_attrib_vector(), poldiff_test_answers_t, removed_attributes, run_test(), and unchanged_attributes.

Referenced by main().

00514 {
00515         poldiff_test_answers_t *answers =
00516                 init_answer_vectors(added_attributes, removed_attributes, unchanged_attributes, modified_attributes);
00517         component_funcs_t *funcs = init_test_funcs(poldiff_get_attrib_vector, poldiff_attrib_get_name_w,
00518                                                    poldiff_attrib_get_form, poldiff_attrib_get_added_types_w,
00519                                                    poldiff_attrib_get_removed_types_w);
00520 
00521         run_test(funcs, answers, COMPONENT);
00522         free(funcs);
00523         cleanup_test(answers);
00524 }

void components_class_tests  ) 
 

Definition at line 526 of file components-tests.c.

References added_classes, cleanup_test(), COMPONENT, component_funcs_t, init_answer_vectors(), init_test_funcs(), modified_classes, poldiff_class_get_form(), poldiff_get_class_vector(), poldiff_test_answers_t, removed_classes, run_test(), and unchanged_classes.

Referenced by main().

00527 {
00528         poldiff_test_answers_t *answers = init_answer_vectors(added_classes, removed_classes, unchanged_classes, modified_classes);
00529         component_funcs_t *funcs = init_test_funcs(poldiff_get_class_vector, poldiff_class_get_name_w,
00530                                                    poldiff_class_get_form, poldiff_class_get_added_perms_w,
00531                                                    poldiff_class_get_removed_perms_w);
00532         run_test(funcs, answers, COMPONENT);
00533         free(funcs);
00534         cleanup_test(answers);
00535 }

int components_test_init  ) 
 

Definition at line 537 of file components-tests.c.

References COMPONENTS_MOD_POLICY, COMPONENTS_ORIG_POLICY, diff, and init_poldiff().

00538 {
00539         if (!(diff = init_poldiff(COMPONENTS_ORIG_POLICY, COMPONENTS_MOD_POLICY))) {
00540                 return 1;
00541         } else {
00542                 return 0;
00543         }
00544 }


Variable Documentation

char* unchanged_attributes[]
 

Initial value:

 {

        "data",
        NULL
}

Definition at line 42 of file components-tests.c.

Referenced by components_attributes_tests().

char* added_attributes[]
 

Initial value:

 {

        "mineral",
        NULL
}

Definition at line 47 of file components-tests.c.

Referenced by components_attributes_tests().

char* removed_attributes[]
 

Initial value:

 {

        "other",
        NULL
}

Definition at line 52 of file components-tests.c.

Referenced by components_attributes_tests().

char* modified_attributes[]
 

Initial value:

 {

        "tree +holly_t",

        "fish -bass_t",
        "plant -daikon_t",

        "animal +hippo_t",
        "animal -bass_t",
        "animal -koala_t",
        "mammal +hippo_t",
        "mammal -bear_t",
        NULL
}

Definition at line 57 of file components-tests.c.

Referenced by components_attributes_tests().

char* unchanged_bools[]
 

Initial value:

 {

        "frog",
        NULL
}

Definition at line 71 of file components-tests.c.

Referenced by components_bools_tests().

char* added_bools[]
 

Initial value:

 {

        "shark",
        NULL
}

Definition at line 76 of file components-tests.c.

Referenced by components_bools_tests().

char* removed_bools[]
 

Initial value:

 {

        "dog",
        NULL
}

Definition at line 81 of file components-tests.c.

Referenced by components_bools_tests().

char* modified_bools[]
 

Initial value:

 {

        "wark",
        NULL
}

Definition at line 86 of file components-tests.c.

Referenced by components_bools_tests().

char* unchanged_classes[]
 

Initial value:

 {

        "filesystem", "dir", "blk_file", "sock_file", "fifo_file", "netif",
        "process", "msg", "security", "system", "capability", "passwd",
        "window", "font", "colormap", "property", "cursor", "xclient",
        "xinput", "xserver", "xextension", "pax", "dbus", "ncsd",
        "association", "context", NULL
}

Definition at line 91 of file components-tests.c.

Referenced by components_class_tests().

char* added_classes[]
 

Initial value:

 {

        "thing",
        NULL
}

Definition at line 99 of file components-tests.c.

Referenced by components_class_tests().

char* removed_classes[]
 

Initial value:

 {

        "key",
        NULL
}

Definition at line 104 of file components-tests.c.

Referenced by components_class_tests().

char* modified_classes[]
 

Definition at line 109 of file components-tests.c.

Referenced by components_class_tests().

char* unchanged_commons[]
 

Initial value:

 {

        "file",
        NULL
}

Definition at line 163 of file components-tests.c.

Referenced by components_commons_tests().

char* added_commons[]
 

Initial value:

 {

        "new",
        NULL
}

Definition at line 168 of file components-tests.c.

Referenced by components_commons_tests().

char* removed_commons[]
 

Initial value:

 {

        "old",
        NULL
}

Definition at line 173 of file components-tests.c.

Referenced by components_commons_tests().

char* modified_commons[]
 

Initial value:

 {

        "ipc +unix_exec",

        "socket -name_bind",

        "bob -blah",
        "bob +bar",
        NULL
}

Definition at line 178 of file components-tests.c.

Referenced by components_commons_tests().

char* unchanged_roles[]
 

Initial value:

 {

        "placeholder_r", "admin_r", "intern_r",
        NULL
}

Definition at line 189 of file components-tests.c.

Referenced by components_roles_tests().

char* added_roles[]
 

Initial value:

 {

        "strange_r",
        NULL
}

Definition at line 194 of file components-tests.c.

Referenced by build_nomls_vecs(), and components_roles_tests().

char* removed_roles[]
 

Initial value:

 {

        "guest_r",
        NULL
}

Definition at line 199 of file components-tests.c.

Referenced by build_nomls_vecs(), and components_roles_tests().

char* modified_roles[]
 

Initial value:

 {

        "user_r +hippo_t",

        "lumberjack_r +holly_t",

        "staff_r -bass_t",

        "aquarium_r -bass_t",
        "garden_r -daikon_t",

        "object_r +hippo_t",
        "object_r +acorn_t",
        "object_r -bass_t",
        "object_r -koala_t",
        "deity_r +acorn_t",
        "deity_r +hippo_t",
        "deity_r -bass_t",
        "deity_r -dirt_t",
        "deity_r -koala_t",

        "zoo_r +hippo_t",
        "zoo_r -bass_t",
        "zoo_r -koala_t",
        "mammal_r +hippo_t",
        "mammal_r -bear_t",
        NULL
}

Definition at line 204 of file components-tests.c.

Referenced by components_roles_tests().

char* unchanged_types[]
 

Initial value:

 {

        "placeholder_t", "finch_t", "trout_t",
        "birch_t", "oak_t", "potato_t", "tiger_t",
        "lion_t", "pine_t", "log_t", "file_t",

        "firefly_t", "lightningbug_t",

        "rock_t", "big_stone_t",
        NULL
}

Definition at line 233 of file components-tests.c.

Referenced by components_types_tests().

char* added_types[]
 

Initial value:

 {

        "hippo_t",
        "acorn_t",
        NULL
}

Definition at line 245 of file components-tests.c.

Referenced by attrib_deep_diff(), components_types_tests(), and role_deep_diff().

char* removed_types[]
 

Initial value:

 {

        "bass_t",

        "koala_t",
        NULL
}

Definition at line 253 of file components-tests.c.

Referenced by attrib_deep_diff(), components_types_tests(), and role_deep_diff().

char* modified_types[]
 

Initial value:

 {

        "holly_t +tree",

        "bear_t -mammal",

        "daikon_t -plant",
        "daikon_t +mineral",

        "glass_t -> crystal_t +mineral",

        "dirt_t -> soil_t +mineral",

        "stone_t -other",
        "system_t -other",
        NULL
}

Definition at line 261 of file components-tests.c.

Referenced by components_types_tests().

char* aliased_types[]
 

Initial value:

 {
        
        "bear_t -> koala_t",
        NULL
}

Definition at line 278 of file components-tests.c.

Referenced by components_types_tests().

char* unchanged_users[]
 

Initial value:

 {

        "placeholder_u", "su_u", "cyn_u", "danika_u",
        NULL
}

Definition at line 284 of file components-tests.c.

Referenced by components_users_tests().

char* added_users[]
 

Initial value:

 {

        "gai_u",
        NULL
}

Definition at line 289 of file components-tests.c.

Referenced by components_users_tests().

char* removed_users[]
 

Initial value:

 {

        "mehnlo_u",
        NULL
}

Definition at line 294 of file components-tests.c.

Referenced by components_users_tests().

char* modified_users[]
 

Initial value:

 {

        "devona_u +aquarium_r",
        "eve_u +strange_r",

        "nika_u -user_r",

        "meloni_u +garden_r",
        "meloni_u -user_r",
        NULL
}

Definition at line 299 of file components-tests.c.

Referenced by components_users_tests().