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

          Line data    Source code
       1             : /**
       2             :  * @file
       3             :  *
       4             :  * @brief Relation between keys.
       5             :  *
       6             :  * @copyright BSD License (see LICENSE.md or https://www.libelektra.org)
       7             :  */
       8             : 
       9             : #include <tests.h>
      10             : 
      11           2 : static void test_keyCmp (void)
      12             : {
      13           2 :         printf ("check keyCmp\n");
      14             : 
      15           2 :         Key * k1 = keyNew ("user/valid", KEY_END);
      16           2 :         Key * k2 = keyNew ("user/valid", KEY_END);
      17             : 
      18           2 :         Key * nk1 = keyNew (0);
      19           2 :         Key * nk2 = keyNew (0);
      20             : 
      21           2 :         succeed_if (keyCmp (0, 0) == 0, "all null pointers are same");
      22           2 :         succeed_if (keyCmp (nk1, 0) == 1, "null pointer is smaller");
      23           2 :         succeed_if (keyCmp (0, nk2) == -1, "null pointer is smaller");
      24             : 
      25             :         //! [cmp null]
      26           2 :         succeed_if (keyCmp (0, 0) == 0, "all null pointers same");
      27           2 :         succeed_if (keyCmp (k1, 0) == 1, "null pointer is smaller");
      28           2 :         succeed_if (keyCmp (0, k2) == -1, "null pointer is smaller");
      29             :         //! [cmp null]
      30             : 
      31           2 :         succeed_if (keyCmp (nk1, nk1) == 0, "all null keys are same");
      32           2 :         succeed_if (keyCmp (k1, nk1) == 1, "null keys are smaller");
      33           2 :         succeed_if (keyCmp (nk1, k2) == -1, "null keys are smaller");
      34             : 
      35           2 :         succeed_if (keyCmp (k1, k2) == 0, "should be same");
      36             : 
      37           2 :         keySetName (k1, "");
      38           2 :         keySetName (k2, "");
      39           2 :         succeed_if (keyCmp (k1, k2) == 0, "should be same");
      40             : 
      41           2 :         keySetName (k1, "user");
      42           2 :         keySetName (k2, "user");
      43           2 :         succeed_if (keyCmp (k1, k2) == 0, "should be same");
      44             : 
      45           2 :         keySetName (k1, "system");
      46           2 :         keySetName (k2, "system");
      47           2 :         succeed_if (keyCmp (k1, k2) == 0, "should be same");
      48             : 
      49           2 :         keySetName (k1, "system");
      50           2 :         keySetName (k2, "user");
      51           2 :         succeed_if (keyCmp (k1, k2) < 0, "system is smaller");
      52           2 :         succeed_if (keyCmp (k2, k1) > 0, "system is smaller");
      53             : 
      54           2 :         keySetName (k1, "user/a");
      55           2 :         keySetName (k2, "user/a");
      56           2 :         succeed_if (keyCmp (k1, k2) == 0, "should be same");
      57           2 :         succeed_if (keyCmp (k2, k1) == 0, "should be same");
      58             : 
      59           2 :         keySetName (k1, "user/a");
      60           2 :         keySetName (k2, "user/b");
      61           2 :         succeed_if (keyCmp (k1, k2) < 0, "a is smaller");
      62           2 :         succeed_if (keyCmp (k2, k1) > 0, "a is smaller");
      63             : 
      64           2 :         keySetName (k1, "user/a/a");
      65           2 :         keySetName (k2, "user/a-a");
      66           2 :         succeed_if (keyCmp (k1, k2) < 0, "/ is smaller");
      67           2 :         succeed_if (keyCmp (k2, k1) > 0, "/ is smaller");
      68             : 
      69           2 :         char cmp[] = "user/a-a";
      70         512 :         for (int i = 1; i < 256; ++i)
      71             :         {
      72         510 :                 if (i == '/') continue;
      73         508 :                 cmp[6] = i;
      74             :                 // printf ("%i %s\n", i, cmp);
      75         508 :                 keySetName (k1, "user/a/a");
      76         508 :                 keySetName (k2, cmp);
      77         508 :                 succeed_if (keyCmp (k1, k2) < 0, "/ is smaller");
      78         508 :                 succeed_if (keyCmp (k2, k1) > 0, "/ is smaller");
      79             :         }
      80             : 
      81           2 :         keySetName (k1, "user/a");
      82           2 :         keySetName (k2, "user/a/a");
      83           2 :         succeed_if (keyCmp (k1, k2) < 0, "/ is smaller");
      84           2 :         succeed_if (keyCmp (k2, k1) > 0, "/ is smaller");
      85             : 
      86           2 :         keySetName (k1, "user/a");
      87           2 :         keySetName (k2, "user/a-a");
      88           2 :         succeed_if (keyCmp (k1, k2) < 0, "/ is smaller");
      89           2 :         succeed_if (keyCmp (k2, k1) > 0, "/ is smaller");
      90             : 
      91           2 :         keySetName (k1, "user/a");
      92           2 :         keySetName (k2, "user/aa");
      93           2 :         succeed_if (keyCmp (k1, k2) < 0, "/ is smaller");
      94           2 :         succeed_if (keyCmp (k2, k1) > 0, "/ is smaller");
      95             : 
      96           2 :         keySetName (k1, "user/a");
      97           2 :         keySetName (k2, "user/a-");
      98           2 :         succeed_if (keyCmp (k1, k2) < 0, "/ is smaller");
      99           2 :         succeed_if (keyCmp (k2, k1) > 0, "/ is smaller");
     100             : 
     101           2 :         keySetName (k1, "user/find_me");
     102           2 :         keySetName (k2, "user/find_me/a");
     103           2 :         succeed_if (keyCmp (k1, k2) < 0, "find_me is smaller");
     104           2 :         succeed_if (keyCmp (k2, k1) > 0, "find_me is smaller");
     105             : 
     106           2 :         keyDel (nk1);
     107           2 :         keyDel (nk2);
     108             : 
     109           2 :         keyDel (k1);
     110           2 :         keyDel (k2);
     111           2 : }
     112             : 
     113           2 : static void test_directbelow (void)
     114             : {
     115           2 :         printf ("check if direct below\n");
     116           2 :         Key * k1 = keyNew (0);
     117           2 :         Key * k2 = keyNew (0);
     118             : 
     119           2 :         keySetName (k1, "user");
     120           2 :         keySetName (k2, "user/a");
     121           2 :         succeed_if (keyRel (k1, k2) == 1, "should be direct below");
     122             : 
     123           2 :         keySetName (k1, "system");
     124           2 :         keySetName (k2, "system/a");
     125           2 :         succeed_if (keyRel (k1, k2) == 1, "should be direct below");
     126             : 
     127           2 :         keySetName (k1, "user");
     128           2 :         keySetName (k2, "user/longer_name");
     129           2 :         succeed_if (keyRel (k1, k2) == 1, "should be direct below");
     130             : 
     131           2 :         keySetName (k1, "system");
     132           2 :         keySetName (k2, "system/longer_name");
     133           2 :         succeed_if (keyRel (k1, k2) == 1, "should be direct below");
     134             : 
     135           2 :         keySetName (k1, "user/a");
     136           2 :         keySetName (k2, "user/a/a");
     137           2 :         succeed_if (keyRel (k1, k2) == 1, "should be direct below");
     138             : 
     139           2 :         keySetName (k1, "system/a");
     140           2 :         keySetName (k2, "system/a/a");
     141           2 :         succeed_if (keyRel (k1, k2) == 1, "should be direct below");
     142             : 
     143           2 :         keySetName (k1, "system/a\\/a");
     144           2 :         keySetName (k2, "system/a\\/a/a");
     145           2 :         succeed_if (keyRel (k1, k2) == 1, "should be direct below");
     146             : 
     147           2 :         keySetName (k1, "system/a\\/a\\/a");
     148           2 :         keySetName (k2, "system/a\\/a\\/a/b");
     149           2 :         succeed_if (keyRel (k1, k2) == 1, "should be direct below");
     150             : 
     151           2 :         keySetName (k1, "system/a\\/a\\/a");
     152           2 :         keySetName (k2, "system/a\\/a\\/a/b");
     153           2 :         succeed_if (keyRel (k1, k2) == 1, "should be direct below");
     154             : 
     155             : 
     156           2 :         keyDel (k1);
     157           2 :         keyDel (k2);
     158           2 : }
     159             : 
     160           2 : static void test_below (void)
     161             : {
     162           2 :         printf ("check if below\n");
     163           2 :         Key * k1 = keyNew (0);
     164           2 :         Key * k2 = keyNew (0);
     165             : 
     166           2 :         keySetName (k1, "user/tests/simple");
     167           2 :         keySetName (k2, "user/tests/simple/below");
     168           2 :         succeed_if (keyRel (k1, k2) >= 0, "should be below");
     169           2 :         succeed_if (keyRel (k1, k2) == 1, "should be below");
     170             : 
     171           2 :         keySetName (k1, "user");
     172           2 :         keySetName (k2, "user/a/a");
     173           2 :         succeed_if (keyRel (k1, k2) == 2, "should be below");
     174             : 
     175           2 :         keySetName (k1, "system");
     176           2 :         keySetName (k2, "system/a/a");
     177           2 :         succeed_if (keyRel (k1, k2) == 2, "should be below");
     178             : 
     179           2 :         keySetName (k1, "user");
     180           2 :         keySetName (k2, "user/longer_name/also_longer_name");
     181           2 :         succeed_if (keyRel (k1, k2) == 2, "should be below");
     182             : 
     183           2 :         keySetName (k1, "system");
     184           2 :         keySetName (k2, "system/longer_name/also_longer_name");
     185           2 :         succeed_if (keyRel (k1, k2) == 2, "should be below");
     186             : 
     187           2 :         keySetName (k1, "user/a");
     188           2 :         keySetName (k2, "user/a/a/a/a/a/a");
     189           2 :         succeed_if (keyRel (k1, k2) == 2, "should be below");
     190             : 
     191           2 :         keySetName (k1, "system/a");
     192           2 :         keySetName (k2, "system/a/a/a/a/a/a");
     193           2 :         succeed_if (keyRel (k1, k2) == 2, "should be below");
     194             : 
     195             : 
     196           2 :         keyDel (k1);
     197           2 :         keyDel (k2);
     198           2 : }
     199             : 
     200           2 : static void test_examples (void)
     201             : {
     202           2 :         printf ("check examples\n");
     203           2 :         Key * key = keyNew (0);
     204           2 :         Key * check = keyNew (0);
     205             : 
     206           2 :         keySetName (key, "user/key/folder");
     207           2 :         keySetName (check, "user/key/folder");
     208           2 :         succeed_if (keyRel (key, check) == 0, "should be same");
     209             : 
     210           2 :         keySetName (key, "user/key/folder");
     211           2 :         keySetName (check, "user/key/folder/child");
     212           2 :         succeed_if (keyRel (key, check) == 1, "should be direct below");
     213             : 
     214           2 :         keySetName (key, "user/key/folder");
     215           2 :         keySetName (check, "user/key/folder/any/depth/deeper/grand-child");
     216           2 :         succeed_if (keyRel (key, check) == 2, "should be below (but not direct)");
     217           2 :         succeed_if (keyRel (key, check) > 0, "should be below");
     218           2 :         succeed_if (keyRel (key, check) >= 0, "should be the same or below");
     219             : 
     220           2 :         keySetName (key, "user/key/folder");
     221           2 :         keySetName (check, "user/notsame/folder");
     222           2 :         succeed_if (keyRel (key, check) < -2, "key is not below");
     223             : 
     224           2 :         keySetName (key, "user/key/folder");
     225           2 :         keySetName (check, "system/notsame/folder");
     226           2 :         succeed_if (keyRel (key, check) == -2, "not in the same namespace");
     227             : 
     228           2 :         keyDel (key);
     229           2 :         keyDel (check);
     230           2 : }
     231             : 
     232           2 : static void test_hierarchy (void)
     233             : {
     234           2 :         printf ("check hierarchy\n");
     235           2 :         Key * key = keyNew (0);
     236           2 :         Key * check = keyNew (0);
     237             : 
     238           2 :         keySetName (key, "user/key/folder/key");
     239           2 :         keySetName (check, "user/other/folder/key");
     240           2 :         succeed_if (keyRel (key, check) < -2, "should be same");
     241             : 
     242           2 :         keySetName (key, "system/key/folder/key");
     243           2 :         keySetName (check, "system/other/folder/key");
     244           2 :         succeed_if (keyRel (key, check) < -2, "should be same");
     245             : 
     246           2 :         keySetName (key, "user/key/folder/key");
     247           2 :         keySetName (check, "system/other/folder/key");
     248           2 :         succeed_if (keyRel (key, check) == -2, "should be different");
     249             : 
     250           2 :         keySetName (key, "system/key/folder/key");
     251           2 :         keySetName (check, "user/other/folder/key");
     252           2 :         succeed_if (keyRel (key, check) == -2, "should be different");
     253             : 
     254           2 :         keyDel (key);
     255           2 :         keyDel (check);
     256           2 : }
     257             : 
     258           2 : static void test_null (void)
     259             : {
     260           2 :         printf ("check invalid keys or null ptr\n");
     261           2 :         Key * key = keyNew (0);
     262           2 :         Key * check = keyNew (0);
     263             : 
     264           2 :         succeed_if (keyRel (key, check) == -1, "invalid");
     265             : 
     266           2 :         succeed_if (keyRel (0, check) == -1, "null ptr");
     267             : 
     268           2 :         succeed_if (keyRel (key, 0) == -1, "null ptr");
     269             : 
     270           2 :         keySetName (check, "system/key/folder/key");
     271           2 :         succeed_if (keyRel (key, check) == -1, "should be still invalid");
     272             : 
     273           2 :         keyDel (key);
     274           2 :         keyDel (check);
     275           2 : }
     276             : 
     277             : 
     278           2 : int main (int argc, char ** argv)
     279             : {
     280           2 :         printf ("KEY RELATION TESTS\n");
     281           2 :         printf ("==================\n\n");
     282             : 
     283           2 :         init (argc, argv);
     284             : 
     285           2 :         test_keyCmp ();
     286           2 :         test_directbelow ();
     287           2 :         test_below ();
     288           2 :         test_examples ();
     289           2 :         test_hierarchy ();
     290           2 :         test_null ();
     291             : 
     292           2 :         printf ("\ntest_key RESULTS: %d test(s) done. %d error(s).\n", nbTest, nbError);
     293             : 
     294           2 :         return nbError;
     295             : }

Generated by: LCOV version 1.13