LCOV - code coverage report
Current view: top level - tests/ctest - test_plugin.c (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 129 129 100.0 %
Date: 2019-09-12 12:28:41 Functions: 5 5 100.0 %

          Line data    Source code
       1             : /**
       2             :  * @file
       3             :  *
       4             :  * @brief
       5             :  *
       6             :  * @copyright BSD License (see LICENSE.md or https://www.libelektra.org)
       7             :  */
       8             : 
       9             : #include <tests_internal.h>
      10             : 
      11           2 : static void test_process (void)
      12             : {
      13           2 :         printf ("Test processing of plugin name\n");
      14             : 
      15           2 :         Key * k = keyNew ("system/elektra/#0name", KEY_END);
      16           2 :         int pluginNumber = -1;
      17           2 :         char * pluginName = 0;
      18           2 :         char * referenceName = 0;
      19             : 
      20           2 :         succeed_if (elektraProcessPlugin (k, &pluginNumber, &pluginName, &referenceName, 0) == 1, "process plugin error");
      21           2 :         succeed_if (pluginNumber == 0, "number not correct");
      22           2 :         succeed_if_same_string (pluginName, "name");
      23           2 :         succeed_if (referenceName == 0, "reference name not correct");
      24           2 :         elektraFree (pluginName);
      25           2 :         pluginName = 0;
      26             : 
      27           2 :         keySetName (k, "system/e/#2dump");
      28           2 :         succeed_if (elektraProcessPlugin (k, &pluginNumber, &pluginName, &referenceName, 0) == 1, "process plugin error");
      29           2 :         succeed_if (pluginNumber == 2, "number not correct");
      30           2 :         succeed_if_same_string (pluginName, "dump");
      31           2 :         succeed_if (referenceName == 0, "reference name not correct");
      32           2 :         elektraFree (pluginName);
      33           2 :         pluginName = 0;
      34             : 
      35           2 :         keySetName (k, "system/e/#9default");
      36           2 :         succeed_if (elektraProcessPlugin (k, &pluginNumber, &pluginName, &referenceName, 0) == 1, "process plugin error");
      37           2 :         succeed_if (pluginNumber == 9, "number not correct");
      38           2 :         succeed_if_same_string (pluginName, "default");
      39           2 :         succeed_if (referenceName == 0, "reference name not correct");
      40           2 :         elektraFree (pluginName);
      41           2 :         pluginName = 0;
      42             : 
      43           2 :         keySetName (k, "system/e/1default");
      44           2 :         succeed_if (elektraProcessPlugin (k, &pluginNumber, &pluginName, &referenceName, 0) == -1, "should be error");
      45             : 
      46           2 :         keySetName (k, "system/e/#xdefault");
      47           2 :         succeed_if (elektraProcessPlugin (k, &pluginNumber, &pluginName, &referenceName, 0) == -1, "should be error");
      48             : 
      49           2 :         keySetName (k, "system/e/#1#name");
      50           2 :         succeed_if (elektraProcessPlugin (k, &pluginNumber, &pluginName, &referenceName, 0) == 2, "process plugin error");
      51           2 :         succeed_if (pluginNumber == 1, "number not correct");
      52           2 :         succeed_if (pluginName == 0, "plugin name not correct");
      53           2 :         succeed_if_same_string (referenceName, "system/elektra/plugins/name");
      54           2 :         elektraFree (referenceName);
      55           2 :         referenceName = 0;
      56             : 
      57           2 :         keySetName (k, "system/e/#5#dump");
      58           2 :         succeed_if (elektraProcessPlugin (k, &pluginNumber, &pluginName, &referenceName, 0) == 2, "process plugin error");
      59           2 :         succeed_if (pluginNumber == 5, "number not correct");
      60           2 :         succeed_if (pluginName == 0, "plugin name not correct");
      61           2 :         succeed_if_same_string (referenceName, "system/elektra/plugins/dump");
      62           2 :         elektraFree (referenceName);
      63           2 :         referenceName = 0;
      64             : 
      65           2 :         keySetName (k, "system/e/#0#very_long_name with space");
      66           2 :         succeed_if (elektraProcessPlugin (k, &pluginNumber, &pluginName, &referenceName, 0) == 2, "process plugin error");
      67           2 :         succeed_if (pluginNumber == 0, "number not correct");
      68           2 :         succeed_if (pluginName == 0, "plugin name not correct");
      69           2 :         succeed_if_same_string (referenceName, "system/elektra/plugins/very_long_name with space");
      70           2 :         elektraFree (referenceName);
      71           2 :         referenceName = 0;
      72             : 
      73           2 :         keySetName (k, "system/e/#1#plugname#refname#");
      74           2 :         succeed_if (elektraProcessPlugin (k, &pluginNumber, &pluginName, &referenceName, 0) == 3, "process plugin error");
      75           2 :         succeed_if (pluginNumber == 1, "number not correct");
      76           2 :         succeed_if_same_string (pluginName, "plugname");
      77           2 :         succeed_if_same_string (referenceName, "system/elektra/plugins/refname");
      78           2 :         elektraFree (pluginName);
      79           2 :         pluginName = 0;
      80           2 :         elektraFree (referenceName);
      81           2 :         referenceName = 0;
      82             : 
      83           2 :         keySetName (k, "system/e/#0#dump#dumpy#");
      84           2 :         succeed_if (elektraProcessPlugin (k, &pluginNumber, &pluginName, &referenceName, 0) == 3, "process plugin error");
      85           2 :         succeed_if (pluginNumber == 0, "number not correct");
      86           2 :         succeed_if_same_string (pluginName, "dump");
      87           2 :         succeed_if_same_string (referenceName, "system/elektra/plugins/dumpy");
      88           2 :         elektraFree (pluginName);
      89           2 :         pluginName = 0;
      90           2 :         elektraFree (referenceName);
      91           2 :         referenceName = 0;
      92             : 
      93           2 :         keySetName (k, "system/e/#9#default#default#");
      94           2 :         succeed_if (elektraProcessPlugin (k, &pluginNumber, &pluginName, &referenceName, 0) == 3, "process plugin error");
      95           2 :         succeed_if (pluginNumber == 9, "number not correct");
      96           2 :         succeed_if_same_string (pluginName, "default");
      97           2 :         succeed_if_same_string (referenceName, "system/elektra/plugins/default");
      98           2 :         elektraFree (pluginName);
      99           2 :         pluginName = 0;
     100           2 :         elektraFree (referenceName);
     101           2 :         referenceName = 0;
     102             : 
     103           2 :         keySetName (k, "system/e/#8#a_very long name with $ sthg#also a long name_()#");
     104           2 :         succeed_if (elektraProcessPlugin (k, &pluginNumber, &pluginName, &referenceName, 0) == 3, "process plugin error");
     105           2 :         succeed_if (pluginNumber == 8, "number not correct");
     106           2 :         succeed_if_same_string (pluginName, "a_very long name with $ sthg");
     107           2 :         succeed_if_same_string (referenceName, "system/elektra/plugins/also a long name_()");
     108           2 :         elektraFree (pluginName);
     109           2 :         pluginName = 0;
     110           2 :         elektraFree (referenceName);
     111           2 :         referenceName = 0;
     112             : 
     113           2 :         keyDel (k);
     114           2 : }
     115             : 
     116          14 : KeySet * set_pluginconf (void)
     117             : {
     118          14 :         return ksNew (10, keyNew ("system/anything", KEY_VALUE, "backend", KEY_END), keyNew ("system/more", KEY_END),
     119             :                       keyNew ("system/more/config", KEY_END), keyNew ("system/more/config/below", KEY_END), keyNew ("system/path", KEY_END),
     120             :                       keyNew ("user/anything", KEY_VALUE, "plugin", KEY_END), keyNew ("user/more", KEY_END),
     121             :                       keyNew ("user/more/config", KEY_END), keyNew ("user/more/config/below", KEY_END), keyNew ("user/path", KEY_END),
     122             :                       KS_END);
     123             : }
     124             : 
     125           2 : static void test_simple (void)
     126             : {
     127           2 :         printf ("Test plugin\n");
     128             : 
     129           2 :         KeySet * modules = ksNew (0, KS_END);
     130           2 :         elektraModulesInit (modules, 0);
     131             : 
     132           2 :         Plugin * plugin = elektraPluginOpen (KDB_DEFAULT_STORAGE, modules, set_pluginconf (), 0);
     133           2 :         exit_if_fail (plugin, "KDB_DEFAULT_STORAGE: " KDB_DEFAULT_STORAGE " plugin could not be loaded");
     134             : 
     135           2 :         KeySet * test_config = set_pluginconf ();
     136           2 :         KeySet * config = elektraPluginGetConfig (plugin);
     137           2 :         succeed_if (config != 0, "there should be a config");
     138           2 :         compare_keyset (config, test_config);
     139           2 :         ksDel (test_config);
     140             : 
     141           2 :         succeed_if (plugin->kdbGet != 0, "no get pointer");
     142           2 :         succeed_if (plugin->kdbSet != 0, "no set pointer");
     143             : 
     144           2 :         elektraPluginClose (plugin, 0);
     145           2 :         elektraModulesClose (modules, 0);
     146           2 :         ksDel (modules);
     147           2 : }
     148             : 
     149           2 : static void test_name (void)
     150             : {
     151           2 :         printf ("Test name\n");
     152           2 :         KeySet * modules = ksNew (0, KS_END);
     153           2 :         Key * errorKey = keyNew (0);
     154             :         ;
     155             : 
     156           2 :         succeed_if (elektraPluginOpen (0, modules, set_pluginconf (), errorKey) == 0, "should fail with no name");
     157           2 :         succeed_if (elektraPluginOpen ("", modules, set_pluginconf (), errorKey) == 0, "should fail with no name");
     158           2 :         succeed_if (elektraPluginOpen ("/", modules, set_pluginconf (), errorKey) == 0, "should fail with slashes only");
     159           2 :         succeed_if (elektraPluginOpen ("//", modules, set_pluginconf (), errorKey) == 0, "should fail with slashes only");
     160           2 :         succeed_if (elektraPluginOpen ("/////////////", modules, set_pluginconf (), errorKey) == 0, "should fail with slashes only");
     161             :         // output_errors (errorKey);
     162             : 
     163           2 :         keyDel (errorKey);
     164           2 :         ksDel (modules);
     165           2 : }
     166             : 
     167           2 : int main (int argc, char ** argv)
     168             : {
     169           2 :         printf (" PLUGINS  TESTS\n");
     170           2 :         printf ("====================\n\n");
     171             : 
     172           2 :         init (argc, argv);
     173             : 
     174           2 :         test_process ();
     175           2 :         test_simple ();
     176           2 :         test_name ();
     177             : 
     178           2 :         printf ("\ntest_plugin RESULTS: %d test(s) done. %d error(s).\n", nbTest, nbError);
     179             : 
     180           2 :         return nbError;
     181             : }

Generated by: LCOV version 1.13