fixup! Introduction of cfgmgr

This commit is contained in:
Colin Vidal
2024-12-16 20:16:00 +01:00
parent a243999f4c
commit e729f5bf50
3 changed files with 30 additions and 30 deletions

View File

@@ -18,12 +18,13 @@
#include <isc/list.h>
#include <isc/mem.h>
#include <isc/random.h>
#include <isc/thread.h>
#include <isc/util.h>
#include <isccfg/cfgmgr.h>
#define DBPATH "/tmp/lmdb-exp"
#define RANDOM isc_random_uniform(UINT32_MAX);
/*
* See MDB_MAXKEYSIZE documentation, but not accessible as defined in
@@ -50,6 +51,7 @@ typedef struct {
} context_t;
static isc_mem_t *mctx = NULL;
static const char *dbpath = NULL;
static MDB_env *env = NULL;
static thread_local context_t ctx =
(context_t){ .openedclauses = ISC_LIST_INITIALIZER,
@@ -75,14 +77,13 @@ parseid(const char *dbkey) {
* start of the id (character 1) is at character index 4
*/
idstarts = strlen(ctx.buffer);
INSIST(idstarts > 0 && ctx.buffer[idstarts - 1] == '.');
idends = idstarts;
INSIST(idstarts > 0 && idends == idstarts);
INSIST(ctx.buffer[idstarts - 1] == '.');
keylen = strlen(dbkey);
/*
* Cutting the key form the dot after the identifier
*/
keylen = strlen(dbkey);
REQUIRE(keylen > idends);
while (dbkey[idends] != '.') {
idends++;
@@ -100,7 +101,7 @@ parseid(const char *dbkey) {
}
isc_result_t
cfgmgr_init(void) {
cfgmgr_init(isc_mem_t *mctx_, const char *dbpath_) {
int result = ISC_R_SUCCESS;
char dbname[BUFLEN];
char dblockname[BUFLEN];
@@ -111,12 +112,16 @@ cfgmgr_init(void) {
REQUIRE(ctx.buffer == NULL);
REQUIRE(ctx.cursor == NULL);
REQUIRE(ctx.txn == NULL);
REQUIRE(dbpath == NULL);
REQUIRE(mctx == NULL);
REQUIRE(env == NULL);
REQUIRE(mctx_ != NULL);
REQUIRE(dbpath_ != NULL);
isc_mem_create(&mctx);
isc_mem_attach(mctx_, &mctx);
INSIST(mctx != NULL);
dbpath = dbpath_;
result = mdb_env_create(&env);
if (result != 0) {
result = ISC_R_FAILURE;
@@ -130,9 +135,9 @@ cfgmgr_init(void) {
* corruption doesn't matter: as soon as the process is dead,
* the disk data is dead as well)
*/
random = arc4random();
REQUIRE(snprintf(dbname, BUFLEN, "%s-%u", DBPATH, random) < BUFLEN);
REQUIRE(snprintf(dblockname, BUFLEN, "%s-%u-lock", DBPATH, random) <
random = RANDOM();
REQUIRE(snprintf(dbname, BUFLEN, "%s-%u", dbpath, random) < BUFLEN);
REQUIRE(snprintf(dblockname, BUFLEN, "%s-%u-lock", dbpath, random) <
BUFLEN);
result = mdb_env_open(env, dbname, MDB_NOSYNC | MDB_NOSUBDIR, 0600);
if (result != 0) {
@@ -173,12 +178,13 @@ cfgmgr_deinit(void) {
REQUIRE(ctx.buffer == NULL);
REQUIRE(ctx.cursor == NULL);
REQUIRE(ctx.txn == NULL);
REQUIRE(env != NULL);
REQUIRE(mctx != NULL);
REQUIRE(env != NULL);
mdb_env_close(env);
env = NULL;
isc_mem_destroy(&mctx);
ENSURE(mctx == NULL);
dbpath = NULL;
isc_mem_detach(&mctx);
INSIST(mctx == NULL);
}
static void
@@ -511,7 +517,7 @@ cfgmgr_newclause(const char *name) {
INSIST(ctx.buffer != NULL);
INSIST(ctx.cursor != NULL);
INSIST(ctx.readonly == false);
pushclause(name, arc4random());
pushclause(name, RANDOM());
INSIST(ctx.prefix != NULL);
}

View File

@@ -151,7 +151,7 @@ isc_result_t
cfgmgr_open(const char *name);
isc_result_t
cfgmgr_init(void);
cfgmgr_init(isc_mem_t *mctx_, const char *dbpath_);
void
cfgmgr_deinit(void);

View File

@@ -24,6 +24,7 @@
#include <tests/isc.h>
#define INIT SUCCESS(cfgmgr_init(mctx, "/tmp/named-cfgmgr-lmdb"))
#define SUCCESS(result) assert_int_equal(result, ISC_R_SUCCESS)
#define NOTFOUND(result) assert_int_equal(result, ISC_R_NOTFOUND)
#define NOTBOUND(result) assert_int_equal(result, ISC_R_NOTBOUND)
@@ -32,8 +33,7 @@ ISC_RUN_TEST_IMPL(cfgmgr_rw) {
cfgmgr_val_t val1;
cfgmgr_val_t val2;
SUCCESS(cfgmgr_init());
INIT;
NOTFOUND(cfgmgr_open("foo"));
SUCCESS(cfgmgr_newclause("foo"));
@@ -177,8 +177,7 @@ ISC_RUN_TEST_IMPL(cfgmgr_parseid) {
* exercise the nested clause and repeatable clauses with such
* odd names
*/
SUCCESS(cfgmgr_init());
INIT;
SUCCESS(cfgmgr_newclause("123"));
val = (cfgmgr_val_t){ .type = UINT32, .data.uint32 = 666666 };
SUCCESS(cfgmgr_setval("123123", &val));
@@ -240,8 +239,7 @@ ISC_RUN_TEST_IMPL(cfgmgr_override) {
cfgmgr_val_t val1;
cfgmgr_val_t val2;
SUCCESS(cfgmgr_init());
INIT;
SUCCESS(cfgmgr_newclause("foo"));
val1 = (cfgmgr_val_t){ .type = UINT32, .data.uint32 = 4058304 };
@@ -277,8 +275,7 @@ ISC_RUN_TEST_IMPL(cfgmgr_rw_string) {
cfgmgr_val_t val1;
cfgmgr_val_t val2;
SUCCESS(cfgmgr_init());
INIT;
SUCCESS(cfgmgr_newclause("foo"));
val1 = (cfgmgr_val_t){ .type = STRING, .data.string = "hey there!" };
@@ -327,7 +324,7 @@ ISC_RUN_TEST_IMPL(cfgmgr_rw_string) {
ISC_RUN_TEST_IMPL(cfgmgr_list) {
cfgmgr_val_t val;
SUCCESS(cfgmgr_init());
INIT;
SUCCESS(cfgmgr_newclause("foo"));
val = (cfgmgr_val_t){ .type = STRING, .data.string = "lst1" };
@@ -408,8 +405,7 @@ ISC_RUN_TEST_IMPL(cfgmgr_repeatable_clauses) {
cfgmgr_val_t val1;
cfgmgr_val_t val2;
SUCCESS(cfgmgr_init());
INIT;
SUCCESS(cfgmgr_newclause("view"));
SUCCESS(cfgmgr_setval("p1", &(cfgmgr_val_t){ .type = STRING,
.data.string = "view1 p1 "
@@ -463,12 +459,11 @@ ISC_RUN_TEST_IMPL(cfgmgr_repeatable_clauses) {
ISC_RUN_TEST_IMPL(cfgmgr_nested_clauses) {
cfgmgr_val_t val;
SUCCESS(cfgmgr_init());
/*
* Let's start by writting then reading
* foo { bar { baz { gee: none; }; }; };
*/
INIT;
SUCCESS(cfgmgr_newclause("foo"));
SUCCESS(cfgmgr_newclause("bar"));
SUCCESS(cfgmgr_newclause("baz"));
@@ -567,11 +562,10 @@ ISC_RUN_TEST_IMPL(cfgmgr_nested_clauses) {
ISC_RUN_TEST_IMPL(cfgmgr_delete) {
cfgmgr_val_t val;
SUCCESS(cfgmgr_init());
/*
* foo is not found because nothing has been written in there
*/
INIT;
SUCCESS(cfgmgr_newclause("foo"));
SUCCESS(cfgmgr_close());
NOTFOUND(cfgmgr_open("foo"));
@@ -690,9 +684,9 @@ ISC_RUN_TEST_IMPL(cfgmgr_threads) {
pthread_t thread;
sem_t sems[2];
INIT;
REQUIRE(sem_init(&sems[0], 0, 0) == 0);
REQUIRE(sem_init(&sems[1], 0, 0) == 0);
SUCCESS(cfgmgr_init());
SUCCESS(cfgmgr_newclause("foo"));
SUCCESS(cfgmgr_setval("p", &(cfgmgr_val_t){ .type = NONE }));
cfgmgr_close();