static void create_global_keys () { g_key = gelektra_key_new ("user/key", GELEKTRA_KEY_VALUE, "value", GELEKTRA_KEY_OWNER, "myowner", GELEKTRA_KEY_COMMENT, "mycomment", GELEKTRA_KEY_UID, "123", GELEKTRA_KEY_GID, 456, GELEKTRA_KEY_MODE, 0644, GELEKTRA_KEY_ATIME, 123, GELEKTRA_KEY_MTIME, "456", GELEKTRA_KEY_CTIME, 789, GELEKTRA_KEY_DIR, GELEKTRA_KEY_META, "by", "manuel", GELEKTRA_KEY_NULL, GELEKTRA_KEY_END); succeed_if (g_key != NULL, "unable to create key"); succeed_if (gelektra_key_isvalid (g_key), "key should be valid"); succeed_if (gelektra_key_getref (g_key) == 1, "refcount should be 1"); g_bkey = gelektra_key_new ("system/bkey", GELEKTRA_KEY_BINARY, GELEKTRA_KEY_VALUE, "bvalue\0\0", GELEKTRA_KEY_END); succeed_if (g_bkey != NULL, "unable to create key"); succeed_if (gelektra_key_isvalid (g_bkey), "key should be valid"); succeed_if (gelektra_key_getref (g_bkey) == 1, "refcount should be 1"); }
static void test_basic () { GElektraKey * key; key = gelektra_key_dup (g_key); gelektra_key_incref (key); succeed_if (gelektra_key_getref (key) == 2, "refcount should be 2"); succeed_if (gelektra_key_getref (g_key) == 1, "refcount should be still 1"); gelektra_key_decref (key); succeed_if (gelektra_key_getref (key) == 1, "refcount should be 1 again"); g_object_unref (key); gchar * name; key = gelektra_key_new ("user/bar", GELEKTRA_KEY_END); gelektra_key_copy (g_key, key); g_object_get (key, "name", &name, NULL); succeed_if (!strcmp (name, "user/key"), "wrong value"); g_free (name); gelektra_key_clear (key); g_object_get (key, "name", &name, NULL); succeed_if (!strcmp (name, ""), "wrong value"); g_free (name); g_object_unref (key); }
static void test_iterating (void) { GElektraKeySet * ks; GElektraKey *key1, *key2, *tmpkey; key1 = gelektra_key_new ("user/a", GELEKTRA_KEY_END); g_object_ref (key1); key2 = gelektra_key_new ("user/c", GELEKTRA_KEY_END); g_object_ref (key2); ks = gelektra_keyset_new (3, key1, gelektra_key_new ("user/b", GELEKTRA_KEY_END), key2, GELEKTRA_KEYSET_END); guint cnt = 0; gelektra_keyset_rewind (ks); while ((tmpkey = gelektra_keyset_next (ks)) != NULL) { GElektraKey * curkey = gelektra_keyset_current (ks); succeed_if (gelektra_key_cmp (tmpkey, curkey) == 0, "iterators returned different keys"); g_object_unref (curkey); succeed_if (gelektra_keyset_getcursor (ks) == cnt, "cursor is at unexpected position"); ++cnt; g_object_unref (tmpkey); } succeed_if (cnt == 3, "some keys are missing"); tmpkey = gelektra_keyset_head (ks); succeed_if (gelektra_key_cmp (tmpkey, key1) == 0, "keyset_head returned unexpected key"); g_object_unref (tmpkey); tmpkey = gelektra_keyset_tail (ks); succeed_if (gelektra_key_cmp (tmpkey, key2) == 0, "keyset_tail returned unexpected key"); g_object_unref (tmpkey); tmpkey = gelektra_keyset_atcursor (ks, 0); succeed_if (gelektra_key_cmp (tmpkey, key1) == 0, "keyset_atcursor returned unexpected key"); g_object_unref (tmpkey); gelektra_keyset_setcursor (ks, 1); succeed_if (gelektra_keyset_getcursor (ks) == 1, "cursor is at unexpected position"); g_object_unref (key1); g_object_unref (key2); g_object_unref (ks); }
static void test_searching (void) { GElektraKeySet * ks; GElektraKey *key1, *key2; const char * name = "user/bar"; key1 = gelektra_key_new (name, GELEKTRA_KEY_END); g_object_ref (key1); ks = gelektra_keyset_new (3, gelektra_key_new ("user/foo", GELEKTRA_KEY_END), key1, gelektra_key_new ("user/foobar", GELEKTRA_KEY_END), GELEKTRA_KEYSET_END); key2 = gelektra_keyset_lookup (ks, key1, GELEKTRA_KDB_O_NONE); succeed_if (gelektra_key_cmp (key1, key2) == 0, "lookup returned different key"); g_object_unref (key2); key2 = gelektra_keyset_lookup_byname (ks, name, GELEKTRA_KDB_O_NONE); succeed_if (gelektra_key_cmp (key1, key2) == 0, "lookup returned different key"); g_object_unref (key2); g_object_unref (key1); g_object_unref (ks); }
static void test_basic (void) { GElektraKeySet *ks1, *ks2; GElektraKey * key; ks1 = gelektra_keyset_new (0); succeed_if (gelektra_keyset_len (ks1) == 0, "len must be 0"); gelektra_keyset_append (ks1, gelektra_key_new ("user/foo", GELEKTRA_KEY_END)); succeed_if (gelektra_keyset_len (ks1) == 1, "len must be 1"); ks2 = gelektra_keyset_dup (ks1); succeed_if (gelektra_keyset_len (ks2) == 1, "len must be 1"); gelektra_keyset_clear (ks2); succeed_if (gelektra_keyset_len (ks2) == 0, "len must be 0"); gelektra_keyset_copy (ks1, ks2); succeed_if (gelektra_keyset_len (ks2) == 1, "len must be 1 again"); gelektra_keyset_clear (ks2); gelektra_keyset_append (ks2, gelektra_key_new ("user/bar", GELEKTRA_KEY_END)); gelektra_keyset_append_keyset (ks1, ks2); succeed_if (gelektra_keyset_len (ks1) == 2, "len must be 2"); key = gelektra_keyset_pop (ks1); succeed_if (gelektra_keyset_len (ks1) == 1, "len must be 1 again"); g_object_unref (key); key = gelektra_key_new ("user", GELEKTRA_KEY_END); ks2 = gelektra_keyset_cut (ks1, key); succeed_if (gelektra_keyset_len (ks2) == 1, "len must be 1"); g_object_unref (key); g_object_unref (ks2); g_object_unref (ks1); }
static void test_ctor (void) { GElektraKeySet * ks; ks = gelektra_keyset_new (0); succeed_if (ks != NULL, "unable to create keyset"); g_object_unref (ks); GElektraKey * key = gelektra_key_new ("user/foo", GELEKTRA_KEY_END); ks = gelektra_keyset_new (10, key, GELEKTRA_KEYSET_END); succeed_if (ks != NULL, "unable to create keyset"); g_object_unref (ks); KeySet * cks = ksNew (0, KS_END); ks = gelektra_keyset_make (cks); succeed_if (ks->keyset == cks, "new keyset not wrapped"); g_object_unref (ks); }
static void test_validating () { succeed_if (!gelektra_key_isnull (g_key), "key is null"); succeed_if (gelektra_key_isvalid (g_key), "key is not valid"); succeed_if (gelektra_key_isuser (g_key), "key is not user"); succeed_if (!gelektra_key_issystem (g_key), "key is system"); succeed_if (gelektra_key_isstring (g_key), "key is not string"); succeed_if (!gelektra_key_isbinary (g_key), "key is binary"); succeed_if (!gelektra_key_isinactive (g_key), "key is inactive"); succeed_if (!gelektra_key_isuser (g_bkey), "key is user"); succeed_if (gelektra_key_issystem (g_bkey), "key is not system"); succeed_if (!gelektra_key_isstring (g_bkey), "key is string"); succeed_if (gelektra_key_isbinary (g_bkey), "key is not binary"); GElektraKey * key = gelektra_key_new ("user/key/glib/edy", GELEKTRA_KEY_END); succeed_if (gelektra_key_isbelow (key, g_key), "key not below g_key"); succeed_if (gelektra_key_isbeloworsame (key, g_key), "key not below g_key"); succeed_if (gelektra_key_isbeloworsame (g_key, g_key), "key is not key :)"); succeed_if (!gelektra_key_isdirectbelow (key, g_key), "key not direct below g_key"); g_object_unref (key); }
static void test_ctor () { GElektraKey * key; key = gelektra_key_new (NULL); succeed_if (key != NULL, "unable to create key"); succeed_if (!gelektra_key_isvalid (key), "key should be invalid"); g_object_unref (key); key = g_object_new (GELEKTRA_TYPE_KEY, NULL); succeed_if (key != NULL, "unable to create key"); succeed_if (!gelektra_key_isvalid (key), "key should be invalid"); g_object_unref (key); key = gelektra_key_new ("wrongname", GELEKTRA_KEY_END); succeed_if (key != NULL, "unable to create key"); succeed_if (!gelektra_key_isvalid (key), "key should be invalid"); g_object_unref (key); Key * ckey = keyNew (NULL); key = gelektra_key_make (ckey); succeed_if (key->key == ckey, "new key not wrapped"); g_object_unref (key); key = gelektra_key_new ("user/foo", GELEKTRA_KEY_END); succeed_if (key != NULL, "unable to create key"); succeed_if (gelektra_key_isvalid (key), "key should be valid"); succeed_if (gelektra_key_getref (key) == 1, "refcount should be 1"); g_object_unref (key); key = gelektra_key_new ("/cascading", GELEKTRA_KEY_END); succeed_if (key != NULL, "unable to create key"); succeed_if (gelektra_key_isvalid (key), "key should be valid"); succeed_if (gelektra_key_getref (key) == 1, "refcount should be 1"); g_object_unref (key); key = gelektra_key_new ("spec/key", GELEKTRA_KEY_END); succeed_if (key != NULL, "unable to create key"); succeed_if (gelektra_key_isvalid (key), "key should be valid"); succeed_if (gelektra_key_getref (key) == 1, "refcount should be 1"); g_object_unref (key); key = gelektra_key_new ("proc/key", GELEKTRA_KEY_END); succeed_if (key != NULL, "unable to create key"); succeed_if (gelektra_key_isvalid (key), "key should be valid"); succeed_if (gelektra_key_getref (key) == 1, "refcount should be 1"); g_object_unref (key); key = gelektra_key_new ("dir/key", GELEKTRA_KEY_END); succeed_if (key != NULL, "unable to create key"); succeed_if (gelektra_key_isvalid (key), "key should be valid"); succeed_if (gelektra_key_getref (key) == 1, "refcount should be 1"); g_object_unref (key); key = gelektra_key_new ("user/key", GELEKTRA_KEY_END); succeed_if (key != NULL, "unable to create key"); succeed_if (gelektra_key_isvalid (key), "key should be valid"); succeed_if (gelektra_key_getref (key) == 1, "refcount should be 1"); g_object_unref (key); key = gelektra_key_new ("system/key", GELEKTRA_KEY_END); succeed_if (key != NULL, "unable to create key"); succeed_if (gelektra_key_isvalid (key), "key should be valid"); succeed_if (gelektra_key_getref (key) == 1, "refcount should be 1"); g_object_unref (key); }