LCOV - code coverage report
Current view: top level - src/bindings/intercept/env/tests - test_context.cpp (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 139 139 100.0 %
Date: 2019-09-12 12:28:41 Functions: 24 49 49.0 %

          Line data    Source code
       1             : /**
       2             :  * @file
       3             :  *
       4             :  * @brief Tests for the getenv library (context part)
       5             :  *
       6             :  * @copyright BSD License (see LICENSE.md or https://www.libelektra.org)
       7             :  *
       8             :  */
       9             : 
      10             : #include <gtest/gtest.h>
      11             : #include <kdbgetenv.h>
      12             : 
      13             : namespace ckdb
      14             : {
      15             : Key * elektraLookupWithContext (std::string name);
      16             : }
      17             : 
      18             : using namespace ckdb;
      19             : 
      20          20 : TEST (Context, Exist)
      21             : {
      22             :         Key * k;
      23           2 :         elektraOpen (nullptr, nullptr);
      24           2 :         ksAppendKey (elektraConfig, k = keyNew ("user/elektra/intercept/getenv/override/does-exist", KEY_VALUE, "hello", KEY_END));
      25           8 :         Key * f = elektraLookupWithContext ("user/elektra/intercept/getenv/override/does-exist");
      26           4 :         EXPECT_EQ (k, f);
      27           2 : }
      28             : 
      29             : 
      30          20 : TEST (Context, ExistWithContext)
      31             : {
      32             :         Key * k;
      33           2 :         elektraOpen (nullptr, nullptr);
      34           2 :         ksAppendKey (elektraConfig, k = keyNew ("user/elektra/intercept/getenv/override/does-exist", KEY_VALUE, "hello", KEY_END));
      35           2 :         ksAppendKey (elektraConfig, keyNew ("spec/elektra/intercept/getenv/override/does-exist", KEY_META, "context",
      36           2 :                                             "user/elektra/intercept/getenv/override/does-exist", KEY_VALUE, "hello", KEY_END));
      37           8 :         Key * f = elektraLookupWithContext ("/elektra/intercept/getenv/override/does-exist");
      38           4 :         EXPECT_EQ (k, f);
      39           2 : }
      40             : 
      41             : 
      42          20 : TEST (Context, ExistWithContextCascading)
      43             : {
      44             :         Key * k;
      45           2 :         elektraOpen (nullptr, nullptr);
      46           2 :         ksAppendKey (elektraConfig, k = keyNew ("user/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "hello", KEY_END));
      47           2 :         ksAppendKey (elektraConfig, keyNew ("spec/elektra/intercept/getenv/override/does-exist", KEY_META, "context",
      48           2 :                                             "/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "hello", KEY_END));
      49           8 :         Key * f = elektraLookupWithContext ("/elektra/intercept/getenv/override/does-exist");
      50           4 :         EXPECT_EQ (k, f);
      51           2 : }
      52             : 
      53             : namespace ckdb
      54             : {
      55             : void addLayers ();
      56             : }
      57             : 
      58          20 : TEST (Context, ExistWithContextOverrideCascading)
      59             : {
      60             :         Key * k;
      61           2 :         elektraOpen (nullptr, nullptr);
      62           2 :         ksAppendKey (elektraConfig, keyNew ("user/elektra/intercept/getenv/layer/layer", KEY_VALUE, "layer", KEY_END));
      63           2 :         addLayers ();
      64             : 
      65           2 :         ksAppendKey (elektraConfig, keyNew ("user/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "wrong", KEY_END));
      66           2 :         ksAppendKey (elektraConfig,
      67           4 :                      k = keyNew ("user/elektra/intercept/getenv/override/layer/does-exist-too", KEY_VALUE, "correct", KEY_END));
      68           2 :         ksAppendKey (elektraConfig, keyNew ("spec/elektra/intercept/getenv/override/does-exist", KEY_META, "context",
      69             :                                             "/elektra/intercept/getenv/override/%layer%/does-exist-too", KEY_META, "override/#0",
      70           2 :                                             "/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "hello", KEY_END));
      71           8 :         Key * f = elektraLookupWithContext ("/elektra/intercept/getenv/override/does-exist");
      72           4 :         EXPECT_EQ (k, f);
      73           2 : }
      74             : 
      75          20 : TEST (Context, ExistWithContextOverrideCascadingSystem)
      76             : {
      77             :         Key * k;
      78           2 :         elektraOpen (nullptr, nullptr);
      79           2 :         ksAppendKey (elektraConfig, keyNew ("user/elektra/intercept/getenv/layer/layer", KEY_VALUE, "layer", KEY_END));
      80           2 :         ksAppendKey (elektraConfig, keyNew ("system/elektra/intercept/getenv/layer/layer", KEY_VALUE, "systemlayer", KEY_END));
      81           2 :         addLayers ();
      82             : 
      83           2 :         ksAppendKey (elektraConfig, keyNew ("user/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "wrong", KEY_END));
      84           2 :         ksAppendKey (elektraConfig,
      85           4 :                      k = keyNew ("user/elektra/intercept/getenv/override/layer/does-exist-too", KEY_VALUE, "correct", KEY_END));
      86           2 :         ksAppendKey (elektraConfig, keyNew ("spec/elektra/intercept/getenv/override/does-exist", KEY_META, "context",
      87             :                                             "/elektra/intercept/getenv/override/%layer%/does-exist-too", KEY_META, "override/#0",
      88           2 :                                             "/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "hello", KEY_END));
      89           8 :         Key * f = elektraLookupWithContext ("/elektra/intercept/getenv/override/does-exist");
      90           4 :         EXPECT_EQ (k, f);
      91           2 : }
      92             : 
      93             : 
      94          20 : TEST (Context, ExistWithContextOverrideCascadingDir)
      95             : {
      96             :         Key * k;
      97           2 :         elektraOpen (nullptr, nullptr);
      98           2 :         ksAppendKey (elektraConfig, keyNew ("dir/elektra/intercept/getenv/layer/layer", KEY_VALUE, "layer", KEY_END));
      99           2 :         ksAppendKey (elektraConfig, keyNew ("user/elektra/intercept/getenv/layer/layer", KEY_VALUE, "userlayer", KEY_END));
     100           2 :         addLayers ();
     101             : 
     102           2 :         ksAppendKey (elektraConfig, keyNew ("user/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "wrong", KEY_END));
     103           2 :         ksAppendKey (elektraConfig,
     104           4 :                      k = keyNew ("user/elektra/intercept/getenv/override/layer/does-exist-too", KEY_VALUE, "correct", KEY_END));
     105           2 :         ksAppendKey (elektraConfig, keyNew ("spec/elektra/intercept/getenv/override/does-exist", KEY_META, "context",
     106             :                                             "/elektra/intercept/getenv/override/%layer%/does-exist-too", KEY_META, "override/#0",
     107           2 :                                             "/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "hello", KEY_END));
     108           8 :         Key * f = elektraLookupWithContext ("/elektra/intercept/getenv/override/does-exist");
     109           4 :         EXPECT_EQ (k, f);
     110           2 : }
     111             : 
     112          20 : TEST (Context, ExistWithContextOverrideCascadingProc)
     113             : {
     114             :         Key * k;
     115           2 :         elektraOpen (nullptr, nullptr);
     116           2 :         ksAppendKey (elektraConfig, keyNew ("proc/elektra/intercept/getenv/layer/layer", KEY_VALUE, "layer", KEY_END));
     117           2 :         ksAppendKey (elektraConfig, keyNew ("user/elektra/intercept/getenv/layer/layer", KEY_VALUE, "userlayer", KEY_END));
     118           2 :         addLayers ();
     119             : 
     120           2 :         ksAppendKey (elektraConfig, keyNew ("user/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "wrong", KEY_END));
     121           2 :         ksAppendKey (elektraConfig,
     122           4 :                      k = keyNew ("user/elektra/intercept/getenv/override/layer/does-exist-too", KEY_VALUE, "correct", KEY_END));
     123           2 :         ksAppendKey (elektraConfig, keyNew ("spec/elektra/intercept/getenv/override/does-exist", KEY_META, "context",
     124             :                                             "/elektra/intercept/getenv/override/%layer%/does-exist-too", KEY_META, "override/#0",
     125           2 :                                             "/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "hello", KEY_END));
     126           8 :         Key * f = elektraLookupWithContext ("/elektra/intercept/getenv/override/does-exist");
     127           4 :         EXPECT_EQ (k, f);
     128           2 : }
     129             : 
     130          20 : TEST (Context, ExistWithContextOverrideCascadingWithSlash)
     131             : {
     132             :         Key * k;
     133           2 :         elektraOpen (nullptr, nullptr);
     134           2 :         ksAppendKey (elektraConfig, keyNew ("proc/elektra/intercept/getenv/layer/layer/name", KEY_VALUE, "layer/value", KEY_END));
     135           2 :         addLayers ();
     136             : 
     137           2 :         ksAppendKey (elektraConfig, keyNew ("user/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "wrong", KEY_END));
     138           2 :         ksAppendKey (elektraConfig,
     139           4 :                      k = keyNew ("user/elektra/intercept/getenv/override/layer/value/does-exist-too", KEY_VALUE, "correct", KEY_END));
     140           2 :         ksAppendKey (elektraConfig, keyNew ("spec/elektra/intercept/getenv/override/does-exist", KEY_META, "context",
     141             :                                             "/elektra/intercept/getenv/override/%layer/name%/does-exist-too", KEY_META, "override/#0",
     142           2 :                                             "/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "hello", KEY_END));
     143           8 :         Key * f = elektraLookupWithContext ("/elektra/intercept/getenv/override/does-exist");
     144           4 :         EXPECT_EQ (k, f);
     145           2 : }
     146             : 
     147             : 
     148          20 : TEST (Context, NameExplicit)
     149             : {
     150             :         using namespace ckdb;
     151           2 :         int argc = 2;
     152           2 :         const char * cargv[] = { "any-name", "--elektra%name%=other-name", "--elektra%layer%=layer" };
     153           2 :         char ** argv = const_cast<char **> (cargv);
     154             : 
     155           2 :         elektraOpen (&argc, argv);
     156           2 :         ksAppendKey (elektraConfig, keyNew ("system/somewhere/other-name/layer/does-exist", KEY_VALUE, "hello", KEY_END));
     157           2 :         ksAppendKey (elektraConfig, keyNew ("system/elektra/intercept/getenv/override/akey", KEY_META, "context",
     158           2 :                                             "/somewhere/%name%/%layer%/does-exist", KEY_END));
     159           2 :         elektraClose ();
     160           2 : }
     161             : 
     162          20 : TEST (Context, ExistWithContextOverrideCascadingOverrideUser)
     163             : {
     164             :         Key * k;
     165           2 :         elektraOpen (nullptr, nullptr);
     166           2 :         ksAppendKey (elektraConfig, keyNew ("user/elektra/intercept/getenv/layer/hostname", KEY_VALUE, "wrongname", KEY_END));
     167           2 :         ksAppendKey (elektraConfig, keyNew ("spec/elektra/intercept/getenv/layer/hostname", KEY_META, "override/#0",
     168           2 :                                             "system/syscall/uname/hostname", KEY_END));
     169           2 :         ksAppendKey (elektraConfig, keyNew ("system/syscall/uname/hostname", KEY_VALUE, "localhost", KEY_END));
     170           2 :         addLayers ();
     171             : 
     172           2 :         ksAppendKey (elektraConfig, keyNew ("user/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "wrong", KEY_END));
     173           2 :         ksAppendKey (elektraConfig,
     174           4 :                      k = keyNew ("user/elektra/intercept/getenv/override/localhost/does-exist-too", KEY_VALUE, "correct", KEY_END));
     175           2 :         ksAppendKey (elektraConfig, keyNew ("spec/elektra/intercept/getenv/override/does-exist", KEY_META, "context",
     176           2 :                                             "/elektra/intercept/getenv/override/%hostname%/does-exist-too", KEY_VALUE, "hello", KEY_END));
     177           8 :         Key * f = elektraLookupWithContext ("/elektra/intercept/getenv/override/does-exist");
     178           4 :         EXPECT_EQ (k, f);
     179           2 : }
     180             : 
     181          20 : TEST (Context, ExistWithContextOverrideCascadingOverrideSystem)
     182             : {
     183             :         Key * k;
     184           2 :         elektraOpen (nullptr, nullptr);
     185           2 :         ksAppendKey (elektraConfig, keyNew ("system/elektra/intercept/getenv/layer/hostname", KEY_VALUE, "wrongname", KEY_END));
     186           2 :         ksAppendKey (elektraConfig, keyNew ("spec/elektra/intercept/getenv/layer/hostname", KEY_META, "override/#0",
     187           2 :                                             "system/syscall/uname/hostname", KEY_END));
     188           2 :         ksAppendKey (elektraConfig, keyNew ("system/syscall/uname/hostname", KEY_VALUE, "localhost", KEY_END));
     189           2 :         addLayers ();
     190             : 
     191           2 :         ksAppendKey (elektraConfig, keyNew ("user/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "wrong", KEY_END));
     192           2 :         ksAppendKey (elektraConfig,
     193           4 :                      k = keyNew ("user/elektra/intercept/getenv/override/localhost/does-exist-too", KEY_VALUE, "correct", KEY_END));
     194           2 :         ksAppendKey (elektraConfig, keyNew ("spec/elektra/intercept/getenv/override/does-exist", KEY_META, "context",
     195           2 :                                             "/elektra/intercept/getenv/override/%hostname%/does-exist-too", KEY_VALUE, "hello", KEY_END));
     196           8 :         Key * f = elektraLookupWithContext ("/elektra/intercept/getenv/override/does-exist");
     197           4 :         EXPECT_EQ (k, f);
     198           2 : }
     199             : 
     200          20 : TEST (Context, ExistWithContextOverrideCascadingOverride)
     201             : {
     202             :         Key * k;
     203           2 :         elektraOpen (nullptr, nullptr);
     204           2 :         ksAppendKey (elektraConfig, keyNew ("spec/elektra/intercept/getenv/layer/hostname", KEY_META, "override/#0",
     205           2 :                                             "system/syscall/uname/hostname", KEY_END));
     206           2 :         ksAppendKey (elektraConfig, keyNew ("system/syscall/uname/hostname", KEY_VALUE, "localhost", KEY_END));
     207           2 :         addLayers ();
     208             : 
     209           2 :         ksAppendKey (elektraConfig, keyNew ("user/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "wrong", KEY_END));
     210           2 :         ksAppendKey (elektraConfig,
     211           4 :                      k = keyNew ("user/elektra/intercept/getenv/override/localhost/does-exist-too", KEY_VALUE, "correct", KEY_END));
     212           2 :         ksAppendKey (elektraConfig, keyNew ("spec/elektra/intercept/getenv/override/does-exist", KEY_META, "context",
     213           2 :                                             "/elektra/intercept/getenv/override/%hostname%/does-exist-too", KEY_VALUE, "hello", KEY_END));
     214           8 :         Key * f = elektraLookupWithContext ("/elektra/intercept/getenv/override/does-exist");
     215           4 :         EXPECT_EQ (k, f);
     216           2 : }
     217             : 
     218             : 
     219             : #include "main.cpp"

Generated by: LCOV version 1.13