LCOV - code coverage report
Current view: top level - src/bindings/glib/tests - testglib_kdb.c (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 59 59 100.0 %
Date: 2022-05-21 16:19:22 Functions: 3 3 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 "gelektra-kdb.h"
      10             : #include <glib-object.h>
      11             : #include <tests.h>
      12             : 
      13             : #define TEST_NS "user:/tests/glib"
      14             : 
      15           1 : static void test_open_close (void)
      16             : {
      17           1 :         GElektraKdb * kdb;
      18           1 :         GElektraKey * error = gelektra_key_new (NULL);
      19             : 
      20             :         /* open */
      21           1 :         kdb = gelektra_kdb_open (NULL, error);
      22           1 :         succeed_if (kdb != NULL, "unable to open kdb");
      23           1 :         succeed_if (!gelektra_key_hasmeta (error, "error"), "unexpected error");
      24             : 
      25             :         /* close */
      26           1 :         gelektra_kdb_close (kdb, error);
      27           1 :         succeed_if (!gelektra_key_hasmeta (error, "error"), "unexpected error");
      28           1 :         g_object_unref (kdb);
      29             : 
      30             :         /* open + close */
      31           1 :         KDB * ckdb = kdbOpen (NULL, error->key);
      32           1 :         kdb = gelektra_kdb_make (ckdb);
      33           1 :         succeed_if (kdb->handle == ckdb, "handle not wrapped");
      34           1 :         g_object_unref (kdb);
      35             : 
      36           1 :         g_object_unref (error);
      37           1 : }
      38             : 
      39             : 
      40           1 : static void test_get_set (void)
      41             : {
      42           1 :         GElektraKdb * kdb;
      43           1 :         GElektraKeySet * ks;
      44           1 :         GElektraKey *key, *base, *error;
      45             : 
      46             :         /*** set ***/
      47             :         /* open kdb */
      48           1 :         error = gelektra_key_new (NULL);
      49           1 :         kdb = gelektra_kdb_open (NULL, error);
      50             : 
      51           1 :         ks = gelektra_keyset_new (100, GELEKTRA_KEYSET_END);
      52             : 
      53             :         /* fetch keys below user:/MyApp */
      54           1 :         base = gelektra_key_new (TEST_NS, GELEKTRA_KEY_END);
      55           1 :         gelektra_kdb_get (kdb, ks, base);
      56             : 
      57             :         /* search for user:/MyApp/mykey */
      58           1 :         key = gelektra_keyset_lookup_byname (ks, TEST_NS "/mykey", GELEKTRA_KDB_O_NONE);
      59           1 :         if (!key)
      60             :         {
      61             :                 /* key doesn't exist, create a new one and append to keyset */
      62           1 :                 key = gelektra_key_new (TEST_NS "/mykey", GELEKTRA_KEY_END);
      63             :                 /* make sure key still exists after append */
      64           1 :                 g_object_ref (key);
      65           1 :                 gelektra_keyset_append (ks, key);
      66             :         }
      67             : 
      68             :         /* set new value */
      69           1 :         gelektra_key_setstring (key, "new_value");
      70           1 :         g_object_unref (key);
      71             : 
      72             :         /* store keyset */
      73           1 :         gelektra_kdb_set (kdb, ks, base);
      74             : 
      75             :         /* close kdb, flushing the data to disk */
      76           1 :         gelektra_kdb_close (kdb, NULL);
      77           1 :         g_object_unref (kdb);
      78             : 
      79             :         /*** get ***/
      80             :         /* open kdb again */
      81           1 :         kdb = gelektra_kdb_open (NULL, error);
      82             : 
      83             :         /* check if the value is stored */
      84           1 :         gelektra_keyset_clear (ks);
      85           1 :         gelektra_kdb_get (kdb, ks, base);
      86           1 :         key = gelektra_keyset_lookup_byname (ks, TEST_NS "/mykey", GELEKTRA_KDB_O_NONE);
      87           1 :         succeed_if (key != NULL, "key hasn't been stored");
      88           1 :         g_object_unref (key);
      89             : 
      90             :         /* close kdb. if we don't care about the error value unref is enough */
      91           1 :         g_object_unref (kdb);
      92             : 
      93             :         /*** cleanup ***/
      94           1 :         kdb = gelektra_kdb_open (NULL, error);
      95           1 :         gelektra_keyset_clear (ks);
      96           1 :         gelektra_kdb_get (kdb, ks, base);
      97           1 :         gelektra_keyset_cut (ks, base);
      98           1 :         gelektra_kdb_set (kdb, ks, base);
      99           1 :         g_object_unref (kdb);
     100             : 
     101           1 :         g_object_unref (base);
     102           1 :         g_object_unref (ks);
     103           1 :         g_object_unref (error);
     104           1 : }
     105             : 
     106           1 : int main (int argc, char ** argv)
     107             : {
     108           1 :         printf ("KEYSET TESTS\n");
     109           1 :         printf ("===============\n\n");
     110             : 
     111           1 :         init (argc, argv);
     112             : 
     113           1 :         test_open_close ();
     114           1 :         test_get_set ();
     115             : 
     116           1 :         printf ("\n%s RESULTS: %d test(s) done. %d error(s).\n", argv[0], nbTest, nbError);
     117           1 :         return nbError;
     118             : }

Generated by: LCOV version 1.13