mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
Start on test cases for the multi-object feature of confmgr.
This test case, at this point, only constructs the confmgr object. More code to come.
This commit is contained in:
@@ -120,6 +120,7 @@ src_test_test_SOURCES += \
|
||||
src/test/test_circuitstats.c \
|
||||
src/test/test_compat_libevent.c \
|
||||
src/test/test_config.c \
|
||||
src/test/test_confmgr.c \
|
||||
src/test/test_confparse.c \
|
||||
src/test/test_connection.c \
|
||||
src/test/test_conscache.c \
|
||||
|
||||
@@ -840,6 +840,7 @@ struct testgroup_t testgroups[] = {
|
||||
{ "circuituse/", circuituse_tests },
|
||||
{ "compat/libevent/", compat_libevent_tests },
|
||||
{ "config/", config_tests },
|
||||
{ "config/mgr/", confmgr_tests },
|
||||
{ "config/parse/", confparse_tests },
|
||||
{ "connection/", connection_tests },
|
||||
{ "conscache/", conscache_tests },
|
||||
|
||||
@@ -197,6 +197,7 @@ extern struct testcase_t circuitstats_tests[];
|
||||
extern struct testcase_t circuituse_tests[];
|
||||
extern struct testcase_t compat_libevent_tests[];
|
||||
extern struct testcase_t config_tests[];
|
||||
extern struct testcase_t confmgr_tests[];
|
||||
extern struct testcase_t confparse_tests[];
|
||||
extern struct testcase_t connection_tests[];
|
||||
extern struct testcase_t conscache_tests[];
|
||||
|
||||
@@ -0,0 +1,140 @@
|
||||
/* Copyright (c) 2001-2004, Roger Dingledine.
|
||||
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
||||
* Copyright (c) 2007-2019, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/*
|
||||
* Tests for confparse.c's features that support multiple configuration
|
||||
* formats and configuration objects.
|
||||
*/
|
||||
|
||||
#include "orconfig.h"
|
||||
|
||||
#include "core/or/or.h"
|
||||
#include "lib/encoding/confline.h"
|
||||
#include "app/config/confparse.h"
|
||||
#include "test/test.h"
|
||||
#include "test/log_test_helpers.h"
|
||||
|
||||
/*
|
||||
* Set up a few objects: a pasture_cfg is toplevel; it has a llama_cfg and an
|
||||
* alpaca_cfg.
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
uint32_t magic;
|
||||
char *address;
|
||||
int opentopublic;
|
||||
config_suite_t *subobjs;
|
||||
} pasture_cfg_t;
|
||||
|
||||
typedef struct {
|
||||
char *llamaname;
|
||||
int cuteness;
|
||||
uint32_t magic;
|
||||
} llama_cfg_t;
|
||||
|
||||
typedef struct {
|
||||
uint32_t magic;
|
||||
int fuzziness;
|
||||
char *alpacaname;
|
||||
} alpaca_cfg_t;
|
||||
|
||||
/*
|
||||
* Make the above into configuration objects.
|
||||
*/
|
||||
|
||||
static pasture_cfg_t pasture_cfg_t_dummy;
|
||||
static llama_cfg_t llama_cfg_t_dummy;
|
||||
static alpaca_cfg_t alpaca_cfg_t_dummy;
|
||||
|
||||
#define PV(name, type, dflt) \
|
||||
CONFIG_VAR_ETYPE(pasture_cfg_t, #name, type, name, 0, dflt)
|
||||
#define LV(name, type, dflt) \
|
||||
CONFIG_VAR_ETYPE(llama_cfg_t, #name, type, name, 0, dflt)
|
||||
#define AV(name, type, dflt) \
|
||||
CONFIG_VAR_ETYPE(alpaca_cfg_t, #name, type, name, 0, dflt)
|
||||
static const config_var_t pasture_vars[] = {
|
||||
PV(address, STRING, NULL),
|
||||
PV(opentopublic, BOOL, "1"),
|
||||
END_OF_CONFIG_VARS
|
||||
};
|
||||
static const config_var_t llama_vars[] =
|
||||
{
|
||||
LV(llamaname, STRING, NULL),
|
||||
LV(cuteness, POSINT, "100"),
|
||||
END_OF_CONFIG_VARS
|
||||
};
|
||||
static const config_var_t alpaca_vars[] =
|
||||
{
|
||||
AV(alpacaname, STRING, NULL),
|
||||
AV(fuzziness, POSINT, "50"),
|
||||
END_OF_CONFIG_VARS
|
||||
};
|
||||
|
||||
static const config_format_t pasture_fmt = {
|
||||
sizeof(pasture_cfg_t),
|
||||
{
|
||||
"pasture_cfg_t",
|
||||
8989,
|
||||
offsetof(pasture_cfg_t, magic)
|
||||
},
|
||||
.vars = pasture_vars,
|
||||
.config_suite_offset = offsetof(pasture_cfg_t, subobjs),
|
||||
};
|
||||
|
||||
static const config_format_t llama_fmt = {
|
||||
sizeof(llama_cfg_t),
|
||||
{
|
||||
"llama_cfg_t",
|
||||
0x11aa11,
|
||||
offsetof(llama_cfg_t, magic)
|
||||
},
|
||||
.vars = llama_vars,
|
||||
.config_suite_offset = -1,
|
||||
};
|
||||
|
||||
static const config_format_t alpaca_fmt = {
|
||||
sizeof(alpaca_cfg_t),
|
||||
{
|
||||
"alpaca_cfg_t",
|
||||
0xa15aca,
|
||||
offsetof(alpaca_cfg_t, magic)
|
||||
},
|
||||
.vars = alpaca_vars,
|
||||
.config_suite_offset = -1,
|
||||
};
|
||||
|
||||
static config_mgr_t *
|
||||
get_mgr(bool freeze)
|
||||
{
|
||||
config_mgr_t *mgr = config_mgr_new(&pasture_fmt);
|
||||
tt_int_op(0, OP_EQ, config_mgr_add_format(mgr, &llama_fmt));
|
||||
tt_int_op(1, OP_EQ, config_mgr_add_format(mgr, &alpaca_fmt));
|
||||
if (freeze)
|
||||
config_mgr_freeze(mgr);
|
||||
return mgr;
|
||||
|
||||
done:
|
||||
config_mgr_free(mgr);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
test_confmgr_init(void *arg)
|
||||
{
|
||||
(void)arg;
|
||||
config_mgr_t *mgr = get_mgr(true);
|
||||
tt_ptr_op(mgr, OP_NE, NULL);
|
||||
|
||||
done:
|
||||
config_mgr_free(mgr);
|
||||
}
|
||||
|
||||
#define CONFMGR_TEST(name, flags) \
|
||||
{ #name, test_confmgr_ ## name, flags, NULL, NULL }
|
||||
|
||||
struct testcase_t confmgr_tests[] = {
|
||||
CONFMGR_TEST(init, 0),
|
||||
END_OF_TESTCASES
|
||||
};
|
||||
Reference in New Issue
Block a user