LCOV - code coverage report
Current view: top level - common - t-session-env.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 114 155 73.5 %
Date: 2015-11-05 17:10:59 Functions: 4 4 100.0 %

          Line data    Source code
       1             : /* t-session-env.c - Module test for session-env.c
       2             :  *      Copyright (C) 2009 Free Software Foundation, Inc.
       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 <errno.h>
      24             : #include <assert.h>
      25             : 
      26             : #include "util.h"
      27             : #include "session-env.h"
      28             : 
      29             : #define pass()  do { ; } while(0)
      30             : #define fail(e) do { fprintf (stderr, "%s:%d: function failed: %s\n",  \
      31             :                                __FILE__,__LINE__, gpg_strerror (e));  \
      32             :                      exit (1);                                        \
      33             :                    } while(0)
      34             : 
      35             : static int verbose;
      36             : 
      37             : static void
      38           8 : listall (session_env_t se)
      39             : {
      40           8 :   int iterator = 0;
      41             :   const char *name, *value;
      42             :   int def;
      43             : 
      44           8 :   if (verbose)
      45           0 :     printf ("environment of %p\n", se);
      46         604 :   while ( (name = session_env_listenv (se, &iterator, &value, &def)) )
      47         588 :     if (verbose)
      48           0 :       printf ("  %s%s=%s\n",  def? "[def] ":"      ", name, value);
      49             : 
      50           8 : }
      51             : 
      52             : 
      53             : static void
      54           1 : show_stdnames (void)
      55             : {
      56             :   const char *name, *assname;
      57           1 :   int iterator = 0;
      58             : 
      59           1 :   printf ("Known envvars:");
      60          12 :   while ((name = session_env_list_stdenvnames (&iterator, &assname)))
      61             :     {
      62          10 :       printf ( " %s", name);
      63          10 :       if (assname)
      64           5 :         printf ( "(%s)", assname);
      65             :     }
      66           1 :   putchar('\n');
      67           1 : }
      68             : 
      69             : 
      70             : static void
      71           1 : test_all (void)
      72             : {
      73             :   gpg_error_t err;
      74             :   session_env_t se_0, se;
      75             :   const char *s, *s2;
      76             :   int idx;
      77             : 
      78           1 :   se_0 = session_env_new ();
      79           1 :   if (!se_0)
      80           0 :     fail (gpg_error_from_syserror ());
      81           1 :   se = session_env_new ();
      82           1 :   if (!se)
      83           0 :     fail (gpg_error_from_syserror ());
      84             : 
      85           1 :   err = session_env_putenv (se, NULL);
      86           1 :   if (gpg_err_code (err) != GPG_ERR_INV_VALUE)
      87           0 :     fail (err);
      88           1 :   err = session_env_putenv (se, "");
      89           1 :   if (gpg_err_code (err) != GPG_ERR_INV_VALUE)
      90           0 :     fail (err);
      91           1 :   err = session_env_putenv (se, "=");
      92           1 :   if (gpg_err_code (err) != GPG_ERR_INV_VALUE)
      93           0 :     fail (err);
      94             : 
      95             :   /* Delete some nonexistant variables.  */
      96           1 :   err = session_env_putenv (se, "A");
      97           1 :   if (err)
      98           0 :     fail (err);
      99           1 :   err = session_env_putenv (se, "a");
     100           1 :   if (err)
     101           0 :     fail (err);
     102           1 :   err = session_env_putenv (se, "_aaaa aaaaaasssssssssssss\nddd");
     103           1 :   if (err)
     104           0 :     fail (err);
     105             : 
     106             :   /* Create a few variables.  */
     107           1 :   err = session_env_putenv (se, "EMPTY=");
     108           1 :   if (err)
     109           0 :     fail (err);
     110           1 :   err = session_env_putenv (se, "foo=value_of_foo");
     111           1 :   if (err)
     112           0 :     fail (err);
     113           1 :   err = session_env_putenv (se, "bar=the value_of_bar");
     114           1 :   if (err)
     115           0 :     fail (err);
     116           1 :   err = session_env_putenv (se, "baz=this-is-baz");
     117           1 :   if (err)
     118           0 :     fail (err);
     119           1 :   err = session_env_putenv (se, "BAZ=this-is-big-baz");
     120           1 :   if (err)
     121           0 :     fail (err);
     122             : 
     123           1 :   listall (se);
     124             : 
     125             :   /* Update one.  */
     126           1 :   err = session_env_putenv (se, "baz=this-is-another-baz");
     127           1 :   if (err)
     128           0 :     fail (err);
     129             : 
     130           1 :   listall (se);
     131             : 
     132             :   /* Delete one.  */
     133           1 :   err = session_env_putenv (se, "bar");
     134           1 :   if (err)
     135           0 :     fail (err);
     136             : 
     137           1 :   listall (se);
     138             : 
     139             :   /* Insert a new one.  */
     140           1 :   err = session_env_putenv (se, "FOO=value_of_foo");
     141           1 :   if (err)
     142           0 :     fail (err);
     143             : 
     144           1 :   listall (se);
     145             : 
     146             :   /* Retrieve a default one.  */
     147           1 :   s = session_env_getenv_or_default (se, "HOME", NULL);
     148           1 :   if (!s)
     149             :     {
     150           0 :       fprintf (stderr, "failed to get default of HOME\n");
     151           0 :       exit (1);
     152             :     }
     153             : 
     154           1 :   s = session_env_getenv (se, "HOME");
     155           1 :   if (s)
     156           0 :     fail(0);  /* This is a default value, thus we should not see it.  */
     157             : 
     158           1 :   s = session_env_getenv_or_default (se, "HOME", NULL);
     159           1 :   if (!s)
     160           0 :     fail(0);  /* But here we should see it.  */
     161             : 
     162             :   /* Add a few more.  */
     163           1 :   err = session_env_putenv (se, "X1=A value");
     164           1 :   if (err)
     165           0 :     fail (err);
     166           1 :   err = session_env_putenv (se, "X2=Another value");
     167           1 :   if (err)
     168           0 :     fail (err);
     169           1 :   err = session_env_putenv (se, "X3=A value");
     170           1 :   if (err)
     171           0 :     fail (err);
     172             : 
     173           1 :   listall (se);
     174             : 
     175             :   /* Check that we can overwrite a default value.  */
     176           1 :   err = session_env_putenv (se, "HOME=/this/is/my/new/home");
     177           1 :   if (err)
     178           0 :     fail (err);
     179             :   /* And that we get this string back.  */
     180           1 :   s = session_env_getenv (se, "HOME");
     181           1 :   if (!s)
     182           0 :     fail (0);
     183           1 :   if (strcmp (s, "/this/is/my/new/home"))
     184           0 :     fail (0);
     185             :   /* A new get default should return the very same string.  */
     186           1 :   s2 = session_env_getenv_or_default (se, "HOME", NULL);
     187           1 :   if (!s2)
     188           0 :     fail (0);
     189           1 :   if (s2 != s)
     190           0 :     fail (0);
     191             : 
     192           1 :   listall (se);
     193             : 
     194             :   /* Check that the other object is clean.  */
     195             :   {
     196           1 :     int iterator = 0;
     197             : 
     198           1 :     if (session_env_listenv (se_0, &iterator, NULL, NULL))
     199           0 :       fail (0);
     200             :   }
     201             : 
     202             : 
     203           1 :   session_env_release (se);
     204             : 
     205             :   /* Use a new session for quick mass test.  */
     206           1 :   se = session_env_new ();
     207           1 :   if (!se)
     208           0 :     fail (gpg_error_from_syserror ());
     209             : 
     210             :   /* Create.  */
     211         501 :   for (idx=0; idx < 500; idx++)
     212             :     {
     213             :       char buf[100];
     214             : 
     215         500 :       snprintf (buf, sizeof buf, "FOO_%d=Value for %x", idx, idx);
     216         500 :       err = session_env_putenv (se, buf);
     217         500 :       if (err)
     218           0 :         fail (err);
     219             :     }
     220           1 :   err = session_env_setenv (se, "TEST1", "value1");
     221           1 :   if (err)
     222           0 :     fail (err);
     223           1 :   err = session_env_setenv (se, "TEST1", "value1-updated");
     224           1 :   if (err)
     225           0 :     fail (err);
     226             : 
     227           1 :   listall (se);
     228             : 
     229             :   /* Delete all.  */
     230         501 :   for (idx=0; idx < 500; idx++)
     231             :     {
     232             :       char buf[100];
     233             : 
     234         500 :       snprintf (buf, sizeof buf, "FOO_%d", idx);
     235         500 :       err = session_env_putenv (se, buf);
     236         500 :       if (err)
     237           0 :         fail (err);
     238             :     }
     239           1 :   err = session_env_setenv (se, "TEST1", NULL);
     240           1 :   if (err)
     241           0 :     fail (err);
     242             : 
     243             :   /* Check that all are deleted.  */
     244             :   {
     245           1 :     int iterator = 0;
     246             : 
     247           1 :     if (session_env_listenv (se, &iterator, NULL, NULL))
     248           0 :       fail (0);
     249             :   }
     250             : 
     251             :   /* Add a few strings again.  */
     252         501 :   for (idx=0; idx < 500; idx++)
     253             :     {
     254             :       char buf[100];
     255             : 
     256         500 :       if (!(idx % 10))
     257             :         {
     258          50 :           if ( !(idx % 3))
     259          17 :             snprintf (buf, sizeof buf, "FOO_%d=", idx);
     260             :           else
     261          33 :             snprintf (buf, sizeof buf, "FOO_%d=new value for %x", idx, idx);
     262          50 :           err = session_env_putenv (se, buf);
     263          50 :           if (err)
     264           0 :             fail (err);
     265             :         }
     266             :     }
     267             : 
     268           1 :   listall (se);
     269             : 
     270           1 :   session_env_release (se);
     271             : 
     272           1 :   session_env_release (se_0);
     273           1 : }
     274             : 
     275             : 
     276             : 
     277             : int
     278           1 : main (int argc, char **argv)
     279             : {
     280           1 :   if (argc)
     281           1 :     { argc--; argv++; }
     282           1 :   if (argc && !strcmp (argv[0], "--verbose"))
     283             :     {
     284           0 :       verbose = 1;
     285           0 :       argc--; argv++;
     286             :     }
     287             : 
     288             : 
     289           1 :   show_stdnames ();
     290           1 :   test_all ();
     291             : 
     292           1 :   return 0;
     293             : }

Generated by: LCOV version 1.11