static void test_modules() { printf ("Test mounting with modules\n"); KDB *kdb = kdb_new(); Key *errorKey = keyNew(0); KeySet *modules = modules_config(); succeed_if (elektraMountOpen(kdb, root_config(), modules, errorKey) == 0, "could not buildup mount"); succeed_if (elektraMountDefault(kdb, modules, errorKey) == 0, "could not mount default backend"); succeed_if (elektraMountModules(kdb, modules, errorKey) == 0, "could not mount modules"); succeed_if(output_warnings (errorKey), "warnings found"); succeed_if(output_error (errorKey), "error found"); succeed_if (kdb->split->size == 8, "size of split not correct"); Key *mp = keyNew("spec", KEY_VALUE, "root", KEY_END); compare_key(mp, kdb->split->parents[0]); keySetName(mp, "dir"); keySetString (mp, "root"); compare_key(mp, kdb->split->parents[1]); keySetName(mp, "user"); keySetString (mp, "root"); compare_key(mp, kdb->split->parents[2]); keySetName(mp, "system"); keySetString (mp, "root"); compare_key(mp, kdb->split->parents[3]); /* we cannot exactly know where resolver+dump is located *(depending on alphabet) keySetName(mp, "system/elektra/modules/"KDB_DEFAULT_RESOLVER); keySetString (mp, "modules"); compare_key(mp, kdb->split->parents[4]); */ keySetName(mp, "system/elektra"); keySetString (mp, "default"); compare_key(mp, kdb->split->parents[5]); keySetName(mp, "user/tests/simple"); keySetString (mp, "simple"); compare_key(mp, kdb->split->parents[4]); exit_if_fail (kdb->trie, "trie was not build up successfully"); // output_trie (kdb->trie); Key *searchKey = keyNew("", KEY_END); Key *rmp = keyNew("", KEY_VALUE, "root", KEY_END); elektraKeySetName(rmp, "/", KEY_CASCADING_NAME); Backend *b2 = 0; keySetName (searchKey, "user"); b2 = elektraTrieLookup(kdb->trie, searchKey); succeed_if (b2, "there should be a backend"); compare_key(b2->mountpoint, rmp); Backend *backend = 0; keySetName(searchKey, "user/tests/simple"); backend = elektraTrieLookup(kdb->trie, searchKey); succeed_if (backend, "there should be a backend"); compare_key(backend->mountpoint, mp); keySetName(searchKey, "user/tests/simple/below"); b2 = elektraTrieLookup(kdb->trie, searchKey); succeed_if (b2, "there should be a backend"); succeed_if (backend == b2, "should be same backend"); compare_key(b2->mountpoint, mp); keySetName(searchKey, "user/tests/simple/deep/below"); b2 = elektraTrieLookup(kdb->trie, searchKey); succeed_if (b2, "there should be a backend"); succeed_if (backend == b2, "should be same backend"); compare_key(b2->mountpoint, mp); Key *dmp = keyNew ("", KEY_VALUE, "default", KEY_END); keySetName(searchKey, "system/elektra"); b2 = elektraTrieLookup(kdb->trie, searchKey); succeed_if (b2, "there should be a backend"); succeed_if (b2 == kdb->defaultBackend, "should be the default backend"); compare_key(b2->mountpoint, dmp); keySetName(searchKey, "system/elektra/below"); b2 = elektraTrieLookup(kdb->trie, searchKey); succeed_if (b2, "there should be a backend"); succeed_if (b2 == kdb->defaultBackend, "should be the default backend"); compare_key(b2->mountpoint, dmp); Key *mmp = keyNew ("system/elektra/modules", KEY_VALUE, "modules", KEY_END); keyAddBaseName (mmp, "default"); /* keySetName(searchKey, "system/elektra/modules/default"); b2 = elektraTrieLookup(kdb->trie, searchKey); succeed_if (b2, "there should be a backend"); succeed_if (b2 != kdb->defaultBackend, "should not be the default backend"); compare_key(b2->mountpoint, mmp); */ keyDel (mmp); keyDel (dmp); keyDel (mp); keyDel (rmp); keyDel (searchKey); kdb_del (kdb); keyDel (errorKey); ksDel (modules); }
int root_init(void) { int err = 0; /* lib init */ lib_init(); /* FIXME: decode the cmdline */ /* FIXME: configrations */ /* default configurations */ hro.conf.ring_push_interval = 600; /* 600 seconds */ /* get configs from env */ err = root_config(); if (err) goto out_config; /* verify the configs */ err = root_verify(); if (err) goto out_verify; err = root_init_signal(); if (err) goto out_signal; /* init hro */ err = site_mgr_init(&hro.site); if (err) goto out_site_mgr; err = ring_mgr_init(&hro.ring); if (err) goto out_ring_mgr; err = root_mgr_init(&hro.root); if (err) goto out_root_mgr; err = addr_mgr_init(&hro.addr); if (err) goto out_addr_mgr; /* FIXME: in the service threads' pool */ err = root_spool_create(); if (err) goto out_spool; /* FIXME: setup the timers */ err = root_setup_timers(); if (err) goto out_timers; /* FIXME: setup the profile unit */ err = root_setup_profile(); if (err) goto out_profile; /* maks the SIGUSR1 signal for main thread */ { sigset_t set; sigemptyset(&set); sigaddset(&set, SIGUSR1); pthread_sigmask(SIG_BLOCK, &set, NULL); } /* ok to run */ hro.state = HRO_STATE_RUNNING; out_profile: out_timers: out_spool: out_addr_mgr: out_root_mgr: out_ring_mgr: out_site_mgr: out_signal: out_verify: out_config: return err; }
static void test_default() { printf ("Test mounting with default\n"); KDB *kdb = kdb_new(); Key *errorKey = keyNew(0); KeySet *modules = modules_config(); succeed_if (elektraMountOpen(kdb, root_config(), modules, errorKey) == 0, "could not buildup mount"); succeed_if (elektraMountDefault(kdb, modules, errorKey) == 0, "could not mount default backend"); succeed_if (kdb->split->size == 6, "size of split not correct"); Key *mp = keyNew("spec", KEY_VALUE, "root", KEY_END); compare_key(mp, kdb->split->parents[0]); keySetName(mp, "dir"); keySetString (mp, "root"); compare_key(mp, kdb->split->parents[1]); keySetName(mp, "user"); keySetString (mp, "root"); compare_key(mp, kdb->split->parents[2]); keySetName(mp, "system"); keySetString (mp, "root"); compare_key(mp, kdb->split->parents[3]); keySetName(mp, "system/elektra"); keySetString (mp, "default"); compare_key(mp, kdb->split->parents[5]); // must be last, needed later keySetName(mp, "user/tests/simple"); keySetString (mp, "simple"); compare_key(mp, kdb->split->parents[4]); succeed_if(output_warnings (errorKey), "warnings found"); succeed_if(output_error (errorKey), "error found"); exit_if_fail (kdb->trie, "trie was not build up successfully"); // output_trie (kdb->trie); Key *searchKey = keyNew("", KEY_END); Key *rmp = keyNew("", KEY_VALUE, "root", KEY_END); elektraKeySetName(rmp, "/", KEY_CASCADING_NAME); Backend *b2 = 0; keySetName (searchKey, "user"); b2 = elektraTrieLookup(kdb->trie, searchKey); succeed_if (b2, "there should be a backend"); compare_key(b2->mountpoint, rmp); Backend *backend = 0; keySetName(searchKey, "user/tests/simple"); backend = elektraTrieLookup(kdb->trie, searchKey); succeed_if (backend, "there should be a backend"); compare_key(backend->mountpoint, mp); keySetName(searchKey, "user/tests/simple/below"); b2 = elektraTrieLookup(kdb->trie, searchKey); succeed_if (b2, "there should be a backend"); succeed_if (backend == b2, "should be same backend"); compare_key(b2->mountpoint, mp); keySetName(searchKey, "user/tests/simple/deep/below"); b2 = elektraTrieLookup(kdb->trie, searchKey); succeed_if (b2, "there should be a backend"); succeed_if (backend == b2, "should be same backend"); compare_key(b2->mountpoint, mp); Key *dmp = keyNew ("", KEY_VALUE, "default", KEY_END); keySetName(searchKey, "system/elektra"); b2 = elektraTrieLookup(kdb->trie, searchKey); succeed_if (b2, "there should be a backend"); succeed_if (b2 == kdb->defaultBackend, "should be the default backend"); compare_key(b2->mountpoint, dmp); keySetName(searchKey, "system/elektra/below"); b2 = elektraTrieLookup(kdb->trie, searchKey); succeed_if (b2, "there should be a backend"); succeed_if (b2 == kdb->defaultBackend, "should be the default backend"); compare_key(b2->mountpoint, dmp); keyDel (dmp); keyDel (mp); keyDel (rmp); keyDel (searchKey); kdb_del (kdb); keyDel (errorKey); ksDel (modules); }