const var_type_def_t *def)
{
if (BUG(!def))
- return -1;
+ return -1; // LCOV_EXCL_LINE
// clear old value if needed.
typed_var_free_ex(target, def);
char **errmsg, const var_type_def_t *def)
{
if (BUG(!def))
- return -1;
+ return -1; // LCOV_EXCL_LINE
if (def->fns->kv_parse) {
// We do _not_ free the old value here, since linelist options
typed_var_free_ex(void *target, const var_type_def_t *def)
{
if (BUG(!def))
- return;
+ return; // LCOV_EXCL_LINE
if (def->fns->clear) {
def->fns->clear(target, def->params);
}
typed_var_encode_ex(const void *value, const var_type_def_t *def)
{
if (BUG(!def))
- return NULL;
+ return NULL; // LCOV_EXCL_LINE
tor_assert(def->fns->encode);
return def->fns->encode(value, def->params);
}
const var_type_def_t *def)
{
if (BUG(!def))
- return NULL;
+ return NULL; // LCOV_EXCL_LINE
if (def->fns->kv_encode) {
return def->fns->kv_encode(key, value, def->params);
}
typed_var_copy_ex(void *dest, const void *src, const var_type_def_t *def)
{
if (BUG(!def))
- return -1;
+ return -1; // LCOV_EXCL_LINE
if (def->fns->copy) {
// If we have been provided a copy fuction, use it.
return def->fns->copy(dest, src, def);
char *err = NULL;
int rv = typed_var_assign_ex(dest, enc, &err, def);
if (BUG(rv < 0)) {
+ // LCOV_EXCL_START
log_warn(LD_BUG, "Encoded value %s was not parseable as a %s: %s",
escaped(enc), def->name, err?err:"");
+ // LCOV_EXCL_STOP
}
tor_free(err);
tor_free(enc);
typed_var_eq_ex(const void *a, const void *b, const var_type_def_t *def)
{
if (BUG(!def))
- return false;
+ return false; // LCOV_EXCL_LINE
if (def->fns->eq) {
// Use a provided eq function if we got one.
typed_var_ok_ex(const void *value, const var_type_def_t *def)
{
if (BUG(!def))
- return false;
+ return false; // LCOV_EXCL_LINE
if (def->fns->ok)
return def->fns->ok(value, def->params);
tt_str_op(tst->mixed_hidden_lines->next->value, OP_EQ, "ABC");
tt_assert(!tst->mixed_hidden_lines->next->next);
+ tt_assert(config_check_ok(&test_fmt, tst, LOG_ERR));
+
done:
config_free(&test_fmt, tst);
}
tt_int_op(tst->deprecated_int, OP_EQ, 7);
+ tt_assert(config_check_ok(&test_fmt, tst, LOG_ERR));
+
done:
teardown_capture_of_logs();
config_free(&test_fmt, tst);
static const badval_test_t bv_badtime = { "time lunchtime\n", "Invalid time" };
static const badval_test_t bv_virt = { "MixedLines 7\n", "virtual option" };
static const badval_test_t bv_rs = { "Routerset 2.2.2.2.2\n", "Invalid" };
+static const badval_test_t bv_big_interval =
+ { "interval 1000 months", "too large" };
/* Try config_dump(), and make sure it behaves correctly */
static void
;
}
+static void
+test_confparse_check_ok_fail(void *arg)
+{
+ (void)arg;
+ test_struct_t *tst = config_new(&test_fmt);
+ tst->pos = -10;
+ tt_assert(! config_check_ok(&test_fmt, tst, LOG_INFO));
+
+ done:
+ config_free(&test_fmt, tst);
+}
+
#define CONFPARSE_TEST(name, flags) \
{ #name, test_confparse_ ## name, flags, NULL, NULL }
BADVAL_TEST(badtime),
BADVAL_TEST(virt),
BADVAL_TEST(rs),
+ BADVAL_TEST(big_interval),
CONFPARSE_TEST(dump, 0),
CONFPARSE_TEST(reset, 0),
CONFPARSE_TEST(reassign, 0),
CONFPARSE_TEST(get_assigned, 0),
CONFPARSE_TEST(extra_lines, 0),
CONFPARSE_TEST(unitparse, 0),
+ CONFPARSE_TEST(check_ok_fail, 0),
END_OF_TESTCASES
};