summaryrefslogtreecommitdiff
path: root/sys/config
diff options
context:
space:
mode:
authorMarko Kiiskila <marko@runtime.io>2016-01-29 12:49:47 -0800
committerMarko Kiiskila <marko@runtime.io>2016-01-29 12:49:47 -0800
commitccda6d4b166c1034cb7ec1dacd88378ffa6b7b56 (patch)
tree7e8d7007957090132606bd491505fc0021101bf2 /sys/config
parent6689163ef5315e52acd28136918832c03e751b5c (diff)
Second take on the config system.
Diffstat (limited to 'sys/config')
-rw-r--r--sys/config/include/config/config.h48
-rw-r--r--sys/config/src/config.c218
-rw-r--r--sys/config/src/config_cli.c43
-rw-r--r--sys/config/src/config_nmgr.c34
-rw-r--r--sys/config/src/config_priv.h1
-rw-r--r--sys/config/src/test/conf_test.c266
6 files changed, 280 insertions, 330 deletions
diff --git a/sys/config/include/config/config.h b/sys/config/include/config/config.h
index 59b68b2d..717f7116 100644
--- a/sys/config/include/config/config.h
+++ b/sys/config/include/config/config.h
@@ -37,39 +37,27 @@ enum conf_type {
CONF_DOUBLE
} __attribute__((__packed__));
-struct conf_entry {
- const char *c_name;
- enum conf_type c_type;
- union {
- struct { /* INT8, INT16, INT32, INT64, FLOAT, DOUBLE */
- void *val;
- } single;
- struct { /* STRING, BYTES */
- uint16_t maxlen;
- uint16_t len;
- void *val;
- } array;
- } c_val;
+struct conf_handler {
+ SLIST_ENTRY(conf_handler) ch_list;
+ char *ch_name;
+ char *(*ch_get)(int argc, char **argv, char *val, int val_len_max);
+ int (*ch_set)(int argc, char **argv, char *val);
+ int (*ch_commit)();
};
-struct conf_entry_dir {
- const char *c_name;
- enum conf_type c_type; /* DIR */
-};
-
-struct conf_node {
- SLIST_ENTRY(conf_node) cn_next;
- SLIST_HEAD(, conf_node) cn_children;
- struct conf_entry *cn_array;
- int cn_cnt;
-};
+int conf_init(void);
+int conf_register(struct conf_handler *);
+int conf_load(void);
-int conf_module_init(void);
-int conf_register(struct conf_node *parent, struct conf_node *child);
-struct conf_entry *conf_lookup(int argc, char **argv);
+int conf_set_value(char *name, char *val_str);
+char *conf_get_value(char *name, char *buf, int buf_len);
+int conf_commit(char *name);
-int conf_parse_name(char *name, int *name_argc, char *name_argv[]);
-int conf_set_value(struct conf_entry *ce, char *val_str);
-char *conf_get_value(struct conf_entry *ce, char *buf, int buf_len);
+int conf_value_from_str(char *val_str, enum conf_type type, void *vp,
+ int maxlen);
+char *conf_str_from_value(enum conf_type type, void *vp, char *buf,
+ int buf_len);
+#define CONF_VALUE_SET(str, type, val) \
+ conf_value_from_str((str), (type), &(val), sizeof(val))
#endif /* __UTIL_CONFIG_H_ */
diff --git a/sys/config/src/config.c b/sys/config/src/config.c
index d7f6d547..ff2b6aba 100644
--- a/sys/config/src/config.c
+++ b/sys/config/src/config.c
@@ -17,77 +17,61 @@
#include <string.h>
#include <stdio.h>
-#include "config/config.h"
+#include <os/os.h>
-#ifdef SHELL_PRESENT
-#include <shell/shell.h>
-#include <console/console.h>
-#endif
+#include "config/config.h"
+#include "config_priv.h"
-static struct conf_node g_conf_root;
+static SLIST_HEAD(, conf_handler) conf_handlers =
+ SLIST_HEAD_INITIALIZER(&conf_handlers);
-static struct conf_entry *
-conf_node_match(struct conf_node *cn, const char *name)
+int
+conf_init(void)
{
- int i;
+ int rc = 0;
- for (i = 0; i < cn->cn_cnt; i++) {
- if (!strcmp(name, cn->cn_array[i].c_name)) {
- return &cn->cn_array[i];
- }
- }
- return NULL;
+#ifdef SHELL_PRESENT
+ rc = conf_cli_register();
+#endif
+#ifdef NEWTMGR_PRESENT
+ rc = conf_nmgr_register();
+#endif
+ return rc;
}
-/*
- * Register config node to a specific spot in the tree.
- */
int
-conf_register(struct conf_node *parent, struct conf_node *child)
+conf_register(struct conf_handler *handler)
{
- struct conf_node *cn;
- int i;
-
- if (!parent) {
- parent = &g_conf_root;
- }
+ SLIST_INSERT_HEAD(&conf_handlers, handler, ch_list);
+ return 0;
+}
- for (i = 0; i < child->cn_cnt; i++) {
- SLIST_FOREACH(cn, &parent->cn_children, cn_next) {
- if (conf_node_match(cn, child->cn_array[i].c_name)) {
- return -1;
- }
- }
- }
- SLIST_INSERT_HEAD(&parent->cn_children, child, cn_next);
+int
+conf_load(void)
+{
+ /*
+ * for every config source
+ * load config
+ * apply config
+ * commit all
+ */
return 0;
}
/*
- * Lookup conf_entry based on name.
+ * Find conf_handler based on name.
*/
-struct conf_entry *
-conf_lookup(int argc, char **argv)
+struct conf_handler *
+conf_handler_lookup(char *name)
{
- int i;
- struct conf_node *parent = &g_conf_root;
- struct conf_entry *ret = NULL;
- struct conf_node *cn;
-
- for (i = 0; i < argc; i++) {
- ret = NULL;
- SLIST_FOREACH(cn, &parent->cn_children, cn_next) {
- ret = conf_node_match(cn, argv[i]);
- if (ret) {
- break;
- }
- }
- parent = cn;
- if (!parent) {
- return NULL;
+ struct conf_handler *ch;
+
+ SLIST_FOREACH(ch, &conf_handlers, ch_list) {
+ if (!strcmp(name, ch->ch_name)) {
+ return ch;
}
}
- return ret;
+ return NULL;
}
/*
@@ -113,13 +97,25 @@ conf_parse_name(char *name, int *name_argc, char *name_argv[])
return 0;
}
+static struct conf_handler *
+conf_parse_and_lookup(char *name, int *name_argc, char *name_argv[])
+{
+ int rc;
+
+ rc = conf_parse_name(name, name_argc, name_argv);
+ if (rc) {
+ return NULL;
+ }
+ return conf_handler_lookup(name_argv[0]);
+}
+
int
-conf_set_value(struct conf_entry *ce, char *val_str)
+conf_value_from_str(char *val_str, enum conf_type type, void *vp, int maxlen)
{
int32_t val;
char *eptr;
- switch (ce->c_type) {
+ switch (type) {
case CONF_INT8:
case CONF_INT16:
case CONF_INT32:
@@ -127,61 +123,53 @@ conf_set_value(struct conf_entry *ce, char *val_str)
if (*eptr != '\0') {
goto err;
}
- if (ce->c_type == CONF_INT8) {
+ if (type == CONF_INT8) {
if (val < INT8_MIN || val > UINT8_MAX) {
goto err;
}
- *(int8_t *)ce->c_val.single.val = val;
- } else if (ce->c_type == CONF_INT16) {
+ *(int8_t *)vp = val;
+ } else if (type == CONF_INT16) {
if (val < INT16_MIN || val > UINT16_MAX) {
goto err;
}
- *(int16_t *)ce->c_val.single.val = val;
- } else if (ce->c_type == CONF_INT32) {
- *(int32_t *)ce->c_val.single.val = val;
+ *(int16_t *)vp = val;
+ } else if (type == CONF_INT32) {
+ *(int32_t *)vp = val;
}
break;
case CONF_STRING:
val = strlen(val_str);
- if (val + 1 > ce->c_val.array.maxlen) {
+ if (val + 1 > maxlen) {
goto err;
}
- strcpy(ce->c_val.array.val, val_str);
- ce->c_val.array.len = val;
+ strcpy(vp, val_str);
break;
default:
- console_printf("Can't parse type %d\n", ce->c_type);
- break;
+ goto err;
}
return 0;
err:
- return -1;
+ return OS_INVALID_PARM;
}
-/*
- * Get value in printable string form. If value is not string, the value
- * will be filled in *buf.
- * Return value will be pointer to beginning of that buffer,
- * except for string it will pointer to beginning of string.
- */
char *
-conf_get_value(struct conf_entry *ce, char *buf, int buf_len)
+conf_str_from_value(enum conf_type type, void *vp, char *buf, int buf_len)
{
int32_t val;
- if (ce->c_type == CONF_STRING) {
- return ce->c_val.array.val;
+ if (type == CONF_STRING) {
+ return vp;
}
- switch (ce->c_type) {
+ switch (type) {
case CONF_INT8:
case CONF_INT16:
case CONF_INT32:
- if (ce->c_type == CONF_INT8) {
- val = *(int8_t *)ce->c_val.single.val;
- } else if (ce->c_type == CONF_INT16) {
- val = *(int16_t *)ce->c_val.single.val;
+ if (type == CONF_INT8) {
+ val = *(int8_t *)vp;
+ } else if (type == CONF_INT16) {
+ val = *(int16_t *)vp;
} else {
- val = *(int32_t *)ce->c_val.single.val;
+ val = *(int32_t *)vp;
}
snprintf(buf, buf_len, "%ld", (long)val);
return buf;
@@ -190,3 +178,69 @@ conf_get_value(struct conf_entry *ce, char *buf, int buf_len)
}
}
+int
+conf_set_value(char *name, char *val_str)
+{
+ int name_argc;
+ char *name_argv[CONF_MAX_DIR_DEPTH];
+ struct conf_handler *ch;
+
+ ch = conf_parse_and_lookup(name, &name_argc, name_argv);
+ if (!ch) {
+ return OS_INVALID_PARM;
+ }
+
+ return ch->ch_set(name_argc - 1, &name_argv[1], val_str);
+}
+
+/*
+ * Get value in printable string form. If value is not string, the value
+ * will be filled in *buf.
+ * Return value will be pointer to beginning of that buffer,
+ * except for string it will pointer to beginning of string.
+ */
+char *
+conf_get_value(char *name, char *buf, int buf_len)
+{
+ int name_argc;
+ char *name_argv[CONF_MAX_DIR_DEPTH];
+ struct conf_handler *ch;
+
+ ch = conf_parse_and_lookup(name, &name_argc, name_argv);
+ if (!ch) {
+ return NULL;
+ }
+
+ return ch->ch_get(name_argc - 1, &name_argv[1], buf, buf_len);
+}
+
+int
+conf_commit(char *name)
+{
+ int name_argc;
+ char *name_argv[CONF_MAX_DIR_DEPTH];
+ struct conf_handler *ch;
+ int rc;
+
+ if (name) {
+ ch = conf_parse_and_lookup(name, &name_argc, name_argv);
+ if (!ch) {
+ return OS_INVALID_PARM;
+ }
+ if (ch->ch_commit) {
+ return ch->ch_commit();
+ } else {
+ return 0;
+ }
+ } else {
+ SLIST_FOREACH(ch, &conf_handlers, ch_list) {
+ if (ch->ch_commit) {
+ rc = ch->ch_commit();
+ if (rc) {
+ return rc;
+ }
+ }
+ }
+ return 0;
+ }
+}
diff --git a/sys/config/src/config_cli.c b/sys/config/src/config_cli.c
index b0a2891d..bfe19669 100644
--- a/sys/config/src/config_cli.c
+++ b/sys/config/src/config_cli.c
@@ -32,15 +32,10 @@ shell_conf_command(int argc, char **argv)
{
char *name = NULL;
char *val = NULL;
- char *name_argv[CONF_MAX_DIR_DEPTH];
char tmp_buf[16];
- int name_argc;
int rc;
- struct conf_entry *ce;
switch (argc) {
- case 1:
- break;
case 2:
name = argv[1];
break;
@@ -52,26 +47,25 @@ shell_conf_command(int argc, char **argv)
goto err;
}
- rc = conf_parse_name(name, &name_argc, name_argv);
- if (rc) {
- goto err;
- }
-
- ce = conf_lookup(name_argc, name_argv);
- if (!ce) {
- console_printf("No such config variable\n");
- goto err;
+ if (!strcmp(name, "commit")) {
+ rc = conf_commit(val);
+ if (rc) {
+ val = "Failed to commit\n";
+ } else {
+ val = "Done\n";
+ }
+ console_printf(val);
+ return 0;
}
-
if (!val) {
- val = conf_get_value(ce, tmp_buf, sizeof(tmp_buf));
+ val = conf_get_value(name, tmp_buf, sizeof(tmp_buf));
if (!val) {
console_printf("Cannot display value\n");
goto err;
}
- console_printf("%s", val);
+ console_printf("%s\n", val);
} else {
- rc = conf_set_value(ce, val);
+ rc = conf_set_value(name, val);
if (rc) {
console_printf("Failed to set\n");
goto err;
@@ -82,16 +76,11 @@ err:
console_printf("Invalid args\n");
return 0;
}
-#endif
-int conf_module_init(void)
+int
+conf_cli_register(void)
{
-#ifdef SHELL_PRESENT
- shell_cmd_register(&shell_conf_cmd, "config", shell_conf_command);
-#endif
-#ifdef NEWTMGR_PRESENT
- conf_nmgr_register();
-#endif
- return 0;
+ return shell_cmd_register(&shell_conf_cmd, "config", shell_conf_command);
}
+#endif
diff --git a/sys/config/src/config_nmgr.c b/sys/config/src/config_nmgr.c
index 8d0cf34e..81004d8d 100644
--- a/sys/config/src/config_nmgr.c
+++ b/sys/config/src/config_nmgr.c
@@ -42,9 +42,6 @@ conf_nmgr_read(struct nmgr_jbuf *njb)
{
char tmp_str[max(CONF_MAX_DIR_DEPTH * 8, 16)];
char *val_str;
- char *name_argv[CONF_MAX_DIR_DEPTH];
- int name_argc;
- struct conf_entry *ce;
const struct json_attr_t attr[2] = {
[0] = {
.attribute = "name",
@@ -64,16 +61,7 @@ conf_nmgr_read(struct nmgr_jbuf *njb)
return OS_EINVAL;
}
- if (conf_parse_name(tmp_str, &name_argc, name_argv)) {
- return OS_EINVAL;
- }
-
- ce = conf_lookup(name_argc, name_argv);
- if (!ce) {
- return OS_EINVAL;
- }
-
- val_str = conf_get_value(ce, tmp_str, sizeof(tmp_str));
+ val_str = conf_get_value(tmp_str, tmp_str, sizeof(tmp_str));
if (!val_str) {
return OS_EINVAL;
}
@@ -89,17 +77,14 @@ conf_nmgr_read(struct nmgr_jbuf *njb)
static int
conf_nmgr_write(struct nmgr_jbuf *njb)
{
- char tmp_str[CONF_MAX_DIR_DEPTH * 8];
+ char name_str[CONF_MAX_DIR_DEPTH * 8];
char val_str[256];
- char *name_argv[CONF_MAX_DIR_DEPTH];
- int name_argc;
- struct conf_entry *ce;
struct json_attr_t attr[3] = {
[0] = {
.attribute = "name",
.type = t_string,
- .addr.string = tmp_str,
- .len = sizeof(tmp_str)
+ .addr.string = name_str,
+ .len = sizeof(name_str)
},
[1] = {
.attribute = "val",
@@ -118,16 +103,7 @@ conf_nmgr_write(struct nmgr_jbuf *njb)
return OS_EINVAL;
}
- if (conf_parse_name(tmp_str, &name_argc, name_argv)) {
- return OS_EINVAL;
- }
-
- ce = conf_lookup(name_argc, name_argv);
- if (!ce) {
- return OS_EINVAL;
- }
-
- rc = conf_set_value(ce, val_str);
+ rc = conf_set_value(name_str, val_str);
if (rc) {
return OS_EINVAL;
}
diff --git a/sys/config/src/config_priv.h b/sys/config/src/config_priv.h
index a457eb96..6217feee 100644
--- a/sys/config/src/config_priv.h
+++ b/sys/config/src/config_priv.h
@@ -17,6 +17,7 @@
#ifndef __CONFIG_PRIV_H_
#define __CONFIG_PRIV_H_
+int conf_cli_register(void);
int conf_nmgr_register(void);
#endif /* __CONFIG_PRIV_H_ */
diff --git a/sys/config/src/test/conf_test.c b/sys/config/src/test/conf_test.c
index 5d0a4a0b..8556275a 100644
--- a/sys/config/src/test/conf_test.c
+++ b/sys/config/src/test/conf_test.c
@@ -20,212 +20,154 @@
#include <testutil/testutil.h>
#include <config/config.h>
-uint8_t val8;
+static uint8_t val8;
-static struct conf_entry ce1 = {
- .c_name = "ce1",
- .c_type = CONF_INT8,
- .c_val.single.val = &val8
-};
-
-static struct conf_node cn1 = {
- .cn_cnt = 1,
- .cn_array = &ce1
-};
-
-static struct conf_entry ce2 = {
- .c_name = "ce2",
- .c_type = CONF_INT8,
- .c_val.single.val = &val8
-};
-
-static struct conf_node cn2 = {
- .cn_cnt = 1,
- .cn_array = &ce2
-};
+static int test_get_called;
+static int test_set_called;
+static int test_commit_called;
-static struct conf_entry ce_arr1[2] = {
- [0] = {
- .c_name = "cea1",
- .c_type = CONF_INT8,
- .c_val.single.val = &val8
- },
- [1] = {
- .c_name = "cea2",
- .c_type = CONF_INT8,
- .c_val.single.val = &val8
+static char *
+ctest_handle_get(int argc, char **argv, char *val, int val_len_max)
+{
+ test_get_called = 1;
+ if (argc == 1 && !strcmp(argv[0], "mybar")) {
+ return conf_str_from_value(CONF_INT8, &val8, val, val_len_max);
}
-};
+ return NULL;
+}
-static struct conf_node cn_arr1 = {
- .cn_cnt = 2,
- .cn_array = ce_arr1
-};
+static int
+ctest_handle_set(int argc, char **argv, char *val)
+{
+ uint8_t newval;
+ int rc;
-static struct conf_entry ce_arr2[2] = {
- [0] = {
- .c_name = "ce21",
- .c_type = CONF_INT8,
- .c_val.single.val = &val8
- },
- [1] = {
- .c_name = "cea2",
- .c_type = CONF_INT8,
- .c_val.single.val = &val8
+ test_set_called = 1;
+ if (argc == 1 && !strcmp(argv[0], "mybar")) {
+ rc = CONF_VALUE_SET(val, CONF_INT8, newval);
+ TEST_ASSERT(rc == 0);
+ val8 = newval;
+ return 0;
}
-};
-
-static struct conf_node cn_arr2 = {
- .cn_cnt = 2,
- .cn_array = ce_arr2
-};
+ return OS_ENOENT;
+}
-static struct conf_entry_dir ce_dir = {
- .c_name = "foo",
- .c_type = CONF_DIR
-};
+static int
+ctest_handle_commit(void)
+{
+ test_commit_called = 1;
+ return 0;
+}
-static struct conf_node cn_dir = {
- .cn_cnt = 1,
- .cn_array = (struct conf_entry *)&ce_dir
+struct conf_handler config_test_handler = {
+ .ch_name = "myfoo",
+ .ch_get = ctest_handle_get,
+ .ch_set = ctest_handle_set,
+ .ch_commit = ctest_handle_commit
};
-static struct conf_entry ce_foo_arr1[2] = {
- [0] = {
- .c_name = "foo1",
- .c_type = CONF_INT8,
- .c_val.single.val = &val8
- },
- [1] = {
- .c_name = "foo2",
- .c_type = CONF_INT8,
- .c_val.single.val = &val8
- }
-};
+static void
+ctest_clear_call_state(void)
+{
+ test_get_called = 0;
+ test_set_called = 0;
+ test_commit_called = 0;
+}
-static struct conf_node cn_foo_arr1 = {
- .cn_cnt = 2,
- .cn_array = ce_foo_arr1
-};
+static int
+ctest_get_call_state(void)
+{
+ return test_get_called + test_set_called + test_commit_called;
+}
TEST_CASE(config_empty_lookups)
{
- struct conf_entry *ce;
- char *names1[] = { "foo", "bar" };
-
- ce = conf_lookup(0, NULL);
- TEST_ASSERT(ce == NULL);
+ int rc;
+ char tmp[64], *str;
- ce = conf_lookup(1, names1);
- TEST_ASSERT(ce == NULL);
+ rc = conf_set_value("foo/bar", "tmp");
+ TEST_ASSERT(rc != 0);
- ce = conf_lookup(2, names1);
- TEST_ASSERT(ce == NULL);
+ str = conf_get_value("foo/bar", tmp, sizeof(tmp));
+ TEST_ASSERT(str == NULL);
}
TEST_CASE(config_test_insert)
{
int rc;
- /*
- * Add 2 new ones
- */
- rc = conf_register(NULL, &cn1);
+ rc = conf_register(&config_test_handler);
TEST_ASSERT(rc == 0);
- rc = conf_register(NULL, &cn2);
- TEST_ASSERT(rc == 0);
-
- /*
- * Fail adding same ones again
- */
- rc = conf_register(NULL, &cn1);
- TEST_ASSERT(rc != 0);
- rc = conf_register(NULL, &cn2);
- TEST_ASSERT(rc != 0);
-
- /*
- * Add with multiple conf_entries
- */
- rc = conf_register(NULL, &cn_arr1);
- TEST_ASSERT(rc == 0);
-
- /*
- * Cannot add it again
- */
- rc = conf_register(NULL, &cn_arr1);
- TEST_ASSERT(rc != 0);
-
- /*
- * Should fail right away
- */
- rc = conf_register(NULL, &cn_arr2);
- TEST_ASSERT(rc != 0);
-
}
-TEST_CASE(config_test_lookup)
+TEST_CASE(config_test_getset_unknown)
{
- struct conf_entry *ce;
- char *names1[] = { "foo", "bar" };
- char *names2[] = { "ce1" };
- char *names3[] = { "cea2" };
-
- ce = conf_lookup(0, NULL);
- TEST_ASSERT(ce == NULL);
+ char tmp[64], *str;
+ int rc;
- ce = conf_lookup(1, names1);
- TEST_ASSERT(ce == NULL);
+ rc = conf_set_value("foo/bar", "tmp");
+ TEST_ASSERT(rc != 0);
+ TEST_ASSERT(ctest_get_call_state() == 0);
- ce = conf_lookup(2, names1);
- TEST_ASSERT(ce == NULL);
+ str = conf_get_value("foo/bar", tmp, sizeof(tmp));
+ TEST_ASSERT(str == NULL);
+ TEST_ASSERT(ctest_get_call_state() == 0);
- ce = conf_lookup(1, names2);
- TEST_ASSERT(ce != NULL);
- TEST_ASSERT(!strcmp(ce->c_name, names2[0]));
+ rc = conf_set_value("myfoo/bar", "tmp");
+ TEST_ASSERT(rc == OS_ENOENT);
+ TEST_ASSERT(test_set_called == 1);
+ ctest_clear_call_state();
- ce = conf_lookup(1, names3);
- TEST_ASSERT(ce != NULL);
- TEST_ASSERT(!strcmp(ce->c_name, names3[0]));
+ str = conf_get_value("myfoo/bar", tmp, sizeof(tmp));
+ TEST_ASSERT(str == NULL);
+ TEST_ASSERT(test_get_called == 1);
+ ctest_clear_call_state();
}
-TEST_CASE(config_test_dir)
+TEST_CASE(config_test_getset_int)
{
+ char tmp[64], *str;
int rc;
- struct conf_entry *ce;
- char *names1[] = { "foo", "foo1" };
- char *names2[] = { "foo", "foo2" };
- char *names3[] = { "foo", "foo3" };
-
- /*
- * Add directory node, and node under.
- */
- rc = conf_register(NULL, &cn_dir);
- TEST_ASSERT(rc == 0);
- rc = conf_register(&cn_dir, &cn_foo_arr1);
+
+ rc = conf_set_value("myfoo/mybar", "42");
TEST_ASSERT(rc == 0);
+ TEST_ASSERT(test_set_called == 1);
+ TEST_ASSERT(val8 == 42);
+ ctest_clear_call_state();
+
+ str = conf_get_value("myfoo/mybar", tmp, sizeof(tmp));
+ TEST_ASSERT(str);
+ TEST_ASSERT(test_get_called == 1);
+ TEST_ASSERT(!strcmp("42", tmp));
+ ctest_clear_call_state();
+}
- ce = conf_lookup(1, names1);
- TEST_ASSERT(ce != NULL);
- TEST_ASSERT(ce->c_type == CONF_DIR);
+TEST_CASE(config_test_commit)
+{
+ int rc;
- ce = conf_lookup(2, names1);
- TEST_ASSERT(ce != NULL);
- TEST_ASSERT(!strcmp(ce->c_name, names1[1]));
+ rc = conf_commit("bar");
+ TEST_ASSERT(rc == 0);
+ TEST_ASSERT(ctest_get_call_state());
- ce = conf_lookup(2, names2);
- TEST_ASSERT(ce != NULL);
- TEST_ASSERT(!strcmp(ce->c_name, names2[1]));
+ rc = conf_commit(NULL);
+ TEST_ASSERT(rc == 0);
+ TEST_ASSERT(test_commit_called == 1);
+ ctest_clear_call_state();
- ce = conf_lookup(2, names3);
- TEST_ASSERT(ce == NULL);
+ rc = conf_commit("myfoo");
+ TEST_ASSERT(rc == 0);
+ TEST_ASSERT(test_commit_called == 1);
+ ctest_clear_call_state();
}
TEST_SUITE(config_test_suite)
{
config_empty_lookups();
config_test_insert();
- config_test_lookup();
- config_test_dir();
+ config_test_getset_unknown();
+ config_test_getset_int();
+ config_test_commit();
}
#ifdef PKG_TEST
@@ -236,7 +178,7 @@ main(int argc, char **argv)
tu_config.tc_print_results = 1;
tu_init();
- config_test_suite();
+ conf_init();
return tu_any_failed;
}