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 : }
|