LCOV - code coverage report
Current view: top level - tests - simple_access-tests.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 93 95 97.9 %
Date: 2012-11-29 Functions: 9 9 100.0 %
Branches: 2 4 50.0 %

           Branch data     Line data    Source code
       1                 :            : /*
       2                 :            :     SSSD
       3                 :            : 
       4                 :            :     Simple access module -- Tests
       5                 :            : 
       6                 :            :     Authors:
       7                 :            :         Sumit Bose <sbose@redhat.com>
       8                 :            : 
       9                 :            :     Copyright (C) 2010 Red Hat
      10                 :            : 
      11                 :            :     This program is free software; you can redistribute it and/or modify
      12                 :            :     it under the terms of the GNU General Public License as published by
      13                 :            :     the Free Software Foundation; either version 3 of the License, or
      14                 :            :     (at your option) any later version.
      15                 :            : 
      16                 :            :     This program is distributed in the hope that it will be useful,
      17                 :            :     but WITHOUT ANY WARRANTY; without even the implied warranty of
      18                 :            :     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      19                 :            :     GNU General Public License for more details.
      20                 :            : 
      21                 :            :     You should have received a copy of the GNU General Public License
      22                 :            :     along with this program.  If not, see <http://www.gnu.org/licenses/>.
      23                 :            : */
      24                 :            : 
      25                 :            : #include <stdlib.h>
      26                 :            : #include <popt.h>
      27                 :            : #include <check.h>
      28                 :            : 
      29                 :            : #include "confdb/confdb.h"
      30                 :            : #include "providers/simple/simple_access.h"
      31                 :            : #include "tests/common.h"
      32                 :            : 
      33                 :            : const char *ulist_1[] = {"u1", "u2", NULL};
      34                 :            : 
      35                 :            : struct simple_ctx *ctx = NULL;
      36                 :            : 
      37                 :          5 : void setup_simple(void)
      38                 :            : {
      39                 :          5 :     fail_unless(ctx == NULL, "Simple context already initialized.");
      40                 :          5 :     ctx = talloc_zero(NULL, struct simple_ctx);
      41                 :          5 :     fail_unless(ctx != NULL, "Cannot create simple context.");
      42                 :            : 
      43                 :          5 :     ctx->domain = talloc_zero(ctx, struct sss_domain_info);
      44                 :          5 :     fail_unless(ctx != NULL, "Cannot create domain in simple context.");
      45                 :          5 :     ctx->domain->case_sensitive = true;
      46                 :          5 : }
      47                 :            : 
      48                 :          5 : void teardown_simple(void)
      49                 :            : {
      50                 :            :     int ret;
      51                 :          5 :     fail_unless(ctx != NULL, "Simple context already freed.");
      52                 :          5 :     ret = talloc_free(ctx);
      53                 :          5 :     ctx = NULL;
      54                 :          5 :     fail_unless(ret == 0, "Connot free simple context.");
      55                 :          5 : }
      56                 :            : 
      57                 :          1 : START_TEST(test_both_empty)
      58                 :            : {
      59                 :            :     int ret;
      60                 :          1 :     bool access_granted = false;
      61                 :            : 
      62                 :          1 :     ctx->allow_users = NULL;
      63                 :          1 :     ctx->deny_users = NULL;
      64                 :            : 
      65                 :          1 :     ret = simple_access_check(ctx, "u1", &access_granted);
      66                 :          1 :     fail_unless(ret == EOK, "access_simple_check failed.");
      67                 :          1 :     fail_unless(access_granted == true, "Access denied "
      68                 :            :                                         "while both lists are empty.");
      69                 :            : }
      70                 :          1 : END_TEST
      71                 :            : 
      72                 :          1 : START_TEST(test_allow_empty)
      73                 :            : {
      74                 :            :     int ret;
      75                 :          1 :     bool access_granted = true;
      76                 :            : 
      77                 :          1 :     ctx->allow_users = NULL;
      78                 :          1 :     ctx->deny_users = discard_const(ulist_1);
      79                 :            : 
      80                 :          1 :     ret = simple_access_check(ctx, "u1", &access_granted);
      81                 :          1 :     fail_unless(ret == EOK, "access_simple_check failed.");
      82                 :          1 :     fail_unless(access_granted == false, "Access granted "
      83                 :            :                                          "while user is in deny list.");
      84                 :            : 
      85                 :          1 :     ret = simple_access_check(ctx, "u3", &access_granted);
      86                 :          1 :     fail_unless(ret == EOK, "access_simple_check failed.");
      87                 :          1 :     fail_unless(access_granted == true, "Access denied "
      88                 :            :                                          "while user is not in deny list.");
      89                 :            : }
      90                 :          1 : END_TEST
      91                 :            : 
      92                 :          1 : START_TEST(test_deny_empty)
      93                 :            : {
      94                 :            :     int ret;
      95                 :          1 :     bool access_granted = false;
      96                 :            : 
      97                 :          1 :     ctx->allow_users = discard_const(ulist_1);
      98                 :          1 :     ctx->deny_users = NULL;
      99                 :            : 
     100                 :          1 :     ret = simple_access_check(ctx, "u1", &access_granted);
     101                 :          1 :     fail_unless(ret == EOK, "access_simple_check failed.");
     102                 :          1 :     fail_unless(access_granted == true, "Access denied "
     103                 :            :                                         "while user is in allow list.");
     104                 :            : 
     105                 :          1 :     ret = simple_access_check(ctx, "u3", &access_granted);
     106                 :          1 :     fail_unless(ret == EOK, "access_simple_check failed.");
     107                 :          1 :     fail_unless(access_granted == false, "Access granted "
     108                 :            :                                         "while user is not in allow list.");
     109                 :            : }
     110                 :          1 : END_TEST
     111                 :            : 
     112                 :          1 : START_TEST(test_both_set)
     113                 :            : {
     114                 :            :     int ret;
     115                 :          1 :     bool access_granted = false;
     116                 :            : 
     117                 :          1 :     ctx->allow_users = discard_const(ulist_1);
     118                 :          1 :     ctx->deny_users = discard_const(ulist_1);
     119                 :            : 
     120                 :          1 :     ret = simple_access_check(ctx, "u1", &access_granted);
     121                 :          1 :     fail_unless(ret == EOK, "access_simple_check failed.");
     122                 :          1 :     fail_unless(access_granted == false, "Access granted "
     123                 :            :                                          "while user is in deny list.");
     124                 :            : 
     125                 :          1 :     ret = simple_access_check(ctx, "u3", &access_granted);
     126                 :          1 :     fail_unless(ret == EOK, "access_simple_check failed.");
     127                 :          1 :     fail_unless(access_granted == false, "Access granted "
     128                 :            :                                         "while user is not in allow list.");
     129                 :            : }
     130                 :          1 : END_TEST
     131                 :            : 
     132                 :          1 : START_TEST(test_case)
     133                 :            : {
     134                 :            :     int ret;
     135                 :          1 :     bool access_granted = false;
     136                 :            : 
     137                 :          1 :     ctx->allow_users = discard_const(ulist_1);
     138                 :          1 :     ctx->deny_users = NULL;
     139                 :            : 
     140                 :          1 :     ret = simple_access_check(ctx, "U1", &access_granted);
     141                 :          1 :     fail_unless(ret == EOK, "access_simple_check failed.");
     142                 :          1 :     fail_unless(access_granted == false, "Access granted "
     143                 :            :                                          "for user with different case "
     144                 :            :                                          "in case-sensitive domain");
     145                 :            : 
     146                 :          1 :     ctx->domain->case_sensitive = false;
     147                 :            : 
     148                 :          1 :     ret = simple_access_check(ctx, "U1", &access_granted);
     149                 :          1 :     fail_unless(ret == EOK, "access_simple_check failed.");
     150                 :          1 :     fail_unless(access_granted == true, "Access denied "
     151                 :            :                                         "for user with different case "
     152                 :            :                                         "in case-insensitive domain");
     153                 :            : }
     154                 :          1 : END_TEST
     155                 :            : 
     156                 :          6 : Suite *access_simple_suite (void)
     157                 :            : {
     158                 :          6 :     Suite *s = suite_create("access_simple");
     159                 :            : 
     160                 :          6 :     TCase *tc_allow_deny = tcase_create("allow/deny");
     161                 :          6 :     tcase_add_checked_fixture(tc_allow_deny, setup_simple, teardown_simple);
     162                 :          6 :     tcase_add_test(tc_allow_deny, test_both_empty);
     163                 :          6 :     tcase_add_test(tc_allow_deny, test_allow_empty);
     164                 :          6 :     tcase_add_test(tc_allow_deny, test_deny_empty);
     165                 :          6 :     tcase_add_test(tc_allow_deny, test_both_set);
     166                 :          6 :     tcase_add_test(tc_allow_deny, test_case);
     167                 :          6 :     suite_add_tcase(s, tc_allow_deny);
     168                 :            : 
     169                 :          6 :     return s;
     170                 :            : }
     171                 :            : 
     172                 :          6 : int main(int argc, const char *argv[])
     173                 :            : {
     174                 :            :     int opt;
     175                 :            :     poptContext pc;
     176                 :            :     int number_failed;
     177                 :            : 
     178                 :         30 :     struct poptOption long_options[] = {
     179                 :            :         POPT_AUTOHELP
     180                 :         24 :         SSSD_MAIN_OPTS
     181                 :            :         POPT_TABLEEND
     182                 :            :     };
     183                 :            : 
     184                 :            :     /* Set debug level to invalid value so we can deside if -d 0 was used. */
     185                 :          6 :     debug_level = SSSDBG_INVALID;
     186                 :            : 
     187                 :          6 :     pc = poptGetContext(argv[0], argc, argv, long_options, 0);
     188         [ -  + ]:          6 :     while((opt = poptGetNextOpt(pc)) != -1) {
     189                 :            :         switch(opt) {
     190                 :            :         default:
     191                 :          0 :             fprintf(stderr, "\nInvalid option %s: %s\n\n",
     192                 :            :                     poptBadOption(pc, 0), poptStrerror(opt));
     193                 :          0 :             poptPrintUsage(pc, stderr, 0);
     194                 :            :             return 1;
     195                 :            :         }
     196                 :            :     }
     197                 :          6 :     poptFreeContext(pc);
     198                 :            : 
     199         [ -  + ]:          6 :     DEBUG_INIT(debug_level);
     200                 :            : 
     201                 :          6 :     tests_set_cwd();
     202                 :            : 
     203                 :          6 :     Suite *s = access_simple_suite();
     204                 :          6 :     SRunner *sr = srunner_create(s);
     205                 :          6 :     srunner_run_all(sr, CK_ENV);
     206                 :          1 :     number_failed = srunner_ntests_failed(sr);
     207                 :          1 :     srunner_free(sr);
     208                 :          1 :     return (number_failed==0 ? EXIT_SUCCESS : EXIT_FAILURE);
     209                 :            : }
     210                 :            : 

Generated by: LCOV version 1.9