aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPřemysl Eric Janouch <p@janouch.name>2020-10-11 22:34:01 +0200
committerPřemysl Eric Janouch <p@janouch.name>2020-10-12 02:07:15 +0200
commit1cd9ba8d973d46d19686aa43f6e3f5f76c69a28f (patch)
treef21370b0d61b73e25c07cdee4d6ec09bdb5951cd
parent7e5b6c534399d2c56412383ef66658bd361d5027 (diff)
downloadliberty-1cd9ba8d973d46d19686aa43f6e3f5f76c69a28f.tar.gz
liberty-1cd9ba8d973d46d19686aa43f6e3f5f76c69a28f.tar.xz
liberty-1cd9ba8d973d46d19686aa43f6e3f5f76c69a28f.zip
Import configuration test from degesch
-rw-r--r--tests/liberty.c73
1 files changed, 73 insertions, 0 deletions
diff --git a/tests/liberty.c b/tests/liberty.c
index ddff7c3..65847fe 100644
--- a/tests/liberty.c
+++ b/tests/liberty.c
@@ -604,6 +604,78 @@ test_connector (const void *user_data, struct test_connector_fixture *self)
connector_free (&connector);
}
+// --- Configuration -----------------------------------------------------------
+
+static void
+on_test_config_foo_change (struct config_item *item)
+{
+ *(bool *) item->user_data = item->value.boolean;
+}
+
+static bool
+test_config_validate_nonnegative
+ (const struct config_item *item, struct error **e)
+{
+ if (item->type == CONFIG_ITEM_NULL)
+ return true;
+
+ hard_assert (item->type == CONFIG_ITEM_INTEGER);
+ if (item->value.integer >= 0)
+ return true;
+
+ error_set (e, "must be non-negative");
+ return false;
+}
+
+static struct config_schema g_config_test[] =
+{
+ { .name = "foo",
+ .comment = "baz",
+ .type = CONFIG_ITEM_BOOLEAN,
+ .default_ = "off",
+ .on_change = on_test_config_foo_change },
+ { .name = "bar",
+ .type = CONFIG_ITEM_INTEGER,
+ .validate = test_config_validate_nonnegative,
+ .default_ = "1" },
+ { .name = "foobar",
+ .type = CONFIG_ITEM_STRING,
+ .default_ = "\"qux\\x01\"" },
+ {}
+};
+
+static void
+test_config_load (struct config_item *subtree, void *user_data)
+{
+ config_schema_apply_to_object (g_config_test, subtree, user_data);
+}
+
+static void
+test_config (void)
+{
+ struct config config = config_make ();
+
+ bool b = true;
+ config_register_module (&config, "top", test_config_load, &b);
+ config_load (&config, config_item_object ());
+ config_schema_call_changed (config.root);
+ hard_assert (b == false);
+
+ struct config_item *invalid = config_item_integer (-1);
+ hard_assert (!config_item_set_from (config_item_get (config.root,
+ "top.bar", NULL), invalid, NULL));
+ config_item_destroy (invalid);
+
+ struct str s = str_make ();
+ config_item_write (config.root, true, &s);
+ struct config_item *parsed = config_item_parse (s.str, s.len, false, NULL);
+ hard_assert (parsed);
+ config_item_destroy (parsed);
+ str_free (&s);
+
+ config_free (&config);
+}
+
// --- Main --------------------------------------------------------------------
int
@@ -622,6 +694,7 @@ main (int argc, char *argv[])
test_add_simple (&test, "/utf-8", NULL, test_utf8);
test_add_simple (&test, "/base64", NULL, test_base64);
test_add_simple (&test, "/async", NULL, test_async);
+ test_add_simple (&test, "/config", NULL, test_config);
test_add (&test, "/connector", struct test_connector_fixture, NULL,
test_connector_fixture_init,