LCOV - code coverage report
Current view: top level - common - t-recsel.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 202 290 69.7 %
Date: 2016-09-12 12:29:17 Functions: 6 6 100.0 %

          Line data    Source code
       1             : /* t-recsel.c - Module test for recsel.c
       2             :  * Copyright (C) 2016 Werner Koch
       3             :  *
       4             :  * This file is part of GnuPG.
       5             :  *
       6             :  * GnuPG is free software; you can redistribute it and/or modify
       7             :  * it under the terms of the GNU General Public License as published by
       8             :  * the Free Software Foundation; either version 3 of the License, or
       9             :  * (at your option) any later version.
      10             :  *
      11             :  * GnuPG is distributed in the hope that it will be useful,
      12             :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      13             :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14             :  * GNU General Public License for more details.
      15             :  *
      16             :  * You should have received a copy of the GNU General Public License
      17             :  * along with this program; if not, see <http://www.gnu.org/licenses/>.
      18             :  */
      19             : 
      20             : #include <config.h>
      21             : #include <stdio.h>
      22             : #include <stdlib.h>
      23             : #include <string.h>
      24             : 
      25             : #include "util.h"
      26             : #include "init.h"
      27             : #include "recsel.h"
      28             : 
      29             : #define PGM  "t-recsel"
      30             : 
      31             : #define pass()  do { ; } while(0)
      32             : #define fail(a,e)  do { log_error ("line %d: test %d failed: %s\n",     \
      33             :                                    __LINE__, (a), gpg_strerror ((e)));  \
      34             :                        exit (1);                                        \
      35             :                     } while(0)
      36             : 
      37             : static int verbose;
      38             : static int debug;
      39             : 
      40             : 
      41             : #define FREEEXPR() do { recsel_release (se); se = NULL; } while (0)
      42             : #define ADDEXPR(a) do {                         \
      43             :     err = recsel_parse_expr (&se, (a));         \
      44             :     if (err)                                    \
      45             :       fail (0, err);                            \
      46             :   } while (0)
      47             : 
      48             : 
      49             : static const char *
      50          46 : test_1_getval (void *cookie, const char *name)
      51             : {
      52          46 :   if (strcmp (name, "uid"))
      53           0 :     fail (0, 0);
      54          46 :   return cookie;
      55             : }
      56             : 
      57             : static void
      58           1 : run_test_1 (void)
      59             : {
      60             :   static const char *expr[] = {
      61             :     "uid =~ Alfa",
      62             :     "&& uid !~   Test  ",
      63             :     "|| uid =~  Alpha",
      64             :     " uid  !~ Test"
      65             :   };
      66             :   gpg_error_t err;
      67           1 :   recsel_expr_t se = NULL;
      68             :   int i;
      69             : 
      70           5 :   for (i=0; i < DIM (expr); i++)
      71             :     {
      72           4 :       err = recsel_parse_expr (&se, expr[i]);
      73           4 :       if (err)
      74           0 :         fail (i, err);
      75             :     }
      76             : 
      77           1 :   if (debug)
      78           0 :     recsel_dump (se);
      79             : 
      80             :   /* The example from recsel.c in several variants. */
      81           1 :   if (!recsel_select (se, test_1_getval, "Alfa"))
      82           0 :     fail (0, 0);
      83           1 :   if (!recsel_select (se, test_1_getval, "Alpha"))
      84           0 :     fail (0, 0);
      85           1 :   if (recsel_select (se, test_1_getval, "Alfa Test"))
      86           0 :     fail (0, 0);
      87           1 :   if (recsel_select (se, test_1_getval, "Alpha Test"))
      88           0 :     fail (0, 0);
      89             : 
      90             :   /* Some modified versions from above.  */
      91           1 :   if (!recsel_select (se, test_1_getval, " AlfA Tes"))
      92           0 :     fail (0, 0);
      93           1 :   if (!recsel_select (se, test_1_getval, " AlfA Tes "))
      94           0 :     fail (0, 0);
      95           1 :   if (!recsel_select (se, test_1_getval, " Tes  AlfA"))
      96           0 :     fail (0, 0);
      97           1 :   if (!recsel_select (se, test_1_getval, "TesAlfA"))
      98           0 :     fail (0, 0);
      99             : 
     100             :   /* Simple cases. */
     101           1 :   if (recsel_select (se, NULL, NULL))
     102           0 :     fail (0, 0);
     103           1 :   if (recsel_select (se, test_1_getval, NULL))
     104           0 :     fail (0, 0);
     105           1 :   if (recsel_select (se, test_1_getval, ""))
     106           0 :     fail (0, 0);
     107             : 
     108           1 :   FREEEXPR();
     109           1 : }
     110             : 
     111             : 
     112             : /* Same as test1 but using a combined expression.. */
     113             : static void
     114           1 : run_test_1b (void)
     115             : {
     116             :   gpg_error_t err;
     117           1 :   recsel_expr_t se = NULL;
     118             : 
     119           1 :   err = recsel_parse_expr
     120             :     (&se, "uid =~ Alfa && uid !~   Test  || uid =~  Alpha && uid  !~ Test" );
     121           1 :   if (err)
     122           0 :     fail (0, err);
     123             : 
     124           1 :   if (debug)
     125           0 :     recsel_dump (se);
     126             : 
     127             :   /* The example from recsel.c in several variants. */
     128           1 :   if (!recsel_select (se, test_1_getval, "Alfa"))
     129           0 :     fail (0, 0);
     130           1 :   if (!recsel_select (se, test_1_getval, "Alpha"))
     131           0 :     fail (0, 0);
     132           1 :   if (recsel_select (se, test_1_getval, "Alfa Test"))
     133           0 :     fail (0, 0);
     134           1 :   if (recsel_select (se, test_1_getval, "Alpha Test"))
     135           0 :     fail (0, 0);
     136             : 
     137             :   /* Some modified versions from above.  */
     138           1 :   if (!recsel_select (se, test_1_getval, " AlfA Tes"))
     139           0 :     fail (0, 0);
     140           1 :   if (!recsel_select (se, test_1_getval, " AlfA Tes "))
     141           0 :     fail (0, 0);
     142           1 :   if (!recsel_select (se, test_1_getval, " Tes  AlfA"))
     143           0 :     fail (0, 0);
     144           1 :   if (!recsel_select (se, test_1_getval, "TesAlfA"))
     145           0 :     fail (0, 0);
     146             : 
     147             :   /* Simple cases. */
     148           1 :   if (recsel_select (se, NULL, NULL))
     149           0 :     fail (0, 0);
     150           1 :   if (recsel_select (se, test_1_getval, NULL))
     151           0 :     fail (0, 0);
     152           1 :   if (recsel_select (se, test_1_getval, ""))
     153           0 :     fail (0, 0);
     154             : 
     155           1 :   FREEEXPR();
     156           1 : }
     157             : 
     158             : 
     159             : static const char *
     160          44 : test_2_getval (void *cookie, const char *name)
     161             : {
     162          44 :   if (!strcmp (name, "uid"))
     163          13 :     return "foo@example.org";
     164          31 :   else if (!strcmp (name, "keyid"))
     165           8 :     return "0x12345678";
     166          23 :   else if (!strcmp (name, "zero"))
     167           2 :     return "0";
     168          21 :   else if (!strcmp (name, "one"))
     169           2 :     return "1";
     170          19 :   else if (!strcmp (name, "blanks"))
     171           4 :     return "    ";
     172          15 :   else if (!strcmp (name, "letters"))
     173           3 :     return "abcde";
     174          12 :   else if (!strcmp (name, "str1"))
     175           7 :     return "aaa";
     176             :   else
     177           5 :     return cookie;
     178             : }
     179             : 
     180             : static void
     181           1 : run_test_2 (void)
     182             : {
     183             :   gpg_error_t err;
     184           1 :   recsel_expr_t se = NULL;
     185             : 
     186           1 :   ADDEXPR ("uid = foo@example.org");
     187           1 :   if (!recsel_select (se, test_2_getval, NULL))
     188           0 :     fail (0, 0);
     189           1 :   FREEEXPR();
     190           1 :   ADDEXPR ("uid = Foo@example.org");
     191           1 :   if (!recsel_select (se, test_2_getval, NULL))
     192           0 :     fail (0, 0);
     193           1 :   FREEEXPR();
     194           1 :   ADDEXPR ("-c uid = Foo@example.org");
     195           1 :   if (recsel_select (se, test_2_getval, NULL))
     196           0 :     fail (0, 0);
     197             : 
     198           1 :   FREEEXPR();
     199           1 :   ADDEXPR ("uid =~ foo@example.org");
     200           1 :   if (!recsel_select (se, test_2_getval, NULL))
     201           0 :     fail (0, 0);
     202           1 :   FREEEXPR();
     203           1 :   ADDEXPR ("uid =~ Foo@example.org");
     204           1 :   if (!recsel_select (se, test_2_getval, NULL))
     205           0 :     fail (0, 0);
     206           1 :   FREEEXPR();
     207           1 :   ADDEXPR ("-c uid =~ Foo@example.org");
     208           1 :   if (recsel_select (se, test_2_getval, NULL))
     209           0 :     fail (0, 0);
     210             : 
     211           1 :   FREEEXPR();
     212           1 :   ADDEXPR ("uid !~ foo@example.org");
     213           1 :   if (recsel_select (se, test_2_getval, NULL))
     214           0 :     fail (0, 0);
     215           1 :   FREEEXPR();
     216           1 :   ADDEXPR ("uid !~ Foo@example.org");
     217           1 :   if (recsel_select (se, test_2_getval, NULL))
     218           0 :     fail (0, 0);
     219           1 :   FREEEXPR();
     220           1 :   ADDEXPR ("-c uid !~ Foo@example.org");
     221           1 :   if (!recsel_select (se, test_2_getval, NULL))
     222           0 :     fail (0, 0);
     223             : 
     224           1 :   FREEEXPR();
     225           1 :   ADDEXPR ("uid =~ @");
     226           1 :   if (!recsel_select (se, test_2_getval, NULL))
     227           0 :     fail (0, 0);
     228           1 :   FREEEXPR();
     229           1 :   ADDEXPR ("uid =~ @");
     230           1 :   if (!recsel_select (se, test_2_getval, NULL))
     231           0 :     fail (0, 0);
     232             : 
     233           1 :   FREEEXPR();
     234           1 :   ADDEXPR ("keyid == 0x12345678");
     235           1 :   if (!recsel_select (se, test_2_getval, NULL))
     236           0 :     fail (0, 0);
     237           1 :   FREEEXPR();
     238           1 :   ADDEXPR ("keyid != 0x12345678");
     239           1 :   if (recsel_select (se, test_2_getval, NULL))
     240           0 :     fail (0, 0);
     241           1 :   FREEEXPR();
     242           1 :   ADDEXPR ("keyid >= 0x12345678");
     243           1 :   if (!recsel_select (se, test_2_getval, NULL))
     244           0 :     fail (0, 0);
     245           1 :   FREEEXPR();
     246           1 :   ADDEXPR ("keyid <= 0x12345678");
     247           1 :   if (!recsel_select (se, test_2_getval, NULL))
     248           0 :     fail (0, 0);
     249           1 :   FREEEXPR();
     250           1 :   ADDEXPR ("keyid > 0x12345677");
     251           1 :   if (!recsel_select (se, test_2_getval, NULL))
     252           0 :     fail (0, 0);
     253           1 :   FREEEXPR();
     254           1 :   ADDEXPR ("keyid < 0x12345679");
     255           1 :   if (!recsel_select (se, test_2_getval, NULL))
     256           0 :     fail (0, 0);
     257             : 
     258           1 :   FREEEXPR();
     259           1 :   ADDEXPR ("keyid > 0x12345678");
     260           1 :   if (recsel_select (se, test_2_getval, NULL))
     261           0 :     fail (0, 0);
     262           1 :   FREEEXPR();
     263           1 :   ADDEXPR ("keyid < 0x12345678");
     264           1 :   if (recsel_select (se, test_2_getval, NULL))
     265           0 :     fail (0, 0);
     266             : 
     267             : 
     268           1 :   FREEEXPR();
     269           1 :   ADDEXPR ("str1 -gt aa");
     270           1 :   if (!recsel_select (se, test_2_getval, NULL))
     271           0 :     fail (0, 0);
     272           1 :   FREEEXPR();
     273           1 :   ADDEXPR ("str1 -gt aaa");
     274           1 :   if (recsel_select (se, test_2_getval, NULL))
     275           0 :     fail (0, 0);
     276           1 :   FREEEXPR();
     277           1 :   ADDEXPR ("str1 -ge aaa");
     278           1 :   if (!recsel_select (se, test_2_getval, NULL))
     279           0 :     fail (0, 0);
     280           1 :   FREEEXPR();
     281           1 :   ADDEXPR ("str1 -lt aab");
     282           1 :   if (!recsel_select (se, test_2_getval, NULL))
     283           0 :     fail (0, 0);
     284           1 :   FREEEXPR();
     285           1 :   ADDEXPR ("str1 -le aaa");
     286           1 :   if (!recsel_select (se, test_2_getval, NULL))
     287           0 :     fail (0, 0);
     288             : 
     289           1 :   FREEEXPR();
     290           1 :   ADDEXPR ("-c str1 -lt AAB");
     291           1 :   if (recsel_select (se, test_2_getval, NULL))
     292           0 :     fail (0, 0);
     293           1 :   FREEEXPR();
     294           1 :   ADDEXPR ("str1 -lt AAB");
     295           1 :   if (!recsel_select (se, test_2_getval, NULL))
     296           0 :     fail (0, 0);
     297             : 
     298             : 
     299           1 :   FREEEXPR();
     300           1 :   ADDEXPR ("uid -n");
     301           1 :   if (!recsel_select (se, test_2_getval, NULL))
     302           0 :     fail (0, 0);
     303           1 :   FREEEXPR();
     304           1 :   ADDEXPR ("uid -z");
     305           1 :   if (recsel_select (se, test_2_getval, NULL))
     306           0 :     fail (0, 0);
     307             : 
     308           1 :   FREEEXPR();
     309           1 :   ADDEXPR ("nothing -z");
     310           1 :   if (!recsel_select (se, test_2_getval, NULL))
     311           0 :     fail (0, 0);
     312           1 :   FREEEXPR();
     313           1 :   ADDEXPR ("nothing -n");
     314           1 :   if (recsel_select (se, test_2_getval, NULL))
     315           0 :     fail (0, 0);
     316             : 
     317           1 :   FREEEXPR();
     318           1 :   ADDEXPR ("blanks -n");
     319           1 :   if (!recsel_select (se, test_2_getval, NULL))
     320           0 :     fail (0, 0);
     321           1 :   FREEEXPR();
     322           1 :   ADDEXPR ("blanks -z");
     323           1 :   if (recsel_select (se, test_2_getval, NULL))
     324           0 :     fail (0, 0);
     325             : 
     326           1 :   FREEEXPR();
     327           1 :   ADDEXPR ("letters -n");
     328           1 :   if (!recsel_select (se, test_2_getval, NULL))
     329           0 :     fail (0, 0);
     330           1 :   FREEEXPR();
     331           1 :   ADDEXPR ("letters -z");
     332           1 :   if (recsel_select (se, test_2_getval, NULL))
     333           0 :     fail (0, 0);
     334             : 
     335             : 
     336           1 :   FREEEXPR();
     337           1 :   ADDEXPR ("nothing -f");
     338           1 :   if (!recsel_select (se, test_2_getval, NULL))
     339           0 :     fail (0, 0);
     340           1 :   FREEEXPR();
     341           1 :   ADDEXPR ("nothing -t");
     342           1 :   if (recsel_select (se, test_2_getval, NULL))
     343           0 :     fail (0, 0);
     344             : 
     345           1 :   FREEEXPR();
     346           1 :   ADDEXPR ("zero -f");
     347           1 :   if (!recsel_select (se, test_2_getval, NULL))
     348           0 :     fail (0, 0);
     349           1 :   FREEEXPR();
     350           1 :   ADDEXPR ("zero -t");
     351           1 :   if (recsel_select (se, test_2_getval, NULL))
     352           0 :     fail (0, 0);
     353             : 
     354           1 :   FREEEXPR();
     355           1 :   ADDEXPR ("one -t");
     356           1 :   if (!recsel_select (se, test_2_getval, NULL))
     357           0 :     fail (0, 0);
     358           1 :   FREEEXPR();
     359           1 :   ADDEXPR ("one -f");
     360           1 :   if (recsel_select (se, test_2_getval, NULL))
     361           0 :     fail (0, 0);
     362             : 
     363           1 :   FREEEXPR();
     364           1 :   ADDEXPR ("blanks -f");
     365           1 :   if (!recsel_select (se, test_2_getval, NULL))
     366           0 :     fail (0, 0);
     367           1 :   FREEEXPR();
     368           1 :   ADDEXPR ("blanks -t");
     369           1 :   if (recsel_select (se, test_2_getval, NULL))
     370           0 :     fail (0, 0);
     371             : 
     372           1 :   FREEEXPR();
     373           1 :   ADDEXPR ("letter -f");
     374           1 :   if (!recsel_select (se, test_2_getval, NULL))
     375           0 :     fail (0, 0);
     376           1 :   FREEEXPR();
     377           1 :   ADDEXPR ("letters -t");
     378           1 :   if (recsel_select (se, test_2_getval, NULL))
     379           0 :     fail (0, 0);
     380             : 
     381             : 
     382           1 :   FREEEXPR();
     383           1 : }
     384             : 
     385             : 
     386             : 
     387             : int
     388           1 : main (int argc, char **argv)
     389             : {
     390           1 :   int last_argc = -1;
     391             : 
     392           1 :   log_set_prefix (PGM, GPGRT_LOG_WITH_PREFIX);
     393           1 :   init_common_subsystems (&argc, &argv);
     394             : 
     395           1 :   if (argc)
     396           1 :     { argc--; argv++; }
     397           2 :   while (argc && last_argc != argc )
     398             :     {
     399           0 :       last_argc = argc;
     400           0 :       if (!strcmp (*argv, "--"))
     401             :         {
     402           0 :           argc--; argv++;
     403           0 :           break;
     404             :         }
     405           0 :       else if (!strcmp (*argv, "--help"))
     406             :         {
     407           0 :           fputs ("usage: " PGM " [options]\n"
     408             :                  "Options:\n"
     409             :                  "  --verbose       print timings etc.\n"
     410             :                  "  --debug         flyswatter\n",
     411             :                  stdout);
     412           0 :           exit (0);
     413             :         }
     414           0 :       else if (!strcmp (*argv, "--verbose"))
     415             :         {
     416           0 :           verbose++;
     417           0 :           argc--; argv++;
     418             :         }
     419           0 :       else if (!strcmp (*argv, "--debug"))
     420             :         {
     421           0 :           verbose += 2;
     422           0 :           debug++;
     423           0 :           argc--; argv++;
     424             :         }
     425           0 :       else if (!strncmp (*argv, "--", 2))
     426             :         {
     427           0 :           log_error ("unknown option '%s'\n", *argv);
     428           0 :           exit (2);
     429             :         }
     430             :     }
     431             : 
     432           1 :   run_test_1 ();
     433           1 :   run_test_1b ();
     434           1 :   run_test_2 ();
     435             :   /* Fixme: We should add test for complex conditions.  */
     436             : 
     437           1 :   return 0;
     438             : }

Generated by: LCOV version 1.11