LCOV - code coverage report
Current view: top level - src/plugins/conditionals - testmod_conditionals.c (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 435 435 100.0 %
Date: 2019-09-12 12:28:41 Functions: 35 35 100.0 %

          Line data    Source code
       1             : /**
       2             :  * @file
       3             :  *
       4             :  * @brief Tests for conditionals plugin
       5             :  *
       6             :  * @copyright BSD License (see LICENSE.md or https://www.libelektra.org)
       7             :  *
       8             :  */
       9             : 
      10             : #include <stdlib.h>
      11             : #include <string.h>
      12             : 
      13             : #include <kdbconfig.h>
      14             : 
      15             : #include <tests_plugin.h>
      16             : 
      17           2 : static void test_ifthenelseint (void)
      18             : {
      19           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
      20           2 :         KeySet * ks = ksNew (5,
      21             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "153", KEY_META, "check/condition",
      22             :                                      "(../totest== '153') ? (../bla/val1 == '100') : (../bla/val2 == '100')", KEY_END),
      23             :                              keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
      24             :                              keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
      25             :                              keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END), KS_END);
      26           2 :         KeySet * conf = ksNew (0, KS_END);
      27           2 :         PLUGIN_OPEN ("conditionals");
      28           2 :         ksRewind (ks);
      29           2 :         succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
      30           2 :         ksDel (ks);
      31           2 :         keyDel (parentKey);
      32           2 :         PLUGIN_CLOSE ();
      33           2 : }
      34           2 : static void test_ifthenint (void)
      35             : {
      36           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
      37           2 :         KeySet * ks = ksNew (5,
      38             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "153", KEY_META, "check/condition",
      39             :                                      "(     ../totest   !=     '15'  ) ? (../bla/val1 == '100')", KEY_END),
      40             :                              keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
      41             :                              keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
      42             :                              keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END), KS_END);
      43           2 :         KeySet * conf = ksNew (0, KS_END);
      44           2 :         PLUGIN_OPEN ("conditionals");
      45           2 :         ksRewind (ks);
      46           2 :         succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
      47           2 :         ksDel (ks);
      48           2 :         keyDel (parentKey);
      49           2 :         PLUGIN_CLOSE ();
      50           2 : }
      51           2 : static void test_ifthenltint (void)
      52             : {
      53           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
      54           2 :         KeySet * ks = ksNew (5,
      55             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "153", KEY_META, "check/condition",
      56             :                                      "(     ./   <    '153'    ) ? (../bla/val1 == '100')", KEY_END),
      57             :                              keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
      58             :                              keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
      59             :                              keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END), KS_END);
      60           2 :         KeySet * conf = ksNew (0, KS_END);
      61           2 :         PLUGIN_OPEN ("conditionals");
      62           2 :         ksRewind (ks);
      63           2 :         succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
      64           2 :         ksDel (ks);
      65           2 :         keyDel (parentKey);
      66           2 :         PLUGIN_CLOSE ();
      67           2 : }
      68           2 : static void test_ifthengtint (void)
      69             : {
      70           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
      71           2 :         KeySet * ks = ksNew (5,
      72             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "153", KEY_META, "check/condition",
      73             :                                      "(./>'153') ? (../bla/val1 == '100') : (../bla/val2 <= '1')", KEY_END),
      74             :                              keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
      75             :                              keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
      76             :                              keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END), KS_END);
      77           2 :         KeySet * conf = ksNew (0, KS_END);
      78           2 :         PLUGIN_OPEN ("conditionals");
      79           2 :         ksRewind (ks);
      80           2 :         succeed_if (plugin->kdbGet (plugin, ks, parentKey) == -1, "error");
      81           2 :         ksDel (ks);
      82           2 :         keyDel (parentKey);
      83           2 :         PLUGIN_CLOSE ();
      84           2 : }
      85             : 
      86           2 : static void test_ifthenkey (void)
      87             : {
      88           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
      89           2 :         KeySet * ks = ksNew (5,
      90             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "153", KEY_META, "check/condition",
      91             :                                      "(../totest>@/bla/val3) ? (../bla/val1 == '100') :  (../bla/val2 <= '1')", KEY_END),
      92             :                              keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
      93             :                              keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
      94             :                              keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END), KS_END);
      95           2 :         KeySet * conf = ksNew (0, KS_END);
      96           2 :         PLUGIN_OPEN ("conditionals");
      97           2 :         ksRewind (ks);
      98           2 :         succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
      99           2 :         ksDel (ks);
     100           2 :         keyDel (parentKey);
     101           2 :         PLUGIN_CLOSE ();
     102           2 : }
     103             : 
     104             : 
     105           2 : static void test_emptyisempty (void)
     106             : {
     107           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     108           2 :         KeySet * ks = ksNew (5,
     109             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "", KEY_META, "check/condition",
     110             :                                      "(../totest=='') ? (../bla/val1 == '100') : (../bla/val2 <= '1')", KEY_END),
     111             :                              keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
     112             :                              keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
     113             :                              keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END), KS_END);
     114           2 :         KeySet * conf = ksNew (0, KS_END);
     115           2 :         PLUGIN_OPEN ("conditionals");
     116           2 :         ksRewind (ks);
     117           2 :         succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
     118           2 :         ksDel (ks);
     119           2 :         keyDel (parentKey);
     120           2 :         PLUGIN_CLOSE ();
     121           2 : }
     122             : 
     123             : 
     124           2 : static void test_notempty (void)
     125             : {
     126           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     127           2 :         KeySet * ks = ksNew (5,
     128             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "153", KEY_META, "check/condition",
     129             :                                      "(../totest!='') ? (../bla/val1 == '100') : (../bla/val2 <= '1')", KEY_END),
     130             :                              keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
     131             :                              keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
     132             :                              keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END), KS_END);
     133           2 :         KeySet * conf = ksNew (0, KS_END);
     134           2 :         PLUGIN_OPEN ("conditionals");
     135           2 :         ksRewind (ks);
     136           2 :         succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
     137           2 :         ksDel (ks);
     138           2 :         keyDel (parentKey);
     139           2 :         PLUGIN_CLOSE ();
     140           2 : }
     141             : 
     142           2 : static void test_ifsetthenval (void)
     143             : {
     144           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     145           2 :         KeySet * ks = ksNew (5,
     146             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "", KEY_META, "check/condition",
     147             :                                      "(../totest=='') ? (../totest := 'BLA')", KEY_END),
     148             :                              keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
     149             :                              keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
     150             :                              keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END), KS_END);
     151           2 :         KeySet * conf = ksNew (0, KS_END);
     152           2 :         PLUGIN_OPEN ("conditionals");
     153           2 :         ksRewind (ks);
     154           2 :         succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
     155           2 :         Key * key = ksLookupByName (ks, "user/tests/conditionals/totest", 0);
     156           2 :         succeed_if (strcmp (keyString (key), "BLA") == 0, "error setting then value");
     157           2 :         ksDel (ks);
     158           2 :         keyDel (parentKey);
     159           2 :         PLUGIN_CLOSE ();
     160           2 : }
     161           2 : static void test_ifsetthenkey (void)
     162             : {
     163           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     164           2 :         KeySet * ks = ksNew (5,
     165             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "", KEY_META, "check/condition",
     166             :                                      "(./=='') ? (./ := ../bla/val1)", KEY_END),
     167             :                              keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
     168             :                              keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
     169             :                              keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END), KS_END);
     170           2 :         KeySet * conf = ksNew (0, KS_END);
     171           2 :         PLUGIN_OPEN ("conditionals");
     172           2 :         ksRewind (ks);
     173           2 :         succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
     174           2 :         Key * key = ksLookupByName (ks, "user/tests/conditionals/totest", 0);
     175           2 :         succeed_if (strcmp (keyString (key), "100") == 0, "error setting then value");
     176           2 :         ksDel (ks);
     177           2 :         keyDel (parentKey);
     178           2 :         PLUGIN_CLOSE ();
     179           2 : }
     180           2 : static void test_assignThen (void)
     181             : {
     182           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     183           2 :         KeySet * ks = ksNew (5,
     184             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "Hello", KEY_META, "assign/condition",
     185             :                                      "(../totest=='Hello') ? ('World')", KEY_END),
     186             :                              KS_END);
     187           2 :         KeySet * conf = ksNew (0, KS_END);
     188           2 :         PLUGIN_OPEN ("conditionals");
     189           2 :         ksRewind (ks);
     190           2 :         succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
     191           2 :         Key * key = ksLookupByName (ks, "user/tests/conditionals/totest", 0);
     192           2 :         succeed_if (strcmp (keyString (key), "World") == 0, "error setting then value");
     193           2 :         ksDel (ks);
     194           2 :         keyDel (parentKey);
     195           2 :         PLUGIN_CLOSE ();
     196           2 : }
     197           2 : static void test_assignThen2 (void)
     198             : {
     199           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     200           2 :         KeySet * ks = ksNew (5,
     201             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "Hello", KEY_META, "assign/condition",
     202             :                                      "(../totest=='Hello') ? ('World') : ('Fail')", KEY_END),
     203             :                              KS_END);
     204           2 :         KeySet * conf = ksNew (0, KS_END);
     205           2 :         PLUGIN_OPEN ("conditionals");
     206           2 :         ksRewind (ks);
     207           2 :         succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
     208           2 :         Key * key = ksLookupByName (ks, "user/tests/conditionals/totest", 0);
     209           2 :         succeed_if (strcmp (keyString (key), "World") == 0, "error setting then value");
     210           2 :         ksDel (ks);
     211           2 :         keyDel (parentKey);
     212           2 :         PLUGIN_CLOSE ();
     213           2 : }
     214           2 : static void test_assignElse (void)
     215             : {
     216           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     217           2 :         KeySet * ks = ksNew (5,
     218             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "Hello", KEY_META, "assign/condition",
     219             :                                      "(../totest=='Hell') ? ('World') : ('Fail')", KEY_END),
     220             :                              KS_END);
     221           2 :         KeySet * conf = ksNew (0, KS_END);
     222           2 :         PLUGIN_OPEN ("conditionals");
     223           2 :         ksRewind (ks);
     224           2 :         succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
     225           2 :         Key * key = ksLookupByName (ks, "user/tests/conditionals/totest", 0);
     226           2 :         succeed_if (strcmp (keyString (key), "Fail") == 0, "error setting then value");
     227           2 :         ksDel (ks);
     228           2 :         keyDel (parentKey);
     229           2 :         PLUGIN_CLOSE ();
     230           2 : }
     231             : 
     232           2 : static void test_assignKeyThen (void)
     233             : {
     234           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     235           2 :         KeySet * ks = ksNew (5,
     236             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "Hello", KEY_META, "assign/condition",
     237             :                                      "(../totest=='Hello') ? (../then/key)", KEY_END),
     238             :                              keyNew ("user/tests/conditionals/then/key", KEY_VALUE, "World", KEY_END),
     239             :                              keyNew ("user/tests/conditionals/elseVal", KEY_VALUE, "Fail", KEY_END), KS_END);
     240           2 :         KeySet * conf = ksNew (0, KS_END);
     241           2 :         PLUGIN_OPEN ("conditionals");
     242           2 :         ksRewind (ks);
     243           2 :         succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
     244           2 :         Key * key = ksLookupByName (ks, "user/tests/conditionals/totest", 0);
     245           2 :         succeed_if (strcmp (keyString (key), "World") == 0, "error setting then value");
     246           2 :         ksDel (ks);
     247           2 :         keyDel (parentKey);
     248           2 :         PLUGIN_CLOSE ();
     249           2 : }
     250             : 
     251           2 : static void test_assignKeyElse (void)
     252             : {
     253           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     254           2 :         KeySet * ks = ksNew (5,
     255             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "Hello", KEY_META, "assign/condition",
     256             :                                      "(../totest=='Hell') ? (../then/key) : (../elseVal)", KEY_END),
     257             :                              keyNew ("user/tests/conditionals/then/key", KEY_VALUE, "World", KEY_END),
     258             :                              keyNew ("user/tests/conditionals/elseVal", KEY_VALUE, "Fail", KEY_END), KS_END);
     259           2 :         KeySet * conf = ksNew (0, KS_END);
     260           2 :         PLUGIN_OPEN ("conditionals");
     261           2 :         ksRewind (ks);
     262           2 :         succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
     263           2 :         Key * key = ksLookupByName (ks, "user/tests/conditionals/totest", 0);
     264           2 :         succeed_if (strcmp (keyString (key), "Fail") == 0, "error setting then value");
     265           2 :         ksDel (ks);
     266           2 :         keyDel (parentKey);
     267           2 :         PLUGIN_CLOSE ();
     268           2 : }
     269             : 
     270           2 : static void test_doesntExistSuccess (void)
     271             : {
     272           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     273           2 :         KeySet * ks = ksNew (5,
     274             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "5", KEY_META, "check/condition",
     275             :                                      "(../totest<../bla/val1) ? (! ../bla/val4)", KEY_END),
     276             :                              keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
     277             :                              keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
     278             :                              keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END),
     279             :                              keyNew ("user/tests/conditionals/bla/result", KEY_VALUE, "result3", KEY_END), KS_END);
     280             : 
     281           2 :         KeySet * conf = ksNew (0, KS_END);
     282           2 :         PLUGIN_OPEN ("conditionals");
     283           2 :         ksRewind (ks);
     284           2 :         succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
     285           2 :         ksDel (ks);
     286           2 :         keyDel (parentKey);
     287           2 :         PLUGIN_CLOSE ();
     288           2 : }
     289             : 
     290           2 : static void test_doesntExistFail (void)
     291             : {
     292           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     293           2 :         KeySet * ks = ksNew (5,
     294             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "5", KEY_META, "check/condition",
     295             :                                      "(../totest<../bla/val1) ? (! ../bla/val1)", KEY_END),
     296             :                              keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
     297             :                              keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
     298             :                              keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END),
     299             :                              keyNew ("user/tests/conditionals/bla/result", KEY_VALUE, "result3", KEY_END), KS_END);
     300             : 
     301           2 :         KeySet * conf = ksNew (0, KS_END);
     302           2 :         PLUGIN_OPEN ("conditionals");
     303           2 :         ksRewind (ks);
     304           2 :         succeed_if (plugin->kdbGet (plugin, ks, parentKey) == -1, "error");
     305           2 :         ksDel (ks);
     306           2 :         keyDel (parentKey);
     307           2 :         PLUGIN_CLOSE ();
     308           2 : }
     309             : 
     310           2 : static void test_nested1Success (void)
     311             : {
     312           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     313           2 :         KeySet * ks = ksNew (5,
     314             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "5", KEY_META, "check/condition",
     315             :                                      "(../totest<../bla/val1) ? ((../bla/result == 'result1') || (../bla/result == 'result3'))", KEY_END),
     316             :                              keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
     317             :                              keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
     318             :                              keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END),
     319             :                              keyNew ("user/tests/conditionals/bla/result", KEY_VALUE, "result3", KEY_END), KS_END);
     320             : 
     321           2 :         KeySet * conf = ksNew (0, KS_END);
     322           2 :         PLUGIN_OPEN ("conditionals");
     323           2 :         ksRewind (ks);
     324           2 :         succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
     325           2 :         ksDel (ks);
     326           2 :         keyDel (parentKey);
     327           2 :         PLUGIN_CLOSE ();
     328           2 : }
     329             : 
     330           2 : static void test_nested1Fail (void)
     331             : {
     332           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     333           2 :         KeySet * ks = ksNew (5,
     334             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "5", KEY_META, "check/condition",
     335             :                                      "(../totest<../bla/val1) ? ((../bla/result == 'result1') || (../bla/result == 'result2'))", KEY_END),
     336             :                              keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
     337             :                              keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
     338             :                              keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END),
     339             :                              keyNew ("user/tests/conditionals/bla/result", KEY_VALUE, "result3", KEY_END), KS_END);
     340           2 :         KeySet * conf = ksNew (0, KS_END);
     341           2 :         PLUGIN_OPEN ("conditionals");
     342           2 :         ksRewind (ks);
     343           2 :         succeed_if (plugin->kdbGet (plugin, ks, parentKey) == -1, "error");
     344           2 :         ksDel (ks);
     345           2 :         keyDel (parentKey);
     346           2 :         PLUGIN_CLOSE ();
     347           2 : }
     348             : 
     349             : 
     350           2 : static void test_nested2Success (void)
     351             : {
     352           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     353           2 :         KeySet * ks = ksNew (5,
     354             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "5", KEY_META, "check/condition",
     355             :                                      "(../totest<../bla/val1) ? ((../bla/val1 == '100') && ((../bla/result == 'result1') || "
     356             :                                      "(../bla/result == 'result3')))",
     357             :                                      KEY_END),
     358             :                              keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
     359             :                              keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
     360             :                              keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END),
     361             :                              keyNew ("user/tests/conditionals/bla/result", KEY_VALUE, "result3", KEY_END), KS_END);
     362             : 
     363           2 :         KeySet * conf = ksNew (0, KS_END);
     364           2 :         PLUGIN_OPEN ("conditionals");
     365           2 :         ksRewind (ks);
     366           2 :         succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
     367           2 :         ksDel (ks);
     368           2 :         keyDel (parentKey);
     369           2 :         PLUGIN_CLOSE ();
     370           2 : }
     371             : 
     372           2 : static void test_nested2Fail (void)
     373             : {
     374           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     375           2 :         KeySet * ks = ksNew (5,
     376             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "5", KEY_META, "check/condition",
     377             :                                      "(../totest<../bla/val1) ? ((../bla/val1 == '100') && ((../bla/result == 'result1') || "
     378             :                                      "(../bla/result == 'result2')))",
     379             :                                      KEY_END),
     380             :                              keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
     381             :                              keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
     382             :                              keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END),
     383             :                              keyNew ("user/tests/conditionals/bla/result", KEY_VALUE, "result3", KEY_END), KS_END);
     384           2 :         KeySet * conf = ksNew (0, KS_END);
     385           2 :         PLUGIN_OPEN ("conditionals");
     386           2 :         ksRewind (ks);
     387           2 :         succeed_if (plugin->kdbGet (plugin, ks, parentKey) == -1, "error");
     388           2 :         ksDel (ks);
     389           2 :         keyDel (parentKey);
     390           2 :         PLUGIN_CLOSE ();
     391           2 : }
     392             : 
     393           2 : static void test_suffix (void)
     394             : {
     395           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     396           2 :         KeySet * ks = ksNew (5,
     397             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "2%", KEY_META, "check/condition",
     398             :                                      "(../totest >= '10%') ? (../bla/val1 == '50%') : (../bla/val3 == '3%')", KEY_META,
     399             :                                      "condition/validsuffix", "'%', '$'", KEY_END),
     400             :                              keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100%", KEY_END),
     401             :                              keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50%", KEY_END),
     402             :                              keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3%", KEY_END), KS_END);
     403           2 :         KeySet * conf = ksNew (0, KS_END);
     404           2 :         PLUGIN_OPEN ("conditionals");
     405           2 :         ksRewind (ks);
     406           2 :         succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
     407           2 :         ksDel (ks);
     408           2 :         keyDel (parentKey);
     409           2 :         PLUGIN_CLOSE ();
     410           2 : }
     411             : 
     412           2 : static void test_elseWhitespace (void)
     413             : {
     414           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     415           2 :         KeySet * ks = ksNew (5,
     416             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "2", KEY_META, "check/condition",
     417             :                                      "(../totest >= '10') ? (../bla/val1 == '50'): (../bla/val3 == '3')", KEY_END),
     418             :                              keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
     419             :                              keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
     420             :                              keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END), KS_END);
     421           2 :         KeySet * conf = ksNew (0, KS_END);
     422           2 :         PLUGIN_OPEN ("conditionals");
     423           2 :         ksRewind (ks);
     424           2 :         succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
     425           2 :         ksDel (ks);
     426           2 :         keyDel (parentKey);
     427           2 :         PLUGIN_CLOSE ();
     428           2 : }
     429             : 
     430           2 : static void test_elseWhitespace2 (void)
     431             : {
     432           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     433           2 :         KeySet * ks = ksNew (5,
     434             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "2", KEY_META, "check/condition",
     435             :                                      "(../totest >= '10') ? (../bla/val1 == '50') :(../bla/val3 == '3')", KEY_END),
     436             :                              keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
     437             :                              keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
     438             :                              keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END), KS_END);
     439           2 :         KeySet * conf = ksNew (0, KS_END);
     440           2 :         PLUGIN_OPEN ("conditionals");
     441           2 :         ksRewind (ks);
     442           2 :         succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
     443           2 :         ksDel (ks);
     444           2 :         keyDel (parentKey);
     445           2 :         PLUGIN_CLOSE ();
     446           2 : }
     447             : 
     448           2 : static void test_elseWhitespace3 (void)
     449             : {
     450           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     451           2 :         KeySet * ks = ksNew (5,
     452             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "2", KEY_META, "check/condition",
     453             :                                      "(../totest >= '10') ? (../bla/val1 == '50'):(../bla/val3 == '3')", KEY_END),
     454             :                              keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
     455             :                              keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
     456             :                              keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END), KS_END);
     457           2 :         KeySet * conf = ksNew (0, KS_END);
     458           2 :         PLUGIN_OPEN ("conditionals");
     459           2 :         ksRewind (ks);
     460           2 :         succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
     461           2 :         ksDel (ks);
     462           2 :         keyDel (parentKey);
     463           2 :         PLUGIN_CLOSE ();
     464           2 : }
     465             : 
     466           2 : static void test_doubleUp (void)
     467             : {
     468           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     469           2 :         KeySet * ks =
     470           2 :                 ksNew (5,
     471             :                        keyNew ("user/tests/conditionals/bla/totest", KEY_VALUE, "5", KEY_META, "check/condition",
     472             :                                "(../../bla/totest<../../bla/val1) ? ((../../bla/val1 == '100') && ((../../bla/result == 'result1') || "
     473             :                                "(../../bla/result == 'result2')))",
     474             :                                KEY_END),
     475             :                        keyNew ("user/tests/conditionals/bla/val1", KEY_VALUE, "100", KEY_END),
     476             :                        keyNew ("user/tests/conditionals/bla/val2", KEY_VALUE, "50", KEY_END),
     477             :                        keyNew ("user/tests/conditionals/bla/val3", KEY_VALUE, "3", KEY_END),
     478             :                        keyNew ("user/tests/conditionals/bla/result", KEY_VALUE, "result3", KEY_END), KS_END);
     479           2 :         KeySet * conf = ksNew (0, KS_END);
     480           2 :         PLUGIN_OPEN ("conditionals");
     481           2 :         ksRewind (ks);
     482           2 :         succeed_if (plugin->kdbGet (plugin, ks, parentKey) == -1, "error");
     483           2 :         ksDel (ks);
     484           2 :         keyDel (parentKey);
     485           2 :         PLUGIN_CLOSE ();
     486           2 : }
     487             : 
     488             : 
     489           2 : static void test_multiCondAny (void)
     490             : {
     491           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     492           2 :         KeySet * ks = ksNew (5, keyNew ("user/tests/conditionals/compare", KEY_VALUE, "Sun", KEY_END),
     493             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "Hello", KEY_META, "check/condition/any", "#1", KEY_META,
     494             :                                      "check/condition/any/#0", "(../totest=='Bye') ? (../compare == 'Moon')", KEY_META,
     495             :                                      "check/condition/any/#1", "(../totest=='Hello') ? (../compare == 'Sun') ", KEY_END),
     496             :                              KS_END);
     497             : 
     498           2 :         KeySet * conf = ksNew (0, KS_END);
     499           2 :         PLUGIN_OPEN ("conditionals");
     500           2 :         ksRewind (ks);
     501           2 :         succeed_if (plugin->kdbSet (plugin, ks, parentKey) == 1, "error");
     502           2 :         ksDel (ks);
     503           2 :         keyDel (parentKey);
     504           2 :         PLUGIN_CLOSE ();
     505           2 : }
     506             : 
     507           2 : static void test_multiCond2Any (void)
     508             : {
     509           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     510           2 :         KeySet * ks = ksNew (5, keyNew ("user/tests/conditionals/compare", KEY_VALUE, "Moon", KEY_END),
     511             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "Bye", KEY_META, "check/condition/any", "#1", KEY_META,
     512             :                                      "check/condition/any/#0", "(../totest=='Bye') ? (../compare == 'Moon')", KEY_META,
     513             :                                      "check/condition/any/#1", "(../totest=='Hello') ? (../compare == 'Sun') ", KEY_END),
     514             :                              KS_END);
     515             : 
     516           2 :         KeySet * conf = ksNew (0, KS_END);
     517           2 :         PLUGIN_OPEN ("conditionals");
     518           2 :         ksRewind (ks);
     519           2 :         succeed_if (plugin->kdbSet (plugin, ks, parentKey) == 1, "error");
     520           2 :         ksDel (ks);
     521           2 :         keyDel (parentKey);
     522           2 :         PLUGIN_CLOSE ();
     523           2 : }
     524             : 
     525           2 : static void test_multiCondAll (void)
     526             : {
     527           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     528           2 :         KeySet * ks = ksNew (5, keyNew ("user/tests/conditionals/compare", KEY_VALUE, "Sun", KEY_END),
     529             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "Hello", KEY_META, "check/condition/all", "#1", KEY_META,
     530             :                                      "check/condition/all/#0", "(../totest=='Bye') ? (../compare == 'Moon')", KEY_META,
     531             :                                      "check/condition/all/#1", "(../totest=='Hello') ? (../compare == 'Sun') ", KEY_END),
     532             :                              KS_END);
     533             : 
     534           2 :         KeySet * conf = ksNew (0, KS_END);
     535           2 :         PLUGIN_OPEN ("conditionals");
     536           2 :         ksRewind (ks);
     537           2 :         succeed_if (plugin->kdbSet (plugin, ks, parentKey) == -1, "error");
     538           2 :         ksDel (ks);
     539           2 :         keyDel (parentKey);
     540           2 :         PLUGIN_CLOSE ();
     541           2 : }
     542             : 
     543           2 : static void test_multiCond2All (void)
     544             : {
     545           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     546           2 :         KeySet * ks = ksNew (5, keyNew ("user/tests/conditionals/compare", KEY_VALUE, "Moon", KEY_END),
     547             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "Bye", KEY_META, "check/condition/all", "#1", KEY_META,
     548             :                                      "check/condition/all/#0", "(../totest=='Bye') ? (../compare == 'Moon')", KEY_META,
     549             :                                      "check/condition/all/#1", "(../totest=='Hello') ? (../compare == 'Sun') ", KEY_END),
     550             :                              KS_END);
     551             : 
     552           2 :         KeySet * conf = ksNew (0, KS_END);
     553           2 :         PLUGIN_OPEN ("conditionals");
     554           2 :         ksRewind (ks);
     555           2 :         succeed_if (plugin->kdbSet (plugin, ks, parentKey) == -1, "error");
     556           2 :         ksDel (ks);
     557           2 :         keyDel (parentKey);
     558           2 :         PLUGIN_CLOSE ();
     559           2 : }
     560             : 
     561           2 : static void test_multiCondNoFail (void)
     562             : {
     563           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     564           2 :         KeySet * ks = ksNew (5, keyNew ("user/tests/conditionals/compare", KEY_VALUE, "Sun", KEY_END),
     565             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "Hello", KEY_META, "check/condition/none", "#1", KEY_META,
     566             :                                      "check/condition/none/#0", "(../totest=='Bye') ? (../compare == 'Moon')", KEY_META,
     567             :                                      "check/condition/none/#1", "(../totest=='Hello') ? (../compare == 'Sun') ", KEY_END),
     568             :                              KS_END);
     569             : 
     570           2 :         KeySet * conf = ksNew (0, KS_END);
     571           2 :         PLUGIN_OPEN ("conditionals");
     572           2 :         ksRewind (ks);
     573           2 :         succeed_if (plugin->kdbSet (plugin, ks, parentKey) == 1, "error");
     574           2 :         ksDel (ks);
     575           2 :         keyDel (parentKey);
     576           2 :         PLUGIN_CLOSE ();
     577           2 : }
     578             : 
     579           2 : static void test_multiCond2NoFail (void)
     580             : {
     581           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     582           2 :         KeySet * ks = ksNew (5, keyNew ("user/tests/conditionals/compare", KEY_VALUE, "Moon", KEY_END),
     583             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "Bye", KEY_META, "check/condition/none", "#1", KEY_META,
     584             :                                      "check/condition/none/#0", "(../totest=='Bye') ? (../compare == 'Moon')", KEY_META,
     585             :                                      "check/condition/none/#1", "(../totest=='Hello') ? (../compare == 'Sun') ", KEY_END),
     586             :                              KS_END);
     587             : 
     588           2 :         KeySet * conf = ksNew (0, KS_END);
     589           2 :         PLUGIN_OPEN ("conditionals");
     590           2 :         ksRewind (ks);
     591           2 :         succeed_if (plugin->kdbSet (plugin, ks, parentKey) == 1, "error");
     592           2 :         ksDel (ks);
     593           2 :         keyDel (parentKey);
     594           2 :         PLUGIN_CLOSE ();
     595           2 : }
     596           2 : static void test_multiAssign (void)
     597             : {
     598           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     599           2 :         KeySet * ks = ksNew (5,
     600             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "Hello", KEY_META, "assign/condition", "#1", KEY_META,
     601             :                                      "assign/condition/#0", "(../totest=='Bye') ? ('Moon')", KEY_META, "assign/condition/#1",
     602             :                                      "(../totest=='Hello') ? ('Sun') ", KEY_END),
     603             :                              KS_END);
     604             : 
     605           2 :         KeySet * conf = ksNew (0, KS_END);
     606           2 :         PLUGIN_OPEN ("conditionals");
     607           2 :         ksRewind (ks);
     608           2 :         succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
     609           2 :         Key * key = ksLookupByName (ks, "user/tests/conditionals/totest", 0);
     610           2 :         succeed_if (strcmp (keyString (key), "Sun") == 0, "error setting then value");
     611           2 :         ksDel (ks);
     612           2 :         keyDel (parentKey);
     613           2 :         PLUGIN_CLOSE ();
     614           2 : }
     615             : 
     616           2 : static void test_multiAssign2 (void)
     617             : {
     618           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     619           2 :         KeySet * ks = ksNew (5,
     620             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "Bye", KEY_META, "assign/condition", "#1", KEY_META,
     621             :                                      "assign/condition/#0", "(../totest=='Bye') ? ('Moon')", KEY_META, "assign/condition/#1",
     622             :                                      "(../totest=='Hello') ? ('Sun') ", KEY_END),
     623             :                              KS_END);
     624             : 
     625           2 :         KeySet * conf = ksNew (0, KS_END);
     626           2 :         PLUGIN_OPEN ("conditionals");
     627           2 :         ksRewind (ks);
     628           2 :         succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
     629           2 :         Key * key = ksLookupByName (ks, "user/tests/conditionals/totest", 0);
     630           2 :         succeed_if (strcmp (keyString (key), "Moon") == 0, "error setting then value");
     631           2 :         ksDel (ks);
     632           2 :         keyDel (parentKey);
     633           2 :         PLUGIN_CLOSE ();
     634           2 : }
     635             : 
     636           2 : static void test_multiAssign3 (void)
     637             : {
     638           2 :         Key * parentKey = keyNew ("user/tests/conditionals", KEY_VALUE, "", KEY_END);
     639           2 :         KeySet * ks = ksNew (5,
     640             :                              keyNew ("user/tests/conditionals/totest", KEY_VALUE, "Bye", KEY_META, "assign/condition", "#1", KEY_META,
     641             :                                      "assign/condition/#0", "(../totest=='Bye') ? ('Moon')", KEY_META, "assign/condition/#1",
     642             :                                      "(../totest=='Bye') ? ('FAIL') ", KEY_END),
     643             :                              KS_END);
     644             : 
     645           2 :         KeySet * conf = ksNew (0, KS_END);
     646           2 :         PLUGIN_OPEN ("conditionals");
     647           2 :         ksRewind (ks);
     648           2 :         succeed_if (plugin->kdbGet (plugin, ks, parentKey) == 1, "error");
     649           2 :         Key * key = ksLookupByName (ks, "user/tests/conditionals/totest", 0);
     650           2 :         succeed_if (strcmp (keyString (key), "Moon") == 0, "error setting then value");
     651           2 :         ksDel (ks);
     652           2 :         keyDel (parentKey);
     653           2 :         PLUGIN_CLOSE ();
     654           2 : }
     655             : 
     656           2 : int main (int argc, char ** argv)
     657             : {
     658           2 :         printf ("CONDITIONALS     TESTS\n");
     659           2 :         printf ("==================\n\n");
     660             : 
     661           2 :         init (argc, argv);
     662             : 
     663           2 :         test_ifthenelseint ();
     664           2 :         test_ifthenint ();
     665           2 :         test_ifthenltint ();
     666           2 :         test_ifthengtint ();
     667           2 :         test_ifthenkey ();
     668           2 :         test_emptyisempty ();
     669           2 :         test_notempty ();
     670           2 :         test_ifsetthenval ();
     671           2 :         test_ifsetthenkey ();
     672           2 :         test_assignThen ();
     673           2 :         test_assignThen2 ();
     674           2 :         test_assignElse ();
     675           2 :         test_assignKeyThen ();
     676           2 :         test_assignKeyElse ();
     677           2 :         test_nested1Success ();
     678           2 :         test_nested1Fail ();
     679           2 :         test_nested2Success ();
     680           2 :         test_nested2Fail ();
     681           2 :         test_doesntExistSuccess ();
     682           2 :         test_doesntExistFail ();
     683           2 :         test_suffix ();
     684           2 :         test_elseWhitespace ();
     685           2 :         test_elseWhitespace2 ();
     686           2 :         test_elseWhitespace3 ();
     687           2 :         test_doubleUp ();
     688           2 :         test_multiCondAny ();
     689           2 :         test_multiCondAll ();
     690           2 :         test_multiCondNoFail ();
     691           2 :         test_multiAssign ();
     692           2 :         test_multiCond2Any ();
     693           2 :         test_multiCond2All ();
     694           2 :         test_multiCond2NoFail ();
     695           2 :         test_multiAssign2 ();
     696           2 :         test_multiAssign3 ();
     697           2 :         print_result ("testmod_conditionals");
     698             : 
     699           2 :         return nbError;
     700             : }

Generated by: LCOV version 1.13