diff --git a/src/common.h b/src/common.h
index 0157d26ba..6164046ef 100644
--- a/src/common.h
+++ b/src/common.h
@@ -72,11 +72,10 @@ extern ATOMIC_T ly_ll;
extern ATOMIC_T ly_log_opts;
struct ly_log_location_s {
- uint64_t line; /**< One-time line value being reset after use - replaces whatever is in inputs */
struct ly_set inputs; /**< Set of const struct ly_in *in pointers providing the input handler with the line information (LIFO) */
struct ly_set scnodes; /**< Set of const struct lysc_node *scnode pointers providing the compiled schema node to generate path (LIFO) */
struct ly_set dnodes; /**< Set of const struct lyd_node *dnode pointers providing the data node to generate path (LIFO) */
- struct ly_set paths; /**< Set of path strings (LIFO) */
+ struct ly_set spaths; /**< Set of schema path strings (LIFO) */
};
/**
@@ -84,10 +83,10 @@ struct ly_log_location_s {
*
* @param[in] ctx libyang context to store the error record. If not provided, the error is just printed.
* @param[in] level Log message level (error, warning, etc.)
- * @param[in] no Error type code.
+ * @param[in] err Error code.
* @param[in] format Format string to print.
*/
-void ly_log(const struct ly_ctx *ctx, LY_LOG_LEVEL level, LY_ERR no, const char *format, ...) _FORMAT_PRINTF(4, 5);
+void ly_log(const struct ly_ctx *ctx, LY_LOG_LEVEL level, LY_ERR err, const char *format, ...) _FORMAT_PRINTF(4, 5);
/**
* @brief Generate data path based on the data and schema nodes stored in the log location.
@@ -117,26 +116,27 @@ void ly_vlog(const struct ly_ctx *ctx, const char *apptag, LY_VECODE code, const
void ly_err_move(struct ly_ctx *src_ctx, struct ly_ctx *trg_ctx);
/**
- * @brief Logger's location data setter.
+ * @brief Logger location data setter.
+ *
+ * If all the parameter are NULL, a root @p dnode is added (NULL).
*
* @param[in] scnode Compiled schema node.
* @param[in] dnode Data node.
- * @param[in] path Direct path string to print.
- * @param[in] in Input handler (providing line number)
- * @param[in] line One-time line value to be reset when used.
+ * @param[in] spath Direct schema path string to print.
+ * @param[in] in Input handler (providing line number).
*/
void ly_log_location(const struct lysc_node *scnode, const struct lyd_node *dnode,
- const char *path, const struct ly_in *in, uint64_t line);
+ const char *spath, const struct ly_in *in);
/**
- * @brief Revert the specific logger's location data by number of changes made by ::ly_log_location().
+ * @brief Revert the specific logger location data by number of changes made by ::ly_log_location().
*
* @param[in] scnode_steps Number of items in ::ly_log_location_s.scnodes to forget.
* @param[in] dnode_steps Number of items in ::ly_log_location_s.dnodes to forget.
- * @param[in] path_steps Number of path strings in ::ly_log_location_s.paths to forget.
+ * @param[in] spath_steps Number of path strings in ::ly_log_location_s.spaths to forget.
* @param[in] in_steps Number of input handlers ::ly_log_location_s.inputs to forget.
*/
-void ly_log_location_revert(uint32_t scnode_steps, uint32_t dnode_steps, uint32_t path_steps, uint32_t in_steps);
+void ly_log_location_revert(uint32_t scnode_steps, uint32_t dnode_steps, uint32_t spath_steps, uint32_t in_steps);
/**
* @brief Get the stored data node for logging at the index.
@@ -154,26 +154,22 @@ const struct lyd_node *ly_log_location_dnode(uint32_t idx);
uint32_t ly_log_location_dnode_count(void);
/**
- * @brief Update location data for logger, not provided arguments (NULLs) are kept (does not override).
+ * @brief Update location schema/data nodes for logger, not provided arguments (NULLs) are kept (does not override).
*
* @param[in] SCNODE Compiled schema node.
* @param[in] DNODE Data node.
- * @param[in] PATH Direct path string to print.
- * @param[in] IN Input handler (providing line number)
*/
-#define LOG_LOCSET(SCNODE, DNODE, PATH, IN) \
- ly_log_location(SCNODE, DNODE, PATH, IN, 0)
+#define LOG_LOCSET(SCNODE, DNODE) \
+ ly_log_location(SCNODE, DNODE, NULL, NULL)
/**
- * @brief Update location data for logger, not provided arguments (NULLs) are kept (does not override).
+ * @brief Update location schema/data nodes for logger, not provided arguments (NULLs) are kept (does not override).
*
* @param[in] SCNODE_STEPS Number of the compiled schema nodes to remove from the stack.
* @param[in] DNODE_STEPS Number of the data nodes to remove from the stack.
- * @param[in] PATH_STEPS Number of the direct path strings to remove from the stack.
- * @param[in] IN_STEPS Number of the input handlers (providing line number) to remove from the stack.
*/
-#define LOG_LOCBACK(SCNODE_STEPS, DNODE_STEPS, PATH_STEPS, IN_STEPS) \
- ly_log_location_revert(SCNODE_STEPS, DNODE_STEPS, PATH_STEPS, IN_STEPS)
+#define LOG_LOCBACK(SCNODE_STEPS, DNODE_STEPS) \
+ ly_log_location_revert(SCNODE_STEPS, DNODE_STEPS, 0, 0)
#define LOGERR(ctx, errno, ...) ly_log(ctx, LY_LLERR, errno, __VA_ARGS__)
#define LOGWRN(ctx, ...) ly_log(ctx, LY_LLWRN, 0, __VA_ARGS__)
@@ -201,20 +197,6 @@ void ly_log_dbg(uint32_t group, const char *format, ...);
#define LOGARG(CTX, ARG) LOGERR(CTX, LY_EINVAL, "Invalid argument %s (%s()).", #ARG, __func__)
#define LOGVAL(CTX, ...) ly_vlog(CTX, NULL, __VA_ARGS__)
#define LOGVAL_APPTAG(CTX, APPTAG, ...) ly_vlog(CTX, APPTAG, __VA_ARGS__)
-#define LOGVAL_LINE(CTX, LINE, ...) \
- ly_log_location(NULL, NULL, NULL, NULL, LINE); \
- ly_vlog(CTX, NULL, __VA_ARGS__)
-
-/**
- * @brief Print Validation error from struct ly_err_item.
- *
- * String ::ly_err_item.msg cannot be used directly because it may contain the % character,
- * which is incorrectly interpreted in this situation as a conversion specification.
- *
- * @param[in] CTX libyang context to store the error record. If not provided, the error is just printed.
- * @param[in] ERRITEM pointer to ly_err_item that contains an error message.
- */
-#define LOGVAL_ERRITEM(CTX, ERRITEM) ly_vlog(CTX, ERRITEM->apptag, ERRITEM->vecode, "%s", ERRITEM->msg)
#define LOGMEM_RET(CTX) LOGMEM(CTX); return LY_EMEM
#define LOGINT_RET(CTX) LOGINT(CTX); return LY_EINT
diff --git a/src/json.c b/src/json.c
index 53f41dcb7..dd37ad6ec 100644
--- a/src/json.c
+++ b/src/json.c
@@ -133,7 +133,7 @@ lyjson_string(struct lyjson_ctx *jsonctx)
size_t len; /* length of the output string (write offset in output buffer) */
size_t size = 0; /* size of the output buffer */
size_t u;
- uint64_t start_line;
+ uint64_t start_line, orig_line;
uint32_t value;
uint8_t i;
@@ -283,7 +283,10 @@ lyjson_string(struct lyjson_ctx *jsonctx)
/* EOF reached before endchar */
LOGVAL(jsonctx->ctx, LY_VCODE_EOF);
- LOGVAL_LINE(jsonctx->ctx, start_line, LYVE_SYNTAX, "Missing quotation-mark at the end of a JSON string.");
+ orig_line = jsonctx->in->line;
+ jsonctx->in->line = start_line;
+ LOGVAL(jsonctx->ctx, LYVE_SYNTAX, "Missing quotation-mark at the end of a JSON string.");
+ jsonctx->in->line = orig_line;
error:
free(buf);
@@ -716,7 +719,8 @@ lyjson_ctx_new(const struct ly_ctx *ctx, struct ly_in *in, struct lyjson_ctx **j
jsonctx->ctx = ctx;
jsonctx->in = in;
- LOG_LOCSET(NULL, NULL, NULL, in);
+ /* input line logging */
+ ly_log_location(NULL, NULL, NULL, in);
/* WS are always expected to be skipped */
lyjson_skip_ws(jsonctx);
@@ -1077,7 +1081,7 @@ lyjson_ctx_free(struct lyjson_ctx *jsonctx)
return;
}
- LOG_LOCBACK(0, 0, 0, 1);
+ ly_log_location_revert(0, 0, 0, 1);
if (jsonctx->dynamic) {
free((char *)jsonctx->value);
diff --git a/src/log.c b/src/log.c
index f66873ddf..4b4c5cfae 100644
--- a/src/log.c
+++ b/src/log.c
@@ -40,7 +40,6 @@ ATOMIC_T ly_ll = (uint_fast32_t)LY_LLWRN;
ATOMIC_T ly_log_opts = (uint_fast32_t)(LY_LOLOG | LY_LOSTORE_LAST);
THREAD_LOCAL uint32_t *temp_ly_log_opts;
static ly_log_clb log_clb;
-static ATOMIC_T path_flag = 1;
THREAD_LOCAL char last_msg[LY_LAST_MSG_SIZE];
#ifndef NDEBUG
ATOMIC_T ly_ldbg_groups = 0;
@@ -48,21 +47,8 @@ ATOMIC_T ly_ldbg_groups = 0;
THREAD_LOCAL struct ly_log_location_s log_location = {0};
-LIBYANG_API_DEF LY_ERR
-ly_errcode(const struct ly_ctx *ctx)
-{
- struct ly_err_item *i;
-
- i = ly_err_last(ctx);
- if (i) {
- return i->no;
- }
-
- return LY_SUCCESS;
-}
-
LIBYANG_API_DEF const char *
-ly_strerrcode(LY_ERR err)
+ly_strerr(LY_ERR err)
{
/* ignore plugin flag */
err &= ~LY_EPLUGIN;
@@ -102,19 +88,6 @@ ly_strerrcode(LY_ERR err)
return "Unknown";
}
-LIBYANG_API_DEF LY_VECODE
-ly_vecode(const struct ly_ctx *ctx)
-{
- struct ly_err_item *i;
-
- i = ly_err_last(ctx);
- if (i) {
- return i->vecode;
- }
-
- return LYVE_SUCCESS;
-}
-
LIBYANG_API_DEF const char *
ly_strvecode(LY_VECODE vecode)
{
@@ -148,58 +121,14 @@ ly_strvecode(LY_VECODE vecode)
}
LIBYANG_API_DEF const char *
-ly_errmsg(const struct ly_ctx *ctx)
-{
- struct ly_err_item *i;
-
- LY_CHECK_ARG_RET(NULL, ctx, NULL);
-
- i = ly_err_last(ctx);
- if (i) {
- return i->msg;
- }
-
- return NULL;
-}
-
-LIBYANG_API_DEF const char *
-ly_last_errmsg(void)
+ly_last_logmsg(void)
{
return last_msg;
}
-LIBYANG_API_DEF const char *
-ly_errpath(const struct ly_ctx *ctx)
-{
- struct ly_err_item *i;
-
- LY_CHECK_ARG_RET(NULL, ctx, NULL);
-
- i = ly_err_last(ctx);
- if (i) {
- return i->path;
- }
-
- return NULL;
-}
-
-LIBYANG_API_DEF const char *
-ly_errapptag(const struct ly_ctx *ctx)
-{
- struct ly_err_item *i;
-
- LY_CHECK_ARG_RET(NULL, ctx, NULL);
-
- i = ly_err_last(ctx);
- if (i) {
- return i->apptag;
- }
-
- return NULL;
-}
-
LIBYANG_API_DEF LY_ERR
-ly_err_new(struct ly_err_item **err, LY_ERR ecode, LY_VECODE vecode, char *path, char *apptag, const char *err_format, ...)
+ly_err_new(struct ly_err_item **err, LY_ERR ecode, LY_VECODE vecode, char *data_path, char *apptag,
+ const char *err_format, ...)
{
char *msg = NULL;
struct ly_err_item *e;
@@ -209,19 +138,19 @@ ly_err_new(struct ly_err_item **err, LY_ERR ecode, LY_VECODE vecode, char *path,
return ecode;
}
- e = malloc(sizeof *e);
+ e = calloc(1, sizeof *e);
LY_CHECK_ERR_RET(!e, LOGMEM(NULL), LY_EMEM);
+
e->prev = (*err) ? (*err)->prev : e;
- e->next = NULL;
if (*err) {
(*err)->prev->next = e;
}
/* fill in the information */
e->level = LY_LLERR;
- e->no = ecode;
+ e->err = ecode;
e->vecode = vecode;
- e->path = path;
+ e->data_path = data_path;
e->apptag = apptag;
if (err_format) {
@@ -243,7 +172,7 @@ ly_err_new(struct ly_err_item **err, LY_ERR ecode, LY_VECODE vecode, char *path,
*err = e;
}
- return e->no;
+ return e->err;
}
/**
@@ -296,7 +225,7 @@ ly_err_new_rec(const struct ly_ctx *ctx)
return r ? NULL : rec;
}
-LIBYANG_API_DEF struct ly_err_item *
+LIBYANG_API_DEF const struct ly_err_item *
ly_err_first(const struct ly_ctx *ctx)
{
struct ly_ctx_err_rec *rec;
@@ -309,7 +238,7 @@ ly_err_first(const struct ly_ctx *ctx)
return rec ? rec->err : NULL;
}
-LIBYANG_API_DEF struct ly_err_item *
+LIBYANG_API_DEF const struct ly_err_item *
ly_err_last(const struct ly_ctx *ctx)
{
struct ly_ctx_err_rec *rec;
@@ -357,7 +286,8 @@ ly_err_free(void *ptr)
/* clean the error list */
LY_LIST_FOR_SAFE(ptr, next, e) {
free(e->msg);
- free(e->path);
+ free(e->data_path);
+ free(e->schema_path);
free(e->apptag);
free(e);
}
@@ -434,10 +364,9 @@ ly_log_dbg_groups(uint32_t dbg_groups)
}
LIBYANG_API_DEF void
-ly_set_log_clb(ly_log_clb clb, ly_bool path)
+ly_set_log_clb(ly_log_clb clb)
{
log_clb = clb;
- ATOMIC_STORE_RELAXED(path_flag, path);
}
LIBYANG_API_DEF ly_log_clb
@@ -447,31 +376,27 @@ ly_get_log_clb(void)
}
void
-ly_log_location(const struct lysc_node *scnode, const struct lyd_node *dnode, const char *path, const struct ly_in *in,
- uint64_t line)
+ly_log_location(const struct lysc_node *scnode, const struct lyd_node *dnode, const char *spath, const struct ly_in *in)
{
if (scnode) {
ly_set_add(&log_location.scnodes, (void *)scnode, 1, NULL);
}
- if (dnode) {
+ if (dnode || (!scnode && !spath && !in)) {
ly_set_add(&log_location.dnodes, (void *)dnode, 1, NULL);
}
- if (path) {
- char *s = strdup(path);
+ if (spath) {
+ char *s = strdup(spath);
LY_CHECK_ERR_RET(!s, LOGMEM(NULL), );
- ly_set_add(&log_location.paths, s, 1, NULL);
+ ly_set_add(&log_location.spaths, s, 1, NULL);
}
if (in) {
ly_set_add(&log_location.inputs, (void *)in, 1, NULL);
}
- if (line) {
- log_location.line = line;
- }
}
void
-ly_log_location_revert(uint32_t scnode_steps, uint32_t dnode_steps, uint32_t path_steps, uint32_t in_steps)
+ly_log_location_revert(uint32_t scnode_steps, uint32_t dnode_steps, uint32_t spath_steps, uint32_t in_steps)
{
for (uint32_t i = scnode_steps; i && log_location.scnodes.count; i--) {
log_location.scnodes.count--;
@@ -481,8 +406,8 @@ ly_log_location_revert(uint32_t scnode_steps, uint32_t dnode_steps, uint32_t pat
log_location.dnodes.count--;
}
- for (uint32_t i = path_steps; i && log_location.paths.count; i--) {
- ly_set_rm_index(&log_location.paths, log_location.paths.count - 1, free);
+ for (uint32_t i = spath_steps; i && log_location.spaths.count; i--) {
+ ly_set_rm_index(&log_location.spaths, log_location.spaths.count - 1, free);
}
for (uint32_t i = in_steps; i && log_location.inputs.count; i--) {
@@ -496,8 +421,8 @@ ly_log_location_revert(uint32_t scnode_steps, uint32_t dnode_steps, uint32_t pat
if (dnode_steps && !log_location.dnodes.count) {
ly_set_erase(&log_location.dnodes, NULL);
}
- if (path_steps && !log_location.paths.count) {
- ly_set_erase(&log_location.paths, free);
+ if (spath_steps && !log_location.spaths.count) {
+ ly_set_erase(&log_location.spaths, free);
}
if (in_steps && !log_location.inputs.count) {
ly_set_erase(&log_location.inputs, NULL);
@@ -525,15 +450,18 @@ ly_log_location_dnode_count(void)
*
* @param[in] ctx Context to use.
* @param[in] level Message log level.
- * @param[in] no Error number.
+ * @param[in] err Error number.
* @param[in] vecode Error validation error code.
* @param[in] msg Error message, always spent.
- * @param[in] path Error path, always spent.
+ * @param[in] data_path Error data path, always spent.
+ * @param[in] schema_path Error schema path, always spent.
+ * @param[in] line Error input line, if any.
* @param[in] apptag Error app tag, always spent.
* @return LY_ERR value.
*/
static LY_ERR
-log_store(const struct ly_ctx *ctx, LY_LOG_LEVEL level, LY_ERR no, LY_VECODE vecode, char *msg, char *path, char *apptag)
+log_store(const struct ly_ctx *ctx, LY_LOG_LEVEL level, LY_ERR err, LY_VECODE vecode, char *msg, char *data_path,
+ char *schema_path, uint64_t line, char *apptag)
{
struct ly_ctx_err_rec *rec;
struct ly_err_item *e, *last;
@@ -550,7 +478,7 @@ log_store(const struct ly_ctx *ctx, LY_LOG_LEVEL level, LY_ERR no, LY_VECODE vec
if (!e) {
/* if we are only to fill in path, there must have been an error stored */
assert(msg);
- e = malloc(sizeof *e);
+ e = calloc(1, sizeof *e);
LY_CHECK_GOTO(!e, mem_fail);
e->prev = e;
e->next = NULL;
@@ -558,15 +486,20 @@ log_store(const struct ly_ctx *ctx, LY_LOG_LEVEL level, LY_ERR no, LY_VECODE vec
rec->err = e;
} else if (!msg) {
/* only filling the path */
- assert(path);
+ assert(data_path || schema_path);
/* find last error */
e = e->prev;
do {
if (e->level == LY_LLERR) {
/* fill the path */
- free(e->path);
- e->path = path;
+ if (data_path) {
+ free(e->data_path);
+ e->data_path = data_path;
+ } else {
+ free(e->schema_path);
+ e->schema_path = schema_path;
+ }
return LY_SUCCESS;
}
e = e->prev;
@@ -577,12 +510,13 @@ log_store(const struct ly_ctx *ctx, LY_LOG_LEVEL level, LY_ERR no, LY_VECODE vec
(!temp_ly_log_opts && ((ATOMIC_LOAD_RELAXED(ly_log_opts) & LY_LOSTORE_LAST) == LY_LOSTORE_LAST))) {
/* overwrite last message */
free(e->msg);
- free(e->path);
+ free(e->data_path);
+ free(e->schema_path);
free(e->apptag);
} else {
/* store new message */
last = e->prev;
- e->prev = malloc(sizeof *e);
+ e->prev = calloc(1, sizeof *e);
LY_CHECK_GOTO(!e->prev, mem_fail);
e = e->prev;
e->prev = last;
@@ -592,27 +526,75 @@ log_store(const struct ly_ctx *ctx, LY_LOG_LEVEL level, LY_ERR no, LY_VECODE vec
/* fill in the information */
e->level = level;
- e->no = no;
+ e->err = err;
e->vecode = vecode;
e->msg = msg;
- e->path = path;
+ e->data_path = data_path;
+ e->schema_path = schema_path;
+ e->line = line;
e->apptag = apptag;
return LY_SUCCESS;
mem_fail:
LOGMEM(NULL);
free(msg);
- free(path);
+ free(data_path);
+ free(schema_path);
free(apptag);
return LY_EMEM;
}
+/**
+ * @brief Log data path/schema path/line to stderr after the message has been printed.
+ *
+ * @param[in] data_path Error data path.
+ * @param[in] schema_path Error schema path.
+ * @param[in] line Error input line.
+ */
+static void
+log_stderr_path_line(const char *data_path, const char *schema_path, uint64_t line)
+{
+ ly_bool par = 0;
+
+ if (data_path) {
+ fprintf(stderr, "%sdata path: %s", " (", data_path);
+ par = 1;
+ }
+
+ if (schema_path) {
+ fprintf(stderr, "%sschemadata path: %s", par ? ", " : " (", schema_path);
+ par = 1;
+ }
+
+ if (line) {
+ fprintf(stderr, "%sline: %" PRIu64, par ? ", " : " (", line);
+ par = 1;
+ }
+
+ fprintf(stderr, par ? ")\n" : "\n");
+}
+
+/**
+ * @brief Log a message.
+ *
+ * @param[in] ctx Context to use.
+ * @param[in] level Message log level.
+ * @param[in] err Error number.
+ * @param[in] vecode Error validation error code.
+ * @param[in] data_path Error data path, always spent.
+ * @param[in] schema_path Error schema path, always spent.
+ * @param[in] line Error input line, if any.
+ * @param[in] apptag Error app tag.
+ * @param[in] format Error message format.
+ * @param[in] args Error message format arguments.
+ */
static void
-log_vprintf(const struct ly_ctx *ctx, LY_LOG_LEVEL level, LY_ERR no, LY_VECODE vecode, char *path, const char *apptag,
- const char *format, va_list args)
+log_vprintf(const struct ly_ctx *ctx, LY_LOG_LEVEL level, LY_ERR err, LY_VECODE vecode, char *data_path,
+ char *schema_path, uint64_t line, const char *apptag, const char *format, va_list args)
{
char *msg = NULL;
- ly_bool free_strs, lolog, lostore;
+ ly_bool free_strs = 1, lolog, lostore;
+ const struct ly_err_item *e;
/* learn effective logger options */
if (temp_ly_log_opts) {
@@ -625,34 +607,27 @@ log_vprintf(const struct ly_ctx *ctx, LY_LOG_LEVEL level, LY_ERR no, LY_VECODE v
if (level > ATOMIC_LOAD_RELAXED(ly_ll)) {
/* do not print or store the message */
- free(path);
- return;
+ goto cleanup;
}
- if (no == LY_EMEM) {
+ if (err == LY_EMEM) {
/* just print it, anything else would most likely fail anyway */
if (lolog) {
if (log_clb) {
- log_clb(level, LY_EMEM_MSG, path);
+ log_clb(level, LY_EMEM_MSG, data_path, schema_path, line);
} else {
fprintf(stderr, "libyang[%d]: ", level);
vfprintf(stderr, format, args);
- if (path) {
- fprintf(stderr, " (path: %s)\n", path);
- } else {
- fprintf(stderr, "\n");
- }
+ log_stderr_path_line(data_path, schema_path, line);
}
}
- free(path);
- return;
+ goto cleanup;
}
/* print into a single message */
if (vasprintf(&msg, format, args) == -1) {
LOGMEM(ctx);
- free(path);
- return;
+ goto cleanup;
}
/* store as the last message */
@@ -661,32 +636,32 @@ log_vprintf(const struct ly_ctx *ctx, LY_LOG_LEVEL level, LY_ERR no, LY_VECODE v
/* store the error/warning in the context (if we need to store errors internally, it does not matter what are
* the user log options) */
if ((level < LY_LLVRB) && ctx && lostore) {
- if (((no & ~LY_EPLUGIN) == LY_EVALID) && (vecode == LYVE_SUCCESS)) {
+ if (((err & ~LY_EPLUGIN) == LY_EVALID) && (vecode == LYVE_SUCCESS)) {
/* assume we are inheriting the error, so inherit vecode as well */
- vecode = ly_vecode(ctx);
+ e = ly_err_last(ctx);
+ vecode = e->vecode;
}
- if (log_store(ctx, level, no, vecode, msg, path, apptag ? strdup(apptag) : NULL)) {
- return;
+ if (log_store(ctx, level, err, vecode, msg, data_path, schema_path, line, apptag ? strdup(apptag) : NULL)) {
+ goto cleanup;
}
free_strs = 0;
- } else {
- free_strs = 1;
}
/* if we are only storing errors internally, never print the message (yet) */
if (lolog) {
if (log_clb) {
- log_clb(level, msg, path);
+ log_clb(level, msg, data_path, schema_path, line);
} else {
- fprintf(stderr, "libyang[%d]: %s%s", level, msg, path ? " " : "\n");
- if (path) {
- fprintf(stderr, "(path: %s)\n", path);
- }
+ fprintf(stderr, "libyang[%d]: ", level);
+ fprintf(stderr, "%s", msg);
+ log_stderr_path_line(data_path, schema_path, line);
}
}
+cleanup:
if (free_strs) {
- free(path);
+ free(data_path);
+ free(schema_path);
free(msg);
}
}
@@ -725,7 +700,7 @@ ly_log_dbg(uint32_t group, const char *format, ...)
}
va_start(ap, format);
- log_vprintf(NULL, LY_LLDBG, 0, 0, NULL, NULL, dbg_format, ap);
+ log_vprintf(NULL, LY_LLDBG, 0, 0, NULL, NULL, 0, NULL, dbg_format, ap);
va_end(ap);
free(dbg_format);
@@ -734,12 +709,12 @@ ly_log_dbg(uint32_t group, const char *format, ...)
#endif
void
-ly_log(const struct ly_ctx *ctx, LY_LOG_LEVEL level, LY_ERR no, const char *format, ...)
+ly_log(const struct ly_ctx *ctx, LY_LOG_LEVEL level, LY_ERR err, const char *format, ...)
{
va_list ap;
va_start(ap, format);
- log_vprintf(ctx, level, no, 0, NULL, NULL, format, ap);
+ log_vprintf(ctx, level, err, 0, NULL, NULL, 0, NULL, format, ap);
va_end(ap);
}
@@ -795,6 +770,14 @@ ly_vlog_build_data_path(const struct ly_ctx *ctx, char **path)
if (log_location.dnodes.count) {
dnode = log_location.dnodes.objs[log_location.dnodes.count - 1];
+ if (!dnode) {
+ /* special root node */
+ assert(log_location.dnodes.count == 1);
+ *path = strdup("/");
+ LY_CHECK_ERR_GOTO(!*path, LOGMEM(ctx); rc = LY_EMEM, cleanup);
+ goto cleanup;
+ }
+
if (dnode->parent || !lysc_data_parent(dnode->schema)) {
/* data node with all of its parents */
*path = lyd_path(log_location.dnodes.objs[log_location.dnodes.count - 1], LYD_PATH_STD, NULL, 0);
@@ -821,62 +804,38 @@ ly_vlog_build_data_path(const struct ly_ctx *ctx, char **path)
}
/**
- * @brief Build log path from the stored log location information.
+ * @brief Build log path/input line from the stored log location information.
*
* @param[in] ctx Context to use.
- * @param[out] path Generated log path.
+ * @param[out] data_path Generated data path.
+ * @param[out] schema_path Generated data path.
+ * @param[out] line Input line.
* @return LY_ERR value.
*/
static LY_ERR
-ly_vlog_build_path(const struct ly_ctx *ctx, char **path)
+ly_vlog_build_path_line(const struct ly_ctx *ctx, char **data_path, char **schema_path, uint64_t *line)
{
- int r;
- char *str = NULL, *prev = NULL;
+ *data_path = NULL;
+ *schema_path = NULL;
+ *line = 0;
- *path = NULL;
-
- if (log_location.paths.count && ((const char *)(log_location.paths.objs[log_location.paths.count - 1]))[0]) {
+ if (log_location.spaths.count && ((const char *)(log_location.spaths.objs[log_location.spaths.count - 1]))[0]) {
/* simply get what is in the provided path string */
- r = asprintf(path, "Path \"%s\"", (const char *)log_location.paths.objs[log_location.paths.count - 1]);
- LY_CHECK_ERR_RET(r == -1, LOGMEM(ctx), LY_EMEM);
+ *schema_path = strdup(log_location.spaths.objs[log_location.spaths.count - 1]);
+ LY_CHECK_ERR_RET(!*schema_path, LOGMEM(ctx), LY_EMEM);
} else {
/* data/schema node */
if (log_location.dnodes.count) {
- LY_CHECK_RET(ly_vlog_build_data_path(ctx, &str));
-
- r = asprintf(path, "Data location \"%s\"", str);
- free(str);
- LY_CHECK_ERR_RET(r == -1, LOGMEM(ctx), LY_EMEM);
+ LY_CHECK_RET(ly_vlog_build_data_path(ctx, data_path));
} else if (log_location.scnodes.count) {
- str = lysc_path(log_location.scnodes.objs[log_location.scnodes.count - 1], LYSC_PATH_LOG, NULL, 0);
- LY_CHECK_ERR_RET(!str, LOGMEM(ctx), LY_EMEM);
-
- r = asprintf(path, "Schema location \"%s\"", str);
- free(str);
- LY_CHECK_ERR_RET(r == -1, LOGMEM(ctx), LY_EMEM);
+ *schema_path = lysc_path(log_location.scnodes.objs[log_location.scnodes.count - 1], LYSC_PATH_LOG, NULL, 0);
+ LY_CHECK_ERR_RET(!*schema_path, LOGMEM(ctx), LY_EMEM);
}
}
/* line */
- prev = *path;
- if (log_location.line) {
- r = asprintf(path, "%s%sine number %" PRIu64, prev ? prev : "", prev ? ", l" : "L", log_location.line);
- free(prev);
- LY_CHECK_ERR_RET(r == -1, LOGMEM(ctx), LY_EMEM);
-
- log_location.line = 0;
- } else if (log_location.inputs.count) {
- r = asprintf(path, "%s%sine number %" PRIu64, prev ? prev : "", prev ? ", l" : "L",
- ((struct ly_in *)log_location.inputs.objs[log_location.inputs.count - 1])->line);
- free(prev);
- LY_CHECK_ERR_RET(r == -1, LOGMEM(ctx), LY_EMEM);
- }
-
- if (*path) {
- prev = *path;
- r = asprintf(path, "%s.", prev);
- free(prev);
- LY_CHECK_ERR_RET(r == -1, LOGMEM(ctx), LY_EMEM);
+ if (log_location.inputs.count) {
+ *line = ((struct ly_in *)log_location.inputs.objs[log_location.inputs.count - 1])->line;
}
return LY_SUCCESS;
@@ -886,14 +845,15 @@ void
ly_vlog(const struct ly_ctx *ctx, const char *apptag, LY_VECODE code, const char *format, ...)
{
va_list ap;
- char *path = NULL;
+ char *data_path = NULL, *schema_path = NULL;
+ uint64_t line = 0;
- if (ATOMIC_LOAD_RELAXED(path_flag) && ctx) {
- ly_vlog_build_path(ctx, &path);
+ if (ctx) {
+ ly_vlog_build_path_line(ctx, &data_path, &schema_path, &line);
}
va_start(ap, format);
- log_vprintf(ctx, LY_LLERR, LY_EVALID, code, path, apptag, format, ap);
+ log_vprintf(ctx, LY_LLERR, LY_EVALID, code, data_path, schema_path, line, apptag, format, ap);
/* path is spent and should not be freed! */
va_end(ap);
}
@@ -904,14 +864,16 @@ ly_vlog(const struct ly_ctx *ctx, const char *apptag, LY_VECODE code, const char
* @param[in] ctx libyang context to store the error record. If not provided, the error is just printed.
* @param[in] plugin_name Name of the plugin generating the message.
* @param[in] level Log message level (error, warning, etc.)
- * @param[in] err_no Error type code.
- * @param[in] path Optional path of the error, used if set.
+ * @param[in] err Error type code.
+ * @param[in] data_path Error data path, always spent.
+ * @param[in] schema_path Error schema path, always spent.
+ * @param[in] line Error input line, if any.
* @param[in] format Format string to print.
* @param[in] ap Var arg list for @p format.
*/
static void
-ly_ext_log(const struct ly_ctx *ctx, const char *plugin_name, LY_LOG_LEVEL level, LY_ERR err_no, char *path,
- const char *format, va_list ap)
+ly_ext_log(const struct ly_ctx *ctx, const char *plugin_name, LY_LOG_LEVEL level, LY_ERR err, char *data_path,
+ char *schema_path, uint64_t line, const char *format, va_list ap)
{
char *plugin_msg;
@@ -923,57 +885,57 @@ ly_ext_log(const struct ly_ctx *ctx, const char *plugin_name, LY_LOG_LEVEL level
return;
}
- log_vprintf(ctx, level, (level == LY_LLERR ? LY_EPLUGIN : 0) | err_no, LYVE_OTHER, path, NULL, plugin_msg, ap);
+ log_vprintf(ctx, level, (level == LY_LLERR ? LY_EPLUGIN : 0) | err, LYVE_OTHER, data_path, schema_path, line, NULL,
+ plugin_msg, ap);
free(plugin_msg);
}
LIBYANG_API_DEF void
-lyplg_ext_parse_log(const struct lysp_ctx *pctx, const struct lysp_ext_instance *ext, LY_LOG_LEVEL level, LY_ERR err_no,
+lyplg_ext_parse_log(const struct lysp_ctx *pctx, const struct lysp_ext_instance *ext, LY_LOG_LEVEL level, LY_ERR err,
const char *format, ...)
{
va_list ap;
- char *path = NULL;
+ char *data_path, *schema_path;
+ uint64_t line;
- if (ATOMIC_LOAD_RELAXED(path_flag)) {
- ly_vlog_build_path(PARSER_CTX(pctx), &path);
- }
+ ly_vlog_build_path_line(PARSER_CTX(pctx), &data_path, &schema_path, &line);
va_start(ap, format);
- ly_ext_log(PARSER_CTX(pctx), ext->record->plugin.id, level, err_no, path, format, ap);
+ ly_ext_log(PARSER_CTX(pctx), ext->record->plugin.id, level, err, data_path, schema_path, line, format, ap);
va_end(ap);
}
LIBYANG_API_DEF void
-lyplg_ext_compile_log(const struct lysc_ctx *cctx, const struct lysc_ext_instance *ext, LY_LOG_LEVEL level, LY_ERR err_no,
+lyplg_ext_compile_log(const struct lysc_ctx *cctx, const struct lysc_ext_instance *ext, LY_LOG_LEVEL level, LY_ERR err,
const char *format, ...)
{
va_list ap;
- char *path = NULL;
+ char *schema_path = NULL;
- if (cctx && (asprintf(&path, "Path \"%s\".", cctx->path) == -1)) {
+ if (cctx && !(schema_path = strdup(cctx->path))) {
LOGMEM(cctx->ctx);
return;
}
va_start(ap, format);
- ly_ext_log(ext->module->ctx, ext->def->plugin->id, level, err_no, path, format, ap);
+ ly_ext_log(ext->module->ctx, ext->def->plugin->id, level, err, NULL, schema_path, 0, format, ap);
va_end(ap);
}
LIBYANG_API_DEF void
-lyplg_ext_compile_log_path(const char *path, const struct lysc_ext_instance *ext, LY_LOG_LEVEL level, LY_ERR err_no,
+lyplg_ext_compile_log_path(const char *path, const struct lysc_ext_instance *ext, LY_LOG_LEVEL level, LY_ERR err,
const char *format, ...)
{
va_list ap;
- char *log_path = NULL;
+ char *schema_path = NULL;
- if (path && (asprintf(&log_path, "Path \"%s\".", path) == -1)) {
+ if (path && !(schema_path = strdup(path))) {
LOGMEM(ext->module->ctx);
return;
}
va_start(ap, format);
- ly_ext_log(ext->module->ctx, ext->def->plugin->id, level, err_no, log_path, format, ap);
+ ly_ext_log(ext->module->ctx, ext->def->plugin->id, level, err, NULL, schema_path, 0, format, ap);
va_end(ap);
}
@@ -981,45 +943,54 @@ lyplg_ext_compile_log_path(const char *path, const struct lysc_ext_instance *ext
* @brief Serves only for creating ap.
*/
static void
-_lyplg_ext_compile_log_err(const struct ly_err_item *err, const struct lysc_ext_instance *ext, ...)
+_lyplg_ext_compile_log_err(const struct ly_err_item *eitem, const struct lysc_ext_instance *ext, ...)
{
va_list ap;
+ char *data_path = NULL, *schema_path = NULL;
+
+ if (eitem->data_path) {
+ data_path = strdup(eitem->data_path);
+ }
+ if (eitem->schema_path) {
+ schema_path = strdup(eitem->schema_path);
+ }
va_start(ap, ext);
- ly_ext_log(ext->module->ctx, ext->def->plugin->id, err->level, err->no, err->path ? strdup(err->path) : NULL, "%s", ap);
+ ly_ext_log(ext->module->ctx, ext->def->plugin->id, eitem->level, eitem->err, data_path, schema_path, eitem->line, "%s", ap);
va_end(ap);
}
LIBYANG_API_DEF void
-lyplg_ext_compile_log_err(const struct ly_err_item *err, const struct lysc_ext_instance *ext)
+lyplg_ext_compile_log_err(const struct ly_err_item *eitem, const struct lysc_ext_instance *ext)
{
- _lyplg_ext_compile_log_err(err, ext, err->msg);
+ _lyplg_ext_compile_log_err(eitem, ext, eitem->msg);
}
/**
* @brief Exact same functionality as ::ly_err_print() but has variable arguments so log_vprintf() can be called.
*/
static void
-_ly_err_print(const struct ly_ctx *ctx, struct ly_err_item *eitem, const char *format, ...)
+_ly_err_print(const struct ly_ctx *ctx, const struct ly_err_item *eitem, const char *format, ...)
{
va_list ap;
- char *path_dup = NULL;
+ char *data_path = NULL, *schema_path = NULL;
LY_CHECK_ARG_RET(ctx, eitem, );
- if (eitem->path) {
- /* duplicate path because it will be freed */
- path_dup = strdup(eitem->path);
- LY_CHECK_ERR_RET(!path_dup, LOGMEM(ctx), );
+ if (eitem->data_path) {
+ data_path = strdup(eitem->data_path);
+ }
+ if (eitem->schema_path) {
+ schema_path = strdup(eitem->schema_path);
}
va_start(ap, format);
- log_vprintf(ctx, eitem->level, eitem->no, eitem->vecode, path_dup, eitem->apptag, format, ap);
+ log_vprintf(ctx, eitem->level, eitem->err, eitem->vecode, data_path, schema_path, eitem->line, eitem->apptag, format, ap);
va_end(ap);
}
LIBYANG_API_DEF void
-ly_err_print(const struct ly_ctx *ctx, struct ly_err_item *eitem)
+ly_err_print(const struct ly_ctx *ctx, const struct ly_err_item *eitem)
{
/* String ::ly_err_item.msg cannot be used directly because it may contain the % character */
_ly_err_print(ctx, eitem, "%s", eitem->msg);
diff --git a/src/log.h b/src/log.h
index ba579e0eb..350a83f1c 100644
--- a/src/log.h
+++ b/src/log.h
@@ -181,24 +181,23 @@ LIBYANG_API_DECL uint32_t ly_log_dbg_groups(uint32_t dbg_groups);
*
* @param[in] level Log level of the message.
* @param[in] msg Message.
- * @param[in] path Optional path of the concerned node.
+ * @param[in] data_path Optional data path of the related node.
+ * @param[in] schema_path Optional schema path of the related node.
+ * @param[in] line Optional related input line.
*/
-typedef void (*ly_log_clb)(LY_LOG_LEVEL level, const char *msg, const char *path);
+typedef void (*ly_log_clb)(LY_LOG_LEVEL level, const char *msg, const char *data_path, const char *schema_path,
+ uint64_t line);
/**
* @brief Set logger callback.
*
* @param[in] clb Logging callback.
- * @param[in] path flag to resolve and provide path as the third parameter of the callback function. In case of
- * validation and some other errors, it can be useful to get the path to the problematic element. Note,
- * that according to the tree type and the specific situation, the path can slightly differs (keys
- * presence) or it can be NULL, so consider it as an optional parameter. If the flag is 0, libyang will
- * not bother with resolving the path.
*/
-LIBYANG_API_DECL void ly_set_log_clb(ly_log_clb clb, ly_bool path);
+LIBYANG_API_DECL void ly_set_log_clb(ly_log_clb clb);
/**
* @brief Get logger callback.
+ *
* @return Logger callback (can be NULL).
*/
LIBYANG_API_DECL ly_log_clb ly_get_log_clb(void);
@@ -293,40 +292,24 @@ typedef enum {
*/
struct ly_err_item {
LY_LOG_LEVEL level; /**< error (message) log level */
- LY_ERR no; /**< error code */
+ LY_ERR err; /**< error code number */
LY_VECODE vecode; /**< validation error code, if any */
char *msg; /**< error message */
- char *path; /**< error path that caused the error, if any */
+ char *data_path; /**< error data path related to the error, if any */
+ char *schema_path; /**< error schema path related to the error, if any */
+ uint64_t line; /**< input line the error occured on, if available */
char *apptag; /**< error-app-tag, if any */
struct ly_err_item *next; /**< next error item */
struct ly_err_item *prev; /**< previous error item, points to the last item for the ifrst item */
};
-/**
- * @brief Get the last (thread, context-specific) error code.
- *
- * @param[in] ctx Relative context.
- * @return LY_ERR value of the last error code.
- */
-LIBYANG_API_DECL LY_ERR ly_errcode(const struct ly_ctx *ctx);
-
/**
* @brief Get human-readable error message for an error code.
*
* @param[in] err Error code.
* @return String error message.
*/
-LIBYANG_API_DECL const char *ly_strerrcode(LY_ERR err);
-
-/**
- * @brief Get the last (thread, context-specific) validation error code.
- *
- * This value is set only if ly_errno is #LY_EVALID.
- *
- * @param[in] ctx Relative context.
- * @return Validation error code.
- */
-LIBYANG_API_DECL LY_VECODE ly_vecode(const struct ly_ctx *ctx);
+LIBYANG_API_DECL const char *ly_strerr(LY_ERR err);
/**
* @brief Get human-readable error message for a validation error code.
@@ -337,69 +320,30 @@ LIBYANG_API_DECL LY_VECODE ly_vecode(const struct ly_ctx *ctx);
LIBYANG_API_DECL const char *ly_strvecode(LY_VECODE vecode);
/**
- * @brief Get the last (thread, context-specific) error message. If the coresponding module defined
- * a specific error message, it will be used instead the default one.
- *
- * Sometimes, the error message is extended with path of the element where the problem is.
- * The path is available via ::ly_errpath().
- *
- * @param[in] ctx Relative context.
- * @return Text of the last error message, empty string if there is no error.
- */
-LIBYANG_API_DECL const char *ly_errmsg(const struct ly_ctx *ctx);
-
-/**
- * @brief Get the last (thread-specific) error message.
+ * @brief Get the last (thread-specific) full logged error message.
*
- * ::ly_errmsg() should be used instead of this function but this one is useful for getting
- * errors from functions that do not have any context accessible. Or as a simple unified logging API.
+ * This function is useful for getting errors from functions that do not have any context accessible and includes
+ * any additional information such as the path or line where the error occurred.
*
* @return Last generated error message.
*/
-LIBYANG_API_DECL const char *ly_last_errmsg(void);
-
-/**
- * @brief Get the last (thread, context-specific) path of the element where was an error.
- *
- * The path always corresponds to the error message available via ::ly_errmsg(), so
- * whenever a subsequent error message is printed, the path is erased or rewritten.
- * The path reflects the type of the processed tree - data path for data tree functions
- * and schema path in case of schema tree functions. In case of processing YIN schema
- * or XML data, the path can be just XML path. In such a case, the corresponding
- * ly_vecode (value 1-3) is set.
- *
- * @param[in] ctx Relative context.
- * @return Path of the error element, empty string if error path does not apply to the last error.
- */
-LIBYANG_API_DECL const char *ly_errpath(const struct ly_ctx *ctx);
-
-/**
- * @brief Get the last (thread, context-specific) error-app-tag if there was a specific one defined
- * in the module for the last error.
- *
- * The app-tag always corresponds to the error message available via ::ly_errmsg(), so
- * whenever a subsequent error message is printed, the app-tag is erased or rewritten.
- *
- * @param[in] ctx Relative context.
- * @return Error-app-tag of the last error, empty string if the error-app-tag does not apply to the last error.
- */
-LIBYANG_API_DECL const char *ly_errapptag(const struct ly_ctx *ctx);
+LIBYANG_API_DECL const char *ly_last_logmsg(void);
/**
* @brief Get the first (thread, context-specific) generated error structure.
*
* @param[in] ctx Relative context.
- * @return The first error structure (can be NULL), do not modify!
+ * @return First error structure, NULL if none available.
*/
-LIBYANG_API_DECL struct ly_err_item *ly_err_first(const struct ly_ctx *ctx);
+LIBYANG_API_DECL const struct ly_err_item *ly_err_first(const struct ly_ctx *ctx);
/**
* @brief Get the latest (thread, context-specific) generated error structure.
*
* @param[in] ctx Relative context.
- * @return The last error structure (can be NULL), do not modify!
+ * @return Last error structure, NULL if none available.
*/
-LIBYANG_API_DECL struct ly_err_item *ly_err_last(const struct ly_ctx *ctx);
+LIBYANG_API_DECL const struct ly_err_item *ly_err_last(const struct ly_ctx *ctx);
/**
* @brief Print the error structure as if just generated.
@@ -407,12 +351,12 @@ LIBYANG_API_DECL struct ly_err_item *ly_err_last(const struct ly_ctx *ctx);
* @param[in] ctx Optional context to store the message in.
* @param[in] eitem Error item structure to print.
*/
-LIBYANG_API_DECL void ly_err_print(const struct ly_ctx *ctx, struct ly_err_item *eitem);
+LIBYANG_API_DECL void ly_err_print(const struct ly_ctx *ctx, const struct ly_err_item *eitem);
/**
* @brief Free error structures from a context.
*
- * If \p eitem is not set, free all the error structures.
+ * If @p eitem is not set, free all the error structures.
*
* @param[in] ctx Relative context.
* @param[in] eitem Oldest error structure to remove, optional.
diff --git a/src/parser_common.c b/src/parser_common.c
index 32152759e..4cd76c719 100644
--- a/src/parser_common.c
+++ b/src/parser_common.c
@@ -102,7 +102,7 @@ lyd_parser_notif_eventtime_validate(const struct lyd_node *node)
cleanup:
FREE_ARRAY(&cctx.free_ctx, patterns, lysc_pattern_free);
if (rc && err) {
- LOGVAL_ERRITEM(ctx, err);
+ ly_err_print(ctx, err);
ly_err_free(err);
LOGVAL(ctx, LYVE_DATA, "Invalid \"eventTime\" in the notification.");
}
@@ -219,7 +219,7 @@ lyd_parser_check_schema(struct lyd_ctx *lydctx, const struct lysc_node *snode)
{
LY_ERR rc = LY_SUCCESS;
- LOG_LOCSET(snode, NULL, NULL, NULL);
+ LOG_LOCSET(snode, NULL);
if (lydctx->int_opts & LYD_INTOPT_ANY) {
/* nothing to check, everything is allowed */
@@ -274,7 +274,7 @@ lyd_parser_check_schema(struct lyd_ctx *lydctx, const struct lysc_node *snode)
rc = LY_EVALID;
cleanup:
- LOG_LOCBACK(1, 0, 0, 0);
+ LOG_LOCBACK(1, 0);
return rc;
}
@@ -321,7 +321,7 @@ lyd_parser_create_meta(struct lyd_ctx *lydctx, struct lyd_node *parent, struct l
rc = LY_EMEM;
goto cleanup;
}
- LOG_LOCSET(NULL, NULL, path, NULL);
+ ly_log_location(NULL, NULL, path, NULL);
LY_CHECK_GOTO(rc = lyd_create_meta(parent, meta, mod, name, name_len, value, value_len, 1, dynamic, format,
prefix_data, hints, ctx_node, 0, &incomplete), cleanup);
@@ -336,7 +336,7 @@ lyd_parser_create_meta(struct lyd_ctx *lydctx, struct lyd_node *parent, struct l
}
cleanup:
- LOG_LOCBACK(0, 0, 1, 0);
+ ly_log_location_revert(0, 0, 1, 0);
free(dpath);
free(path);
return rc;
diff --git a/src/parser_internal.h b/src/parser_internal.h
index 92412e295..0c026a072 100644
--- a/src/parser_internal.h
+++ b/src/parser_internal.h
@@ -38,8 +38,9 @@ struct lysp_ctx;
#define LY_DPARSER_ERR_GOTO(r, err_cmd, lydctx, label) \
if (r) { \
err_cmd; \
+ const struct ly_err_item *__eitem = ly_err_last(((struct lyd_ctx *)lydctx)->data_ctx->ctx); \
if ((r != LY_EVALID) || !lydctx || !(lydctx->val_opts & LYD_VALIDATE_MULTI_ERROR) || \
- (ly_vecode(((struct lyd_ctx *)lydctx)->data_ctx->ctx) == LYVE_SYNTAX)) { \
+ (__eitem->vecode == LYVE_SYNTAX)) { \
goto label; \
} \
}
diff --git a/src/parser_json.c b/src/parser_json.c
index 3655d4c3a..255075fcf 100644
--- a/src/parser_json.c
+++ b/src/parser_json.c
@@ -580,7 +580,7 @@ lydjson_metadata_finish(struct lyd_json_ctx *lydctx, struct lyd_node **first_p)
continue;
}
- LOG_LOCSET(NULL, attr, NULL, NULL);
+ LOG_LOCSET(NULL, attr);
log_location_items++;
if (prev != meta_container->name.name) {
@@ -696,14 +696,14 @@ lydjson_metadata_finish(struct lyd_json_ctx *lydctx, struct lyd_node **first_p)
lyd_free_tree(attr);
}
- LOG_LOCBACK(0, log_location_items, 0, 0);
+ LOG_LOCBACK(0, log_location_items);
log_location_items = 0;
}
cleanup:
lydict_remove(lydctx->jsonctx->ctx, prev);
- LOG_LOCBACK(0, log_location_items, 0, 0);
+ LOG_LOCBACK(0, log_location_items);
return ret;
}
@@ -738,7 +738,9 @@ lydjson_metadata(struct lyd_json_ctx *lydctx, const struct lysc_node *snode, str
assert(snode || node);
nodetype = snode ? snode->nodetype : LYS_CONTAINER;
- LOG_LOCSET(snode, NULL, NULL, NULL);
+ if (snode) {
+ LOG_LOCSET(snode, NULL);
+ }
/* move to the second item in the name/X pair */
LY_CHECK_GOTO(rc = lyjson_ctx_next(lydctx->jsonctx, &status), cleanup);
@@ -904,7 +906,7 @@ lydjson_metadata(struct lyd_json_ctx *lydctx, const struct lysc_node *snode, str
}
}
free(dynamic_prefname);
- LOG_LOCBACK(1, 0, 0, 0);
+ LOG_LOCBACK(snode ? 1 : 0, 0);
return rc;
}
@@ -1029,7 +1031,7 @@ lydjson_parse_opaq(struct lyd_json_ctx *lydctx, const char *name, size_t name_le
LY_CHECK_GOTO(ret = lydjson_create_opaq(lydctx, name, name_len, prefix, prefix_len, parent, status_inner_p, node_p), cleanup);
assert(*node_p);
- LOG_LOCSET(NULL, *node_p, NULL, NULL);
+ LOG_LOCSET(NULL, *node_p);
if ((*status_p == LYJSON_ARRAY) && (*status_inner_p == LYJSON_NULL)) {
/* special array null value */
@@ -1073,12 +1075,12 @@ lydjson_parse_opaq(struct lyd_json_ctx *lydctx, const char *name, size_t name_le
assert(*node_p);
lydjson_maintain_children(parent, first_p, node_p, lydctx->parse_opts & LYD_PARSE_ORDERED ? 1 : 0, NULL);
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
LY_CHECK_GOTO(ret = lydjson_create_opaq(lydctx, name, name_len, prefix, prefix_len, parent, status_inner_p, node_p), cleanup);
assert(*node_p);
- LOG_LOCSET(NULL, *node_p, NULL, NULL);
+ LOG_LOCSET(NULL, *node_p);
}
if (*status_p == LYJSON_OBJECT) {
@@ -1095,7 +1097,7 @@ lydjson_parse_opaq(struct lyd_json_ctx *lydctx, const char *name, size_t name_le
cleanup:
if (*node_p) {
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
}
return ret;
}
@@ -1288,7 +1290,7 @@ lydjson_parse_any(struct lyd_json_ctx *lydctx, const struct lysc_node *snode, st
LY_CHECK_ERR_GOTO(r, rc = r, cleanup);
assert(*node);
- LOG_LOCSET(NULL, *node, NULL, NULL);
+ LOG_LOCSET(NULL, *node);
log_node = 1;
/* parse any data tree with correct options, first backup the current options and then make the parser
@@ -1374,7 +1376,7 @@ lydjson_parse_any(struct lyd_json_ctx *lydctx, const struct lysc_node *snode, st
cleanup:
if (log_node) {
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
}
lydctx->parse_opts = prev_parse_opts;
lydctx->int_opts = prev_int_opts;
@@ -1409,7 +1411,7 @@ lydjson_parse_instance_inner(struct lyd_json_ctx *lydctx, const struct lysc_node
LY_CHECK_RET(lyd_create_inner(snode, node));
/* use it for logging */
- LOG_LOCSET(NULL, *node, NULL, NULL);
+ LOG_LOCSET(NULL, *node);
if (ext) {
/* only parse these extension data and validate afterwards */
@@ -1447,7 +1449,7 @@ lydjson_parse_instance_inner(struct lyd_json_ctx *lydctx, const struct lysc_node
cleanup:
lydctx->parse_opts = prev_parse_opts;
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
if (!(*node)->hash) {
/* list without keys is unusable */
lyd_free_tree(*node);
@@ -1483,7 +1485,7 @@ lydjson_parse_instance(struct lyd_json_ctx *lydctx, struct lyd_node *parent, str
LY_ERR r, rc = LY_SUCCESS;
uint32_t type_hints = 0;
- LOG_LOCSET(snode, NULL, NULL, NULL);
+ LOG_LOCSET(snode, NULL);
r = lydjson_data_check_opaq(lydctx, snode, &type_hints);
if (r == LY_SUCCESS) {
@@ -1548,7 +1550,7 @@ lydjson_parse_instance(struct lyd_json_ctx *lydctx, struct lyd_node *parent, str
}
cleanup:
- LOG_LOCBACK(1, 0, 0, 0);
+ LOG_LOCBACK(1, 0);
return rc;
}
diff --git a/src/parser_lyb.c b/src/parser_lyb.c
index 788be9499..03442de6f 100644
--- a/src/parser_lyb.c
+++ b/src/parser_lyb.c
@@ -1172,7 +1172,7 @@ lyb_parse_node_opaq(struct lyd_lyb_ctx *lybctx, struct lyd_node *parent, struct
LY_CHECK_GOTO(ret, cleanup);
assert(node);
- LOG_LOCSET(NULL, node, NULL, NULL);
+ LOG_LOCSET(NULL, node);
/* process children */
ret = lyb_parse_siblings(lybctx, node, NULL, NULL);
@@ -1181,11 +1181,11 @@ lyb_parse_node_opaq(struct lyd_lyb_ctx *lybctx, struct lyd_node *parent, struct
/* register parsed opaq node */
lyb_finish_opaq(lybctx, parent, flags, &attr, &node, first_p, parsed);
assert(!attr && !node);
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
cleanup:
if (node) {
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
}
free(prefix);
free(module_key);
@@ -1273,12 +1273,12 @@ lyb_parse_node_any(struct lyd_lyb_ctx *lybctx, struct lyd_node *parent, const st
}
assert(node);
- LOG_LOCSET(NULL, node, NULL, NULL);
+ LOG_LOCSET(NULL, node);
/* register parsed anydata node */
lyb_finish_node(lybctx, parent, flags, &meta, &node, first_p, parsed);
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
return LY_SUCCESS;
error:
@@ -1316,7 +1316,7 @@ lyb_parse_node_inner(struct lyd_lyb_ctx *lybctx, struct lyd_node *parent, const
LY_CHECK_GOTO(ret, error);
assert(node);
- LOG_LOCSET(NULL, node, NULL, NULL);
+ LOG_LOCSET(NULL, node);
/* process children */
ret = lyb_parse_siblings(lybctx, node, NULL, NULL);
@@ -1334,12 +1334,12 @@ lyb_parse_node_inner(struct lyd_lyb_ctx *lybctx, struct lyd_node *parent, const
/* register parsed node */
lyb_finish_node(lybctx, parent, flags, &meta, &node, first_p, parsed);
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
return LY_SUCCESS;
error:
if (node) {
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
}
lyd_free_meta_siblings(meta);
lyd_free_tree(node);
@@ -1374,11 +1374,11 @@ lyb_parse_node_leaf(struct lyd_lyb_ctx *lybctx, struct lyd_node *parent, const s
LY_CHECK_GOTO(ret, error);
assert(node);
- LOG_LOCSET(NULL, node, NULL, NULL);
+ LOG_LOCSET(NULL, node);
lyb_finish_node(lybctx, parent, flags, &meta, &node, first_p, parsed);
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
return LY_SUCCESS;
error:
@@ -1454,7 +1454,7 @@ lyb_parse_node_list(struct lyd_lyb_ctx *lybctx, struct lyd_node *parent, const s
LY_CHECK_GOTO(ret, error);
assert(node);
- LOG_LOCSET(NULL, node, NULL, NULL);
+ LOG_LOCSET(NULL, node);
log_node = 1;
/* process children */
@@ -1473,7 +1473,7 @@ lyb_parse_node_list(struct lyd_lyb_ctx *lybctx, struct lyd_node *parent, const s
/* register parsed list node */
lyb_finish_node(lybctx, parent, flags, &meta, &node, first_p, parsed);
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
log_node = 0;
}
@@ -1485,7 +1485,7 @@ lyb_parse_node_list(struct lyd_lyb_ctx *lybctx, struct lyd_node *parent, const s
error:
if (log_node) {
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
}
lyd_free_meta_siblings(meta);
lyd_free_tree(node);
diff --git a/src/parser_xml.c b/src/parser_xml.c
index 5d97c8e49..caceb879f 100644
--- a/src/parser_xml.c
+++ b/src/parser_xml.c
@@ -75,7 +75,7 @@ lydxml_metadata(struct lyd_xml_ctx *lydctx, const struct lysc_node *sparent, str
*meta = NULL;
- LOG_LOCSET(sparent, NULL, NULL, NULL);
+ LOG_LOCSET(sparent, NULL);
/* check for NETCONF filter unqualified attributes */
if (!strcmp(sparent->module->name, "notifications")) {
@@ -165,7 +165,7 @@ lydxml_metadata(struct lyd_xml_ctx *lydctx, const struct lysc_node *sparent, str
}
cleanup:
- LOG_LOCBACK(1, 0, 0, 0);
+ LOG_LOCBACK(1, 0);
if (ret) {
lyd_free_meta_siblings(*meta);
*meta = NULL;
@@ -672,7 +672,7 @@ lydxml_subtree_opaq(struct lyd_xml_ctx *lydctx, const struct lyd_node *sibling,
LY_CHECK_GOTO(rc, cleanup);
assert(*node);
- LOG_LOCSET(NULL, *node, NULL, NULL);
+ LOG_LOCSET(NULL, *node);
/* parser next */
rc = lyxml_ctx_next(xmlctx);
@@ -709,7 +709,7 @@ lydxml_subtree_opaq(struct lyd_xml_ctx *lydctx, const struct lyd_node *sibling,
cleanup:
if (*node) {
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
}
ly_free_prefix_data(format, val_prefix_data);
if (dynamic) {
@@ -747,7 +747,7 @@ lydxml_subtree_term(struct lyd_xml_ctx *lydctx, struct lyd_node *parent, const s
LY_DPARSER_ERR_GOTO(r, rc = r, lydctx, cleanup);
if (*node) {
- LOG_LOCSET(NULL, *node, NULL, NULL);
+ LOG_LOCSET(NULL, *node);
}
if (*node && parent && (snode->flags & LYS_KEY)) {
@@ -778,7 +778,7 @@ lydxml_subtree_term(struct lyd_xml_ctx *lydctx, struct lyd_node *parent, const s
cleanup:
if (*node) {
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
}
if (rc && (!(lydctx->val_opts & LYD_VALIDATE_MULTI_ERROR) || (rc != LY_EVALID))) {
lyd_free_tree(*node);
@@ -819,7 +819,7 @@ lydxml_subtree_inner(struct lyd_xml_ctx *lydctx, const struct lysc_node *snode,
LY_CHECK_GOTO(rc, cleanup);
assert(*node);
- LOG_LOCSET(NULL, *node, NULL, NULL);
+ LOG_LOCSET(NULL, *node);
/* parser next */
rc = lyxml_ctx_next(xmlctx);
@@ -863,7 +863,7 @@ lydxml_subtree_inner(struct lyd_xml_ctx *lydctx, const struct lysc_node *snode,
cleanup:
if (*node) {
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
}
lydctx->parse_opts = prev_parse_opts;
if (rc && ((*node && !(*node)->hash) || !(lydctx->val_opts & LYD_VALIDATE_MULTI_ERROR) || (rc != LY_EVALID))) {
@@ -923,7 +923,7 @@ lydxml_subtree_any(struct lyd_xml_ctx *lydctx, const struct lysc_node *snode, co
LY_CHECK_ERR_GOTO(r, rc = r, cleanup);
assert(*node);
- LOG_LOCSET(NULL, *node, NULL, NULL);
+ LOG_LOCSET(NULL, *node);
log_node = 1;
/* parser next */
@@ -948,7 +948,7 @@ lydxml_subtree_any(struct lyd_xml_ctx *lydctx, const struct lysc_node *snode, co
cleanup:
if (log_node) {
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
}
lydctx->parse_opts = prev_parse_opts;
lydctx->int_opts = prev_int_opts;
diff --git a/src/parser_yang.c b/src/parser_yang.c
index 28bd57bb2..d183a5877 100644
--- a/src/parser_yang.c
+++ b/src/parser_yang.c
@@ -4717,7 +4717,7 @@ yang_parse_submodule(struct lysp_yang_ctx **context, struct ly_ctx *ly_ctx, stru
(*context)->parsed_mods = main_ctx->parsed_mods;
ly_set_add((*context)->parsed_mods, mod_p, 1, NULL);
- LOG_LOCSET(NULL, NULL, NULL, in);
+ ly_log_location(NULL, NULL, NULL, in);
/* skip redundant but valid characters at the beginning */
ret = skip_redundant_chars(*context);
@@ -4754,7 +4754,7 @@ yang_parse_submodule(struct lysp_yang_ctx **context, struct ly_ctx *ly_ctx, stru
*submod = mod_p;
cleanup:
- LOG_LOCBACK(0, 0, 0, 1);
+ ly_log_location_revert(0, 0, 0, 1);
if (ret) {
lysp_module_free(&fctx, (struct lysp_module *)mod_p);
lysp_yang_ctx_free(*context);
@@ -4787,7 +4787,7 @@ yang_parse_module(struct lysp_yang_ctx **context, struct ly_in *in, struct lys_m
mod_p->mod = mod;
ly_set_add((*context)->parsed_mods, mod_p, 1, NULL);
- LOG_LOCSET(NULL, NULL, NULL, in);
+ ly_log_location(NULL, NULL, NULL, in);
/* skip redundant but valid characters at the beginning */
ret = skip_redundant_chars(*context);
@@ -4823,7 +4823,7 @@ yang_parse_module(struct lysp_yang_ctx **context, struct ly_in *in, struct lys_m
mod->parsed = mod_p;
cleanup:
- LOG_LOCBACK(0, 0, 0, 1);
+ ly_log_location_revert(0, 0, 0, 1);
if (ret) {
lysp_module_free(&fctx, mod_p);
lysp_yang_ctx_free(*context);
diff --git a/src/parser_yin.c b/src/parser_yin.c
index 36b49f11f..b34e5db0b 100644
--- a/src/parser_yin.c
+++ b/src/parser_yin.c
@@ -3937,7 +3937,7 @@ yin_parse_submodule(struct lysp_yin_ctx **yin_ctx, struct ly_ctx *ctx, struct ly
*submod = mod_p;
cleanup:
- LOG_LOCBACK(0, 0, 0, 1);
+ ly_log_location_revert(0, 0, 0, 1);
if (ret) {
lysp_module_free(&fctx, (struct lysp_module *)mod_p);
lysp_yin_ctx_free(*yin_ctx);
@@ -4001,7 +4001,7 @@ yin_parse_module(struct lysp_yin_ctx **yin_ctx, struct ly_in *in, struct lys_mod
mod->parsed = mod_p;
cleanup:
- LOG_LOCBACK(0, 0, 0, 1);
+ ly_log_location_revert(0, 0, 0, 1);
if (ret) {
lysp_module_free(&fctx, mod_p);
lysp_yin_ctx_free(*yin_ctx);
diff --git a/src/path.c b/src/path.c
index 73883d754..4300389d4 100644
--- a/src/path.c
+++ b/src/path.c
@@ -56,7 +56,9 @@ ly_path_check_predicate(const struct ly_ctx *ctx, const struct lysc_node *cur_no
const char *name;
size_t name_len;
- LOG_LOCSET(cur_node, NULL, NULL, NULL);
+ if (cur_node) {
+ LOG_LOCSET(cur_node, NULL);
+ }
if (!lyxp_next_token(NULL, exp, tok_idx, LYXP_TOKEN_BRACK1)) {
/* '[' */
@@ -254,12 +256,12 @@ ly_path_check_predicate(const struct ly_ctx *ctx, const struct lysc_node *cur_no
}
cleanup:
- LOG_LOCBACK(cur_node ? 1 : 0, 0, 0, 0);
+ LOG_LOCBACK(cur_node ? 1 : 0, 0);
ly_set_free(set, NULL);
return ret;
token_error:
- LOG_LOCBACK(cur_node ? 1 : 0, 0, 0, 0);
+ LOG_LOCBACK(cur_node ? 1 : 0, 0);
ly_set_free(set, NULL);
return LY_EVALID;
}
@@ -333,7 +335,9 @@ ly_path_parse(const struct ly_ctx *ctx, const struct lysc_node *ctx_node, const
(prefix == LY_PATH_PREFIX_FIRST) || (prefix == LY_PATH_PREFIX_STRICT_INHERIT));
assert((pred == LY_PATH_PRED_KEYS) || (pred == LY_PATH_PRED_SIMPLE) || (pred == LY_PATH_PRED_LEAFREF));
- LOG_LOCSET(ctx_node, NULL, NULL, NULL);
+ if (ctx_node) {
+ LOG_LOCSET(ctx_node, NULL);
+ }
/* parse as a generic XPath expression, reparse is performed manually */
LY_CHECK_GOTO(ret = lyxp_expr_parse(ctx, str_path, path_len, 0, &exp), error);
@@ -438,12 +442,12 @@ ly_path_parse(const struct ly_ctx *ctx, const struct lysc_node *ctx_node, const
*expr = exp;
- LOG_LOCBACK(ctx_node ? 1 : 0, 0, 0, 0);
+ LOG_LOCBACK(ctx_node ? 1 : 0, 0);
return LY_SUCCESS;
error:
lyxp_expr_free(ctx, exp);
- LOG_LOCBACK(ctx_node ? 1 : 0, 0, 0, 0);
+ LOG_LOCBACK(ctx_node ? 1 : 0, 0);
return ret;
}
@@ -458,7 +462,9 @@ ly_path_parse_predicate(const struct ly_ctx *ctx, const struct lysc_node *cur_no
assert((prefix == LY_PATH_PREFIX_OPTIONAL) || (prefix == LY_PATH_PREFIX_MANDATORY));
assert((pred == LY_PATH_PRED_KEYS) || (pred == LY_PATH_PRED_SIMPLE) || (pred == LY_PATH_PRED_LEAFREF));
- LOG_LOCSET(cur_node, NULL, NULL, NULL);
+ if (cur_node) {
+ LOG_LOCSET(cur_node, NULL);
+ }
/* parse as a generic XPath expression, reparse is performed manually */
LY_CHECK_GOTO(ret = lyxp_expr_parse(ctx, str_path, path_len, 0, &exp), error);
@@ -480,12 +486,12 @@ ly_path_parse_predicate(const struct ly_ctx *ctx, const struct lysc_node *cur_no
*expr = exp;
- LOG_LOCBACK(cur_node ? 1 : 0, 0, 0, 0);
+ LOG_LOCBACK(cur_node ? 1 : 0, 0);
return LY_SUCCESS;
error:
lyxp_expr_free(ctx, exp);
- LOG_LOCBACK(cur_node ? 1 : 0, 0, 0, 0);
+ LOG_LOCBACK(cur_node ? 1 : 0, 0);
return ret;
}
@@ -545,7 +551,9 @@ ly_path_compile_snode(const struct ly_ctx *ctx, const struct lysc_node *cur_node
/* find node module */
if (pref) {
- LOG_LOCSET(cur_node, NULL, NULL, NULL);
+ if (cur_node) {
+ LOG_LOCSET(cur_node, NULL);
+ }
mod = ly_resolve_prefix(prev_ctx_node ? prev_ctx_node->module->ctx : ctx, pref, len, format, prefix_data);
if ((!mod || !mod->implemented) && prev_ctx_node) {
@@ -569,7 +577,7 @@ ly_path_compile_snode(const struct ly_ctx *ctx, const struct lysc_node *cur_node
goto error;
}
- LOG_LOCBACK(cur_node ? 1 : 0, 0, 0, 0);
+ LOG_LOCBACK(cur_node ? 1 : 0, 0);
} else {
switch (format) {
case LY_VALUE_SCHEMA:
@@ -618,7 +626,7 @@ ly_path_compile_snode(const struct ly_ctx *ctx, const struct lysc_node *cur_node
return LY_SUCCESS;
error:
- LOG_LOCBACK(cur_node ? 1 : 0, 0, 0, 0);
+ LOG_LOCBACK(cur_node ? 1 : 0, 0);
return ret;
}
@@ -635,7 +643,9 @@ ly_path_compile_predicate(const struct ly_ctx *ctx, const struct lysc_node *cur_
assert(ctx && ctx_node);
- LOG_LOCSET(cur_node, NULL, NULL, NULL);
+ if (cur_node) {
+ LOG_LOCSET(cur_node, NULL);
+ }
*predicates = NULL;
@@ -697,10 +707,12 @@ ly_path_compile_predicate(const struct ly_ctx *ctx, const struct lysc_node *cur_
}
/* store the value */
- LOG_LOCSET(key, NULL, NULL, NULL);
+ if (key) {
+ LOG_LOCSET(key, NULL);
+ }
ret = lyd_value_store(ctx, &p->value, ((struct lysc_node_leaf *)key)->type, val, val_len, 0, NULL,
format, prefix_data, LYD_HINT_DATA, key, NULL);
- LOG_LOCBACK(key ? 1 : 0, 0, 0, 0);
+ LOG_LOCBACK(key ? 1 : 0, 0);
LY_CHECK_ERR_GOTO(ret, p->value.realtype = NULL, cleanup);
/* "allocate" the type to avoid problems when freeing the value after the type was freed */
@@ -761,10 +773,12 @@ ly_path_compile_predicate(const struct ly_ctx *ctx, const struct lysc_node *cur_
}
/* store the value */
- LOG_LOCSET(ctx_node, NULL, NULL, NULL);
+ if (ctx_node) {
+ LOG_LOCSET(ctx_node, NULL);
+ }
ret = lyd_value_store(ctx, &p->value, ((struct lysc_node_leaflist *)ctx_node)->type, val, val_len, 0, NULL,
format, prefix_data, LYD_HINT_DATA, ctx_node, NULL);
- LOG_LOCBACK(ctx_node ? 1 : 0, 0, 0, 0);
+ LOG_LOCBACK(ctx_node ? 1 : 0, 0);
LY_CHECK_ERR_GOTO(ret, p->value.realtype = NULL, cleanup);
++(*tok_idx);
@@ -802,7 +816,7 @@ ly_path_compile_predicate(const struct ly_ctx *ctx, const struct lysc_node *cur_
}
cleanup:
- LOG_LOCBACK(cur_node ? 1 : 0, 0, 0, 0);
+ LOG_LOCBACK(cur_node ? 1 : 0, 0);
return ret;
}
@@ -1170,7 +1184,9 @@ _ly_path_compile(const struct ly_ctx *ctx, const struct lys_module *cur_mod, con
/* remember original context node */
cur_node = ctx_node;
- LOG_LOCSET(cur_node, NULL, NULL, NULL);
+ if (cur_node) {
+ LOG_LOCSET(cur_node, NULL);
+ }
if (oper == LY_PATH_OPER_OUTPUT) {
getnext_opts = LYS_GETNEXT_OUTPUT;
@@ -1272,7 +1288,7 @@ _ly_path_compile(const struct ly_ctx *ctx, const struct lys_module *cur_mod, con
ly_path_free(ctx, *path);
*path = NULL;
}
- LOG_LOCBACK(1, 0, 0, 0);
+ LOG_LOCBACK(cur_node ? 1 : 0, 0);
return (ret == LY_ENOTFOUND) ? LY_EVALID : ret;
}
diff --git a/src/plugins_exts.h b/src/plugins_exts.h
index a2783ffe4..78c6e6fea 100644
--- a/src/plugins_exts.h
+++ b/src/plugins_exts.h
@@ -488,12 +488,12 @@ typedef LY_ERR (*lyplg_ext_parse_clb)(struct lysp_ctx *pctx, struct lysp_ext_ins
* @param[in] pctx Parse context to use.
* @param[in] ext Parsed extensiopn instance.
* @param[in] level Log message level (error, warning, etc.)
- * @param[in] err_no Error type code.
+ * @param[in] err Error type code.
* @param[in] format Format string to print.
* @param[in] ... Format variable parameters.
*/
LIBYANG_API_DECL void lyplg_ext_parse_log(const struct lysp_ctx *pctx, const struct lysp_ext_instance *ext,
- LY_LOG_LEVEL level, LY_ERR err_no, const char *format, ...);
+ LY_LOG_LEVEL level, LY_ERR err, const char *format, ...);
/**
* @brief Get current parsed module from a parse context.
@@ -579,27 +579,27 @@ typedef LY_ERR (*lyplg_ext_compile_clb)(struct lysc_ctx *cctx, const struct lysp
* @param[in] format Format string to print.
*/
LIBYANG_API_DECL void lyplg_ext_compile_log(const struct lysc_ctx *cctx, const struct lysc_ext_instance *ext,
- LY_LOG_LEVEL level, LY_ERR err_no, const char *format, ...);
+ LY_LOG_LEVEL level, LY_ERR err, const char *format, ...);
/**
* @brief Log a message from an extension plugin using the compiled extension instance with an explicit error path.
*
- * @param[in] path Log error path to use.
+ * @param[in] path Log error schema path to use.
* @param[in] ext Compiled extension instance.
* @param[in] level Log message level (error, warning, etc.)
* @param[in] err_no Error type code.
* @param[in] format Format string to print.
*/
LIBYANG_API_DECL void lyplg_ext_compile_log_path(const char *path, const struct lysc_ext_instance *ext,
- LY_LOG_LEVEL level, LY_ERR err_no, const char *format, ...);
+ LY_LOG_LEVEL level, LY_ERR err, const char *format, ...);
/**
* @brief Log a message from an extension plugin using the compiled extension instance and a generated error item.
*
- * @param[in] err Error item to log.
+ * @param[in] eitem Error item to log.
* @param[in] ext Compiled extension instance.
*/
-LIBYANG_API_DEF void lyplg_ext_compile_log_err(const struct ly_err_item *err, const struct lysc_ext_instance *ext);
+LIBYANG_API_DEF void lyplg_ext_compile_log_err(const struct ly_err_item *eitem, const struct lysc_ext_instance *ext);
/**
* @brief YANG schema compilation context getter for libyang context.
diff --git a/src/plugins_exts/schema_mount.c b/src/plugins_exts/schema_mount.c
index 7793e8f95..4ac779695 100644
--- a/src/plugins_exts/schema_mount.c
+++ b/src/plugins_exts/schema_mount.c
@@ -904,7 +904,7 @@ schema_mount_validate(struct lysc_ext_instance *ext, struct lyd_node *sibling, c
{
LY_ERR ret = LY_SUCCESS;
uint32_t *prev_lo, temp_lo = LY_LOSTORE_LAST, i;
- struct ly_err_item *err;
+ const struct ly_err_item *err;
struct lyd_node *iter, *ext_data = NULL, *ref_first = NULL, *orig_parent = lyd_parent(sibling), *op_tree;
struct lyd_node *ext_diff = NULL, *diff_parent = NULL;
ly_bool ext_data_free = 0;
diff --git a/src/plugins_types.c b/src/plugins_types.c
index 6fd4228e0..5632380ca 100644
--- a/src/plugins_types.c
+++ b/src/plugins_types.c
@@ -826,7 +826,7 @@ lyplg_type_lypath_new(const struct ly_ctx *ctx, const char *value, size_t value_
}
/* remember the current last error */
- e = ly_err_last(ctx);
+ e = (struct ly_err_item *)ly_err_last(ctx);
/* parse the value */
ret = ly_path_parse(ctx, ctx_node, value, value_len, 0, LY_PATH_BEGIN_ABSOLUTE, prefix_opt, LY_PATH_PRED_SIMPLE, &exp);
@@ -856,7 +856,7 @@ lyplg_type_lypath_new(const struct ly_ctx *ctx, const char *value, size_t value_
lyxp_expr_free(ctx, exp);
if (ret) {
/* generate error, spend the context error, if any */
- e = e ? e->next : ly_err_last(ctx);
+ e = e ? e->next : (struct ly_err_item *)ly_err_last(ctx);
ret = ly_err_new(err, LY_EVALID, LYVE_DATA, NULL, NULL, err_fmt, (int)value_len, value, e ? ": " : ".", e ? e->msg : "");
if (e) {
ly_err_clean((struct ly_ctx *)ctx, e);
@@ -992,6 +992,7 @@ lyplg_type_resolve_leafref(const struct lysc_type_leafref *lref, const struct ly
{
LY_ERR rc = LY_SUCCESS;
struct lyxp_expr *target_path = NULL;
+ const struct ly_err_item *e;
struct lyxp_set set = {0};
const char *val_str, *xp_err_msg;
uint32_t i;
@@ -1023,8 +1024,9 @@ lyplg_type_resolve_leafref(const struct lysc_type_leafref *lref, const struct ly
rc = lyxp_eval(LYD_CTX(node), target_path ? target_path : lref->path, node->schema->module,
LY_VALUE_SCHEMA_RESOLVED, lref->prefixes, node, node, tree, NULL, &set, LYXP_IGNORE_WHEN);
if (rc) {
- if (ly_errcode(LYD_CTX(node)) == rc) {
- xp_err_msg = ly_errmsg(LYD_CTX(node));
+ e = ly_err_last(LYD_CTX(node));
+ if (e && (e->err == rc)) {
+ xp_err_msg = e->msg;
} else {
xp_err_msg = NULL;
}
diff --git a/src/plugins_types.h b/src/plugins_types.h
index e3b954597..a603d4c56 100644
--- a/src/plugins_types.h
+++ b/src/plugins_types.h
@@ -211,11 +211,11 @@ struct lysc_type_leafref;
*
* Helper function for various plugin functions to generate error information structure.
*
- * @param[in, out] err Pointer to store a new error structure filled according to the input parameters. If the storage
+ * @param[in,out] err Pointer to store a new error structure filled according to the input parameters. If the storage
* already contains error information, the new record is appended into the errors list.
* @param[in] ecode Code of the error to fill. In case LY_SUCCESS value, nothing is done and LY_SUCCESS is returned.
* @param[in] vecode Validity error code in case of LY_EVALID error code.
- * @param[in] path Path to the node causing the error.
+ * @param[in] data_path Path to the data node causing the error.
* @param[in] apptag Error-app-tag value.
* @param[in] err_format Format string (same like at printf) or string literal.
* If you want to print just an unknown string, use "%s" for the @p err_format, otherwise undefined behavior may occur
@@ -225,7 +225,7 @@ struct lysc_type_leafref;
* @return LY_EMEM If there is not enough memory for allocating error record, the @p err is not touched in that case.
* @return LY_SUCCESS if @p ecode is LY_SUCCESS, the @p err is not touched in this case.
*/
-LIBYANG_API_DECL LY_ERR ly_err_new(struct ly_err_item **err, LY_ERR ecode, LY_VECODE vecode, char *path, char *apptag,
+LIBYANG_API_DECL LY_ERR ly_err_new(struct ly_err_item **err, LY_ERR ecode, LY_VECODE vecode, char *data_path, char *apptag,
const char *err_format, ...) _FORMAT_PRINTF(6, 7);
/**
diff --git a/src/plugins_types/date_and_time.c b/src/plugins_types/date_and_time.c
index 594b0a8ee..8768efacc 100644
--- a/src/plugins_types/date_and_time.c
+++ b/src/plugins_types/date_and_time.c
@@ -113,7 +113,7 @@ lyplg_type_store_date_and_time(const struct ly_ctx *ctx, const struct lysc_type
/* convert to UNIX time and fractions of second */
ret = ly_time_str2time(value, &val->time, &val->fractions_s);
if (ret) {
- ret = ly_err_new(err, ret, 0, NULL, NULL, "%s", ly_last_errmsg());
+ ret = ly_err_new(err, ret, 0, NULL, NULL, "%s", ly_last_logmsg());
goto cleanup;
}
diff --git a/src/plugins_types/instanceid_keys.c b/src/plugins_types/instanceid_keys.c
index 13f51c8a7..3610c43e3 100644
--- a/src/plugins_types/instanceid_keys.c
+++ b/src/plugins_types/instanceid_keys.c
@@ -140,6 +140,7 @@ lyplg_type_store_instanceid_keys(const struct ly_ctx *ctx, const struct lysc_typ
struct lysc_type_str *type_str = (struct lysc_type_str *)type;
struct lyd_value_instance_identifier_keys *val;
uint32_t *prev_lo, temp_lo = LY_LOSTORE;
+ const struct ly_err_item *eitem;
char *canon;
/* init storage */
@@ -176,7 +177,8 @@ lyplg_type_store_instanceid_keys(const struct ly_ctx *ctx, const struct lysc_typ
LY_PATH_PRED_KEYS, &val->keys);
ly_temp_log_options(prev_lo);
if (ret) {
- ret = ly_err_new(err, ret, LYVE_DATA, NULL, NULL, "%s", ly_errmsg(ctx));
+ eitem = ly_err_last(ctx);
+ ret = ly_err_new(err, ret, LYVE_DATA, eitem->data_path, NULL, "%s", eitem->msg);
ly_err_clean((struct ly_ctx *)ctx, NULL);
goto cleanup;
}
diff --git a/src/plugins_types/xpath1.0.c b/src/plugins_types/xpath1.0.c
index fdfc2a9c3..bab1104e0 100644
--- a/src/plugins_types/xpath1.0.c
+++ b/src/plugins_types/xpath1.0.c
@@ -387,6 +387,7 @@ lyplg_type_validate_xpath10(const struct ly_ctx *UNUSED(ctx), const struct lysc_
struct ly_set *set = NULL;
uint32_t i;
const char *pref, *uri;
+ const struct ly_err_item *eitem;
*err = NULL;
LYD_VALUE_GET(storage, val);
@@ -430,7 +431,8 @@ lyplg_type_validate_xpath10(const struct ly_ctx *UNUSED(ctx), const struct lysc_
if (ret == LY_EMEM) {
ly_err_new(err, LY_EMEM, LYVE_DATA, NULL, NULL, LY_EMEM_MSG);
} else if (ret) {
- ly_err_new(err, ret, LYVE_DATA, NULL, NULL, "%s", ly_errmsg(LYD_CTX(ctx_node)));
+ eitem = ly_err_last(LYD_CTX(ctx_node));
+ ly_err_new(err, ret, LYVE_DATA, eitem->data_path, NULL, "%s", eitem->msg);
}
return ret;
}
@@ -461,7 +463,7 @@ lyplg_type_print_xpath10(const struct ly_ctx *ctx, const struct lyd_value *value
/* print in the specific format */
if (lyplg_type_print_xpath10_value(val, format, prefix_data, &ret, &err)) {
if (err) {
- LOGVAL_ERRITEM(ctx, err);
+ ly_err_print(ctx, err);
ly_err_free(err);
}
return NULL;
diff --git a/src/schema_compile.c b/src/schema_compile.c
index 2616505af..5a7a75c3d 100644
--- a/src/schema_compile.c
+++ b/src/schema_compile.c
@@ -88,9 +88,11 @@ lysc_update_path(struct lysc_ctx *ctx, const struct lys_module *parent_module, c
if (nextlevel != 2) {
if ((parent_module && (parent_module == ctx->cur_mod)) || (!parent_module && (ctx->path_len > 1) && (name[0] == '{'))) {
/* module not changed, print the name unprefixed */
- len = snprintf(&ctx->path[ctx->path_len], LYSC_CTX_BUFSIZE - ctx->path_len, "%s%s", nextlevel ? "/" : "", name);
+ len = snprintf(&ctx->path[ctx->path_len], LYSC_CTX_BUFSIZE - ctx->path_len, "%s%s",
+ nextlevel ? "/" : "", name);
} else {
- len = snprintf(&ctx->path[ctx->path_len], LYSC_CTX_BUFSIZE - ctx->path_len, "%s%s:%s", nextlevel ? "/" : "", ctx->cur_mod->name, name);
+ len = snprintf(&ctx->path[ctx->path_len], LYSC_CTX_BUFSIZE - ctx->path_len, "%s%s:%s",
+ nextlevel ? "/" : "", ctx->cur_mod->name, name);
}
} else {
len = snprintf(&ctx->path[ctx->path_len], LYSC_CTX_BUFSIZE - ctx->path_len, "='%s'}", name);
@@ -103,8 +105,8 @@ lysc_update_path(struct lysc_ctx *ctx, const struct lys_module *parent_module, c
}
}
- LOG_LOCBACK(0, 0, 1, 0);
- LOG_LOCSET(NULL, NULL, ctx->path, NULL);
+ ly_log_location_revert(0, 0, 1, 0);
+ ly_log_location(NULL, NULL, ctx->path, NULL);
}
/**
@@ -523,7 +525,7 @@ lys_compile_unres_when_cyclic(struct lyxp_set *set, const struct lysc_node *node
do {
struct lysc_when **when_list, *when;
- LOG_LOCSET(node, NULL, NULL, NULL);
+ LOG_LOCSET(node, NULL);
when_list = lysc_node_when(node);
LY_ARRAY_FOR(when_list, u) {
when = when_list[u];
@@ -531,7 +533,7 @@ lys_compile_unres_when_cyclic(struct lyxp_set *set, const struct lysc_node *node
when->context, when->context, &tmp_set, LYXP_SCNODE_SCHEMA);
if (ret != LY_SUCCESS) {
LOGVAL(set->ctx, LYVE_SEMANTICS, "Invalid when condition \"%s\".", when->cond->expr);
- LOG_LOCBACK(1, 0, 0, 0);
+ LOG_LOCBACK(1, 0);
goto cleanup;
}
@@ -548,7 +550,7 @@ lys_compile_unres_when_cyclic(struct lyxp_set *set, const struct lysc_node *node
LOGVAL(set->ctx, LYVE_SEMANTICS, "When condition cyclic dependency on the node \"%s\".",
tmp_set.val.scnodes[j].scnode->name);
ret = LY_EVALID;
- LOG_LOCBACK(1, 0, 0, 0);
+ LOG_LOCBACK(1, 0);
goto cleanup;
}
@@ -565,14 +567,14 @@ lys_compile_unres_when_cyclic(struct lyxp_set *set, const struct lysc_node *node
} else {
/* context node was traversed, so just add the dependent node */
ret = lyxp_set_scnode_insert_node(&tmp_set, node, LYXP_SET_SCNODE_START_USED, LYXP_AXIS_CHILD, NULL);
- LY_CHECK_ERR_GOTO(ret, LOG_LOCBACK(1, 0, 0, 0), cleanup);
+ LY_CHECK_ERR_GOTO(ret, LOG_LOCBACK(1, 0), cleanup);
}
}
/* merge this set into the global when set */
lyxp_set_scnode_merge(set, &tmp_set);
}
- LOG_LOCBACK(1, 0, 0, 0);
+ LOG_LOCBACK(1, 0);
/* check when of non-data parents as well */
node = node->parent;
@@ -706,7 +708,7 @@ lys_compile_unres_must(struct lysc_ctx *ctx, const struct lysc_node *node, const
LY_ERR ret = LY_SUCCESS;
uint16_t flg;
- LOG_LOCSET(node, NULL, NULL, NULL);
+ LOG_LOCSET(node, NULL);
memset(&tmp_set, 0, sizeof tmp_set);
opts = LYXP_SCNODE_SCHEMA | ((node->flags & LYS_IS_OUTPUT) ? LYXP_SCNODE_OUTPUT : 0);
@@ -750,7 +752,7 @@ lys_compile_unres_must(struct lysc_ctx *ctx, const struct lysc_node *node, const
cleanup:
lyxp_set_free_content(&tmp_set);
- LOG_LOCBACK(1, 0, 0, 0);
+ LOG_LOCBACK(1, 0);
return ret;
}
@@ -946,14 +948,14 @@ lys_compile_unres_dflt(struct lysc_ctx *ctx, struct lysc_node *node, struct lysc
}
if (ret) {
- LOG_LOCSET(node, NULL, NULL, NULL);
+ LOG_LOCSET(node, NULL);
if (err) {
LOGVAL(ctx->ctx, LYVE_SEMANTICS, "Invalid default - value does not fit the type (%s).", err->msg);
ly_err_free(err);
} else {
LOGVAL(ctx->ctx, LYVE_SEMANTICS, "Invalid default - value does not fit the type.");
}
- LOG_LOCBACK(1, 0, 0, 0);
+ LOG_LOCBACK(1, 0);
return ret;
}
@@ -1245,12 +1247,12 @@ lys_compile_unres_depset(struct ly_ctx *ctx, struct lys_glob_unres *unres)
l = ds_unres->disabled_leafrefs.objs[i];
LYSC_CTX_INIT_PMOD(cctx, l->node->module->parsed, l->ext);
- LOG_LOCSET(l->node, NULL, NULL, NULL);
+ LOG_LOCSET(l->node, NULL);
v = 0;
while ((ret == LY_SUCCESS) && (lref = lys_type_leafref_next(l->node, &v))) {
ret = lys_compile_unres_leafref(&cctx, l->node, lref, l->local_mod);
}
- LOG_LOCBACK(1, 0, 0, 0);
+ LOG_LOCBACK(1, 0);
LY_CHECK_GOTO(ret, cleanup);
ly_set_rm_index(&ds_unres->disabled_leafrefs, i, free);
@@ -1264,12 +1266,12 @@ lys_compile_unres_depset(struct ly_ctx *ctx, struct lys_glob_unres *unres)
l = ds_unres->leafrefs.objs[i];
LYSC_CTX_INIT_PMOD(cctx, l->node->module->parsed, l->ext);
- LOG_LOCSET(l->node, NULL, NULL, NULL);
+ LOG_LOCSET(l->node, NULL);
v = 0;
while ((ret == LY_SUCCESS) && (lref = lys_type_leafref_next(l->node, &v))) {
ret = lys_compile_unres_leafref(&cctx, l->node, lref, l->local_mod);
}
- LOG_LOCBACK(1, 0, 0, 0);
+ LOG_LOCBACK(1, 0);
LY_CHECK_GOTO(ret, cleanup);
}
for (i = processed_leafrefs; i < ds_unres->leafrefs.count; ++i) {
@@ -1297,9 +1299,11 @@ lys_compile_unres_depset(struct ly_ctx *ctx, struct lys_glob_unres *unres)
w = ds_unres->whens.objs[i];
LYSC_CTX_INIT_PMOD(cctx, w->node->module->parsed, NULL);
- LOG_LOCSET(w->node, NULL, NULL, NULL);
+ if (w->node) {
+ LOG_LOCSET(w->node, NULL);
+ }
ret = lys_compile_unres_when(&cctx, w->when, w->node);
- LOG_LOCBACK(w->node ? 1 : 0, 0, 0, 0);
+ LOG_LOCBACK(w->node ? 1 : 0, 0);
LY_CHECK_GOTO(ret, cleanup);
free(w);
@@ -1312,9 +1316,9 @@ lys_compile_unres_depset(struct ly_ctx *ctx, struct lys_glob_unres *unres)
m = ds_unres->musts.objs[i];
LYSC_CTX_INIT_PMOD(cctx, m->node->module->parsed, m->ext);
- LOG_LOCSET(m->node, NULL, NULL, NULL);
+ LOG_LOCSET(m->node, NULL);
ret = lys_compile_unres_must(&cctx, m->node, m->local_mods);
- LOG_LOCBACK(1, 0, 0, 0);
+ LOG_LOCBACK(1, 0);
LY_CHECK_GOTO(ret, cleanup);
lysc_unres_must_free(m);
@@ -1327,9 +1331,9 @@ lys_compile_unres_depset(struct ly_ctx *ctx, struct lys_glob_unres *unres)
node = ds_unres->disabled_bitenums.objs[i];
LYSC_CTX_INIT_PMOD(cctx, node->module->parsed, NULL);
- LOG_LOCSET(node, NULL, NULL, NULL);
+ LOG_LOCSET(node, NULL);
ret = lys_compile_unres_disabled_bitenum(&cctx, (struct lysc_node_leaf *)node);
- LOG_LOCBACK(1, 0, 0, 0);
+ LOG_LOCBACK(1, 0);
LY_CHECK_GOTO(ret, cleanup);
ly_set_rm_index(&ds_unres->disabled_bitenums, i, NULL);
@@ -1341,13 +1345,13 @@ lys_compile_unres_depset(struct ly_ctx *ctx, struct lys_glob_unres *unres)
d = ds_unres->dflts.objs[i];
LYSC_CTX_INIT_PMOD(cctx, d->leaf->module->parsed, NULL);
- LOG_LOCSET(&d->leaf->node, NULL, NULL, NULL);
+ LOG_LOCSET(&d->leaf->node, NULL);
if (d->leaf->nodetype == LYS_LEAF) {
ret = lys_compile_unres_leaf_dlft(&cctx, d->leaf, d->dflt, unres);
} else {
ret = lys_compile_unres_llist_dflts(&cctx, d->llist, d->dflt, d->dflts, unres);
}
- LOG_LOCBACK(1, 0, 0, 0);
+ LOG_LOCBACK(1, 0);
LY_CHECK_GOTO(ret, cleanup);
lysc_unres_dflt_free(ctx, d);
@@ -1364,9 +1368,9 @@ lys_compile_unres_depset(struct ly_ctx *ctx, struct lys_glob_unres *unres)
for (i = 0; i < ds_unres->disabled.count; ++i) {
node = ds_unres->disabled.snodes[i];
if (node->flags & LYS_KEY) {
- LOG_LOCSET(node, NULL, NULL, NULL);
+ LOG_LOCSET(node, NULL);
LOGVAL(ctx, LYVE_REFERENCE, "Key \"%s\" is disabled.", node->name);
- LOG_LOCBACK(1, 0, 0, 0);
+ LOG_LOCBACK(1, 0);
ret = LY_EVALID;
goto cleanup;
}
@@ -1389,10 +1393,10 @@ lys_compile_unres_depset(struct ly_ctx *ctx, struct lys_glob_unres *unres)
assert(ret != LY_ERECOMPILE);
if (ret) {
- LOG_LOCSET(l->node, NULL, NULL, NULL);
+ LOG_LOCSET(l->node, NULL);
LOGVAL(ctx, LYVE_REFERENCE, "Target of leafref \"%s\" cannot be referenced because it is disabled.",
l->node->name);
- LOG_LOCBACK(1, 0, 0, 0);
+ LOG_LOCBACK(1, 0);
ret = LY_EVALID;
goto cleanup;
}
@@ -1727,13 +1731,13 @@ lys_compile(struct lys_module *mod, struct lys_depset_unres *unres)
}
ctx.pmod = sp;
- LOG_LOCBACK(0, 0, 1, 0);
+ ly_log_location_revert(0, 0, 1, 0);
/* finish compilation for all unresolved module items in the context */
LY_CHECK_GOTO(ret = lys_compile_unres_mod(&ctx), cleanup);
cleanup:
- LOG_LOCBACK(0, 0, 1, 0);
+ ly_log_location_revert(0, 0, 1, 0);
lys_compile_unres_mod_erase(&ctx, ret);
if (ret) {
lysc_module_free(&ctx.free_ctx, mod_c);
@@ -1784,7 +1788,7 @@ lys_compile_identities(struct lys_module *mod)
cleanup:
/* always needed when using lysc_update_path() */
- LOG_LOCBACK(0, 0, 1, 0);
+ ly_log_location_revert(0, 0, 1, 0);
return rc;
}
diff --git a/src/tree_data.c b/src/tree_data.c
index 37499a18c..8bcebd7fc 100644
--- a/src/tree_data.c
+++ b/src/tree_data.c
@@ -103,6 +103,7 @@ lyd_parse(const struct ly_ctx *ctx, const struct lysc_ext_instance *ext, struct
struct lyd_ctx *lydctx = NULL;
struct ly_set parsed = {0};
uint32_t i, int_opts = 0;
+ const struct ly_err_item *eitem;
ly_bool subtree_sibling = 0;
assert(ctx && (parent || first_p));
@@ -141,8 +142,14 @@ lyd_parse(const struct ly_ctx *ctx, const struct lysc_ext_instance *ext, struct
}
if (r) {
rc = r;
- if ((r != LY_EVALID) || !lydctx || !(lydctx->val_opts & LYD_VALIDATE_MULTI_ERROR) ||
- (ly_vecode(ctx) == LYVE_SYNTAX)) {
+ if ((r != LY_EVALID) || !lydctx || !(lydctx->val_opts & LYD_VALIDATE_MULTI_ERROR)) {
+ goto cleanup;
+ }
+
+ eitem = ly_err_last(ctx);
+ assert(eitem);
+ if (eitem->vecode == LYVE_SYNTAX) {
+ /* cannot get more errors on a syntax error */
goto cleanup;
}
}
diff --git a/src/tree_data_common.c b/src/tree_data_common.c
index 672f720ac..409f4241b 100644
--- a/src/tree_data_common.c
+++ b/src/tree_data_common.c
@@ -474,6 +474,35 @@ lyd_data_next_module(struct lyd_node **next, struct lyd_node **first)
return mod;
}
+/**
+ * @brief Log generated error item and use log location information if not in the error item.
+ *
+ * @param[in] ctx Context to use.
+ * @param[in] node Optional data node to log.
+ * @param[in] scnode Optional schema node to log.
+ * @param[in] eitem Error item to log.
+ */
+static void
+ly_err_print_build_path(const struct ly_ctx *ctx, const struct lyd_node *node, const struct lysc_node *scnode,
+ struct ly_err_item *eitem)
+{
+ if (eitem->data_path || eitem->schema_path || eitem->line) {
+ ly_err_print(ctx, eitem);
+ } else {
+ if (node) {
+ LOG_LOCSET(NULL, node);
+ } else if (scnode) {
+ LOG_LOCSET(scnode, NULL);
+ }
+ ly_vlog(ctx, eitem->apptag, eitem->err == LY_EVALID ? eitem->vecode : LYVE_DATA, "%s", eitem->msg);
+ if (node) {
+ LOG_LOCBACK(0, 1);
+ } else if (scnode) {
+ LOG_LOCBACK(1, 0);
+ }
+ }
+}
+
LY_ERR
lyd_value_store(const struct ly_ctx *ctx, struct lyd_value *val, const struct lysc_type *type, const void *value,
size_t value_len, ly_bool is_utf8, ly_bool *dynamic, LY_VALUE_FORMAT format, void *prefix_data, uint32_t hints,
@@ -508,7 +537,7 @@ lyd_value_store(const struct ly_ctx *ctx, struct lyd_value *val, const struct ly
}
} else if (ret) {
if (err) {
- LOGVAL_ERRITEM(ctx, err);
+ ly_err_print_build_path(ctx, NULL, ctx_node, err);
ly_err_free(err);
} else {
LOGVAL(ctx, LYVE_OTHER, "Storing value failed.");
@@ -531,7 +560,7 @@ lyd_value_validate_incomplete(const struct ly_ctx *ctx, const struct lysc_type *
ret = type->plugin->validate(ctx, type, ctx_node, tree, val, &err);
if (ret) {
if (err) {
- LOGVAL_ERRITEM(ctx, err);
+ ly_err_print_build_path(ctx, ctx_node, NULL, err);
ly_err_free(err);
} else {
LOGVAL(ctx, LYVE_OTHER, "Resolving value \"%s\" failed.",
@@ -569,17 +598,7 @@ ly_value_validate(const struct ly_ctx *ctx, const struct lysc_node *node, const
} else if (rc && err) {
if (ctx) {
/* log only in case the ctx was provided as input parameter */
- if (err->path) {
- LOG_LOCSET(NULL, NULL, err->path, NULL);
- } else {
- LOG_LOCSET(node, NULL, NULL, NULL);
- }
- LOGVAL_ERRITEM(ctx, err);
- if (err->path) {
- LOG_LOCBACK(0, 0, 1, 0);
- } else {
- LOG_LOCBACK(1, 0, 1, 0);
- }
+ ly_err_print_build_path(ctx, NULL, node, err);
}
ly_err_free(err);
}
@@ -626,21 +645,7 @@ lyd_value_validate(const struct ly_ctx *ctx, const struct lysc_node *schema, con
if (rc && (rc != LY_EINCOMPLETE) && err) {
if (log) {
/* log error */
- if (err->path) {
- LOG_LOCSET(NULL, NULL, err->path, NULL);
- } else if (ctx_node) {
- LOG_LOCSET(NULL, ctx_node, NULL, NULL);
- } else {
- LOG_LOCSET(schema, NULL, NULL, NULL);
- }
- LOGVAL_ERRITEM(ctx, err);
- if (err->path) {
- LOG_LOCBACK(0, 0, 1, 0);
- } else if (ctx_node) {
- LOG_LOCBACK(0, 1, 0, 0);
- } else {
- LOG_LOCBACK(1, 0, 0, 0);
- }
+ ly_err_print_build_path(ctx, ctx_node, schema, err);
}
ly_err_free(err);
}
@@ -682,9 +687,9 @@ lyd_value_compare(const struct lyd_node_term *node, const char *value, size_t va
type = ((struct lysc_node_leaf *)node->schema)->type;
/* store the value */
- LOG_LOCSET(node->schema, &node->node, NULL, NULL);
+ LOG_LOCSET(NULL, &node->node);
ret = lyd_value_store(ctx, &val, type, value, value_len, 0, NULL, LY_VALUE_JSON, NULL, LYD_HINT_DATA, node->schema, NULL);
- LOG_LOCBACK(1, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
LY_CHECK_RET(ret);
/* compare values */
@@ -850,7 +855,7 @@ lyd_parse_opaq_error(const struct lyd_node *node)
const struct lyd_node *parent;
const struct lys_module *mod;
const struct lysc_node *sparent, *snode;
- uint32_t loc_node = 0, loc_path = 0;
+ uint32_t loc_scnode = 0, loc_dnode = 0;
LY_CHECK_ARG_RET(LYD_CTX(node), node, !node->schema, LY_EINVAL);
@@ -859,13 +864,9 @@ lyd_parse_opaq_error(const struct lyd_node *node)
parent = lyd_parent(node);
sparent = lyd_node_schema(parent);
- if (parent) {
- LOG_LOCSET(NULL, parent, NULL, NULL);
- ++loc_node;
- } else {
- LOG_LOCSET(NULL, NULL, "/", NULL);
- ++loc_path;
- }
+ /* if parent is NULL, it is still added as root */
+ LOG_LOCSET(NULL, parent);
+ loc_dnode = 1;
if (!opaq->name.module_ns) {
LOGVAL(ctx, LYVE_REFERENCE, "Unknown module of node \"%s\".", opaq->name.name);
@@ -928,11 +929,10 @@ lyd_parse_opaq_error(const struct lyd_node *node)
}
/* schema node exists */
- LOG_LOCBACK(0, loc_node, loc_path, 0);
- loc_node = 0;
- loc_path = 0;
- LOG_LOCSET(NULL, node, NULL, NULL);
- ++loc_node;
+ LOG_LOCBACK(0, 1);
+ loc_dnode = 0;
+ LOG_LOCSET(snode, NULL);
+ loc_scnode = 1;
if (snode->nodetype & LYD_NODE_TERM) {
/* leaf / leaf-list */
@@ -960,7 +960,7 @@ lyd_parse_opaq_error(const struct lyd_node *node)
rc = LY_EINVAL;
cleanup:
- LOG_LOCBACK(0, loc_node, loc_path, 0);
+ LOG_LOCBACK(loc_scnode, loc_dnode);
return rc;
}
diff --git a/src/tree_data_new.c b/src/tree_data_new.c
index 9a257bf1f..7ce00da4f 100644
--- a/src/tree_data_new.c
+++ b/src/tree_data_new.c
@@ -66,10 +66,10 @@ lyd_create_term(const struct lysc_node *schema, const char *value, size_t value_
term->prev = &term->node;
term->flags = LYD_NEW;
- LOG_LOCSET(schema, NULL, NULL, NULL);
+ LOG_LOCSET(schema, NULL);
ret = lyd_value_store(schema->module->ctx, &term->value, ((struct lysc_node_leaf *)term->schema)->type, value,
value_len, is_utf8, dynamic, format, prefix_data, hints, schema, incomplete);
- LOG_LOCBACK(1, 0, 0, 0);
+ LOG_LOCBACK(1, 0);
LY_CHECK_ERR_RET(ret, free(term), ret);
lyd_hash(&term->node);
@@ -149,7 +149,7 @@ lyd_create_list(const struct lysc_node *schema, const struct ly_path_predicate *
/* create list */
LY_CHECK_GOTO(ret = lyd_create_inner(schema, &list), cleanup);
- LOG_LOCSET(schema, NULL, NULL, NULL);
+ LOG_LOCSET(schema, NULL);
/* create and insert all the keys */
LY_ARRAY_FOR(predicates, u) {
@@ -160,10 +160,10 @@ lyd_create_list(const struct lysc_node *schema, const struct ly_path_predicate *
}
/* store the value */
- LOG_LOCSET(predicates[u].key, NULL, NULL, NULL);
+ LOG_LOCSET(predicates[u].key, NULL);
ret = lyd_value_store(schema->module->ctx, &val, ((struct lysc_node_leaf *)predicates[u].key)->type,
var->value, strlen(var->value), 0, NULL, LY_VALUE_JSON, NULL, LYD_HINT_DATA, predicates[u].key, NULL);
- LOG_LOCBACK(1, 0, 0, 0);
+ LOG_LOCBACK(1, 0);
LY_CHECK_GOTO(ret, cleanup);
value = &val;
@@ -189,7 +189,7 @@ lyd_create_list(const struct lysc_node *schema, const struct ly_path_predicate *
list = NULL;
cleanup:
- LOG_LOCBACK(1, 0, 0, 0);
+ LOG_LOCBACK(1, 0);
lyd_free_tree(list);
return ret;
}
@@ -202,7 +202,7 @@ lyd_create_list2(const struct lysc_node *schema, const char *keys, size_t keys_l
uint32_t exp_idx = 0;
struct ly_path_predicate *predicates = NULL;
- LOG_LOCSET(schema, NULL, NULL, NULL);
+ LOG_LOCSET(schema, NULL);
/* parse keys */
LY_CHECK_GOTO(ret = ly_path_parse_predicate(schema->module->ctx, NULL, keys, keys_len, LY_PATH_PREFIX_OPTIONAL,
@@ -216,7 +216,7 @@ lyd_create_list2(const struct lysc_node *schema, const char *keys, size_t keys_l
LY_CHECK_GOTO(ret = lyd_create_list(schema, predicates, NULL, node), cleanup);
cleanup:
- LOG_LOCBACK(1, 0, 0, 0);
+ LOG_LOCBACK(1, 0);
lyxp_expr_free(schema->module->ctx, expr);
ly_path_predicates_free(schema->module->ctx, predicates);
return ret;
@@ -1302,10 +1302,10 @@ _lyd_change_term(struct lyd_node *term, const void *value, size_t value_len, LY_
type = ((struct lysc_node_leaf *)term->schema)->type;
/* parse the new value */
- LOG_LOCSET(term->schema, term, NULL, NULL);
+ LOG_LOCSET(term->schema, term);
ret = lyd_value_store(LYD_CTX(term), &val, type, value, value_len, 0, NULL, format, NULL, LYD_HINT_DATA,
term->schema, NULL);
- LOG_LOCBACK(term->schema ? 1 : 0, 1, 0, 0);
+ LOG_LOCBACK(1, 1);
LY_CHECK_GOTO(ret, cleanup);
/* compare original and new value */
@@ -1541,19 +1541,19 @@ lyd_new_path_check_find_lypath(struct ly_path *path, const char *str_path, const
create = 1;
new_count = u;
} else if (path[u].predicates[0].type != LY_PATH_PREDTYPE_POSITION) {
- LOG_LOCSET(schema, NULL, NULL, NULL);
+ LOG_LOCSET(schema, NULL);
LOGVAL(schema->module->ctx, LYVE_XPATH, "Invalid predicate for state %s \"%s\" in path \"%s\".",
lys_nodetype2str(schema->nodetype), schema->name, str_path);
- LOG_LOCBACK(1, 0, 0, 0);
+ LOG_LOCBACK(1, 0);
return LY_EINVAL;
}
} else if ((schema->nodetype == LYS_LIST) &&
(!path[u].predicates || (path[u].predicates[0].type != LY_PATH_PREDTYPE_LIST))) {
if ((u < LY_ARRAY_COUNT(path) - 1) || !(options & LYD_NEW_PATH_OPAQ)) {
- LOG_LOCSET(schema, NULL, NULL, NULL);
+ LOG_LOCSET(schema, NULL);
LOGVAL(schema->module->ctx, LYVE_XPATH, "Predicate missing for %s \"%s\" in path \"%s\".",
lys_nodetype2str(schema->nodetype), schema->name, str_path);
- LOG_LOCBACK(1, 0, 0, 0);
+ LOG_LOCBACK(1, 0);
return LY_EINVAL;
} /* else creating an opaque list */
} else if ((schema->nodetype == LYS_LEAFLIST) &&
@@ -1665,9 +1665,9 @@ lyd_new_path_(struct lyd_node *parent, const struct ly_ctx *ctx, const struct ly
if (orig_count == LY_ARRAY_COUNT(p)) {
/* the node exists, are we supposed to update it or is it just a default? */
if (!(options & LYD_NEW_PATH_UPDATE) && !(node->flags & LYD_DEFAULT)) {
- LOG_LOCSET(NULL, node, NULL, NULL);
+ LOG_LOCSET(NULL, node);
LOGVAL(ctx, LYVE_REFERENCE, "Path \"%s\" already exists.", path);
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
ret = LY_EEXIST;
goto cleanup;
} else if ((options & LYD_NEW_PATH_UPDATE) && lysc_is_key(node->schema)) {
diff --git a/src/tree_schema.c b/src/tree_schema.c
index df89924e5..8e2991b5f 100644
--- a/src/tree_schema.c
+++ b/src/tree_schema.c
@@ -1380,12 +1380,12 @@ lysp_resolve_ext_instance_records(struct lysp_ctx *pctx)
if ((r = lysp_resolve_ext_instance_log_path(pctx, ext, &path))) {
return r;
}
- LOG_LOCSET(NULL, NULL, path, NULL);
+ ly_log_location(NULL, NULL, path, NULL);
/* parse */
r = ext->record->plugin.parse(pctx, ext);
- LOG_LOCBACK(0, 0, 1, 0);
+ ly_log_location_revert(0, 0, 1, 0);
free(path);
if (r == LY_ENOT) {
@@ -1886,9 +1886,9 @@ lys_parse_in(struct ly_ctx *ctx, struct ly_in *in, LYS_INFORMAT format,
if (mod && mod->name) {
/* there are cases when path is not available for parsing error, so this additional
* message tries to add information about the module where the error occurred */
- struct ly_err_item *e = ly_err_last(ctx);
+ const struct ly_err_item *e = ly_err_last(ctx);
- if (e && (!e->path || !strncmp(e->path, "Line ", ly_strlen_const("Line ")))) {
+ if (e && (!e->schema_path || e->line)) {
LOGERR(ctx, ret, "Parsing module \"%s\" failed.", mod->name);
}
}
diff --git a/src/validation.c b/src/validation.c
index 35136adfd..ade6f1cd3 100644
--- a/src/validation.c
+++ b/src/validation.c
@@ -276,7 +276,7 @@ lyd_validate_unres_when(struct lyd_node **tree, const struct lys_module *mod, st
do {
--i;
node = node_when->dnodes[i];
- LOG_LOCSET(node->schema, node, NULL, NULL);
+ LOG_LOCSET(node->schema, node);
/* evaluate all when expressions that affect this node's existence */
r = lyd_validate_node_when(*tree, node, node->schema, xpath_options, &disabled);
@@ -307,13 +307,13 @@ lyd_validate_unres_when(struct lyd_node **tree, const struct lys_module *mod, st
LY_VAL_ERR_GOTO(r, rc = r, val_opts, error);
}
- LOG_LOCBACK(1, 1, 0, 0);
+ LOG_LOCBACK(1, 1);
} while (i);
return rc;
error:
- LOG_LOCBACK(1, 1, 0, 0);
+ LOG_LOCBACK(1, 1);
return rc;
}
@@ -385,9 +385,9 @@ lyd_validate_unres(struct lyd_node **tree, const struct lys_module *mod, enum ly
struct lysc_type *type = ((struct lysc_node_leaf *)node->schema)->type;
/* resolve the value of the node */
- LOG_LOCSET(NULL, &node->node, NULL, NULL);
+ LOG_LOCSET(NULL, &node->node);
r = lyd_value_validate_incomplete(LYD_CTX(node), type, &node->value, &node->node, *tree);
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
LY_VAL_ERR_GOTO(r, rc = r, val_opts, cleanup);
/* remove this node from the set */
@@ -471,13 +471,13 @@ lyd_validate_duplicates(const struct lyd_node *first, const struct lyd_node *nod
if (fail) {
if ((node->schema->nodetype & (LYS_LIST | LYS_LEAFLIST)) && (val_opts & LYD_VALIDATE_OPERATIONAL)) {
/* only a warning */
- LOG_LOCSET(NULL, node, NULL, NULL);
+ LOG_LOCSET(NULL, node);
LOGWRN(node->schema->module->ctx, "Duplicate instance of \"%s\".", node->schema->name);
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
} else {
- LOG_LOCSET(NULL, node, NULL, NULL);
+ LOG_LOCSET(NULL, node);
LOGVAL(node->schema->module->ctx, LY_VCODE_DUP, node->schema->name);
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
return LY_EVALID;
}
}
@@ -501,7 +501,7 @@ lyd_validate_cases(struct lyd_node **first, const struct lys_module *mod, const
struct lyd_node *match, *to_del;
ly_bool found;
- LOG_LOCSET(&choic->node, NULL, NULL, NULL);
+ LOG_LOCSET(&choic->node, NULL);
LY_LIST_FOR((struct lysc_node *)choic->cases, scase) {
found = 0;
@@ -525,7 +525,7 @@ lyd_validate_cases(struct lyd_node **first, const struct lys_module *mod, const
if (old_case) {
/* old data from 2 cases */
LOGVAL(choic->module->ctx, LY_VCODE_DUPCASE, old_case->name, scase->name);
- LOG_LOCBACK(1, 0, 0, 0);
+ LOG_LOCBACK(1, 0);
return LY_EVALID;
}
@@ -535,7 +535,7 @@ lyd_validate_cases(struct lyd_node **first, const struct lys_module *mod, const
if (new_case) {
/* new data from 2 cases */
LOGVAL(choic->module->ctx, LY_VCODE_DUPCASE, new_case->name, scase->name);
- LOG_LOCBACK(1, 0, 0, 0);
+ LOG_LOCBACK(1, 0);
return LY_EVALID;
}
@@ -544,7 +544,7 @@ lyd_validate_cases(struct lyd_node **first, const struct lys_module *mod, const
}
}
- LOG_LOCBACK(1, 0, 0, 0);
+ LOG_LOCBACK(1, 0);
if (old_case && new_case) {
/* auto-delete old case */
@@ -964,22 +964,22 @@ lyd_validate_mandatory(const struct lyd_node *first, const struct lyd_node *pare
if (!disabled) {
if (val_opts & LYD_VALIDATE_OPERATIONAL) {
/* only a warning */
- LOG_LOCSET(parent ? NULL : snode, parent, NULL, NULL);
+ LOG_LOCSET(parent ? NULL : snode, parent);
if (snode->nodetype == LYS_CHOICE) {
LOGWRN(snode->module->ctx, "Mandatory choice \"%s\" data do not exist.", snode->name);
} else {
LOGWRN(snode->module->ctx, "Mandatory node \"%s\" instance does not exist.", snode->name);
}
- LOG_LOCBACK(parent ? 0 : 1, parent ? 1 : 0, 0, 0);
+ LOG_LOCBACK(parent ? 0 : 1, parent ? 1 : 0);
} else {
/* node instance not found */
- LOG_LOCSET(parent ? NULL : snode, parent, NULL, NULL);
+ LOG_LOCSET(parent ? NULL : snode, parent);
if (snode->nodetype == LYS_CHOICE) {
LOGVAL_APPTAG(snode->module->ctx, "missing-choice", LY_VCODE_NOMAND_CHOIC, snode->name);
} else {
LOGVAL(snode->module->ctx, LY_VCODE_NOMAND, snode->name);
}
- LOG_LOCBACK(parent ? 0 : 1, parent ? 1 : 0, 0, 0);
+ LOG_LOCBACK(parent ? 0 : 1, parent ? 1 : 0);
return LY_EVALID;
}
}
@@ -1047,25 +1047,25 @@ lyd_validate_minmax(const struct lyd_node *first, const struct lyd_node *parent,
if (min) {
if (val_opts & LYD_VALIDATE_OPERATIONAL) {
/* only a warning */
- LOG_LOCSET(snode, NULL, NULL, NULL);
+ LOG_LOCSET(snode, NULL);
LOGWRN(snode->module->ctx, "Too few \"%s\" instances.", snode->name);
- LOG_LOCBACK(1, 0, 0, 0);
+ LOG_LOCBACK(1, 0);
} else {
- LOG_LOCSET(snode, NULL, NULL, NULL);
+ LOG_LOCSET(snode, NULL);
LOGVAL_APPTAG(snode->module->ctx, "too-few-elements", LY_VCODE_NOMIN, snode->name);
- LOG_LOCBACK(1, 0, 0, 0);
+ LOG_LOCBACK(1, 0);
return LY_EVALID;
}
} else if (max) {
if (val_opts & LYD_VALIDATE_OPERATIONAL) {
/* only a warning */
- LOG_LOCSET(NULL, iter, NULL, NULL);
+ LOG_LOCSET(NULL, iter);
LOGWRN(snode->module->ctx, "Too many \"%s\" instances.", snode->name);
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
} else {
- LOG_LOCSET(NULL, iter, NULL, NULL);
+ LOG_LOCSET(NULL, iter);
LOGVAL_APPTAG(snode->module->ctx, "too-many-elements", LY_VCODE_NOMAX, snode->name);
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
return LY_EVALID;
}
}
@@ -1201,14 +1201,14 @@ lyd_val_uniq_list_equal(void *val1_p, void *val2_p, ly_bool UNUSED(mod), void *c
ptr += strlen(ptr);
}
- LOG_LOCSET(NULL, second, NULL, NULL);
+ LOG_LOCSET(NULL, second);
if (arg->val_opts & LYD_VALIDATE_OPERATIONAL) {
/* only a warning */
LOGWRN(ctx, "Unique data leaf(s) \"%s\" not satisfied in \"%s\" and \"%s\".", uniq_str, path1, path2);
} else {
LOGVAL_APPTAG(ctx, "data-not-unique", LY_VCODE_NOUNIQ, uniq_str, path1, path2);
}
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
free(path1);
free(path2);
@@ -1434,9 +1434,9 @@ lyd_validate_obsolete(const struct lyd_node *node)
snode = node->schema;
do {
if (snode->flags & LYS_STATUS_OBSLT) {
- LOG_LOCSET(NULL, node, NULL, NULL);
+ LOG_LOCSET(NULL, node);
LOGWRN(snode->module->ctx, "Obsolete schema node \"%s\" instantiated in data.", snode->name);
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
break;
}
@@ -1506,24 +1506,24 @@ lyd_validate_must(const struct lyd_node *node, uint32_t val_opts, uint32_t int_o
if (val_opts & LYD_VALIDATE_OPERATIONAL) {
/* only a warning */
emsg = musts[u].emsg;
- LOG_LOCSET(NULL, node, NULL, NULL);
+ LOG_LOCSET(NULL, node);
if (emsg) {
LOGWRN(LYD_CTX(node), "%s", emsg);
} else {
LOGWRN(LYD_CTX(node), "Must condition \"%s\" not satisfied.", musts[u].cond->expr);
}
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
} else {
/* use specific error information */
emsg = musts[u].emsg;
eapptag = musts[u].eapptag ? musts[u].eapptag : "must-violation";
- LOG_LOCSET(NULL, node, NULL, NULL);
+ LOG_LOCSET(NULL, node);
if (emsg) {
LOGVAL_APPTAG(LYD_CTX(node), eapptag, LYVE_DATA, "%s", emsg);
} else {
LOGVAL_APPTAG(LYD_CTX(node), eapptag, LY_VCODE_NOMUST, musts[u].cond->expr);
}
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
r = LY_EVALID;
LY_VAL_ERR_GOTO(r, rc = r, val_opts, cleanup);
}
@@ -1588,9 +1588,9 @@ lyd_validate_final_r(struct lyd_node *first, const struct lyd_node *parent, cons
innode = "notification";
}
if (innode) {
- LOG_LOCSET(NULL, node, NULL, NULL);
+ LOG_LOCSET(NULL, node);
LOGVAL(LYD_CTX(node), LY_VCODE_UNEXPNODE, innode, node->schema->name);
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
r = LY_EVALID;
goto next_iter;
}
diff --git a/src/xml.c b/src/xml.c
index 2bdbdf360..8c006cdb4 100644
--- a/src/xml.c
+++ b/src/xml.c
@@ -922,7 +922,7 @@ lyxml_ctx_new(const struct ly_ctx *ctx, struct ly_in *in, struct lyxml_ctx **xml
xmlctx->ctx = ctx;
xmlctx->in = in;
- LOG_LOCSET(NULL, NULL, NULL, in);
+ ly_log_location(NULL, NULL, NULL, in);
/* parse next element, if any */
LY_CHECK_GOTO(ret = lyxml_next_element(xmlctx, &xmlctx->prefix, &xmlctx->prefix_len, &xmlctx->name,
@@ -1169,7 +1169,7 @@ lyxml_ctx_free(struct lyxml_ctx *xmlctx)
return;
}
- LOG_LOCBACK(0, 0, 0, 1);
+ ly_log_location_revert(0, 0, 0, 1);
if (((xmlctx->status == LYXML_ELEM_CONTENT) || (xmlctx->status == LYXML_ATTR_CONTENT)) && xmlctx->dynamic) {
free((char *)xmlctx->value);
diff --git a/src/xpath.c b/src/xpath.c
index 139cd0f7a..31978ec58 100644
--- a/src/xpath.c
+++ b/src/xpath.c
@@ -4947,10 +4947,12 @@ xpath_re_match(struct lyxp_set **args, uint32_t UNUSED(arg_count), struct lyxp_s
LY_ARRAY_NEW_RET(set->ctx, patterns, pattern, LY_EMEM);
*pattern = calloc(1, sizeof **pattern);
- LOG_LOCSET(NULL, set->cur_node, NULL, NULL);
+ if (set->cur_node) {
+ LOG_LOCSET(NULL, set->cur_node);
+ }
rc = lys_compile_type_pattern_check(set->ctx, args[1]->val.str, &(*pattern)->code);
if (set->cur_node) {
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
}
if (rc != LY_SUCCESS) {
LY_ARRAY_FREE(patterns);
@@ -9727,7 +9729,9 @@ lyxp_eval(const struct ly_ctx *ctx, const struct lyxp_expr *exp, const struct ly
set->prefix_data = prefix_data;
set->vars = vars;
- LOG_LOCSET(NULL, set->cur_node, NULL, NULL);
+ if (set->cur_node) {
+ LOG_LOCSET(NULL, set->cur_node);
+ }
/* evaluate */
rc = eval_expr_select(exp, &tok_idx, 0, set, options);
@@ -9739,7 +9743,7 @@ lyxp_eval(const struct ly_ctx *ctx, const struct lyxp_expr *exp, const struct ly
}
if (set->cur_node) {
- LOG_LOCBACK(0, 1, 0, 0);
+ LOG_LOCBACK(0, 1);
}
return rc;
}
@@ -10000,7 +10004,9 @@ lyxp_atomize(const struct ly_ctx *ctx, const struct lyxp_expr *exp, const struct
set->format = format;
set->prefix_data = prefix_data;
- LOG_LOCSET(set->cur_scnode, NULL, NULL, NULL);
+ if (set->cur_scnode) {
+ LOG_LOCSET(set->cur_scnode, NULL);
+ }
/* evaluate */
rc = eval_expr_select(exp, &tok_idx, 0, set, options);
@@ -10008,7 +10014,9 @@ lyxp_atomize(const struct ly_ctx *ctx, const struct lyxp_expr *exp, const struct
rc = LY_ENOTFOUND;
}
- LOG_LOCBACK(set->cur_scnode ? 1 : 0, 0, 0, 0);
+ if (set->cur_scnode) {
+ LOG_LOCBACK(1, 0);
+ }
return rc;
}
diff --git a/tests/utests/basic/test_context.c b/tests/utests/basic/test_context.c
index d5a1f0b42..6060ff67d 100644
--- a/tests/utests/basic/test_context.c
+++ b/tests/utests/basic/test_context.c
@@ -20,7 +20,9 @@
#include "schema_compile.h"
#include "tests_config.h"
#include "tree_schema_internal.h"
+
#ifdef _WIN32
+
static void
slashes_to_backslashes(char *path)
{
@@ -40,11 +42,11 @@ test_searchdirs(void **state)
slashes_to_backslashes(path2);
assert_int_equal(LY_EINVAL, ly_ctx_set_searchdir(NULL, NULL));
- CHECK_LOG("Invalid argument ctx (ly_ctx_set_searchdir()).", NULL);
+ CHECK_LOG_LASTMSG("Invalid argument ctx (ly_ctx_set_searchdir()).");
assert_null(ly_ctx_get_searchdirs(NULL));
- CHECK_LOG("Invalid argument ctx (ly_ctx_get_searchdirs()).", NULL);
+ CHECK_LOG_LASTMSG("Invalid argument ctx (ly_ctx_get_searchdirs()).");
assert_int_equal(LY_EINVAL, ly_ctx_unset_searchdir(NULL, NULL));
- CHECK_LOG("Invalid argument ctx (ly_ctx_unset_searchdir()).", NULL);
+ CHECK_LOG_LASTMSG("Invalid argument ctx (ly_ctx_unset_searchdir()).");
/* correct path */
assert_int_equal(LY_SUCCESS, ly_ctx_set_searchdir(UTEST_LYCTX, path1));
@@ -71,7 +73,7 @@ test_searchdirs(void **state)
/* removing searchpaths */
/* nonexisting */
assert_int_equal(LY_EINVAL, ly_ctx_unset_searchdir(UTEST_LYCTX, "/nonexistingfile"));
- CHECK_LOG_CTX("Invalid argument value (ly_ctx_unset_searchdir()).", NULL);
+ CHECK_LOG_CTX("Invalid argument value (ly_ctx_unset_searchdir()).", NULL, 0);
/* first */
assert_int_equal(LY_SUCCESS, ly_ctx_unset_searchdir(UTEST_LYCTX, path1));
@@ -95,18 +97,18 @@ test_searchdirs(void **state)
/* invalid arguments */
assert_int_equal(LY_EINVAL, ly_ctx_set_searchdir(NULL, NULL));
- CHECK_LOG("Invalid argument ctx (ly_ctx_set_searchdir()).", NULL);
+ CHECK_LOG_LASTMSG("Invalid argument ctx (ly_ctx_set_searchdir()).");
assert_null(ly_ctx_get_searchdirs(NULL));
- CHECK_LOG("Invalid argument ctx (ly_ctx_get_searchdirs()).", NULL);
+ CHECK_LOG_LASTMSG("Invalid argument ctx (ly_ctx_get_searchdirs()).");
assert_int_equal(LY_EINVAL, ly_ctx_unset_searchdir(NULL, NULL));
- CHECK_LOG("Invalid argument ctx (ly_ctx_unset_searchdir()).", NULL);
+ CHECK_LOG_LASTMSG("Invalid argument ctx (ly_ctx_unset_searchdir()).");
/* readable and executable, but not a directory */
assert_int_equal(LY_EINVAL, ly_ctx_set_searchdir(UTEST_LYCTX, TESTS_BIN "/utest_context"));
- CHECK_LOG_CTX("Given search directory \""TESTS_BIN "/utest_context\" is not a directory.", NULL);
+ CHECK_LOG_CTX("Given search directory \""TESTS_BIN "/utest_context\" is not a directory.", NULL, 0);
/* not existing */
assert_int_equal(LY_EINVAL, ly_ctx_set_searchdir(UTEST_LYCTX, "/nonexistingfile"));
- CHECK_LOG_CTX("Unable to use search directory \"/nonexistingfile\" (No such file or directory).", NULL);
+ CHECK_LOG_CTX("Unable to use search directory \"/nonexistingfile\" (No such file or directory).", NULL, 0);
/* ly_set_add() fails */
/* no change */
@@ -143,7 +145,7 @@ test_searchdirs(void **state)
/* removing searchpaths */
/* nonexisting */
assert_int_equal(LY_EINVAL, ly_ctx_unset_searchdir(UTEST_LYCTX, "/nonexistingfile"));
- CHECK_LOG_CTX("Invalid argument value (ly_ctx_unset_searchdir()).", NULL);
+ CHECK_LOG_CTX("Invalid argument value (ly_ctx_unset_searchdir()).", NULL, 0);
/* first */
assert_int_equal(LY_SUCCESS, ly_ctx_unset_searchdir(UTEST_LYCTX, TESTS_BIN "/utests"));
assert_string_not_equal(TESTS_BIN "/utests", list[0]);
@@ -166,7 +168,7 @@ test_searchdirs(void **state)
/* test searchdir list in ly_ctx_new() */
assert_int_equal(LY_EINVAL, ly_ctx_new("/nonexistingfile", 0, &UTEST_LYCTX));
- CHECK_LOG("Unable to use search directory \"/nonexistingfile\" (No such file or directory).", NULL);
+ CHECK_LOG_LASTMSG("Unable to use search directory \"/nonexistingfile\" (No such file or directory).");
assert_int_equal(LY_SUCCESS,
ly_ctx_new(TESTS_SRC PATH_SEPARATOR TESTS_BIN PATH_SEPARATOR TESTS_BIN PATH_SEPARATOR TESTS_SRC,
LY_CTX_DISABLE_SEARCHDIRS, &UTEST_LYCTX));
@@ -187,12 +189,12 @@ test_options(void **state)
/* invalid arguments */
assert_int_equal(0, ly_ctx_get_options(NULL));
- CHECK_LOG("Invalid argument ctx (ly_ctx_get_options()).", NULL);
+ CHECK_LOG_LASTMSG("Invalid argument ctx (ly_ctx_get_options()).");
assert_int_equal(LY_EINVAL, ly_ctx_set_options(NULL, 0));
- CHECK_LOG("Invalid argument ctx (ly_ctx_set_options()).", NULL);
+ CHECK_LOG_LASTMSG("Invalid argument ctx (ly_ctx_set_options()).");
assert_int_equal(LY_EINVAL, ly_ctx_unset_options(NULL, 0));
- CHECK_LOG("Invalid argument ctx (ly_ctx_unset_options()).", NULL);
+ CHECK_LOG_LASTMSG("Invalid argument ctx (ly_ctx_unset_options()).");
/* unset */
/* LY_CTX_ALL_IMPLEMENTED */
@@ -279,7 +281,7 @@ test_models(void **state)
/* invalid arguments */
assert_int_equal(0, ly_ctx_get_change_count(NULL));
- CHECK_LOG("Invalid argument ctx (ly_ctx_get_change_count()).", NULL);
+ CHECK_LOG_LASTMSG("Invalid argument ctx (ly_ctx_get_change_count()).");
assert_int_equal(LY_SUCCESS, ly_ctx_new(NULL, LY_CTX_DISABLE_SEARCHDIRS, &UTEST_LYCTX));
assert_int_equal(UTEST_LYCTX->change_count, ly_ctx_get_change_count(UTEST_LYCTX));
@@ -288,7 +290,7 @@ test_models(void **state)
assert_int_equal(LY_EINVAL, lys_parse_in(UTEST_LYCTX, in, 4, NULL, NULL, &unres.creating, &mod1));
lys_unres_glob_erase(&unres);
ly_in_free(in, 0);
- CHECK_LOG_CTX("Invalid schema input format.", NULL);
+ CHECK_LOG_CTX("Invalid schema input format.", NULL, 0);
/* import callback */
ly_ctx_set_module_imp_clb(UTEST_LYCTX, test_imp_clb, (void *)(str = "test"));
@@ -307,8 +309,8 @@ test_models(void **state)
assert_int_equal(LY_EVALID, lys_parse_in(UTEST_LYCTX, in, LYS_IN_YANG, NULL, NULL, &unres.creating, &mod1));
lys_unres_glob_erase(&unres);
ly_in_free(in, 0);
- CHECK_LOG_CTX("Parsing module \"y\" failed.", NULL);
- CHECK_LOG_CTX("Name collision between module and submodule of name \"y\".", "Line number 1.");
+ CHECK_LOG_CTX("Parsing module \"y\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Name collision between module and submodule of name \"y\".", NULL, 1);
assert_int_equal(LY_SUCCESS, ly_in_new_memory("module a {namespace urn:a;prefix a;include y;revision 2018-10-30; }", &in));
assert_int_equal(LY_SUCCESS, lys_parse_in(UTEST_LYCTX, in, LYS_IN_YANG, NULL, NULL, &unres.creating, &mod1));
@@ -317,8 +319,8 @@ test_models(void **state)
assert_int_equal(LY_EVALID, lys_parse_in(UTEST_LYCTX, in, LYS_IN_YANG, NULL, NULL, &unres.creating, &mod1));
lys_unres_glob_erase(&unres);
ly_in_free(in, 0);
- CHECK_LOG_CTX("Parsing module \"y\" failed.", NULL);
- CHECK_LOG_CTX("Name collision between module and submodule of name \"y\".", "Line number 1.");
+ CHECK_LOG_CTX("Parsing module \"y\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Name collision between module and submodule of name \"y\".", NULL, 1);
ly_ctx_set_module_imp_clb(UTEST_LYCTX, test_imp_clb, "submodule y {belongs-to b {prefix b;}}");
assert_int_equal(LY_SUCCESS, ly_in_new_memory("module b {namespace urn:b;prefix b;include y;}", &in));
@@ -326,10 +328,10 @@ test_models(void **state)
lys_unres_glob_revert(UTEST_LYCTX, &unres);
lys_unres_glob_erase(&unres);
ly_in_free(in, 0);
- CHECK_LOG_CTX("Parsing module \"b\" failed.", NULL);
- CHECK_LOG_CTX("Including \"y\" submodule into \"b\" failed.", NULL);
- CHECK_LOG_CTX("Parsing submodule failed.", NULL);
- CHECK_LOG_CTX("Name collision between submodules of name \"y\".", "Line number 1.");
+ CHECK_LOG_CTX("Parsing module \"b\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Including \"y\" submodule into \"b\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Parsing submodule failed.", NULL, 0);
+ CHECK_LOG_CTX("Name collision between submodules of name \"y\".", NULL, 1);
/* selecting correct revision of the submodules */
ly_ctx_set_module_imp_clb(UTEST_LYCTX, test_imp_clb, "submodule y {belongs-to a {prefix a;} revision 2018-10-31;}");
@@ -395,7 +397,7 @@ test_imports(void **state)
ly_log_level(LY_LLVRB);
assert_int_equal(LY_SUCCESS, lys_parse_mem(UTEST_LYCTX, "module c {namespace urn:c;prefix c;import a {prefix a;}}",
LYS_IN_YANG, &mod3));
- CHECK_LOG("Implemented module \"a@2019-09-17\" is not used for import, revision \"2019-09-16\" is imported instead.", NULL);
+ CHECK_LOG_LASTMSG("Implemented module \"a@2019-09-17\" is not used for import, revision \"2019-09-16\" is imported instead.");
ly_log_level(LY_LLWRN);
assert_true(LYS_MOD_LATEST_SEARCHDIRS & mod1->latest_revision);
assert_int_equal(1, mod1->implemented);
@@ -445,13 +447,13 @@ test_get_models(void **state)
/* invalid arguments */
assert_ptr_equal(NULL, ly_ctx_get_module(NULL, NULL, NULL));
- CHECK_LOG("Invalid argument ctx (ly_ctx_get_module()).", NULL);
+ CHECK_LOG_LASTMSG("Invalid argument ctx (ly_ctx_get_module()).");
assert_ptr_equal(NULL, ly_ctx_get_module(UTEST_LYCTX, NULL, NULL));
- CHECK_LOG_CTX("Invalid argument name (ly_ctx_get_module()).", NULL);
+ CHECK_LOG_CTX("Invalid argument name (ly_ctx_get_module()).", NULL, 0);
assert_ptr_equal(NULL, ly_ctx_get_module_ns(NULL, NULL, NULL));
- CHECK_LOG("Invalid argument ctx (ly_ctx_get_module_ns()).", NULL);
+ CHECK_LOG_LASTMSG("Invalid argument ctx (ly_ctx_get_module_ns()).");
assert_ptr_equal(NULL, ly_ctx_get_module_ns(UTEST_LYCTX, NULL, NULL));
- CHECK_LOG_CTX("Invalid argument ns (ly_ctx_get_module_ns()).", NULL);
+ CHECK_LOG_CTX("Invalid argument ns (ly_ctx_get_module_ns()).", NULL, 0);
assert_null(ly_ctx_get_module(UTEST_LYCTX, "nonsence", NULL));
/* internal modules */
@@ -472,7 +474,7 @@ test_get_models(void **state)
/* invalid attempts - implementing module of the same name and inserting the same module */
assert_int_equal(LY_SUCCESS, lys_parse_in(UTEST_LYCTX, in2, LYS_IN_YANG, NULL, NULL, &unres.creating, &mod2));
assert_int_equal(LY_EDENIED, lys_implement(mod2, NULL, &unres));
- CHECK_LOG_CTX("Module \"a@2018-10-24\" is already implemented in revision \"2018-10-23\".", NULL);
+ CHECK_LOG_CTX("Module \"a@2018-10-24\" is already implemented in revision \"2018-10-23\".", NULL, 0);
lys_unres_glob_erase(&unres);
ly_in_reset(in1);
/* it is already there, fine */
@@ -498,7 +500,7 @@ test_get_models(void **state)
ly_in_free(in1, 0);
assert_int_equal(LY_SUCCESS, ly_in_new_memory(str1, &in1));
assert_int_equal(LY_EINVAL, lys_parse_in(UTEST_LYCTX, in1, LYS_IN_YANG, NULL, NULL, &unres.creating, &mod));
- CHECK_LOG_CTX("Input data contains submodule which cannot be parsed directly without its main module.", NULL);
+ CHECK_LOG_CTX("Input data contains submodule which cannot be parsed directly without its main module.", NULL, 0);
lys_unres_glob_erase(&unres);
while ((mod = (struct lys_module *)ly_ctx_get_module_iter(UTEST_LYCTX, &index))) {
diff --git a/tests/utests/basic/test_hash_table.c b/tests/utests/basic/test_hash_table.c
index 78950cd84..0c1647b5e 100644
--- a/tests/utests/basic/test_hash_table.c
+++ b/tests/utests/basic/test_hash_table.c
@@ -23,12 +23,12 @@ static void
test_invalid_arguments(void **state)
{
assert_int_equal(LY_EINVAL, lydict_insert(NULL, NULL, 0, NULL));
- CHECK_LOG("Invalid argument ctx (lydict_insert()).", NULL);
+ CHECK_LOG_LASTMSG("Invalid argument ctx (lydict_insert()).");
assert_int_equal(LY_EINVAL, lydict_insert_zc(NULL, NULL, NULL));
- CHECK_LOG("Invalid argument ctx (lydict_insert_zc()).", NULL);
+ CHECK_LOG_LASTMSG("Invalid argument ctx (lydict_insert_zc()).");
assert_int_equal(LY_EINVAL, lydict_insert_zc(UTEST_LYCTX, NULL, NULL));
- CHECK_LOG_CTX("Invalid argument str_p (lydict_insert_zc()).", NULL);
+ CHECK_LOG_CTX("Invalid argument str_p (lydict_insert_zc()).", NULL, 0);
}
static void
@@ -55,7 +55,7 @@ test_dict_hit(void **state)
/* destroy dictionary - should raise warning about data presence */
ly_ctx_destroy(UTEST_LYCTX);
UTEST_LYCTX = NULL;
- CHECK_LOG("String \"test1\" not freed from the dictionary, refcount 1", NULL);
+ CHECK_LOG_LASTMSG("String \"test1\" not freed from the dictionary, refcount 1");
#ifndef NDEBUG
/* cleanup */
@@ -78,7 +78,7 @@ ht_equal_clb(void *val1, void *val2, uint8_t mod, void *cb_data)
}
static void
-test_ht_basic(void **state)
+test_ht_basic(void **UNUSED(state))
{
uint32_t i;
struct ly_ht *ht;
@@ -92,13 +92,13 @@ test_ht_basic(void **state)
assert_int_equal(LY_SUCCESS, lyht_remove(ht, &i, i));
assert_int_equal(LY_ENOTFOUND, lyht_find(ht, &i, i, NULL));
assert_int_equal(LY_ENOTFOUND, lyht_remove(ht, &i, i));
- CHECK_LOG("Invalid argument hash (lyht_remove_with_resize_cb()).", NULL);
+ CHECK_LOG_LASTMSG("Invalid argument hash (lyht_remove_with_resize_cb()).");
lyht_free(ht, NULL);
}
static void
-test_ht_resize(void **state)
+test_ht_resize(void **UNUSED(state))
{
uint32_t i;
struct ly_ht *ht;
@@ -128,9 +128,8 @@ test_ht_resize(void **state)
/* removing not present data should fail */
for (i = 0; i < 2; ++i) {
- UTEST_LOG_CLEAN;
assert_int_equal(LY_ENOTFOUND, lyht_remove(ht, &i, i));
- CHECK_LOG("Invalid argument hash (lyht_remove_with_resize_cb()).", NULL);
+ CHECK_LOG_LASTMSG("Invalid argument hash (lyht_remove_with_resize_cb()).");
}
/* removing present data, resize should happened
* when we are below 25% of the table filled, so with 3 records left */
diff --git a/tests/utests/basic/test_json.c b/tests/utests/basic/test_json.c
index 08b771900..a760b382e 100644
--- a/tests/utests/basic/test_json.c
+++ b/tests/utests/basic/test_json.c
@@ -28,12 +28,12 @@ test_general(void **state)
str = "";
assert_int_equal(LY_SUCCESS, ly_in_new_memory(str, &in));
assert_int_equal(LY_EVALID, lyjson_ctx_new(UTEST_LYCTX, in, &jsonctx));
- CHECK_LOG_CTX("Empty JSON file.", "Line number 1.");
+ CHECK_LOG_CTX("Empty JSON file.", NULL, 1);
str = " \n\t \n";
assert_non_null(ly_in_memory(in, str));
assert_int_equal(LY_EVALID, lyjson_ctx_new(UTEST_LYCTX, in, &jsonctx));
- CHECK_LOG_CTX("Empty JSON file.", "Line number 3.");
+ CHECK_LOG_CTX("Empty JSON file.", NULL, 3);
/* constant values */
str = "true";
@@ -457,62 +457,62 @@ test_number(void **state)
str = "-x";
assert_non_null(ly_in_memory(in, str));
assert_int_equal(LY_EVALID, lyjson_ctx_new(UTEST_LYCTX, in, &jsonctx));
- CHECK_LOG_CTX("Invalid character in JSON Number value (\"x\").", "Line number 1.");
+ CHECK_LOG_CTX("Invalid character in JSON Number value (\"x\").", NULL, 1);
str = " -";
assert_non_null(ly_in_memory(in, str));
assert_int_equal(LY_EVALID, lyjson_ctx_new(UTEST_LYCTX, in, &jsonctx));
- CHECK_LOG_CTX("Unexpected end-of-input.", "Line number 1.");
+ CHECK_LOG_CTX("Unexpected end-of-input.", NULL, 1);
str = "--1";
assert_non_null(ly_in_memory(in, str));
assert_int_equal(LY_EVALID, lyjson_ctx_new(UTEST_LYCTX, in, &jsonctx));
- CHECK_LOG_CTX("Invalid character in JSON Number value (\"-\").", "Line number 1.");
+ CHECK_LOG_CTX("Invalid character in JSON Number value (\"-\").", NULL, 1);
str = "+1";
assert_non_null(ly_in_memory(in, str));
assert_int_equal(LY_EVALID, lyjson_ctx_new(UTEST_LYCTX, in, &jsonctx));
- CHECK_LOG_CTX("Invalid character sequence \"+1\", expected a JSON value.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid character sequence \"+1\", expected a JSON value.", NULL, 1);
str = " 1.x ";
assert_non_null(ly_in_memory(in, str));
assert_int_equal(LY_EVALID, lyjson_ctx_new(UTEST_LYCTX, in, &jsonctx));
- CHECK_LOG_CTX("Invalid character in JSON Number value (\"x\").", "Line number 1.");
+ CHECK_LOG_CTX("Invalid character in JSON Number value (\"x\").", NULL, 1);
str = "1.";
assert_non_null(ly_in_memory(in, str));
assert_int_equal(LY_EVALID, lyjson_ctx_new(UTEST_LYCTX, in, &jsonctx));
- CHECK_LOG_CTX("Unexpected end-of-input.", "Line number 1.");
+ CHECK_LOG_CTX("Unexpected end-of-input.", NULL, 1);
str = " 1eo ";
assert_non_null(ly_in_memory(in, str));
assert_int_equal(LY_EVALID, lyjson_ctx_new(UTEST_LYCTX, in, &jsonctx));
- CHECK_LOG_CTX("Invalid character in JSON Number value (\"o\").", "Line number 1.");
+ CHECK_LOG_CTX("Invalid character in JSON Number value (\"o\").", NULL, 1);
str = "1e";
assert_non_null(ly_in_memory(in, str));
assert_int_equal(LY_EVALID, lyjson_ctx_new(UTEST_LYCTX, in, &jsonctx));
- CHECK_LOG_CTX("Unexpected end-of-input.", "Line number 1.");
+ CHECK_LOG_CTX("Unexpected end-of-input.", NULL, 1);
str = "1E1000";
assert_non_null(ly_in_memory(in, str));
assert_int_equal(LY_EVALID, lyjson_ctx_new(UTEST_LYCTX, in, &jsonctx));
- CHECK_LOG_CTX("Number encoded as a string exceeded the LY_NUMBER_MAXLEN limit.", "Line number 1.");
+ CHECK_LOG_CTX("Number encoded as a string exceeded the LY_NUMBER_MAXLEN limit.", NULL, 1);
str = "1e9999999999999999999";
assert_non_null(ly_in_memory(in, str));
assert_int_equal(LY_EVALID, lyjson_ctx_new(UTEST_LYCTX, in, &jsonctx));
- CHECK_LOG_CTX("Exponent out-of-bounds in a JSON Number value (1e9999999999999999999).", "Line number 1.");
+ CHECK_LOG_CTX("Exponent out-of-bounds in a JSON Number value (1e9999999999999999999).", NULL, 1);
str = "1.1e66000";
assert_non_null(ly_in_memory(in, str));
assert_int_equal(LY_EVALID, lyjson_ctx_new(UTEST_LYCTX, in, &jsonctx));
- CHECK_LOG_CTX("Exponent out-of-bounds in a JSON Number value (1.1e66000).", "Line number 1.");
+ CHECK_LOG_CTX("Exponent out-of-bounds in a JSON Number value (1.1e66000).", NULL, 1);
str = "1.1e-66000";
assert_non_null(ly_in_memory(in, str));
assert_int_equal(LY_EVALID, lyjson_ctx_new(UTEST_LYCTX, in, &jsonctx));
- CHECK_LOG_CTX("Exponent out-of-bounds in a JSON Number value (1.1e-66000).", "Line number 1.");
+ CHECK_LOG_CTX("Exponent out-of-bounds in a JSON Number value (1.1e-66000).", NULL, 1);
ly_in_free(in, 0);
}
@@ -532,8 +532,8 @@ test_string(void **state)
str = "\"unterminated string";
assert_non_null(ly_in_memory(in, str));
assert_int_equal(LY_EVALID, lyjson_ctx_new(UTEST_LYCTX, in, &jsonctx));
- CHECK_LOG_CTX("Missing quotation-mark at the end of a JSON string.", "Line number 1.");
- CHECK_LOG_CTX("Unexpected end-of-input.", "Line number 1.");
+ CHECK_LOG_CTX("Missing quotation-mark at the end of a JSON string.", NULL, 1);
+ CHECK_LOG_CTX("Unexpected end-of-input.", NULL, 1);
ly_in_free(in, 0);
}
@@ -662,7 +662,7 @@ test_object(void **state)
assert_int_equal(LYJSON_OBJECT, lyjson_ctx_status(jsonctx));
assert_int_equal(LY_EVALID, lyjson_ctx_next(jsonctx, NULL));
- CHECK_LOG_CTX("Invalid character sequence \"unquoted : \"data\"}\", expected a JSON object name.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid character sequence \"unquoted : \"data\"}\", expected a JSON object name.", NULL, 1);
lyjson_ctx_free(jsonctx);
ly_in_free(in, 0);
@@ -752,7 +752,7 @@ test_array(void **state)
assert_non_null(ly_in_memory(in, str));
assert_int_equal(LY_SUCCESS, lyjson_ctx_new(UTEST_LYCTX, in, &jsonctx));
assert_int_equal(LY_EVALID, lyjson_ctx_next(jsonctx, NULL));
- CHECK_LOG_CTX("Invalid character sequence \", null]\", expected a JSON value.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid character sequence \", null]\", expected a JSON value.", NULL, 1);
lyjson_ctx_free(jsonctx);
ly_in_free(in, 0);
diff --git a/tests/utests/basic/test_plugins.c b/tests/utests/basic/test_plugins.c
index de13c0b11..a41720815 100644
--- a/tests/utests/basic/test_plugins.c
+++ b/tests/utests/basic/test_plugins.c
@@ -91,7 +91,7 @@ test_not_implemented(void **state)
free(printed);
assert_int_equal(LY_SUCCESS, lyd_parse_data_mem(UTEST_LYCTX, data, LYD_XML, 0, LYD_VALIDATE_PRESENT, &tree));
- CHECK_LOG_CTX(NULL, NULL);
+ CHECK_LOG_CTX(NULL, NULL, 0);
lyd_free_all(tree);
}
diff --git a/tests/utests/basic/test_set.c b/tests/utests/basic/test_set.c
index 9485927bc..04ea6bc4e 100644
--- a/tests/utests/basic/test_set.c
+++ b/tests/utests/basic/test_set.c
@@ -70,42 +70,31 @@ test_basics(void **UNUSED(state))
}
static void
-test_inval(void **state)
+test_inval(void **UNUSED(state))
{
- struct ly_set set;
-
- memset(&set, 0, sizeof set);
-
- ly_set_clean(NULL, NULL);
- CHECK_LOG(NULL, NULL);
-
- ly_set_erase(NULL, NULL);
- CHECK_LOG(NULL, NULL);
-
- ly_set_free(NULL, NULL);
- CHECK_LOG(NULL, NULL);
+ struct ly_set set = {0};
assert_int_equal(LY_EINVAL, ly_set_dup(NULL, NULL, NULL));
- CHECK_LOG("Invalid argument set (ly_set_dup()).", NULL);
+ CHECK_LOG_LASTMSG("Invalid argument set (ly_set_dup()).");
assert_int_equal(LY_EINVAL, ly_set_add(NULL, NULL, 0, NULL));
- CHECK_LOG("Invalid argument set (ly_set_add()).", NULL);
+ CHECK_LOG_LASTMSG("Invalid argument set (ly_set_add()).");
assert_int_equal(LY_EINVAL, ly_set_merge(NULL, NULL, 0, NULL));
- CHECK_LOG("Invalid argument trg (ly_set_merge()).", NULL);
+ CHECK_LOG_LASTMSG("Invalid argument trg (ly_set_merge()).");
assert_int_equal(LY_SUCCESS, ly_set_merge(&set, NULL, 0, NULL));
assert_int_equal(LY_EINVAL, ly_set_rm_index(NULL, 0, NULL));
- CHECK_LOG("Invalid argument set (ly_set_rm_index()).", NULL);
+ CHECK_LOG_LASTMSG("Invalid argument set (ly_set_rm_index()).");
assert_int_equal(LY_EINVAL, ly_set_rm_index(&set, 1, NULL));
- CHECK_LOG("Invalid argument index (ly_set_rm_index()).", NULL);
+ CHECK_LOG_LASTMSG("Invalid argument index (ly_set_rm_index()).");
assert_int_equal(LY_EINVAL, ly_set_rm(NULL, NULL, NULL));
- CHECK_LOG("Invalid argument set (ly_set_rm()).", NULL);
+ CHECK_LOG_LASTMSG("Invalid argument set (ly_set_rm()).");
assert_int_equal(LY_EINVAL, ly_set_rm(&set, NULL, NULL));
- CHECK_LOG("Invalid argument object (ly_set_rm()).", NULL);
+ CHECK_LOG_LASTMSG("Invalid argument object (ly_set_rm()).");
assert_int_equal(LY_EINVAL, ly_set_rm(&set, &set, NULL));
- CHECK_LOG("Invalid argument object (ly_set_rm()).", NULL);
+ CHECK_LOG_LASTMSG("Invalid argument object (ly_set_rm()).");
}
static void
diff --git a/tests/utests/basic/test_xml.c b/tests/utests/basic/test_xml.c
index 071846aff..25aed03ef 100644
--- a/tests/utests/basic/test_xml.c
+++ b/tests/utests/basic/test_xml.c
@@ -43,43 +43,42 @@ test_element(void **state)
str = "";
assert_int_equal(LY_SUCCESS, ly_in_new_memory(str, &in));
assert_int_equal(LY_EVALID, lyxml_ctx_new(UTEST_LYCTX, in, &xmlctx));
- CHECK_LOG_CTX("Stray closing element tag (\"element\").", "Line number 1.");
+ CHECK_LOG_CTX("Stray closing element tag (\"element\").", NULL, 1);
ly_in_free(in, 0);
/* no element */
- UTEST_LOG_CLEAN;
str = "no data present";
assert_int_equal(LY_SUCCESS, ly_in_new_memory(str, &in));
assert_int_equal(LY_EVALID, lyxml_ctx_new(UTEST_LYCTX, in, &xmlctx));
- CHECK_LOG_CTX("Invalid character sequence \"no data present\", expected element tag start ('<').", "Line number 1.");
+ CHECK_LOG_CTX("Invalid character sequence \"no data present\", expected element tag start ('<').", NULL, 1);
ly_in_free(in, 0);
/* not supported DOCTYPE */
str = "";
assert_int_equal(LY_SUCCESS, ly_in_new_memory(str, &in));
assert_int_equal(LY_EVALID, lyxml_ctx_new(UTEST_LYCTX, in, &xmlctx));
- CHECK_LOG_CTX("Document Type Declaration not supported.", "Line number 1.");
+ CHECK_LOG_CTX("Document Type Declaration not supported.", NULL, 1);
ly_in_free(in, 0);
/* invalid XML */
str = "";
assert_int_equal(LY_SUCCESS, ly_in_new_memory(str, &in));
assert_int_equal(LY_EVALID, lyxml_ctx_new(UTEST_LYCTX, in, &xmlctx));
- CHECK_LOG_CTX("Unknown XML section \"\".", "Line number 1.");
+ CHECK_LOG_CTX("Unknown XML section \"\".", NULL, 1);
ly_in_free(in, 0);
/* namespace ambiguity */
str = "";
assert_int_equal(LY_SUCCESS, ly_in_new_memory(str, &in));
assert_int_equal(LY_EVALID, lyxml_ctx_new(UTEST_LYCTX, in, &xmlctx));
- CHECK_LOG_CTX("Duplicate default XML namespaces \"urn1\" and \"urn2\".", "Line number 1.");
+ CHECK_LOG_CTX("Duplicate default XML namespaces \"urn1\" and \"urn2\".", NULL, 1);
ly_in_free(in, 0);
/* prefix duplicate */
str = "";
assert_int_equal(LY_SUCCESS, ly_in_new_memory(str, &in));
assert_int_equal(LY_EVALID, lyxml_ctx_new(UTEST_LYCTX, in, &xmlctx));
- CHECK_LOG_CTX("Duplicate XML NS prefix \"a\" used for namespaces \"urn1\" and \"urn2\".", "Line number 1.");
+ CHECK_LOG_CTX("Duplicate XML NS prefix \"a\" used for namespaces \"urn1\" and \"urn2\".", NULL, 1);
ly_in_free(in, 0);
/* unqualified element */
@@ -210,7 +209,7 @@ test_element(void **state)
assert_int_equal(LYXML_ELEM_CONTENT, xmlctx->status);
assert_int_equal(LY_EVALID, lyxml_ctx_next(xmlctx));
- CHECK_LOG_CTX("Opening (\"yin:element\") and closing (\"element\") elements tag mismatch.", "Line number 1.");
+ CHECK_LOG_CTX("Opening (\"yin:element\") and closing (\"element\") elements tag mismatch.", NULL, 1);
lyxml_ctx_free(xmlctx);
ly_in_free(in, 0);
@@ -220,7 +219,7 @@ test_element(void **state)
assert_int_equal(LY_SUCCESS, lyxml_ctx_new(UTEST_LYCTX, in, &xmlctx));
assert_int_equal(LY_SUCCESS, lyxml_ctx_next(xmlctx));
assert_int_equal(LY_EVALID, lyxml_ctx_next(xmlctx));
- CHECK_LOG_CTX("Invalid character sequence \"/>\", expected element tag termination ('>').", "Line number 1.");
+ CHECK_LOG_CTX("Invalid character sequence \"/>\", expected element tag termination ('>').", NULL, 1);
lyxml_ctx_free(xmlctx);
ly_in_free(in, 0);
@@ -246,14 +245,14 @@ test_element(void **state)
str = "<¢:element>";
assert_int_equal(LY_SUCCESS, ly_in_new_memory(str, &in));
assert_int_equal(LY_EVALID, lyxml_ctx_new(UTEST_LYCTX, in, &xmlctx));
- CHECK_LOG_CTX("Identifier \"¢:element>\" starts with an invalid character.", "Line number 1.");
+ CHECK_LOG_CTX("Identifier \"¢:element>\" starts with an invalid character.", NULL, 1);
ly_in_free(in, 0);
str = "";
assert_int_equal(LY_SUCCESS, ly_in_new_memory(str, &in));
assert_int_equal(LY_SUCCESS, lyxml_ctx_new(UTEST_LYCTX, in, &xmlctx));
assert_int_equal(LY_EVALID, lyxml_ctx_next(xmlctx));
- CHECK_LOG_CTX("Invalid character sequence \"⁐element>\", expected element tag end ('>' or '/>') or an attribute.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid character sequence \"⁐element>\", expected element tag end ('>' or '/>') or an attribute.", NULL, 1);
lyxml_ctx_free(xmlctx);
ly_in_free(in, 0);
@@ -302,7 +301,7 @@ test_element(void **state)
assert_true(!strncmp("text", xmlctx->value, xmlctx->value_len));
assert_int_equal(LY_EVALID, lyxml_ctx_next(xmlctx));
- CHECK_LOG_CTX("Opening (\"a\") and closing (\"b\") elements tag mismatch.", "Line number 1.");
+ CHECK_LOG_CTX("Opening (\"a\") and closing (\"b\") elements tag mismatch.", NULL, 1);
lyxml_ctx_free(xmlctx);
ly_in_free(in, 0);
}
@@ -319,19 +318,19 @@ test_attribute(void **state)
str = "";
assert_int_equal(LY_SUCCESS, ly_in_new_memory(str, &in));
assert_int_equal(LY_EVALID, lyxml_ctx_new(UTEST_LYCTX, in, &xmlctx));
- CHECK_LOG_CTX("Invalid character sequence \"/>\", expected '='.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid character sequence \"/>\", expected '='.", NULL, 1);
ly_in_free(in, 0);
str = "";
assert_int_equal(LY_SUCCESS, ly_in_new_memory(str, &in));
assert_int_equal(LY_EVALID, lyxml_ctx_new(UTEST_LYCTX, in, &xmlctx));
- CHECK_LOG_CTX("Invalid character sequence \"/>\", expected either single or double quotation mark.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid character sequence \"/>\", expected either single or double quotation mark.", NULL, 1);
ly_in_free(in, 0);
str = "";
assert_int_equal(LY_SUCCESS, ly_in_new_memory(str, &in));
assert_int_equal(LY_EVALID, lyxml_ctx_new(UTEST_LYCTX, in, &xmlctx));
- CHECK_LOG_CTX("Invalid character sequence \"yyy/>\", expected either single or double quotation mark.", "Line number 2.");
+ CHECK_LOG_CTX("Invalid character sequence \"yyy/>\", expected either single or double quotation mark.", NULL, 2);
ly_in_free(in, 0);
/* valid attribute */
@@ -390,7 +389,7 @@ test_text(void **state)
/* empty value but in single quotes */
assert_int_equal(LY_SUCCESS, ly_in_new_memory("=\'\'", &in));
xmlctx->in = in;
- LOG_LOCSET(NULL, NULL, NULL, in);
+ ly_log_location(NULL, NULL, NULL, in);
xmlctx->status = LYXML_ATTRIBUTE;
assert_int_equal(LY_SUCCESS, lyxml_ctx_next(xmlctx));
assert_int_equal(LYXML_ATTR_CONTENT, xmlctx->status);
@@ -402,7 +401,7 @@ test_text(void **state)
/* empty element content - only formating before defining child */
assert_int_equal(LY_SUCCESS, ly_in_new_memory(">\n ", &in));
xmlctx->in = in;
- LOG_LOCSET(NULL, NULL, NULL, in);
+ ly_log_location(NULL, NULL, NULL, in);
xmlctx->status = LYXML_ELEMENT;
assert_int_equal(LY_SUCCESS, lyxml_ctx_next(xmlctx));
assert_int_equal(LYXML_ELEM_CONTENT, xmlctx->status);
@@ -414,22 +413,22 @@ test_text(void **state)
/* empty element content is invalid - missing content terminating character < */
assert_int_equal(LY_SUCCESS, ly_in_new_memory("", &in));
xmlctx->in = in;
- LOG_LOCSET(NULL, NULL, NULL, in);
+ ly_log_location(NULL, NULL, NULL, in);
xmlctx->status = LYXML_ELEM_CONTENT;
assert_int_equal(LY_EVALID, lyxml_ctx_next(xmlctx));
- CHECK_LOG_CTX("Unexpected end-of-input.", "Line number 1.");
+ CHECK_LOG_CTX("Unexpected end-of-input.", NULL, 1);
ly_in_free(in, 0);
assert_int_equal(LY_SUCCESS, ly_in_new_memory("xxx", &in));
xmlctx->in = in;
- LOG_LOCSET(NULL, NULL, NULL, in);
+ ly_log_location(NULL, NULL, NULL, in);
xmlctx->status = LYXML_ELEM_CONTENT;
assert_int_equal(LY_EVALID, lyxml_ctx_next(xmlctx));
- CHECK_LOG_CTX("Invalid character sequence \"xxx\", expected element tag start ('<').", "Line number 1.");
+ CHECK_LOG_CTX("Invalid character sequence \"xxx\", expected element tag start ('<').", NULL, 1);
ly_in_free(in, 0);
lyxml_ctx_free(xmlctx);
- LOG_LOCBACK(0, 0, 0, 4);
+ ly_log_location_revert(0, 0, 0, 4);
/* valid strings */
str = "€𠜎Øn \n<&"'> ROK";
@@ -448,7 +447,7 @@ test_text(void **state)
/* test using n-bytes UTF8 hexadecimal code points */
assert_int_equal(LY_SUCCESS, ly_in_new_memory("=\'$¢€𐍈\'", &in));
xmlctx->in = in;
- LOG_LOCSET(NULL, NULL, NULL, in);
+ ly_log_location(NULL, NULL, NULL, in);
xmlctx->status = LYXML_ATTRIBUTE;
assert_int_equal(LY_SUCCESS, lyxml_ctx_next(xmlctx));
assert_int_equal(LYXML_ATTR_CONTENT, xmlctx->status);
@@ -460,7 +459,7 @@ test_text(void **state)
/* CDATA value */
assert_int_equal(LY_SUCCESS, ly_in_new_memory("> &\"' ]]> ", &in));
xmlctx->in = in;
- LOG_LOCSET(NULL, NULL, NULL, in);
+ ly_log_location(NULL, NULL, NULL, in);
xmlctx->status = LYXML_ATTR_CONTENT;
assert_int_equal(LY_SUCCESS, lyxml_ctx_next(xmlctx));
assert_int_equal(LYXML_ELEM_CONTENT, xmlctx->status);
@@ -473,62 +472,62 @@ test_text(void **state)
/* invalid characters in string */
assert_int_equal(LY_SUCCESS, ly_in_new_memory("=\'R\'", &in));
xmlctx->in = in;
- LOG_LOCSET(NULL, NULL, NULL, in);
+ ly_log_location(NULL, NULL, NULL, in);
xmlctx->status = LYXML_ATTRIBUTE;
assert_int_equal(LY_EVALID, lyxml_ctx_next(xmlctx));
- CHECK_LOG_CTX("Invalid character sequence \"'\", expected ;.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid character sequence \"'\", expected ;.", NULL, 1);
ly_in_free(in, 0);
assert_int_equal(LY_SUCCESS, ly_in_new_memory("=\"R\"", &in));
xmlctx->in = in;
- LOG_LOCSET(NULL, NULL, NULL, in);
+ ly_log_location(NULL, NULL, NULL, in);
xmlctx->status = LYXML_ATTRIBUTE;
assert_int_equal(LY_EVALID, lyxml_ctx_next(xmlctx));
- CHECK_LOG_CTX("Invalid character sequence \"\"\", expected ;.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid character sequence \"\"\", expected ;.", NULL, 1);
ly_in_free(in, 0);
assert_int_equal(LY_SUCCESS, ly_in_new_memory("=\"&nonsense;\"", &in));
xmlctx->in = in;
- LOG_LOCSET(NULL, NULL, NULL, in);
+ ly_log_location(NULL, NULL, NULL, in);
xmlctx->status = LYXML_ATTRIBUTE;
assert_int_equal(LY_EVALID, lyxml_ctx_next(xmlctx));
- CHECK_LOG_CTX("Entity reference \"&nonsense;\" not supported, only predefined references allowed.", "Line number 1.");
+ CHECK_LOG_CTX("Entity reference \"&nonsense;\" not supported, only predefined references allowed.", NULL, 1);
ly_in_free(in, 0);
assert_int_equal(LY_SUCCESS, ly_in_new_memory(">o122;", &in));
xmlctx->in = in;
- LOG_LOCSET(NULL, NULL, NULL, in);
+ ly_log_location(NULL, NULL, NULL, in);
xmlctx->status = LYXML_ELEMENT;
assert_int_equal(LY_EVALID, lyxml_ctx_next(xmlctx));
- CHECK_LOG_CTX("Invalid character reference \"o122;\".", "Line number 1.");
+ CHECK_LOG_CTX("Invalid character reference \"o122;\".", NULL, 1);
ly_in_free(in, 0);
assert_int_equal(LY_SUCCESS, ly_in_new_memory("=\'\'", &in));
xmlctx->in = in;
- LOG_LOCSET(NULL, NULL, NULL, in);
+ ly_log_location(NULL, NULL, NULL, in);
xmlctx->status = LYXML_ATTRIBUTE;
assert_int_equal(LY_EVALID, lyxml_ctx_next(xmlctx));
- CHECK_LOG_CTX("Invalid character reference \"\'\" (0x00000006).", "Line number 1.");
+ CHECK_LOG_CTX("Invalid character reference \"\'\" (0x00000006).", NULL, 1);
ly_in_free(in, 0);
assert_int_equal(LY_SUCCESS, ly_in_new_memory("=\'\'", &in));
xmlctx->in = in;
- LOG_LOCSET(NULL, NULL, NULL, in);
+ ly_log_location(NULL, NULL, NULL, in);
xmlctx->status = LYXML_ATTRIBUTE;
assert_int_equal(LY_EVALID, lyxml_ctx_next(xmlctx));
- CHECK_LOG_CTX("Invalid character reference \"\'\" (0x0000fdd0).", "Line number 1.");
+ CHECK_LOG_CTX("Invalid character reference \"\'\" (0x0000fdd0).", NULL, 1);
ly_in_free(in, 0);
assert_int_equal(LY_SUCCESS, ly_in_new_memory("=\'\'", &in));
xmlctx->in = in;
- LOG_LOCSET(NULL, NULL, NULL, in);
+ ly_log_location(NULL, NULL, NULL, in);
xmlctx->status = LYXML_ATTRIBUTE;
assert_int_equal(LY_EVALID, lyxml_ctx_next(xmlctx));
- CHECK_LOG_CTX("Invalid character reference \"\'\" (0x0000ffff).", "Line number 1.");
+ CHECK_LOG_CTX("Invalid character reference \"\'\" (0x0000ffff).", NULL, 1);
ly_in_free(in, 0);
lyxml_ctx_free(xmlctx);
- LOG_LOCBACK(0, 0, 0, 9);
+ ly_log_location_revert(0, 0, 0, 9);
}
static void
diff --git a/tests/utests/basic/test_xpath.c b/tests/utests/basic/test_xpath.c
index 754abf25e..7a2785b36 100644
--- a/tests/utests/basic/test_xpath.c
+++ b/tests/utests/basic/test_xpath.c
@@ -267,11 +267,11 @@ test_invalid(void **state)
assert_int_equal(LY_EVALID, lyd_find_xpath(tree, "/a:foo2[.=]", &set));
assert_null(set);
- CHECK_LOG_CTX("Unexpected XPath token \"]\" (\"]\").", NULL);
+ CHECK_LOG_CTX("Unexpected XPath token \"]\" (\"]\").", NULL, 0);
assert_int_equal(LY_EVALID, lyd_find_xpath(tree, "/a:", &set));
assert_null(set);
- CHECK_LOG_CTX("Invalid character 'a'[2] of expression '/a:'.", NULL);
+ CHECK_LOG_CTX("Invalid character 'a'[2] of expression '/a:'.", NULL, 0);
lyd_free_all(tree);
}
@@ -938,7 +938,7 @@ test_variables(void **state)
LOCAL_SETUP(data, tree);
assert_int_equal(LY_SUCCESS, lyxp_vars_set(&vars, "var1", "\"mstr\""));
assert_int_equal(LY_ENOTFOUND, lyd_find_xpath2(tree, "/foo[text() = $var55]", vars, &set));
- CHECK_LOG_CTX("Variable \"var55\" not defined.", NULL);
+ CHECK_LOG_CTX("Variable \"var55\" not defined.", NULL, 0);
LOCAL_TEARDOWN(set, tree, vars);
/* Syntax error in value. */
@@ -947,7 +947,7 @@ test_variables(void **state)
LOCAL_SETUP(data, tree);
assert_int_equal(LY_SUCCESS, lyxp_vars_set(&vars, "var", "\""));
assert_int_equal(LY_EVALID, lyd_find_xpath2(tree, "/foo[$var]", vars, &set));
- CHECK_LOG_CTX("Unterminated string delimited with \" (\").", "Data location \"/a:foo\".");
+ CHECK_LOG_CTX("Unterminated string delimited with \" (\").", "/a:foo", 0);
LOCAL_TEARDOWN(set, tree, vars);
/* Prefix is not supported. */
@@ -956,7 +956,7 @@ test_variables(void **state)
LOCAL_SETUP(data, tree);
assert_int_equal(LY_SUCCESS, lyxp_vars_set(&vars, "var", "\""));
assert_int_equal(LY_EVALID, lyd_find_xpath2(tree, "/foo[$pref:var]", vars, &set));
- CHECK_LOG_CTX("Variable with prefix is not supported.", NULL);
+ CHECK_LOG_CTX("Variable with prefix is not supported.", NULL, 0);
LOCAL_TEARDOWN(set, tree, vars);
#undef LOCAL_SETUP
diff --git a/tests/utests/data/test_diff.c b/tests/utests/data/test_diff.c
index 4400b5da2..0edd6bde3 100644
--- a/tests/utests/data/test_diff.c
+++ b/tests/utests/data/test_diff.c
@@ -318,7 +318,7 @@ test_invalid(void **state)
struct lyd_node *diff = NULL;
assert_int_equal(lyd_diff_siblings(model_1, lyd_child(model_1), 0, &diff), LY_EINVAL);
- CHECK_LOG_CTX("Invalid arguments - cannot create diff for unrelated data (lyd_diff()).", NULL);
+ CHECK_LOG_CTX("Invalid arguments - cannot create diff for unrelated data (lyd_diff()).", NULL, 0);
assert_int_equal(lyd_diff_siblings(NULL, NULL, 0, NULL), LY_EINVAL);
diff --git a/tests/utests/data/test_new.c b/tests/utests/data/test_new.c
index 5cee9032e..d75f6672b 100644
--- a/tests/utests/data/test_new.c
+++ b/tests/utests/data/test_new.c
@@ -106,16 +106,16 @@ test_top_level(void **state)
lyd_free_tree(node);
assert_int_equal(lyd_new_list2(NULL, mod, "l1", "[]", 0, &node), LY_EVALID);
- CHECK_LOG_CTX("Unexpected XPath token \"]\" (\"]\").", "Schema location \"/a:l1\".");
+ CHECK_LOG_CTX("Unexpected XPath token \"]\" (\"]\").", "/a:l1", 0);
assert_int_equal(lyd_new_list2(NULL, mod, "l1", "[key1='a'][key2='b']", 0, &node), LY_ENOTFOUND);
- CHECK_LOG_CTX("Not found node \"key1\" in path.", "Schema location \"/a:l1\".");
+ CHECK_LOG_CTX("Not found node \"key1\" in path.", "/a:l1", 0);
assert_int_equal(lyd_new_list2(NULL, mod, "l1", "[a='a'][b='b'][c='c']", 0, &node), LY_EVALID);
- CHECK_LOG_CTX("Key expected instead of leaf \"c\" in path.", "Schema location \"/a:l1\".");
+ CHECK_LOG_CTX("Key expected instead of leaf \"c\" in path.", "/a:l1", 0);
assert_int_equal(lyd_new_list2(NULL, mod, "c", "[a='a'][b='b']", 0, &node), LY_ENOTFOUND);
- CHECK_LOG_CTX("List node \"c\" not found.", NULL);
+ CHECK_LOG_CTX("List node \"c\" not found.", NULL, 0);
assert_int_equal(lyd_new_list2(NULL, mod, "l1", "[a='a'][b='b']", 0, &node), LY_SUCCESS);
lyd_free_tree(node);
@@ -141,10 +141,10 @@ test_top_level(void **state)
/* leaf */
assert_int_equal(lyd_new_term(NULL, mod, "foo", "[a='a'][b='b'][c='c']", 0, &node), LY_EVALID);
- CHECK_LOG_CTX("Invalid type uint16 value \"[a='a'][b='b'][c='c']\".", "Schema location \"/a:foo\".");
+ CHECK_LOG_CTX("Invalid type uint16 value \"[a='a'][b='b'][c='c']\".", "/a:foo", 0);
assert_int_equal(lyd_new_term(NULL, mod, "c", "value", 0, &node), LY_ENOTFOUND);
- CHECK_LOG_CTX("Term node \"c\" not found.", NULL);
+ CHECK_LOG_CTX("Term node \"c\" not found.", NULL, 0);
assert_int_equal(lyd_new_term(NULL, mod, "foo", "256", 0, &node), LY_SUCCESS);
lyd_free_tree(node);
@@ -158,10 +158,10 @@ test_top_level(void **state)
lyd_free_tree(node);
assert_int_equal(lyd_new_inner(NULL, mod, "l1", 0, &node), LY_ENOTFOUND);
- CHECK_LOG_CTX("Inner node (container, notif, RPC, or action) \"l1\" not found.", NULL);
+ CHECK_LOG_CTX("Inner node (container, notif, RPC, or action) \"l1\" not found.", NULL, 0);
assert_int_equal(lyd_new_inner(NULL, mod, "l2", 0, &node), LY_ENOTFOUND);
- CHECK_LOG_CTX("Inner node (container, notif, RPC, or action) \"l2\" not found.", NULL);
+ CHECK_LOG_CTX("Inner node (container, notif, RPC, or action) \"l2\" not found.", NULL, 0);
/* anydata */
assert_int_equal(lyd_new_any(NULL, mod, "any", "{\"node\":\"val\"}", 0, LYD_ANYDATA_STRING, 0, &node), LY_SUCCESS);
@@ -171,7 +171,7 @@ test_top_level(void **state)
/* key-less list */
assert_int_equal(lyd_new_list2(NULL, mod, "l2", "[a='a'][b='b']", 0, &node), LY_EVALID);
- CHECK_LOG_CTX("List predicate defined for keyless list \"l2\" in path.", "Schema location \"/a:l2\".");
+ CHECK_LOG_CTX("List predicate defined for keyless list \"l2\" in path.", "/a:l2", 0);
assert_int_equal(lyd_new_list2(NULL, mod, "l2", "", 0, &node), LY_SUCCESS);
lyd_free_tree(node);
@@ -255,7 +255,7 @@ test_path(void **state)
/* try LYD_NEWOPT_OPAQ */
ret = lyd_new_path2(NULL, UTEST_LYCTX, "/a:l1", NULL, 0, 0, 0, NULL, NULL);
assert_int_equal(ret, LY_EINVAL);
- CHECK_LOG_CTX("Predicate missing for list \"l1\" in path \"/a:l1\".", "Schema location \"/a:l1\".");
+ CHECK_LOG_CTX("Predicate missing for list \"l1\" in path \"/a:l1\".", "/a:l1", 0);
ret = lyd_new_path2(NULL, UTEST_LYCTX, "/a:l1", NULL, 0, 0, LYD_NEW_PATH_OPAQ, NULL, &root);
assert_int_equal(ret, LY_SUCCESS);
@@ -266,7 +266,7 @@ test_path(void **state)
ret = lyd_new_path2(NULL, UTEST_LYCTX, "/a:foo", NULL, 0, 0, 0, NULL, NULL);
assert_int_equal(ret, LY_EVALID);
- CHECK_LOG_CTX("Invalid type uint16 empty value.", "Schema location \"/a:foo\".");
+ CHECK_LOG_CTX("Invalid type uint16 empty value.", "/a:foo", 0);
ret = lyd_new_path2(NULL, UTEST_LYCTX, "/a:foo", NULL, 0, 0, LYD_NEW_PATH_OPAQ, NULL, &root);
assert_int_equal(ret, LY_SUCCESS);
@@ -301,7 +301,7 @@ test_path(void **state)
ret = lyd_new_path2(root, NULL, "/a:c2/l3[1]", NULL, 0, 0, 0, NULL, &node);
assert_int_equal(ret, LY_EEXIST);
- CHECK_LOG_CTX("Path \"/a:c2/l3[1]\" already exists.", "Data location \"/a:c2/l3[1]\".");
+ CHECK_LOG_CTX("Path \"/a:c2/l3[1]\" already exists.", "/a:c2/l3[1]", 0);
ret = lyd_new_path2(root, NULL, "/a:c2/l3[2]/x", "val2", 0, 0, 0, NULL, &node);
assert_int_equal(ret, LY_SUCCESS);
@@ -360,7 +360,7 @@ test_path(void **state)
ret = lyd_new_path2(root, NULL, "/a:ll2[1]", "", 0, 0, 0, NULL, &node);
assert_int_equal(ret, LY_EEXIST);
- CHECK_LOG_CTX("Path \"/a:ll2[1]\" already exists.", "Data location \"/a:ll2[1]\".");
+ CHECK_LOG_CTX("Path \"/a:ll2[1]\" already exists.", "/a:ll2[1]", 0);
ret = lyd_new_path2(root, NULL, "/a:ll2[2]", "val2", 0, 0, 0, NULL, &node);
assert_int_equal(ret, LY_SUCCESS);
@@ -375,7 +375,7 @@ test_path(void **state)
ret = lyd_new_path2(root, NULL, "/a:ll2[3][.='val3']", NULL, 0, 0, 0, NULL, &node);
assert_int_equal(ret, LY_EVALID);
- CHECK_LOG_CTX("Unparsed characters \"[.='val3']\" left at the end of path.", NULL);
+ CHECK_LOG_CTX("Unparsed characters \"[.='val3']\" left at the end of path.", NULL, 0);
lyd_print_mem(&str, root, LYD_XML, LYD_PRINT_WITHSIBLINGS);
assert_string_equal(str,
diff --git a/tests/utests/data/test_parser_json.c b/tests/utests/data/test_parser_json.c
index 8feed9c09..0361b6ab5 100644
--- a/tests/utests/data/test_parser_json.c
+++ b/tests/utests/data/test_parser_json.c
@@ -61,9 +61,9 @@ setup(void **state)
#define CHECK_PARSE_LYD(INPUT, PARSE_OPTION, VALIDATE_OPTION, TREE) \
CHECK_PARSE_LYD_PARAM(INPUT, LYD_JSON, PARSE_OPTION, VALIDATE_OPTION, LY_SUCCESS, TREE)
-#define PARSER_CHECK_ERROR(INPUT, PARSE_OPTION, VALIDATE_OPTION, MODEL, RET_VAL, ERR_MESSAGE, ERR_PATH) \
+#define PARSER_CHECK_ERROR(INPUT, PARSE_OPTION, VALIDATE_OPTION, MODEL, RET_VAL, ERR_MESSAGE, ERR_PATH, ERR_LINE) \
assert_int_equal(RET_VAL, lyd_parse_data_mem(UTEST_LYCTX, INPUT, LYD_JSON, PARSE_OPTION, VALIDATE_OPTION, &MODEL));\
- CHECK_LOG_CTX(ERR_MESSAGE, ERR_PATH);\
+ CHECK_LOG_CTX(ERR_MESSAGE, ERR_PATH, ERR_LINE);\
assert_null(MODEL)
#define CHECK_LYD_STRING(IN_MODEL, PRINT_OPTION, TEXT) \
@@ -144,27 +144,25 @@ test_leaf(void **state)
lyd_free_all(tree);
PARSER_CHECK_ERROR(data, LYD_PARSE_STRICT, LYD_VALIDATE_PRESENT, tree, LY_EVALID,
- "Unknown (or not implemented) YANG module \"x\" of metadata \"x:xxx\".", "Data location \"/@a:foo\", line number 1.");
+ "Unknown (or not implemented) YANG module \"x\" of metadata \"x:xxx\".", "/@a:foo", 1);
/* missing referenced metadata node */
PARSER_CHECK_ERROR("{\"@a:foo\" : { \"a:hint\" : 1 }}", 0, LYD_VALIDATE_PRESENT, tree, LY_EVALID,
- "Missing JSON data instance to be coupled with @a:foo metadata.", "Data location \"/@a:foo\", line number 1.");
+ "Missing JSON data instance to be coupled with @a:foo metadata.", "/@a:foo", 1);
/* missing namespace for meatadata*/
PARSER_CHECK_ERROR("{\"a:foo\" : \"value\", \"@a:foo\" : { \"hint\" : 1 }}", 0, LYD_VALIDATE_PRESENT, tree, LY_EVALID,
- "Metadata in JSON must be namespace-qualified, missing prefix for \"hint\".",
- "Schema location \"/a:foo\", line number 1.");
+ "Metadata in JSON must be namespace-qualified, missing prefix for \"hint\".", "/a:foo", 1);
/* invalid JSON type */
data = "{\"a:l1\" : [{ \"a\" : \"val-a\", \"b\" : \"val-b\", \"c\" : 1, \"cont\" : { \"e\" : \"0\" } }]}";
PARSER_CHECK_ERROR(data, 0, LYD_VALIDATE_PRESENT, tree, LY_EVALID,
- "Invalid non-boolean-encoded boolean value \"0\".",
- "Data location \"/a:l1[a='val-a'][b='val-b'][c='1']/cont/e\", line number 1.");
+ "Invalid non-boolean-encoded boolean value \"0\".", "/a:l1[a='val-a'][b='val-b'][c='1']/cont/e", 1);
/* reverse solidus in JSON object member name */
data = "{\"@a:foo\":{\"a:hi\\nt\":1},\"a:foo\":\"xxx\"}";
assert_int_equal(LY_EINVAL, lyd_parse_data_mem(UTEST_LYCTX, data, LYD_JSON, 0, LYD_VALIDATE_PRESENT, &tree));
- CHECK_LOG_CTX("Annotation definition for attribute \"a:hi\nt\" not found.", "Path \"/@a:foo/@a:hi\nt\", line number 1.");
+ CHECK_LOG_CTX("Annotation definition for attribute \"a:hi\nt\" not found.", "/@a:foo/@a:hi\nt", 1);
}
static void
@@ -253,14 +251,13 @@ test_leaflist(void **state)
/* missing referenced metadata node */
PARSER_CHECK_ERROR("{\"@a:ll1\":[{\"a:hint\":1}]}", 0, LYD_VALIDATE_PRESENT, tree, LY_EVALID,
- "Missing JSON data instance to be coupled with @a:ll1 metadata.", "Data location \"/@a:ll1\", line number 1.");
+ "Missing JSON data instance to be coupled with @a:ll1 metadata.", "/@a:ll1", 1);
PARSER_CHECK_ERROR("{\"a:ll1\":[1],\"@a:ll1\":[{\"a:hint\":1},{\"a:hint\":2}]}", 0, LYD_VALIDATE_PRESENT, tree, LY_EVALID,
- "Missing JSON data instance #2 of a:ll1 to be coupled with metadata.", "Schema location \"/a:ll1\", line number 1.");
+ "Missing JSON data instance #2 of a:ll1 to be coupled with metadata.", "/a:ll1", 1);
PARSER_CHECK_ERROR("{\"@a:ll1\":[{\"a:hint\":1},{\"a:hint\":2},{\"a:hint\":3}],\"a:ll1\" : [1, 2]}", 0, LYD_VALIDATE_PRESENT,
- tree, LY_EVALID, "Missing JSON data instance #3 to be coupled with @a:ll1 metadata.",
- "Data location \"/@a:ll1\", line number 1.");
+ tree, LY_EVALID, "Missing JSON data instance #3 to be coupled with @a:ll1 metadata.", "/@a:ll1", 1);
}
static void
@@ -404,19 +401,17 @@ test_list(void **state)
/* missing keys */
PARSER_CHECK_ERROR("{ \"a:l1\": [ {\"c\" : 1, \"b\" : \"b\"}]}", 0, LYD_VALIDATE_PRESENT, tree, LY_EVALID,
- "List instance is missing its key \"a\".",
- "Data location \"/a:l1[b='b'][c='1']\", line number 1.");
+ "List instance is missing its key \"a\".", "/a:l1[b='b'][c='1']", 1);
PARSER_CHECK_ERROR("{ \"a:l1\": [ {\"a\" : \"a\"}]}", 0, LYD_VALIDATE_PRESENT, tree, LY_EVALID,
- "List instance is missing its key \"b\".", "Data location \"/a:l1[a='a']\", line number 1.");
+ "List instance is missing its key \"b\".", "/a:l1[a='a']", 1);
PARSER_CHECK_ERROR("{ \"a:l1\": [ {\"b\" : \"b\", \"a\" : \"a\"}]}", 0, LYD_VALIDATE_PRESENT, tree, LY_EVALID,
- "List instance is missing its key \"c\".", "Data location \"/a:l1[a='a'][b='b']\", line number 1.");
+ "List instance is missing its key \"c\".", "/a:l1[a='a'][b='b']", 1);
/* key duplicate */
PARSER_CHECK_ERROR("{ \"a:l1\": [ {\"c\" : 1, \"b\" : \"b\", \"a\" : \"a\", \"c\" : 1}]}", 0, LYD_VALIDATE_PRESENT,
- tree, LY_EVALID, "Duplicate instance of \"c\".",
- "Data location \"/a:l1[a='a'][b='b'][c='1'][c='1']/c\", line number 1.");
+ tree, LY_EVALID, "Duplicate instance of \"c\".", "/a:l1[a='a'][b='b'][c='1'][c='1']/c", 1);
/* keys order, in contrast to XML, JSON accepts keys in any order even in strict mode */
CHECK_PARSE_LYD("{ \"a:l1\": [ {\"d\" : \"d\", \"a\" : \"a\", \"c\" : 1, \"b\" : \"b\"}]}", 0, LYD_VALIDATE_PRESENT, tree);
@@ -431,7 +426,7 @@ test_list(void **state)
CHECK_LYSC_NODE(leaf->schema, NULL, 0, LYS_CONFIG_W | LYS_STATUS_CURR | LYS_KEY, 1, "c", 1, LYS_LEAF, 1, 0, NULL, 0);
assert_non_null(leaf = (struct lyd_node_term *)leaf->next);
CHECK_LYSC_NODE(leaf->schema, NULL, 0, LYS_CONFIG_W | LYS_STATUS_CURR, 1, "d", 1, LYS_LEAF, 1, 0, NULL, 0);
- CHECK_LOG_CTX(NULL, NULL);
+ CHECK_LOG_CTX(NULL, NULL, 0);
CHECK_LYD_STRING(tree, LYD_PRINT_SHRINK | LYD_PRINT_WITHSIBLINGS,
"{\"a:l1\":[{\"a\":\"a\",\"b\":\"b\",\"c\":1,\"d\":\"d\"}]}");
lyd_free_all(tree);
@@ -449,7 +444,7 @@ test_list(void **state)
assert_non_null(leaf = (struct lyd_node_term *)leaf->next);
CHECK_LYSC_NODE(leaf->schema, NULL, 0, LYS_CONFIG_W | LYS_STATUS_CURR | LYS_KEY, 1, "c",
1, LYS_LEAF, 1, 0, NULL, 0);
- CHECK_LOG_CTX(NULL, NULL);
+ CHECK_LOG_CTX(NULL, NULL, 0);
CHECK_LYD_STRING(tree, LYD_PRINT_SHRINK | LYD_PRINT_WITHSIBLINGS,
"{\"a:l1\":[{\"a\":\"a\",\"b\":\"b\",\"c\":1}]}");
lyd_free_all(tree);
@@ -515,7 +510,7 @@ test_opaq(void **state)
/* invalid value, no flags */
data = "{\"a:foo3\":[null]}";
PARSER_CHECK_ERROR(data, 0, LYD_VALIDATE_PRESENT, tree, LY_EVALID,
- "Invalid non-number-encoded uint32 value \"\".", "Schema location \"/a:foo3\", line number 1.");
+ "Invalid non-number-encoded uint32 value \"\".", "/a:foo3", 1);
/* opaq flag */
CHECK_PARSE_LYD(data, LYD_PARSE_OPAQ | LYD_PARSE_ONLY, 0, tree);
@@ -545,8 +540,7 @@ test_opaq(void **state)
/* missing key, no flags */
data = "{\"a:l1\":[{\"a\":\"val_a\",\"b\":\"val_b\",\"d\":\"val_d\"}]}";
PARSER_CHECK_ERROR(data, 0, LYD_VALIDATE_PRESENT, tree, LY_EVALID,
- "List instance is missing its key \"c\".",
- "Data location \"/a:l1[a='val_a'][b='val_b']\", line number 1.");
+ "List instance is missing its key \"c\".", "/a:l1[a='val_a'][b='val_b']", 1);
/* opaq flag */
CHECK_PARSE_LYD(data, LYD_PARSE_OPAQ | LYD_PARSE_ONLY, 0, tree);
@@ -557,8 +551,7 @@ test_opaq(void **state)
/* invalid key, no flags */
data = "{\"a:l1\":[{\"a\":\"val_a\",\"b\":\"val_b\",\"c\":\"val_c\"}]}";
PARSER_CHECK_ERROR(data, 0, LYD_VALIDATE_PRESENT, tree, LY_EVALID,
- "Invalid non-number-encoded int16 value \"val_c\".",
- "Data location \"/a:l1[a='val_a'][b='val_b']/c\", line number 1.");
+ "Invalid non-number-encoded int16 value \"val_c\".", "/a:l1[a='val_a'][b='val_b']/c", 1);
/* opaq flag */
CHECK_PARSE_LYD(data, LYD_PARSE_OPAQ | LYD_PARSE_ONLY, 0, tree);
@@ -580,13 +573,12 @@ test_opaq(void **state)
/* invalid metadata */
data = "{\"@a:foo\":\"str\",\"@a:foo3\":1,\"a:foo3\":2}";
- PARSER_CHECK_ERROR(data, 0, LYD_VALIDATE_PRESENT, tree, LY_EVALID,
- "Unknown module of node \"@a:foo\".", "Path \"/\".");
- CHECK_LOG_CTX("Missing JSON data instance to be coupled with @a:foo metadata.", "Data location \"/@a:foo\", line number 1.");
+ PARSER_CHECK_ERROR(data, 0, LYD_VALIDATE_PRESENT, tree, LY_EVALID, "Unknown module of node \"@a:foo\".", "/", 0);
+ CHECK_LOG_CTX("Missing JSON data instance to be coupled with @a:foo metadata.", "/@a:foo", 1);
/* empty name */
PARSER_CHECK_ERROR("{\"@a:foo\":{\"\":0}}", 0, LYD_VALIDATE_PRESENT, tree, LY_EVALID,
- "JSON object member name cannot be a zero-length string.", "Data location \"/@a:foo\", line number 1.");
+ "JSON object member name cannot be a zero-length string.", "/@a:foo", 1);
/* opaque data tree format print */
data =
@@ -911,7 +903,7 @@ test_metadata(void **state)
data = "{\"a:c\":{\"x\":\"xval\",\"@x\":{\"a:hint\":\"value\"}}}";
assert_int_equal(LY_EVALID, lyd_parse_data_mem(_UC->ctx, data, LYD_JSON, 0, LYD_VALIDATE_PRESENT, &tree));
assert_null(tree);
- CHECK_LOG_CTX("Invalid non-number-encoded int8 value \"value\".", "Path \"/a:c/x/@a:hint\", line number 1.");
+ CHECK_LOG_CTX("Invalid non-number-encoded int8 value \"value\".", "/a:c/x/@a:hint", 1);
}
int
diff --git a/tests/utests/data/test_parser_xml.c b/tests/utests/data/test_parser_xml.c
index 4f33f0035..d5336c030 100644
--- a/tests/utests/data/test_parser_xml.c
+++ b/tests/utests/data/test_parser_xml.c
@@ -61,9 +61,9 @@ setup(void **state)
#define CHECK_PARSE_LYD(INPUT, PARSE_OPTION, VALIDATE_OPTION, TREE) \
CHECK_PARSE_LYD_PARAM(INPUT, LYD_XML, PARSE_OPTION, VALIDATE_OPTION, LY_SUCCESS, TREE)
-#define PARSER_CHECK_ERROR(INPUT, PARSE_OPTION, VALIDATE_OPTION, MODEL, RET_VAL, ERR_MESSAGE, ERR_PATH) \
+#define PARSER_CHECK_ERROR(INPUT, PARSE_OPTION, VALIDATE_OPTION, MODEL, RET_VAL, ERR_MESSAGE, ERR_PATH, ERR_LINE) \
assert_int_equal(RET_VAL, lyd_parse_data_mem(UTEST_LYCTX, INPUT, LYD_XML, PARSE_OPTION, VALIDATE_OPTION, &MODEL));\
- CHECK_LOG_CTX(ERR_MESSAGE, ERR_PATH);\
+ CHECK_LOG_CTX(ERR_MESSAGE, ERR_PATH, ERR_LINE);\
assert_null(MODEL)
#define CHECK_LYD_STRING(IN_MODEL, PRINT_OPTION, TEXT) \
@@ -118,8 +118,7 @@ test_leaf(void **state)
/* invalid value */
data = "val-aval-b10";
PARSER_CHECK_ERROR(data, LYD_PARSE_STRICT, LYD_VALIDATE_PRESENT, tree, LY_EVALID,
- "Invalid boolean value \"0\".",
- "Data location \"/a:l1[a='val-a'][b='val-b'][c='1']/cont/e\", line number 1.");
+ "Invalid boolean value \"0\".", "/a:l1[a='val-a'][b='val-b'][c='1']/cont/e", 1);
}
static void
@@ -217,22 +216,21 @@ test_list(void **state)
/* missing keys */
PARSER_CHECK_ERROR("1b", 0, LYD_VALIDATE_PRESENT, tree, LY_EVALID,
- "List instance is missing its key \"a\".", "Data location \"/a:l1[b='b'][c='1']\", line number 1.");
- CHECK_LOG_CTX("Invalid position of the key \"b\" in a list.", NULL);
+ "List instance is missing its key \"a\".", "/a:l1[b='b'][c='1']", 1);
+ CHECK_LOG_CTX("Invalid position of the key \"b\" in a list.", NULL, 0);
PARSER_CHECK_ERROR("a", 0, LYD_VALIDATE_PRESENT, tree, LY_EVALID,
- "List instance is missing its key \"b\".", "Data location \"/a:l1[a='a']\", line number 1.");
+ "List instance is missing its key \"b\".", "/a:l1[a='a']", 1);
PARSER_CHECK_ERROR("ba", 0, LYD_VALIDATE_PRESENT, tree, LY_EVALID,
- "List instance is missing its key \"c\".", "Data location \"/a:l1[a='a'][b='b']\", line number 1.");
- CHECK_LOG_CTX("Invalid position of the key \"a\" in a list.", NULL);
+ "List instance is missing its key \"c\".", "/a:l1[a='a'][b='b']", 1);
+ CHECK_LOG_CTX("Invalid position of the key \"a\" in a list.", NULL, 0);
/* key duplicate */
PARSER_CHECK_ERROR("1ba1", 0, LYD_VALIDATE_PRESENT, tree, LY_EVALID,
- "Duplicate instance of \"c\".",
- "Data location \"/a:l1[a='a'][b='b'][c='1'][c='1']/c\", line number 1.");
- CHECK_LOG_CTX("Invalid position of the key \"a\" in a list.", NULL);
- CHECK_LOG_CTX("Invalid position of the key \"b\" in a list.", NULL);
+ "Duplicate instance of \"c\".", "/a:l1[a='a'][b='b'][c='1'][c='1']/c", 1);
+ CHECK_LOG_CTX("Invalid position of the key \"a\" in a list.", NULL, 0);
+ CHECK_LOG_CTX("Invalid position of the key \"b\" in a list.", NULL, 0);
/* keys order */
CHECK_PARSE_LYD("da1b", 0, LYD_VALIDATE_PRESENT, tree);
@@ -247,7 +245,7 @@ test_list(void **state)
CHECK_LYSC_NODE(leaf->schema, NULL, 0, LYS_CONFIG_W | LYS_STATUS_CURR | LYS_KEY, 1, "c", 1, LYS_LEAF, 1, 0, NULL, 0);
assert_non_null(leaf = (struct lyd_node_term *)leaf->next);
CHECK_LYSC_NODE(leaf->schema, NULL, 0, LYS_CONFIG_W | LYS_STATUS_CURR, 1, "d", 1, LYS_LEAF, 1, 0, NULL, 0);
- CHECK_LOG_CTX("Invalid position of the key \"b\" in a list.", NULL);
+ CHECK_LOG_CTX("Invalid position of the key \"b\" in a list.", NULL, 0);
lyd_free_all(tree);
data = "1ba";
@@ -260,12 +258,12 @@ test_list(void **state)
CHECK_LYSC_NODE(leaf->schema, NULL, 0, LYS_CONFIG_W | LYS_STATUS_CURR | LYS_KEY, 1, "b", 1, LYS_LEAF, 1, 0, NULL, 0);
assert_non_null(leaf = (struct lyd_node_term *)leaf->next);
CHECK_LYSC_NODE(leaf->schema, NULL, 0, LYS_CONFIG_W | LYS_STATUS_CURR | LYS_KEY, 1, "c", 1, LYS_LEAF, 1, 0, NULL, 0);
- CHECK_LOG_CTX("Invalid position of the key \"a\" in a list.", NULL);
- CHECK_LOG_CTX("Invalid position of the key \"b\" in a list.", NULL);
+ CHECK_LOG_CTX("Invalid position of the key \"a\" in a list.", NULL, 0);
+ CHECK_LOG_CTX("Invalid position of the key \"b\" in a list.", NULL, 0);
lyd_free_all(tree);
PARSER_CHECK_ERROR(data, LYD_PARSE_STRICT, LYD_VALIDATE_PRESENT, tree, LY_EVALID,
- "Invalid position of the key \"b\" in a list.", "Data location \"/a:l1[c='1']/b\", line number 1.");
+ "Invalid position of the key \"b\" in a list.", "/a:l1[c='1']/b", 1);
}
static void
@@ -299,7 +297,7 @@ test_opaq(void **state)
/* invalid value, no flags */
data = "";
PARSER_CHECK_ERROR(data, 0, LYD_VALIDATE_PRESENT, tree, LY_EVALID,
- "Invalid type uint32 empty value.", "Schema location \"/a:foo3\", line number 1.");
+ "Invalid type uint32 empty value.", "/a:foo3", 1);
/* opaq flag */
CHECK_PARSE_LYD(data, LYD_PARSE_OPAQ | LYD_PARSE_ONLY, 0, tree);
@@ -321,8 +319,7 @@ test_opaq(void **state)
" val_d\n"
"\n";
PARSER_CHECK_ERROR(data, 0, LYD_VALIDATE_PRESENT, tree, LY_EVALID,
- "List instance is missing its key \"c\".",
- "Data location \"/a:l1[a='val_a'][b='val_b']\", line number 5.");
+ "List instance is missing its key \"c\".", "/a:l1[a='val_a'][b='val_b']", 5);
/* opaq flag */
CHECK_PARSE_LYD(data, LYD_PARSE_OPAQ | LYD_PARSE_ONLY, 0, tree);
@@ -337,8 +334,7 @@ test_opaq(void **state)
" val_c\n"
"\n";
PARSER_CHECK_ERROR(data, 0, LYD_VALIDATE_PRESENT, tree, LY_EVALID,
- "Invalid type int16 value \"val_c\".",
- "Data location \"/a:l1[a='val_a'][b='val_b']/c\", line number 4.");
+ "Invalid type int16 value \"val_c\".", "/a:l1[a='val_a'][b='val_b']/c", 4);
/* opaq flag */
CHECK_PARSE_LYD(data, LYD_PARSE_OPAQ | LYD_PARSE_ONLY, 0, tree);
@@ -353,7 +349,7 @@ test_opaq(void **state)
" 1\n"
"\n",
LYD_XML, LYD_PARSE_OPAQ, LYD_VALIDATE_PRESENT, &tree));
- CHECK_LOG_CTX("Unknown XML prefix \"xmld\".", "Data location \"/a\", line number 3.");
+ CHECK_LOG_CTX("Unknown XML prefix \"xmld\".", "/a", 3);
}
static void
@@ -658,7 +654,7 @@ test_netconf_rpc(void **state)
assert_int_equal(LY_EVALID, lyd_parse_op(UTEST_LYCTX, NULL, in, LYD_XML, LYD_TYPE_RPC_NETCONF, &tree, &op));
ly_in_free(in, 0);
CHECK_LOG_CTX("Invalid enumeration value \"merge2\".",
- "Path \"/ietf-netconf:copy-config/source/config/a:l1[a='val_a'][b='val_b'][c='5']/cont/e/@ietf-netconf:operation\", line number 13.");
+ "/ietf-netconf:copy-config/source/config/a:l1[a='val_a'][b='val_b'][c='5']/cont/e/@ietf-netconf:operation", 13);
lyd_free_all(tree);
assert_null(op);
}
@@ -974,7 +970,7 @@ test_metadata(void **state)
data = "xval";
assert_int_equal(LY_EVALID, lyd_parse_data_mem(_UC->ctx, data, LYD_XML, 0, LYD_VALIDATE_PRESENT, &tree));
assert_null(tree);
- CHECK_LOG_CTX("Invalid enumeration value \"value\".", "Path \"/a:c/x/@a:attr\", line number 1.");
+ CHECK_LOG_CTX("Invalid enumeration value \"value\".", "/a:c/x/@a:attr", 1);
}
static void
@@ -1004,7 +1000,7 @@ test_subtree(void **state)
assert_int_equal(LY_SUCCESS, ly_in_new_memory(data, &in));
assert_int_equal(LY_EVALID, lyd_parse_data(UTEST_LYCTX, tree, in, LYD_XML, 0, LYD_VALIDATE_PRESENT, NULL));
ly_in_free(in, 0);
- CHECK_LOG_CTX("Duplicate instance of \"cont\".", "Data location \"/a:l1[a='val_a'][b='val_b'][c='1']/cont\".");
+ CHECK_LOG_CTX("Duplicate instance of \"cont\".", "/a:l1[a='val_a'][b='val_b'][c='1']/cont", 0);
lyd_free_all(tree);
}
diff --git a/tests/utests/data/test_tree_data.c b/tests/utests/data/test_tree_data.c
index b8152ab10..f41de3272 100644
--- a/tests/utests/data/test_tree_data.c
+++ b/tests/utests/data/test_tree_data.c
@@ -370,8 +370,7 @@ test_dup(void **state)
CHECK_PARSE_LYD(data, 0, LYD_VALIDATE_PRESENT, tree1);
assert_int_equal(LY_EINVAL, lyd_dup_single(((struct lyd_node_inner *)tree1)->child->prev,
(struct lyd_node_inner *)tree1->next, LYD_DUP_WITH_PARENTS, NULL));
- CHECK_LOG_CTX("None of the duplicated node \"c\" schema parents match the provided parent \"c\".",
- NULL);
+ CHECK_LOG_CTX("None of the duplicated node \"c\" schema parents match the provided parent \"c\".", NULL, 0);
lyd_free_all(tree1);
}
@@ -499,7 +498,7 @@ test_find_path(void **state)
assert_int_equal(LY_SUCCESS, lyd_find_path(root, "/c:cont/pref[.='fc00::/64']", 0, NULL));
assert_int_equal(LY_EVALID, lyd_find_path(root, "/cont", 0, NULL));
- CHECK_LOG_CTX("Prefix missing for \"cont\" in path.", "Schema location \"/c:cont\".");
+ CHECK_LOG_CTX("Prefix missing for \"cont\" in path.", "/c:cont", 0);
assert_int_equal(LY_SUCCESS, lyd_find_path(root, "nexthop[gateway='2100::1']", 0, NULL));
lyd_free_all(root);
@@ -539,7 +538,7 @@ test_data_hash(void **state)
/* The run must not crash due to the assert that checks the hash. */
CHECK_PARSE_LYD_PARAM(data, LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG_CTX("Duplicate instance of \"ll\".", "Data location \"/test-data-hash:c/ll[.='']\", line number 1.");
+ CHECK_LOG_CTX("Duplicate instance of \"ll\".", "/test-data-hash:c/ll[.='']", 1);
lyd_free_all(tree);
}
diff --git a/tests/utests/data/test_validation.c b/tests/utests/data/test_validation.c
index d0dcae599..17fd07837 100644
--- a/tests/utests/data/test_validation.c
+++ b/tests/utests/data/test_validation.c
@@ -57,7 +57,7 @@ test_when(void **state)
UTEST_ADD_MODULE(schema, LYS_IN_YANG, NULL, NULL);
CHECK_PARSE_LYD_PARAM("hey", LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG_CTX("When condition \"/cont/b = 'val_b'\" not satisfied.", "Data location \"/a:c\".");
+ CHECK_LOG_CTX("When condition \"/cont/b = 'val_b'\" not satisfied.", "/a:c", 0);
LYD_TREE_CREATE("val_bhey", tree);
CHECK_LYSC_NODE(tree->next->schema, NULL, 0, LYS_CONFIG_W | LYS_STATUS_CURR, 1, "c", 0, LYS_LEAF, 0, 0, NULL, 1);
@@ -105,10 +105,10 @@ test_mandatory_when(void **state)
UTEST_ADD_MODULE(schema, LYS_IN_YANG, NULL, NULL);
CHECK_PARSE_LYD_PARAM("hey", LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG_CTX("When condition \"../c = 'val_c'\" not satisfied.", "Data location \"/a:d\".");
+ CHECK_LOG_CTX("When condition \"../c = 'val_c'\" not satisfied.", "/a:d", 0);
CHECK_PARSE_LYD_PARAM("hey", LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG_CTX("When condition \"../a = 'val_a'\" not satisfied.", "Data location \"/a:cont/b\".");
+ CHECK_LOG_CTX("When condition \"../a = 'val_a'\" not satisfied.", "/a:cont/b", 0);
LYD_TREE_CREATE("val_chey", tree);
CHECK_LYSC_NODE(tree->next->next->schema, NULL, 0, LYS_CONFIG_W | LYS_STATUS_CURR | LYS_MAND_TRUE, 1, "d", 0, LYS_LEAF, 0, 0, NULL, 1);
@@ -196,13 +196,13 @@ test_mandatory(void **state)
UTEST_ADD_MODULE(schema, LYS_IN_YANG, NULL, NULL);
CHECK_PARSE_LYD_PARAM("", LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG_CTX_APPTAG("Mandatory choice \"choic\" data do not exist.", "Schema location \"/b:choic\".", "missing-choice");
+ CHECK_LOG_CTX_APPTAG("Mandatory choice \"choic\" data do not exist.", "/b:choic", 0, "missing-choice");
CHECK_PARSE_LYD_PARAM("string", LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG_CTX("Mandatory node \"c\" instance does not exist.", "Schema location \"/b:c\".");
+ CHECK_LOG_CTX("Mandatory node \"c\" instance does not exist.", "/b:c", 0);
CHECK_PARSE_LYD_PARAM("string", LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG_CTX("Mandatory node \"c\" instance does not exist.", "Schema location \"/b:c\".");
+ CHECK_LOG_CTX("Mandatory node \"c\" instance does not exist.", "/b:c", 0);
LYD_TREE_CREATE("stringstring2", tree);
lyd_free_siblings(tree);
@@ -246,12 +246,12 @@ test_minmax(void **state)
CHECK_PARSE_LYD_PARAM("mate"
"",
LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG_CTX_APPTAG("Too few \"l\" instances.", "Schema location \"/c:choic/b/l\".", "too-few-elements");
+ CHECK_LOG_CTX_APPTAG("Too few \"l\" instances.", "/c:choic/b/l", 0, "too-few-elements");
CHECK_PARSE_LYD_PARAM("val1"
"val2",
LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG_CTX_APPTAG("Too few \"l\" instances.", "Schema location \"/c:choic/b/l\".", "too-few-elements");
+ CHECK_LOG_CTX_APPTAG("Too few \"l\" instances.", "/c:choic/b/l", 0, "too-few-elements");
LYD_TREE_CREATE("val1"
"val2"
@@ -267,8 +267,7 @@ test_minmax(void **state)
"val4"
"val5"
"val6", LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG_CTX_APPTAG("Too many \"lt\" instances.", "Data location \"/c:lt[k='val5']\".",
- "too-many-elements");
+ CHECK_LOG_CTX_APPTAG("Too many \"lt\" instances.", "/c:lt[k='val5']", 0, "too-many-elements");
}
const char *schema_d =
@@ -356,7 +355,7 @@ test_unique(void **state)
" same\n"
"", LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
CHECK_LOG_CTX_APPTAG("Unique data leaf(s) \"l1\" not satisfied in \"/d:lt[k='val1']\" and \"/d:lt[k='val2']\".",
- "Data location \"/d:lt[k='val2']\".", "data-not-unique");
+ "/d:lt[k='val2']", 0, "data-not-unique");
/* now try with more instances */
LYD_TREE_CREATE("\n"
@@ -454,7 +453,7 @@ test_unique(void **state)
" 8\n"
"", LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
CHECK_LOG_CTX_APPTAG("Unique data leaf(s) \"l1\" not satisfied in \"/d:lt[k='val7']\" and \"/d:lt[k='val2']\".",
- "Data location \"/d:lt[k='val2']\".", "data-not-unique");
+ "/d:lt[k='val2']", 0, "data-not-unique");
}
static void
@@ -579,8 +578,7 @@ test_unique_nested(void **state)
" \n"
"", LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
CHECK_LOG_CTX_APPTAG("Unique data leaf(s) \"l3\" not satisfied in \"/d:lt2[k='val2']/lt3[kk='val3']\" and "
- "\"/d:lt2[k='val2']/lt3[kk='val1']\".",
- "Data location \"/d:lt2[k='val2']/lt3[kk='val1']\".", "data-not-unique");
+ "\"/d:lt2[k='val2']/lt3[kk='val1']\".", "/d:lt2[k='val2']/lt3[kk='val1']", 0, "data-not-unique");
CHECK_PARSE_LYD_PARAM("\n"
" val1\n"
@@ -618,7 +616,7 @@ test_unique_nested(void **state)
" 5\n"
"", LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
CHECK_LOG_CTX_APPTAG("Unique data leaf(s) \"cont/l2 l4\" not satisfied in \"/d:lt2[k='val4']\" and \"/d:lt2[k='val2']\".",
- "Data location \"/d:lt2[k='val2']\".", "data-not-unique");
+ "/d:lt2[k='val2']", 0, "data-not-unique");
CHECK_PARSE_LYD_PARAM("\n"
" val1\n"
@@ -664,7 +662,7 @@ test_unique_nested(void **state)
" 3\n"
"", LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
CHECK_LOG_CTX_APPTAG("Unique data leaf(s) \"l5 l6\" not satisfied in \"/d:lt2[k='val5']\" and \"/d:lt2[k='val3']\".",
- "Data location \"/d:lt2[k='val3']\".", "data-not-unique");
+ "/d:lt2[k='val3']", 0, "data-not-unique");
}
static void
@@ -725,28 +723,28 @@ test_dup(void **state)
CHECK_PARSE_LYD_PARAM("2550",
LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG_CTX("Duplicate instance of \"d\".", "Data location \"/e:d\".");
+ CHECK_LOG_CTX("Duplicate instance of \"d\".", "/e:d", 0);
CHECK_PARSE_LYD_PARAM("A"
"B"
"A",
LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG_CTX("Duplicate instance of \"lt\".", "Data location \"/e:lt[k='A']\".");
+ CHECK_LOG_CTX("Duplicate instance of \"lt\".", "/e:lt[k='A']", 0);
CHECK_PARSE_LYD_PARAM("A"
"B"
"B",
LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG_CTX("Duplicate instance of \"ll\".", "Data location \"/e:ll[.='B']\".");
+ CHECK_LOG_CTX("Duplicate instance of \"ll\".", "/e:ll[.='B']", 0);
CHECK_PARSE_LYD_PARAM("",
LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG_CTX("Duplicate instance of \"cont\".", "Data location \"/e:cont\".");
+ CHECK_LOG_CTX("Duplicate instance of \"cont\".", "/e:cont", 0);
/* same tests again but using hashes */
CHECK_PARSE_LYD_PARAM("25501234",
LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG_CTX("Duplicate instance of \"d\".", "Data location \"/e:cont/d\", line number 1.");
+ CHECK_LOG_CTX("Duplicate instance of \"d\".", "/e:cont/d", 1);
CHECK_PARSE_LYD_PARAM("1234"
"a"
@@ -755,12 +753,12 @@ test_dup(void **state)
"d"
"c",
LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG_CTX("Duplicate instance of \"lt\".", "Data location \"/e:cont/lt[k='c']\", line number 1.");
+ CHECK_LOG_CTX("Duplicate instance of \"lt\".", "/e:cont/lt[k='c']", 1);
CHECK_PARSE_LYD_PARAM("1234"
"abcdd",
LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG_CTX("Duplicate instance of \"ll\".", "Data location \"/e:cont/ll[.='d']\", line number 1.");
+ CHECK_LOG_CTX("Duplicate instance of \"ll\".", "/e:cont/ll[.='d']", 1);
/* cases */
CHECK_PARSE_LYD_PARAM("a"
@@ -768,13 +766,13 @@ test_dup(void **state)
"c"
"b",
LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG_CTX("Duplicate instance of \"l\".", "Data location \"/e:l[.='b']\".");
+ CHECK_LOG_CTX("Duplicate instance of \"l\".", "/e:l[.='b']", 0);
CHECK_PARSE_LYD_PARAM("ab"
"c"
"aa",
LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG_CTX("Data for both cases \"a\" and \"b\" exist.", "Schema location \"/e:choic\".");
+ CHECK_LOG_CTX("Data for both cases \"a\" and \"b\" exist.", "/e:choic", 0);
}
static void
@@ -1094,13 +1092,11 @@ test_state(void **state)
" \n"
"\n";
CHECK_PARSE_LYD_PARAM(data, LYD_XML, LYD_PARSE_ONLY | LYD_PARSE_NO_STATE, 0, LY_EVALID, tree);
- CHECK_LOG_CTX("Unexpected data state node \"cont2\" found.",
- "Data location \"/h:cont/cont2\", line number 3.");
+ CHECK_LOG_CTX("Unexpected data state node \"cont2\" found.", "/h:cont/cont2", 3);
CHECK_PARSE_LYD_PARAM(data, LYD_XML, LYD_PARSE_ONLY, 0, LY_SUCCESS, tree);
assert_int_equal(LY_EVALID, lyd_validate_all(&tree, NULL, LYD_VALIDATE_PRESENT | LYD_VALIDATE_NO_STATE, NULL));
- CHECK_LOG_CTX("Unexpected data state node \"cont2\" found.",
- "Data location \"/h:cont/cont2\".");
+ CHECK_LOG_CTX("Unexpected data state node \"cont2\" found.", "/h:cont/cont2", 0);
lyd_free_all(tree);
}
@@ -1138,8 +1134,7 @@ test_must(void **state)
" wrong\n"
" val\n"
"\n", LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG_CTX_APPTAG("Must condition \"../l = 'right'\" not satisfied.",
- "Data location \"/i:cont/l2\".", "must-violation");
+ CHECK_LOG_CTX_APPTAG("Must condition \"../l = 'right'\" not satisfied.", "/i:cont/l2", 0, "must-violation");
LYD_TREE_CREATE("\n"
" right\n"
@@ -1151,7 +1146,7 @@ test_must(void **state)
" wrong\n"
" val\n"
"\n", LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG_CTX_APPTAG("l leaf is not left", "Data location \"/i:cont/l3\".", "not-left");
+ CHECK_LOG_CTX_APPTAG("l leaf is not left", "/i:cont/l3", 0, "not-left");
}
static void
@@ -1199,10 +1194,10 @@ test_multi_error(void **state)
" ahoy\n"
"\n";
CHECK_PARSE_LYD_PARAM(data, LYD_XML, 0, LYD_VALIDATE_PRESENT | LYD_VALIDATE_MULTI_ERROR, LY_EVALID, tree);
- CHECK_LOG_CTX_APPTAG("Too few \"ll\" instances.", "Schema location \"/ii:cont/ll\".", "too-few-elements");
- CHECK_LOG_CTX_APPTAG("l leaf is not left", "Data location \"/ii:cont/l3\".", "not-left");
- CHECK_LOG_CTX_APPTAG("Must condition \"../l = 'right'\" not satisfied.", "Data location \"/ii:cont/l2\".", "must-violation");
- CHECK_LOG_CTX_APPTAG("Invalid type uint32 value \"ahoy\".", "Data location \"/ii:cont/ll\", line number 6.", NULL);
+ CHECK_LOG_CTX_APPTAG("Too few \"ll\" instances.", "/ii:cont/ll", 0, "too-few-elements");
+ CHECK_LOG_CTX_APPTAG("l leaf is not left", "/ii:cont/l3", 0, "not-left");
+ CHECK_LOG_CTX_APPTAG("Must condition \"../l = 'right'\" not satisfied.", "/ii:cont/l2", 0, "must-violation");
+ CHECK_LOG_CTX_APPTAG("Invalid type uint32 value \"ahoy\".", "/ii:cont/ll", 6, NULL);
/* json */
data = "{\n"
@@ -1215,10 +1210,10 @@ test_multi_error(void **state)
" }\n"
"}\n";
CHECK_PARSE_LYD_PARAM(data, LYD_JSON, 0, LYD_VALIDATE_PRESENT | LYD_VALIDATE_MULTI_ERROR, LY_EVALID, tree);
- CHECK_LOG_CTX_APPTAG("Too few \"ll\" instances.", "Schema location \"/ii:cont/ll\".", "too-few-elements");
- CHECK_LOG_CTX_APPTAG("l leaf is not left", "Data location \"/ii:cont/l3\".", "not-left");
- CHECK_LOG_CTX_APPTAG("Must condition \"../l = 'right'\" not satisfied.", "Data location \"/ii:cont/l2\".", "must-violation");
- CHECK_LOG_CTX_APPTAG("Invalid non-number-encoded uint32 value \"ahoy\".", "Data location \"/ii:cont/ll\", line number 7.", NULL);
+ CHECK_LOG_CTX_APPTAG("Too few \"ll\" instances.", "/ii:cont/ll", 0, "too-few-elements");
+ CHECK_LOG_CTX_APPTAG("l leaf is not left", "/ii:cont/l3", 0, "not-left");
+ CHECK_LOG_CTX_APPTAG("Must condition \"../l = 'right'\" not satisfied.", "/ii:cont/l2", 0, "must-violation");
+ CHECK_LOG_CTX_APPTAG("Invalid non-number-encoded uint32 value \"ahoy\".", "/ii:cont/ll", 7, NULL);
/* validation */
data = "{\n"
@@ -1233,11 +1228,11 @@ test_multi_error(void **state)
CHECK_PARSE_LYD_PARAM(data, LYD_JSON, LYD_PARSE_ONLY, 0, LY_SUCCESS, tree);
assert_int_equal(LY_EVALID, lyd_validate_all(&tree, NULL, LYD_VALIDATE_PRESENT | LYD_VALIDATE_MULTI_ERROR, NULL));
lyd_free_tree(tree);
- CHECK_LOG_CTX_APPTAG("Too few \"ll\" instances.", "Schema location \"/ii:cont/ll\".", "too-few-elements");
- CHECK_LOG_CTX_APPTAG("l leaf is not left", "Data location \"/ii:cont/l3\".", "not-left");
- CHECK_LOG_CTX_APPTAG("Must condition \"../l = 'right'\" not satisfied.", "Data location \"/ii:cont/l2\".", "must-violation");
- CHECK_LOG_CTX_APPTAG("Duplicate instance of \"l\".", "Data location \"/ii:cont/l\".", NULL);
- CHECK_LOG_CTX_APPTAG("Duplicate instance of \"l\".", "Data location \"/ii:cont/l\".", NULL);
+ CHECK_LOG_CTX_APPTAG("Too few \"ll\" instances.", "/ii:cont/ll", 0, "too-few-elements");
+ CHECK_LOG_CTX_APPTAG("l leaf is not left", "/ii:cont/l3", 0, "not-left");
+ CHECK_LOG_CTX_APPTAG("Must condition \"../l = 'right'\" not satisfied.", "/ii:cont/l2", 0, "must-violation");
+ CHECK_LOG_CTX_APPTAG("Duplicate instance of \"l\".", "/ii:cont/l", 0, NULL);
+ CHECK_LOG_CTX_APPTAG("Duplicate instance of \"l\".", "/ii:cont/l", 0, NULL);
}
const char *schema_j =
@@ -1315,7 +1310,7 @@ test_action(void **state)
/* missing leafref */
assert_int_equal(LY_EVALID, lyd_validate_op(op_tree, NULL, LYD_TYPE_RPC_YANG, NULL));
CHECK_LOG_CTX("Invalid leafref value \"target\" - no target instance \"/lf3\" with the same value.",
- "Data location \"/j:cont/l1[k='val1']/act/lf2\".");
+ "/j:cont/l1[k='val1']/act/lf2", 0);
ly_in_free(in, 0);
CHECK_PARSE_LYD_PARAM("\n"
@@ -1326,8 +1321,7 @@ test_action(void **state)
/* input must false */
assert_int_equal(LY_EVALID, lyd_validate_op(op_tree, tree, LYD_TYPE_RPC_YANG, NULL));
- CHECK_LOG_CTX("Must condition \"../../lf1 = 'true'\" not satisfied.",
- "Data location \"/j:cont/l1[k='val1']/act\".");
+ CHECK_LOG_CTX("Must condition \"../../lf1 = 'true'\" not satisfied.", "/j:cont/l1[k='val1']/act", 0);
lyd_free_all(tree);
CHECK_PARSE_LYD_PARAM("\n"
@@ -1380,7 +1374,7 @@ test_rpc(void **state)
assert_int_equal(LY_SUCCESS, ly_in_new_memory(data, &in));
assert_int_equal(LY_EVALID, lyd_parse_op(UTEST_LYCTX, NULL, in, LYD_XML, LYD_TYPE_RPC_YANG, &tree, NULL));
CHECK_LOG_CTX("Unsatisfied length - string \"123\" length is not allowed.",
- "Data location \"/val-str:modify-user-password/new-password\", line number 3.");
+ "/val-str:modify-user-password/new-password", 3);
ly_in_free(in, 0);
}
@@ -1409,7 +1403,7 @@ test_reply(void **state)
/* missing leafref */
assert_int_equal(LY_EVALID, lyd_validate_op(op_tree, NULL, LYD_TYPE_REPLY_YANG, NULL));
CHECK_LOG_CTX("Invalid leafref value \"target\" - no target instance \"/lf4\" with the same value.",
- "Data location \"/j:cont/l1[k='val1']/act/lf2\".");
+ "/j:cont/l1[k='val1']/act/lf2", 0);
CHECK_PARSE_LYD_PARAM("\n"
" not true\n"
@@ -1419,7 +1413,7 @@ test_reply(void **state)
/* input must false */
assert_int_equal(LY_EVALID, lyd_validate_op(op_tree, tree, LYD_TYPE_REPLY_YANG, NULL));
- CHECK_LOG_CTX("Must condition \"../../lf1 = 'true2'\" not satisfied.", "Data location \"/j:cont/l1[k='val1']/act\".");
+ CHECK_LOG_CTX("Must condition \"../../lf1 = 'true2'\" not satisfied.", "/j:cont/l1[k='val1']/act", 0);
lyd_free_all(tree);
CHECK_PARSE_LYD_PARAM("\n"
@@ -1509,8 +1503,7 @@ test_case(void **state)
" \"g7\": \"value_g7\"\n"
" }\n"
"}\n", LYD_JSON, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG_CTX("Data for both cases \"v0\" and \"v2\" exist.",
- "Data location \"/k:ch\", line number 6.");
+ CHECK_LOG_CTX("Data for both cases \"v0\" and \"v2\" exist.", "/k:ch", 6);
CHECK_PARSE_LYD_PARAM(
"{\n"
@@ -1519,8 +1512,7 @@ test_case(void **state)
" \"g0\": \"value_g0\"\n"
" }\n"
"}\n", LYD_JSON, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG_CTX("Data for both cases \"v0\" and \"v2\" exist.",
- "Data location \"/k:ch\", line number 6.");
+ CHECK_LOG_CTX("Data for both cases \"v0\" and \"v2\" exist.", "/k:ch", 6);
}
int
diff --git a/tests/utests/extensions/test_metadata.c b/tests/utests/extensions/test_metadata.c
index f1edd2946..fcaa9dac6 100644
--- a/tests/utests/extensions/test_metadata.c
+++ b/tests/utests/extensions/test_metadata.c
@@ -53,7 +53,7 @@ test_yang(void **state)
"md:annotation aa;}";
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, data, LYS_IN_YANG, NULL));
CHECK_LOG_CTX("Ext plugin \"ly2 metadata v1\": Missing mandatory keyword \"type\" as a child of \"md:annotation aa\".",
- "Path \"/aa:{extension='md:annotation'}/aa\".");
+ "/aa:{extension='md:annotation'}/aa", 0);
/* not allowed substatement */
data = "module aa {yang-version 1.1; namespace urn:tests:extensions:metadata:aa; prefix aa;"
@@ -61,31 +61,28 @@ test_yang(void **state)
"md:annotation aa {default x;}}";
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, data, LYS_IN_YANG, NULL));
CHECK_LOG_CTX("Invalid keyword \"default\" as a child of \"md:annotation aa\" extension instance.",
- "Path \"/aa:{extension='md:annotation'}/aa\".");
+ "/aa:{extension='md:annotation'}/aa", 0);
/* invalid cardinality of units substatement */
data = "module aa {yang-version 1.1; namespace urn:tests:extensions:metadata:aa; prefix aa;"
"import ietf-yang-metadata {prefix md;}"
"md:annotation aa {type string; units x; units y;}}";
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, data, LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Duplicate keyword \"units\".",
- "Path \"/aa:{extension='md:annotation'}/aa\".");
+ CHECK_LOG_CTX("Duplicate keyword \"units\".", "/aa:{extension='md:annotation'}/aa", 0);
/* invalid cardinality of status substatement */
data = "module aa {yang-version 1.1; namespace urn:tests:extensions:metadata:aa; prefix aa;"
"import ietf-yang-metadata {prefix md;}"
"md:annotation aa {type string; status current; status obsolete;}}";
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, data, LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Duplicate keyword \"status\".",
- "Path \"/aa:{extension='md:annotation'}/aa\".");
+ CHECK_LOG_CTX("Duplicate keyword \"status\".", "/aa:{extension='md:annotation'}/aa", 0);
/* invalid cardinality of status substatement */
data = "module aa {yang-version 1.1; namespace urn:tests:extensions:metadata:aa; prefix aa;"
"import ietf-yang-metadata {prefix md;}"
"md:annotation aa {type string; type uint8;}}";
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, data, LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Duplicate keyword \"type\".",
- "Path \"/aa:{extension='md:annotation'}/aa\".");
+ CHECK_LOG_CTX("Duplicate keyword \"type\".", "/aa:{extension='md:annotation'}/aa", 0);
/* duplication of the same annotation */
data = "module aa {yang-version 1.1; namespace urn:tests:extensions:metadata:aa; prefix aa;"
@@ -93,7 +90,7 @@ test_yang(void **state)
"md:annotation aa {type string;} md:annotation aa {type uint8;}}";
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, data, LYS_IN_YANG, NULL));
CHECK_LOG_CTX("Ext plugin \"ly2 metadata v1\": Extension md:annotation is instantiated multiple times.",
- "Path \"/aa:{extension='md:annotation'}/aa\".");
+ "/aa:{extension='md:annotation'}/aa", 0);
}
static void
@@ -134,7 +131,7 @@ test_yin(void **state)
"";
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, data, LYS_IN_YIN, NULL));
CHECK_LOG_CTX("Ext plugin \"ly2 metadata v1\": Missing mandatory keyword \"type\" as a child of \"md:annotation aa\".",
- "Path \"/aa:{extension='md:annotation'}/aa\".");
+ "/aa:{extension='md:annotation'}/aa", 0);
/* not allowed substatement */
data = "\n"
@@ -145,7 +142,7 @@ test_yin(void **state)
"";
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, data, LYS_IN_YIN, NULL));
CHECK_LOG_CTX("Invalid keyword \"default\" as a child of \"md:annotation aa\" extension instance.",
- "Path \"/aa:{extension='md:annotation'}/aa\".");
+ "/aa:{extension='md:annotation'}/aa", 0);
/* invalid cardinality of units substatement */
data = "\n"
@@ -157,8 +154,7 @@ test_yin(void **state)
" \n"
"";
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, data, LYS_IN_YIN, NULL));
- CHECK_LOG_CTX("Duplicate keyword \"units\".",
- "Path \"/aa:{extension='md:annotation'}/aa\".");
+ CHECK_LOG_CTX("Duplicate keyword \"units\".", "/aa:{extension='md:annotation'}/aa", 0);
/* invalid cardinality of status substatement */
data = "\n"
@@ -170,8 +166,7 @@ test_yin(void **state)
" \n"
"";
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, data, LYS_IN_YIN, NULL));
- CHECK_LOG_CTX("Duplicate keyword \"status\".",
- "Path \"/aa:{extension='md:annotation'}/aa\".");
+ CHECK_LOG_CTX("Duplicate keyword \"status\".", "/aa:{extension='md:annotation'}/aa", 0);
/* invalid cardinality of status substatement */
data = "\n"
@@ -182,8 +177,7 @@ test_yin(void **state)
" \n"
"";
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, data, LYS_IN_YIN, NULL));
- CHECK_LOG_CTX("Duplicate keyword \"type\".",
- "Path \"/aa:{extension='md:annotation'}/aa\".");
+ CHECK_LOG_CTX("Duplicate keyword \"type\".", "/aa:{extension='md:annotation'}/aa", 0);
/* duplication of the same annotation */
data = "\n"
@@ -196,7 +190,7 @@ test_yin(void **state)
"";
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, data, LYS_IN_YIN, NULL));
CHECK_LOG_CTX("Ext plugin \"ly2 metadata v1\": Extension md:annotation is instantiated multiple times.",
- "Path \"/aa:{extension='md:annotation'}/aa\".");
+ "/aa:{extension='md:annotation'}/aa", 0);
}
int
diff --git a/tests/utests/extensions/test_nacm.c b/tests/utests/extensions/test_nacm.c
index 5f7028e0a..0b1cb8b12 100644
--- a/tests/utests/extensions/test_nacm.c
+++ b/tests/utests/extensions/test_nacm.c
@@ -58,7 +58,7 @@ test_deny_all(void **state)
assert_int_equal(LY_SUCCESS, lys_parse_mem(UTEST_LYCTX, data, LYS_IN_YANG, NULL));
CHECK_LOG_CTX("Ext plugin \"ly2 NACM v1\": "
"Extension nacm:default-deny-all is allowed only in a data nodes, but it is placed in \"module\" statement.",
- "Path \"/b:{extension='nacm:default-deny-all'}\".");
+ "/b:{extension='nacm:default-deny-all'}", 0);
/* invalid */
data = "module aa {yang-version 1.1; namespace urn:tests:extensions:nacm:aa; prefix en;"
@@ -67,7 +67,7 @@ test_deny_all(void **state)
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, data, LYS_IN_YANG, NULL));
CHECK_LOG_CTX("Ext plugin \"ly2 NACM v1\": "
"Extension nacm:default-deny-write is mixed with nacm:default-deny-all.",
- "Path \"/aa:l/{extension='nacm:default-deny-all'}\".");
+ "/aa:l/{extension='nacm:default-deny-all'}", 0);
}
static void
@@ -100,7 +100,7 @@ test_deny_write(void **state)
assert_int_equal(LY_SUCCESS, lys_parse_mem(UTEST_LYCTX, data, LYS_IN_YANG, NULL));
CHECK_LOG_CTX("Ext plugin \"ly2 NACM v1\": "
"Extension nacm:default-deny-write is not allowed in notification statement.",
- "Path \"/b:notif/{extension='nacm:default-deny-write'}\".");
+ "/b:notif/{extension='nacm:default-deny-write'}", 0);
/* invalid */
data = "module aa {yang-version 1.1; namespace urn:tests:extensions:nacm:aa; prefix en;"
@@ -109,7 +109,7 @@ test_deny_write(void **state)
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, data, LYS_IN_YANG, NULL));
CHECK_LOG_CTX("Ext plugin \"ly2 NACM v1\": "
"Extension nacm:default-deny-write is instantiated multiple times.",
- "Path \"/aa:l/{extension='nacm:default-deny-write'}\".");
+ "/aa:l/{extension='nacm:default-deny-write'}", 0);
}
int
diff --git a/tests/utests/extensions/test_schema_mount.c b/tests/utests/extensions/test_schema_mount.c
index 17a4c94a4..f27e16821 100644
--- a/tests/utests/extensions/test_schema_mount.c
+++ b/tests/utests/extensions/test_schema_mount.c
@@ -75,7 +75,7 @@ test_schema(void **state)
assert_int_equal(LY_EINVAL, lys_parse_mem(UTEST_LYCTX, schema, LYS_IN_YANG, NULL));
CHECK_LOG_CTX("Ext plugin \"ly2 schema mount v1\": "
"Extension \"yangmnt:mount-point\" instance not allowed in YANG version 1 module.",
- "Path \"/sm:root/{extension='yangmnt:mount-point'}/root\".");
+ "/sm:root/{extension='yangmnt:mount-point'}/root", 0);
schema =
"module sm {\n"
@@ -92,7 +92,7 @@ test_schema(void **state)
assert_int_equal(LY_EINVAL, lys_parse_mem(UTEST_LYCTX, schema, LYS_IN_YANG, NULL));
CHECK_LOG_CTX("Ext plugin \"ly2 schema mount v1\": "
"Extension \"yangmnt:mount-point\" instance allowed only in container or list statement.",
- "Path \"/sm:{extension='yangmnt:mount-point'}/root\".");
+ "/sm:{extension='yangmnt:mount-point'}/root", 0);
schema =
"module sm {\n"
@@ -114,7 +114,7 @@ test_schema(void **state)
assert_int_equal(LY_EINVAL, lys_parse_mem(UTEST_LYCTX, schema, LYS_IN_YANG, NULL));
CHECK_LOG_CTX("Ext plugin \"ly2 schema mount v1\": "
"Extension \"yangmnt:mount-point\" instance allowed only in container or list statement.",
- "Path \"/sm:root/l/{extension='yangmnt:mount-point'}/root\".");
+ "/sm:root/l/{extension='yangmnt:mount-point'}/root", 0);
schema =
"module sm {\n"
@@ -138,7 +138,7 @@ test_schema(void **state)
assert_int_equal(LY_EINVAL, lys_parse_mem(UTEST_LYCTX, schema, LYS_IN_YANG, NULL));
CHECK_LOG_CTX("Ext plugin \"ly2 schema mount v1\": "
"Multiple extension \"yangmnt:mount-point\" instances.",
- "Path \"/sm:l/{extension='yangmnt:mount-point'}/root\".");
+ "/sm:l/{extension='yangmnt:mount-point'}/root", 0);
/* valid */
schema =
@@ -196,7 +196,7 @@ test_parse_invalid(void **state)
"";
CHECK_PARSE_LYD_PARAM(xml, LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EINVAL, data);
CHECK_LOG_CTX("Ext plugin \"ly2 schema mount v1\": Failed to get extension data, no callback set.",
- NULL);
+ NULL, 0);
json =
"{"
@@ -213,7 +213,7 @@ test_parse_invalid(void **state)
"}";
CHECK_PARSE_LYD_PARAM(json, LYD_JSON, 0, LYD_VALIDATE_PRESENT, LY_EINVAL, data);
CHECK_LOG_CTX("Ext plugin \"ly2 schema mount v1\": Failed to get extension data, no callback set.",
- NULL);
+ NULL, 0);
/* unknown data */
ly_ctx_set_ext_data_clb(UTEST_LYCTX, test_ext_data_clb, NULL);
@@ -225,8 +225,7 @@ test_parse_invalid(void **state)
lyd_free_siblings(data);
CHECK_PARSE_LYD_PARAM(xml, LYD_XML, LYD_PARSE_STRICT, LYD_VALIDATE_PRESENT, LY_EVALID, data);
- CHECK_LOG_CTX("No module with namespace \"unknown\" in the context.",
- "Data location \"/sm:root\", line number 1.");
+ CHECK_LOG_CTX("No module with namespace \"unknown\" in the context.", "/sm:root", 1);
CHECK_PARSE_LYD_PARAM(json, LYD_JSON, 0, LYD_VALIDATE_PRESENT, LY_SUCCESS, data);
assert_string_equal(LYD_NAME(data), "root");
@@ -236,8 +235,7 @@ test_parse_invalid(void **state)
lyd_free_siblings(data);
CHECK_PARSE_LYD_PARAM(json, LYD_JSON, LYD_PARSE_STRICT, LYD_VALIDATE_PRESENT, LY_EVALID, data);
- CHECK_LOG_CTX("No module named \"unknown\" in the context.",
- "Data location \"/sm:root\", line number 1.");
+ CHECK_LOG_CTX("No module named \"unknown\" in the context.", "/sm:root", 1);
/* missing required callback data */
xml =
@@ -249,8 +247,7 @@ test_parse_invalid(void **state)
" "
"";
CHECK_PARSE_LYD_PARAM(xml, LYD_XML, LYD_PARSE_STRICT, LYD_VALIDATE_PRESENT, LY_EVALID, data);
- CHECK_LOG_CTX("Node \"interfaces\" not found as a child of \"root\" node.",
- "Data location \"/sm:root\", line number 1.");
+ CHECK_LOG_CTX("Node \"interfaces\" not found as a child of \"root\" node.", "/sm:root", 1);
json =
"{"
@@ -265,8 +262,7 @@ test_parse_invalid(void **state)
" }"
"}";
CHECK_PARSE_LYD_PARAM(json, LYD_JSON, LYD_PARSE_STRICT, LYD_VALIDATE_PRESENT, LY_EVALID, data);
- CHECK_LOG_CTX("Node \"interfaces\" not found as a child of \"root\" node.",
- "Data location \"/sm:root\", line number 1.");
+ CHECK_LOG_CTX("Node \"interfaces\" not found as a child of \"root\" node.", "/sm:root", 1);
ly_ctx_set_ext_data_clb(UTEST_LYCTX, test_ext_data_clb,
"1"
"");
CHECK_PARSE_LYD_PARAM(xml, LYD_XML, LYD_PARSE_STRICT, LYD_VALIDATE_PRESENT, LY_EVALID, data);
- CHECK_LOG_CTX("Node \"interfaces\" not found as a child of \"root\" node.",
- "Data location \"/sm:root\", line number 1.");
+ CHECK_LOG_CTX("Node \"interfaces\" not found as a child of \"root\" node.", "/sm:root", 1);
CHECK_PARSE_LYD_PARAM(json, LYD_JSON, LYD_PARSE_STRICT, LYD_VALIDATE_PRESENT, LY_EVALID, data);
- CHECK_LOG_CTX("Node \"interfaces\" not found as a child of \"root\" node.",
- "Data location \"/sm:root\", line number 1.");
+ CHECK_LOG_CTX("Node \"interfaces\" not found as a child of \"root\" node.", "/sm:root", 1);
/* missing module in yang-library data */
ly_ctx_set_ext_data_clb(UTEST_LYCTX, test_ext_data_clb,
@@ -340,11 +334,9 @@ test_parse_invalid(void **state)
" "
"");
CHECK_PARSE_LYD_PARAM(xml, LYD_XML, LYD_PARSE_STRICT, LYD_VALIDATE_PRESENT, LY_EVALID, data);
- CHECK_LOG_CTX("Node \"interfaces\" not found as a child of \"root\" node.",
- "Data location \"/sm:root\", line number 1.");
+ CHECK_LOG_CTX("Node \"interfaces\" not found as a child of \"root\" node.", "/sm:root", 1);
CHECK_PARSE_LYD_PARAM(json, LYD_JSON, LYD_PARSE_STRICT, LYD_VALIDATE_PRESENT, LY_EVALID, data);
- CHECK_LOG_CTX("Node \"interfaces\" not found as a child of \"root\" node.",
- "Data location \"/sm:root\", line number 1.");
+ CHECK_LOG_CTX("Node \"interfaces\" not found as a child of \"root\" node.", "/sm:root", 1);
/* callback data correct, invalid YANG data */
ly_ctx_set_ext_data_clb(UTEST_LYCTX, test_ext_data_clb,
@@ -408,27 +400,23 @@ test_parse_invalid(void **state)
" "
"");
CHECK_PARSE_LYD_PARAM(xml, LYD_XML, LYD_PARSE_STRICT, LYD_VALIDATE_PRESENT, LY_EVALID, data);
- CHECK_LOG_CTX("Ext plugin \"ly2 schema mount v1\": "
- "Mandatory node \"type\" instance does not exist.",
- "Data location \"/ietf-interfaces:interfaces/interface[name='bu']\".");
+ CHECK_LOG_CTX("Ext plugin \"ly2 schema mount v1\": Mandatory node \"type\" instance does not exist.",
+ "/ietf-interfaces:interfaces/interface[name='bu']", 0);
CHECK_PARSE_LYD_PARAM(json, LYD_JSON, LYD_PARSE_STRICT, LYD_VALIDATE_PRESENT, LY_EVALID, data);
- CHECK_LOG_CTX("Ext plugin \"ly2 schema mount v1\": "
- "Mandatory node \"type\" instance does not exist.",
- "Data location \"/ietf-interfaces:interfaces/interface[name='bu']\".");
+ CHECK_LOG_CTX("Ext plugin \"ly2 schema mount v1\": Mandatory node \"type\" instance does not exist.",
+ "/ietf-interfaces:interfaces/interface[name='bu']", 0);
/* same validation fail in separate validation */
CHECK_PARSE_LYD_PARAM(xml, LYD_XML, LYD_PARSE_STRICT | LYD_PARSE_ONLY, 0, LY_SUCCESS, data);
assert_int_equal(LY_EVALID, lyd_validate_all(&data, NULL, LYD_VALIDATE_PRESENT, NULL));
- CHECK_LOG_CTX("Ext plugin \"ly2 schema mount v1\": "
- "Mandatory node \"type\" instance does not exist.",
- "Data location \"/ietf-interfaces:interfaces/interface[name='bu']\".");
+ CHECK_LOG_CTX("Ext plugin \"ly2 schema mount v1\": Mandatory node \"type\" instance does not exist.",
+ "/ietf-interfaces:interfaces/interface[name='bu']", 0);
lyd_free_siblings(data);
CHECK_PARSE_LYD_PARAM(json, LYD_JSON, LYD_PARSE_STRICT | LYD_PARSE_ONLY, 0, LY_SUCCESS, data);
assert_int_equal(LY_EVALID, lyd_validate_all(&data, NULL, LYD_VALIDATE_PRESENT, NULL));
- CHECK_LOG_CTX("Ext plugin \"ly2 schema mount v1\": "
- "Mandatory node \"type\" instance does not exist.",
- "Data location \"/ietf-interfaces:interfaces/interface[name='bu']\".");
+ CHECK_LOG_CTX("Ext plugin \"ly2 schema mount v1\": Mandatory node \"type\" instance does not exist.",
+ "/ietf-interfaces:interfaces/interface[name='bu']", 0);
lyd_free_siblings(data);
/* success */
@@ -878,7 +866,7 @@ test_parse_shared(void **state)
CHECK_PARSE_LYD_PARAM(xml, LYD_XML, LYD_PARSE_STRICT, LYD_VALIDATE_PRESENT, LY_EVALID, data);
CHECK_LOG_CTX("Ext plugin \"ly2 schema mount v1\": "
"Shared-schema yang-library content-id \"2\" differs from \"1\" used previously.",
- "Path \"/ietf-yang-library:yang-library/content-id\".");
+ "/ietf-yang-library:yang-library/content-id", 0);
/* data for 2 mount points */
ly_ctx_set_ext_data_clb(UTEST_LYCTX, test_ext_data_clb,
@@ -1134,7 +1122,7 @@ test_parse_shared_parent_ref(void **state)
CHECK_PARSE_LYD_PARAM(xml, LYD_XML, LYD_PARSE_STRICT, LYD_VALIDATE_PRESENT, LY_EVALID, data);
CHECK_LOG_CTX("Ext plugin \"ly2 schema mount v1\": "
"Invalid leafref value \"target-value\" - no target instance \"/sm:target\" with the same value.",
- "Data location \"/ietf-interfaces:interfaces/interface[name='bu']/sm:sm-name\".");
+ "/ietf-interfaces:interfaces/interface[name='bu']/sm:sm-name", 0);
json =
"{\n"
@@ -1159,7 +1147,7 @@ test_parse_shared_parent_ref(void **state)
CHECK_PARSE_LYD_PARAM(json, LYD_JSON, LYD_PARSE_STRICT, LYD_VALIDATE_PRESENT, LY_EVALID, data);
CHECK_LOG_CTX("Ext plugin \"ly2 schema mount v1\": "
"Invalid leafref value \"target-value\" - no target instance \"/sm:target\" with the same value.",
- "Data location \"/ietf-interfaces:interfaces/interface[name='bu']/sm:sm-name\".");
+ "/ietf-interfaces:interfaces/interface[name='bu']/sm:sm-name", 0);
/* success */
xml =
diff --git a/tests/utests/extensions/test_structure.c b/tests/utests/extensions/test_structure.c
index 9bad7a7b8..cc8ed7184 100644
--- a/tests/utests/extensions/test_structure.c
+++ b/tests/utests/extensions/test_structure.c
@@ -148,7 +148,7 @@ test_schema_invalid(void **state)
"sx:structure struct {import yang;}}";
UTEST_INVALID_MODULE(data, LYS_IN_YANG, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid keyword \"import\" as a child of \"sx:structure struct\" extension instance.",
- "Path \"/a:{extension='sx:structure'}/struct\".");
+ "/a:{extension='sx:structure'}/struct", 0);
data = "module a {yang-version 1.1; namespace urn:tests:extensions:structure:a; prefix self;"
"import ietf-yang-structure-ext {prefix sx;}"
@@ -156,14 +156,14 @@ test_schema_invalid(void **state)
UTEST_INVALID_MODULE(data, LYS_IN_YANG, NULL, LY_EVALID);
CHECK_LOG_CTX("Ext plugin \"ly2 structure v1\": "
"Extension sx:structure must not be used as a non top-level statement in \"container\" statement.",
- "Path \"/a:b/{extension='sx:structure'}/struct\".");
+ "/a:b/{extension='sx:structure'}/struct", 0);
data = "module a {yang-version 1.1; namespace urn:tests:extensions:structure:a; prefix self;"
"import ietf-yang-structure-ext {prefix sx;}"
"sx:structure { container x { leaf x {type string;}}}}";
UTEST_INVALID_MODULE(data, LYS_IN_YANG, NULL, LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Extension instance \"sx:structure\" missing argument element \"name\".", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Extension instance \"sx:structure\" missing argument element \"name\".", NULL, 0);
data = "module a {yang-version 1.1; namespace urn:tests:extensions:structure:a; prefix self;"
"import ietf-yang-structure-ext {prefix sx;}"
@@ -171,7 +171,7 @@ test_schema_invalid(void **state)
"sx:structure struct { container y { leaf y {type string;}}}}";
UTEST_INVALID_MODULE(data, LYS_IN_YANG, NULL, LY_EVALID);
CHECK_LOG_CTX("Ext plugin \"ly2 structure v1\": Extension sx:structure is instantiated multiple times.",
- "Path \"/a:{extension='sx:structure'}/struct\".");
+ "/a:{extension='sx:structure'}/struct", 0);
data = "module a {yang-version 1.1; namespace urn:tests:extensions:structure:a; prefix self;"
"import ietf-yang-structure-ext {prefix sx;}"
@@ -179,7 +179,7 @@ test_schema_invalid(void **state)
"choice struct { container y { leaf y {type string;}}}}";
UTEST_INVALID_MODULE(data, LYS_IN_YANG, NULL, LY_EVALID);
CHECK_LOG_CTX("Ext plugin \"ly2 structure v1\": Extension sx:structure collides with a choice with the same identifier.",
- "Path \"/a:{extension='sx:structure'}/struct\".");
+ "/a:{extension='sx:structure'}/struct", 0);
/* augment-structure */
data = "module a {yang-version 1.1; namespace urn:tests:extensions:structure:a; prefix a;"
@@ -199,7 +199,7 @@ test_schema_invalid(void **state)
"}}";
UTEST_INVALID_MODULE(data, LYS_IN_YANG, NULL, LY_ENOTFOUND);
CHECK_LOG_CTX("Augment extension target node \"/a:n1\" from module \"b\" was not found.",
- "Path \"/b:{extension='sx:augment-structure'}/{augment='/a:n1'}\".");
+ "/b:{extension='sx:augment-structure'}/{augment='/a:n1'}", 0);
}
static void
diff --git a/tests/utests/extensions/test_yangdata.c b/tests/utests/extensions/test_yangdata.c
index 57caaf264..4de89804f 100644
--- a/tests/utests/extensions/test_yangdata.c
+++ b/tests/utests/extensions/test_yangdata.c
@@ -119,7 +119,7 @@ test_schema(void **state)
assert_null(mod->compiled->exts);
CHECK_LOG_CTX("Ext plugin \"ly2 yang-data v1\": "
"Extension rc:yang-data is ignored since it appears as a non top-level statement in \"container\" statement.",
- "Path \"/b:b/{extension='rc:yang-data'}/template\".");
+ "/b:b/{extension='rc:yang-data'}/template", 0);
assert_int_equal(LY_SUCCESS, lys_print_mem(&printed, mod, LYS_OUT_YANG_COMPILED, 0));
assert_string_equal(printed, info);
free(printed);
@@ -168,7 +168,7 @@ test_schema_invalid(void **state)
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, data, LYS_IN_YANG, NULL));
CHECK_LOG_CTX("Invalid keyword \"leaf\" as a child of \"rc:yang-data template\" extension instance.",
- "Path \"/a:{extension='rc:yang-data'}/template\".");
+ "/a:{extension='rc:yang-data'}/template", 0);
data = "module a {yang-version 1.1; namespace urn:tests:extensions:yangdata:a; prefix self;"
"import ietf-restconf {revision-date 2017-01-26; prefix rc;}"
@@ -176,8 +176,7 @@ test_schema_invalid(void **state)
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, data, LYS_IN_YANG, NULL));
CHECK_LOG_CTX("Ext plugin \"ly2 yang-data v1\": "
"Extension rc:yang-data is instantiated with leaf top level data node (inside a choice), "
- "but only a single container data node is allowed.",
- "Path \"/a:{extension='rc:yang-data'}/template\".");
+ "but only a single container data node is allowed.", "/a:{extension='rc:yang-data'}/template", 0);
data = "module a {yang-version 1.1; namespace urn:tests:extensions:yangdata:a; prefix self;"
"import ietf-restconf {revision-date 2017-01-26; prefix rc;}"
@@ -185,8 +184,7 @@ test_schema_invalid(void **state)
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, data, LYS_IN_YANG, NULL));
CHECK_LOG_CTX("Ext plugin \"ly2 yang-data v1\": "
"Extension rc:yang-data is instantiated with multiple top level data nodes (inside a single choice's case), "
- "but only a single container data node is allowed.",
- "Path \"/a:{extension='rc:yang-data'}/template\".");
+ "but only a single container data node is allowed.", "/a:{extension='rc:yang-data'}/template", 0);
data = "module a {yang-version 1.1; namespace urn:tests:extensions:yangdata:a; prefix self;"
"import ietf-restconf {revision-date 2017-01-26; prefix rc;}"
@@ -194,8 +192,7 @@ test_schema_invalid(void **state)
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, data, LYS_IN_YANG, NULL));
CHECK_LOG_CTX("Ext plugin \"ly2 yang-data v1\": "
"Extension rc:yang-data is instantiated with multiple top level data nodes, "
- "but only a single container data node is allowed.",
- "Path \"/a:{extension='rc:yang-data'}/template\".");
+ "but only a single container data node is allowed.", "/a:{extension='rc:yang-data'}/template", 0);
data = "module a {yang-version 1.1; namespace urn:tests:extensions:yangdata:a; prefix self;"
"import ietf-restconf {revision-date 2017-01-26; prefix rc;}"
@@ -203,15 +200,14 @@ test_schema_invalid(void **state)
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, data, LYS_IN_YANG, NULL));
CHECK_LOG_CTX("Ext plugin \"ly2 yang-data v1\": "
"Extension rc:yang-data is instantiated without any top level data node, "
- "but exactly one container data node is expected.",
- "Path \"/a:{extension='rc:yang-data'}/template\".");
+ "but exactly one container data node is expected.", "/a:{extension='rc:yang-data'}/template", 0);
data = "module a {yang-version 1.1; namespace urn:tests:extensions:yangdata:a; prefix self;"
"import ietf-restconf {revision-date 2017-01-26; prefix rc;}"
"rc:yang-data { container x { leaf x {type string;}}}}";
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, data, LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Extension instance \"rc:yang-data\" missing argument element \"name\".", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Extension instance \"rc:yang-data\" missing argument element \"name\".", NULL, 0);
data = "module a {yang-version 1.1; namespace urn:tests:extensions:yangdata:a; prefix self;"
"import ietf-restconf {revision-date 2017-01-26; prefix rc;}"
@@ -219,8 +215,7 @@ test_schema_invalid(void **state)
"rc:yang-data template { container y { leaf y {type string;}}}}";
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, data, LYS_IN_YANG, NULL));
CHECK_LOG_CTX("Ext plugin \"ly2 yang-data v1\": "
- "Extension rc:yang-data is instantiated multiple times.",
- "Path \"/a:{extension='rc:yang-data'}/template\".");
+ "Extension rc:yang-data is instantiated multiple times.", "/a:{extension='rc:yang-data'}/template", 0);
data = "module a {yang-version 1.1; namespace urn:tests:extensions:yangdata:a; prefix self;"
"import ietf-restconf {revision-date 2017-01-26; prefix rc;}"
@@ -229,8 +224,7 @@ test_schema_invalid(void **state)
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, data, LYS_IN_YANG, NULL));
CHECK_LOG_CTX("Ext plugin \"ly2 yang-data v1\": "
"Extension rc:yang-data is instantiated with leaf-list top level data node, "
- "but only a single container data node is allowed.",
- "Path \"/a:{extension='rc:yang-data'}/template\".");
+ "but only a single container data node is allowed.", "/a:{extension='rc:yang-data'}/template", 0);
}
static void
diff --git a/tests/utests/node/list.c b/tests/utests/node/list.c
index 987b41619..0f172d2d3 100644
--- a/tests/utests/node/list.c
+++ b/tests/utests/node/list.c
@@ -169,8 +169,8 @@ test_schema_yang(void **state)
"leaf group{type string;}"
"}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"TERR_0\" failed.", NULL);
- CHECK_LOG_CTX("Invalid value \"-1\" of \"max-elements\".", "Line number 5.");
+ CHECK_LOG_CTX("Parsing module \"TERR_0\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Invalid value \"-1\" of \"max-elements\".", NULL, 5);
schema = MODULE_CREATE_YANG("TERR_0", "list user {"
"key uid;"
@@ -181,8 +181,8 @@ test_schema_yang(void **state)
"leaf group{type string;}"
"}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"TERR_0\" failed.", NULL);
- CHECK_LOG_CTX("Value \"4294967298\" is out of \"max-elements\" bounds.", "Line number 5.");
+ CHECK_LOG_CTX("Parsing module \"TERR_0\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Value \"4294967298\" is out of \"max-elements\" bounds.", NULL, 5);
schema = MODULE_CREATE_YANG("TERR_0", "list user {"
"key uid;"
@@ -193,7 +193,7 @@ test_schema_yang(void **state)
"leaf group{type string;}"
"}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
- CHECK_LOG_CTX("List min-elements 20 is bigger than max-elements 10.", "Path \"/TERR_0:user\".");
+ CHECK_LOG_CTX("List min-elements 20 is bigger than max-elements 10.", "/TERR_0:user", 0);
schema = MODULE_CREATE_YANG("TERR_0", "list user {"
"key uid;"
@@ -204,8 +204,8 @@ test_schema_yang(void **state)
"leaf group{type string;}"
"}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"TERR_0\" failed.", NULL);
- CHECK_LOG_CTX("Invalid value \"-1\" of \"min-elements\".", "Line number 5.");
+ CHECK_LOG_CTX("Parsing module \"TERR_0\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Invalid value \"-1\" of \"min-elements\".", NULL, 5);
schema = MODULE_CREATE_YANG("TERR_0", "list user {"
"key uid;"
@@ -215,8 +215,8 @@ test_schema_yang(void **state)
"leaf group{type string;}"
"}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"TERR_0\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate keyword \"key\".", "Line number 5.");
+ CHECK_LOG_CTX("Parsing module \"TERR_0\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate keyword \"key\".", NULL, 5);
schema = MODULE_CREATE_YANG("T6", "list user {"
"config false;"
@@ -282,8 +282,8 @@ test_schema_yang(void **state)
"leaf group{type string;}"
"}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"TERROR0\" failed.", NULL);
- CHECK_LOG_CTX("Invalid value \"systeme\" of \"ordered-by\".", "Line number 5.");
+ CHECK_LOG_CTX("Parsing module \"TERROR0\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Invalid value \"systeme\" of \"ordered-by\".", NULL, 5);
schema = MODULE_CREATE_YANG("TERROR0", "list \"\" {"
"key uid;"
@@ -294,8 +294,8 @@ test_schema_yang(void **state)
"leaf group{type string;}"
"}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"TERROR0\" failed.", NULL);
- CHECK_LOG_CTX("Statement argument is required.", "Line number 5.");
+ CHECK_LOG_CTX("Parsing module \"TERROR0\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Statement argument is required.", NULL, 5);
schema = MODULE_CREATE_YANG("T9", "list user {"
"key uid;"
@@ -389,7 +389,7 @@ test_schema_yin(void **state)
" "
"");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
- CHECK_LOG_CTX("The list's key \"u "
" "
@@ -498,8 +498,8 @@ test_schema_yin(void **state)
" "
"");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"TERR_0\" failed.", NULL);
- CHECK_LOG_CTX("Invalid value \"-1\" of \"value\" attribute in \"max-elements\" element.", "Line number 8.");
+ CHECK_LOG_CTX("Parsing module \"TERR_0\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Invalid value \"-1\" of \"value\" attribute in \"max-elements\" element.", NULL, 8);
schema = MODULE_CREATE_YIN("TERR_0",
""
@@ -511,8 +511,8 @@ test_schema_yin(void **state)
" "
"
");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"TERR_0\" failed.", NULL);
- CHECK_LOG_CTX("Value \"4294967298\" of \"value\" attribute in \"max-elements\" element is out of bounds.", "Line number 8.");
+ CHECK_LOG_CTX("Parsing module \"TERR_0\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Value \"4294967298\" of \"value\" attribute in \"max-elements\" element is out of bounds.", NULL, 8);
schema = MODULE_CREATE_YIN("TERR_0",
""
@@ -524,9 +524,9 @@ test_schema_yin(void **state)
" "
"
");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"TERR_0\" failed.", NULL);
+ CHECK_LOG_CTX("Parsing module \"TERR_0\" failed.", NULL, 0);
CHECK_LOG_CTX("Invalid combination of min-elements and max-elements: min value 20 is bigger than the max value 10.",
- "Line number 8.");
+ NULL, 8);
schema = MODULE_CREATE_YIN("TERR_0",
""
@@ -538,8 +538,8 @@ test_schema_yin(void **state)
" "
"
");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"TERR_0\" failed.", NULL);
- CHECK_LOG_CTX("Value \"-1\" of \"value\" attribute in \"min-elements\" element is out of bounds.", "Line number 8.");
+ CHECK_LOG_CTX("Parsing module \"TERR_0\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Value \"-1\" of \"value\" attribute in \"min-elements\" element is out of bounds.", NULL, 8);
schema = MODULE_CREATE_YIN("TERR_0",
""
@@ -550,8 +550,8 @@ test_schema_yin(void **state)
" "
"
");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"TERR_0\" failed.", NULL);
- CHECK_LOG_CTX("Redefinition of \"key\" sub-element in \"list\" element.", "Line number 8.");
+ CHECK_LOG_CTX("Parsing module \"TERR_0\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Redefinition of \"key\" sub-element in \"list\" element.", NULL, 8);
schema = MODULE_CREATE_YIN("T6",
""
@@ -621,9 +621,9 @@ test_schema_yin(void **state)
" "
"
");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"TERROR0\" failed.", NULL);
+ CHECK_LOG_CTX("Parsing module \"TERROR0\" failed.", NULL, 0);
CHECK_LOG_CTX("Invalid value \"systeme\" of \"value\" attribute in \"ordered-by\" element. Valid values are \"system\" and \"user\".",
- "Line number 8.");
+ NULL, 8);
schema = MODULE_CREATE_YIN("T_DEFS1",
""
@@ -852,8 +852,7 @@ test_xml(void **state)
/* check first item */
CHECK_PARSE_LYD_PARAM(data, LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
assert_null(tree);
- CHECK_LOG_CTX("Duplicate instance of \"user\".",
- "Data location \"/T0:user[uid='0']\".");
+ CHECK_LOG_CTX("Duplicate instance of \"user\".", "/T0:user[uid='0']", 0);
data =
""
@@ -870,7 +869,7 @@ test_xml(void **state)
CHECK_PARSE_LYD_PARAM(data, LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
assert_null(tree);
CHECK_LOG_CTX("Unique data leaf(s) \"name group\" not satisfied in \"/T0:user[uid='0']\" and \"/T0:user[uid='1']\".",
- "Data location \"/T0:user[uid='1']\".");
+ "/T0:user[uid='1']", 0);
/* double key */
schema = MODULE_CREATE_YANG("T1", "list user {"
@@ -932,8 +931,7 @@ test_xml(void **state)
/* check first item */
CHECK_PARSE_LYD_PARAM(data, LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
assert_null(tree);
- CHECK_LOG_CTX("Duplicate instance of \"user\".",
- "Data location \"/T1:user[uid='0'][group='User']\".");
+ CHECK_LOG_CTX("Duplicate instance of \"user\".", "/T1:user[uid='0'][group='User']", 0);
/* min elements max elements */
schema = MODULE_CREATE_YANG("T2",
@@ -1053,8 +1051,7 @@ test_xml(void **state)
"";
CHECK_PARSE_LYD_PARAM(data, LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
assert_null(tree);
- CHECK_LOG_CTX("Too few \"user\" instances.",
- "Schema location \"/T2:user\".");
+ CHECK_LOG_CTX("Too few \"user\" instances.", "/T2:user", 0);
data =
""
@@ -1089,8 +1086,7 @@ test_xml(void **state)
"";
CHECK_PARSE_LYD_PARAM(data, LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
assert_null(tree);
- CHECK_LOG_CTX("Too many \"user\" instances.",
- "Data location \"/T2:user[uid='5']\".");
+ CHECK_LOG_CTX("Too many \"user\" instances.", "/T2:user[uid='5']", 0);
/* empty list */
schema = MODULE_CREATE_YANG("T_EMPTY_LIST",
@@ -1205,8 +1201,7 @@ test_json(void **state)
"]}";
CHECK_PARSE_LYD_PARAM(data, LYD_JSON, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
assert_null(tree);
- CHECK_LOG_CTX("Duplicate instance of \"user\".",
- "Data location \"/T0:user[uid='0']\".");
+ CHECK_LOG_CTX("Duplicate instance of \"user\".", "/T0:user[uid='0']", 0);
data =
"{\"T0:user\": ["
@@ -1216,7 +1211,7 @@ test_json(void **state)
CHECK_PARSE_LYD_PARAM(data, LYD_JSON, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
assert_null(tree);
CHECK_LOG_CTX("Unique data leaf(s) \"name group\" not satisfied in \"/T0:user[uid='0']\" and \"/T0:user[uid='1']\".",
- "Data location \"/T0:user[uid='1']\".");
+ "/T0:user[uid='1']", 0);
/* double key */
schema = MODULE_CREATE_YANG("T1", "list user {"
@@ -1265,8 +1260,7 @@ test_json(void **state)
/* check first item */
CHECK_PARSE_LYD_PARAM(data, LYD_JSON, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
assert_null(tree);
- CHECK_LOG_CTX("Duplicate instance of \"user\".",
- "Data location \"/T1:user[uid='0'][group='User']\".");
+ CHECK_LOG_CTX("Duplicate instance of \"user\".", "/T1:user[uid='0'][group='User']", 0);
/* min elements max elements */
schema = MODULE_CREATE_YANG("T2",
@@ -1353,8 +1347,7 @@ test_json(void **state)
"]}";
CHECK_PARSE_LYD_PARAM(data, LYD_JSON, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
assert_null(tree);
- CHECK_LOG_CTX("Too few \"user\" instances.",
- "Schema location \"/T2:user\".");
+ CHECK_LOG_CTX("Too few \"user\" instances.", "/T2:user", 0);
data =
"{\"T2:user\": ["
@@ -1367,8 +1360,7 @@ test_json(void **state)
"]}";
CHECK_PARSE_LYD_PARAM(data, LYD_JSON, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
assert_null(tree);
- CHECK_LOG_CTX("Too many \"user\" instances.",
- "Data location \"/T2:user[uid='5']\".");
+ CHECK_LOG_CTX("Too many \"user\" instances.", "/T2:user[uid='5']", 0);
schema = MODULE_CREATE_YANG("T_EMPTY_LIST",
"container user_list {"
diff --git a/tests/utests/restriction/test_pattern.c b/tests/utests/restriction/test_pattern.c
index 94539d6fe..56c149940 100644
--- a/tests/utests/restriction/test_pattern.c
+++ b/tests/utests/restriction/test_pattern.c
@@ -375,12 +375,9 @@ test_data_xml(void **state)
TEST_SUCCESS_XML("TPATTERN_0", "AHOJ", STRING, "AHOJ");
/* test print error */
TEST_ERROR_XML("TPATTERN_0", "T128");
- CHECK_LOG_CTX("pattern 0 error message",
- "Schema location \"/TPATTERN_0:port\", line number 1.");
+ CHECK_LOG_CTX("pattern 0 error message", "/TPATTERN_0:port", 1);
TEST_ERROR_XML("TPATTERN_0", "ahoj");
- CHECK_LOG_CTX("pattern 1 error message",
- "Schema location \"/TPATTERN_0:port\", line number 1.");
-
+ CHECK_LOG_CTX("pattern 1 error message", "/TPATTERN_0:port", 1);
}
int
diff --git a/tests/utests/restriction/test_range.c b/tests/utests/restriction/test_range.c
index f202b6cbf..13cccfa47 100644
--- a/tests/utests/restriction/test_range.c
+++ b/tests/utests/restriction/test_range.c
@@ -385,14 +385,11 @@ test_data_xml(void **state)
TEST_SUCCESS_XML("TRANGE_0", "126", INT8, "126", 126);
/* test print error */
TEST_ERROR_XML("TRANGE_0", "-1");
- CHECK_LOG_CTX("error message",
- "Schema location \"/TRANGE_0:port\", line number 1.");
+ CHECK_LOG_CTX("error message", "/TRANGE_0:port", 1);
TEST_ERROR_XML("TRANGE_0", "51");
- CHECK_LOG_CTX("error message",
- "Schema location \"/TRANGE_0:port\", line number 1.");
+ CHECK_LOG_CTX("error message", "/TRANGE_0:port", 1);
TEST_ERROR_XML("TRANGE_0", "127");
- CHECK_LOG_CTX("error message",
- "Schema location \"/TRANGE_0:port\", line number 1.");
+ CHECK_LOG_CTX("error message", "/TRANGE_0:port", 1);
/* xml test */
schema = MODULE_CREATE_YANG("TRANGE_1", "leaf port {type uint8 {"
@@ -406,15 +403,11 @@ test_data_xml(void **state)
TEST_SUCCESS_XML("TRANGE_1", "126", UINT8, "126", 126);
/* test print error */
TEST_ERROR_XML("TRANGE_1", "0");
- CHECK_LOG_CTX("error message",
- "Schema location \"/TRANGE_1:port\", line number 1.");
+ CHECK_LOG_CTX("error message", "/TRANGE_1:port", 1);
TEST_ERROR_XML("TRANGE_1", "51");
- CHECK_LOG_CTX("error message",
- "Schema location \"/TRANGE_1:port\", line number 1.");
+ CHECK_LOG_CTX("error message", "/TRANGE_1:port", 1);
TEST_ERROR_XML("TRANGE_1", "127");
- CHECK_LOG_CTX("error message",
- "Schema location \"/TRANGE_1:port\", line number 1.");
-
+ CHECK_LOG_CTX("error message", "/TRANGE_1:port", 1);
}
int
diff --git a/tests/utests/schema/test_schema.c b/tests/utests/schema/test_schema.c
index 17c4e4fff..e59fa65a2 100644
--- a/tests/utests/schema/test_schema.c
+++ b/tests/utests/schema/test_schema.c
@@ -83,29 +83,29 @@ test_imp_clb(const char *UNUSED(mod_name), const char *UNUSED(mod_rev), const ch
const char *test_str__; \
TEST_SCHEMA_STR(RFC7950, YIN, MOD_NAME, CONTENT, test_str__) \
assert_int_not_equal(lys_parse_mem(UTEST_LYCTX, test_str__, YIN ? LYS_IN_YIN : LYS_IN_YANG, NULL), LY_SUCCESS); \
- CHECK_LOG_CTX(ERRMSG, ERRPATH); \
+ CHECK_LOG_CTX(ERRMSG, ERRPATH, 0); \
}
-#define TEST_SCHEMA_PARSE_ERR(RFC7950, YIN, MOD_NAME, CONTENT, ERRMSG, ERRPATH) \
+#define TEST_SCHEMA_PARSE_ERR(RFC7950, YIN, MOD_NAME, CONTENT, ERRMSG, ERRPATH, ERRLINE) \
{ \
const char *test_str__; \
TEST_SCHEMA_STR(RFC7950, YIN, MOD_NAME, CONTENT, test_str__) \
assert_int_not_equal(lys_parse_mem(UTEST_LYCTX, test_str__, YIN ? LYS_IN_YIN : LYS_IN_YANG, NULL), LY_SUCCESS); \
- CHECK_LOG_CTX("Parsing module \""MOD_NAME"\" failed.", NULL); \
- CHECK_LOG_CTX(ERRMSG, ERRPATH); \
+ CHECK_LOG_CTX("Parsing module \""MOD_NAME"\" failed.", NULL, 0); \
+ CHECK_LOG_CTX(ERRMSG, ERRPATH, ERRLINE); \
}
#define TEST_STMT_DUP(RFC7950, YIN, STMT, MEMBER, VALUE1, VALUE2, LINE) \
if (YIN) { \
- TEST_SCHEMA_PARSE_ERR(RFC7950, YIN, "dup", "", "Duplicate keyword \""MEMBER"\".", "Line number "LINE"."); \
+ TEST_SCHEMA_PARSE_ERR(RFC7950, YIN, "dup", "", "Duplicate keyword \""MEMBER"\".", NULL, LINE); \
} else { \
TEST_SCHEMA_PARSE_ERR(RFC7950, YIN, "dup", STMT"{"MEMBER" "VALUE1";"MEMBER" "VALUE2";}", \
- "Duplicate keyword \""MEMBER"\".", "Line number "LINE"."); \
+ "Duplicate keyword \""MEMBER"\".", NULL, LINE); \
}
#define TEST_STMT_SUBSTM_ERR(RFC7950, STMT, SUBSTMT, VALUE) ;\
TEST_SCHEMA_PARSE_ERR(RFC7950, 0, "inv", STMT" test {"SUBSTMT" "VALUE";}", \
- "Invalid keyword \""SUBSTMT"\" as a child of \""STMT"\".", "Line number 1.");
+ "Invalid keyword \""SUBSTMT"\" as a child of \""STMT"\".", NULL, 1);
struct module_clb_list {
const char *name;
@@ -242,26 +242,26 @@ test_getnext(void **state)
}
static void
-test_date(void **state)
+test_date(void **UNUSED(state))
{
assert_int_equal(LY_EINVAL, lysp_check_date(NULL, NULL, 0, "date"));
- CHECK_LOG("Invalid argument date (lysp_check_date()).", NULL);
+ CHECK_LOG_LASTMSG("Invalid argument date (lysp_check_date()).");
assert_int_equal(LY_EINVAL, lysp_check_date(NULL, "x", 1, "date"));
- CHECK_LOG("Invalid length 1 of a date.", NULL);
+ CHECK_LOG_LASTMSG("Invalid length 1 of a date.");
assert_int_equal(LY_EINVAL, lysp_check_date(NULL, "nonsencexx", 10, "date"));
- CHECK_LOG("Invalid value \"nonsencexx\" of \"date\".", NULL);
+ CHECK_LOG_LASTMSG("Invalid value \"nonsencexx\" of \"date\".");
assert_int_equal(LY_EINVAL, lysp_check_date(NULL, "123x-11-11", 10, "date"));
- CHECK_LOG("Invalid value \"123x-11-11\" of \"date\".", NULL);
+ CHECK_LOG_LASTMSG("Invalid value \"123x-11-11\" of \"date\".");
assert_int_equal(LY_EINVAL, lysp_check_date(NULL, "2018-13-11", 10, "date"));
- CHECK_LOG("Invalid value \"2018-13-11\" of \"date\".", NULL);
+ CHECK_LOG_LASTMSG("Invalid value \"2018-13-11\" of \"date\".");
assert_int_equal(LY_EINVAL, lysp_check_date(NULL, "2018-11-41", 10, "date"));
- CHECK_LOG("Invalid value \"2018-11-41\" of \"date\".", NULL);
+ CHECK_LOG_LASTMSG("Invalid value \"2018-11-41\" of \"date\".");
assert_int_equal(LY_EINVAL, lysp_check_date(NULL, "2018-02-29", 10, "date"));
- CHECK_LOG("Invalid value \"2018-02-29\" of \"date\".", NULL);
+ CHECK_LOG_LASTMSG("Invalid value \"2018-02-29\" of \"date\".");
assert_int_equal(LY_EINVAL, lysp_check_date(NULL, "2018.02-28", 10, "date"));
- CHECK_LOG("Invalid value \"2018.02-28\" of \"date\".", NULL);
+ CHECK_LOG_LASTMSG("Invalid value \"2018.02-28\" of \"date\".");
assert_int_equal(LY_EINVAL, lysp_check_date(NULL, "2018-02.28", 10, "date"));
- CHECK_LOG("Invalid value \"2018-02.28\" of \"date\".", NULL);
+ CHECK_LOG_LASTMSG("Invalid value \"2018-02.28\" of \"date\".");
assert_int_equal(LY_SUCCESS, lysp_check_date(NULL, "2018-11-11", 10, "date"));
assert_int_equal(LY_SUCCESS, lysp_check_date(NULL, "2018-02-28", 10, "date"));
@@ -269,14 +269,10 @@ test_date(void **state)
}
static void
-test_revisions(void **state)
+test_revisions(void **UNUSED(state))
{
struct lysp_revision *revs = NULL, *rev;
- /* no error, it just does nothing */
- lysp_sort_revisions(NULL);
- CHECK_LOG(NULL, NULL);
-
/* revisions are stored in wrong order - the newest is the last */
LY_ARRAY_NEW_RET(NULL, revs, rev, );
strcpy(rev->date, "2018-01-01");
@@ -307,80 +303,80 @@ test_collision_typedef(void **state)
/* collision with a built-in type */
str = "module a {namespace urn:a; prefix a; typedef binary {type string;}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"binary\" of typedef statement - name collision with a built-in type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"binary\" of typedef statement - name collision with a built-in type.", NULL, 0);
str = "module a {namespace urn:a; prefix a; typedef bits {type string;}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"bits\" of typedef statement - name collision with a built-in type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"bits\" of typedef statement - name collision with a built-in type.", NULL, 0);
str = "module a {namespace urn:a; prefix a; typedef boolean {type string;}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"boolean\" of typedef statement - name collision with a built-in type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"boolean\" of typedef statement - name collision with a built-in type.", NULL, 0);
str = "module a {namespace urn:a; prefix a; typedef decimal64 {type string;}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"decimal64\" of typedef statement - name collision with a built-in type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"decimal64\" of typedef statement - name collision with a built-in type.", NULL, 0);
str = "module a {namespace urn:a; prefix a; typedef empty {type string;}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"empty\" of typedef statement - name collision with a built-in type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"empty\" of typedef statement - name collision with a built-in type.", NULL, 0);
str = "module a {namespace urn:a; prefix a; typedef enumeration {type string;}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"enumeration\" of typedef statement - name collision with a built-in type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"enumeration\" of typedef statement - name collision with a built-in type.", NULL, 0);
str = "module a {namespace urn:a; prefix a; typedef int8 {type string;}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"int8\" of typedef statement - name collision with a built-in type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"int8\" of typedef statement - name collision with a built-in type.", NULL, 0);
str = "module a {namespace urn:a; prefix a; typedef int16 {type string;}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"int16\" of typedef statement - name collision with a built-in type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"int16\" of typedef statement - name collision with a built-in type.", NULL, 0);
str = "module a {namespace urn:a; prefix a; typedef int32 {type string;}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"int32\" of typedef statement - name collision with a built-in type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"int32\" of typedef statement - name collision with a built-in type.", NULL, 0);
str = "module a {namespace urn:a; prefix a; typedef int64 {type string;}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"int64\" of typedef statement - name collision with a built-in type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"int64\" of typedef statement - name collision with a built-in type.", NULL, 0);
str = "module a {namespace urn:a; prefix a; typedef instance-identifier {type string;}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"instance-identifier\" of typedef statement - name collision with a built-in type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"instance-identifier\" of typedef statement - name collision with a built-in type.", NULL, 0);
str = "module a {namespace urn:a; prefix a; typedef identityref {type string;}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"identityref\" of typedef statement - name collision with a built-in type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"identityref\" of typedef statement - name collision with a built-in type.", NULL, 0);
str = "module a {namespace urn:a; prefix a; typedef leafref {type string;}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"leafref\" of typedef statement - name collision with a built-in type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"leafref\" of typedef statement - name collision with a built-in type.", NULL, 0);
str = "module a {namespace urn:a; prefix a; typedef string {type int8;}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"string\" of typedef statement - name collision with a built-in type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"string\" of typedef statement - name collision with a built-in type.", NULL, 0);
str = "module a {namespace urn:a; prefix a; typedef union {type string;}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"union\" of typedef statement - name collision with a built-in type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"union\" of typedef statement - name collision with a built-in type.", NULL, 0);
str = "module a {namespace urn:a; prefix a; typedef uint8 {type string;}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"uint8\" of typedef statement - name collision with a built-in type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"uint8\" of typedef statement - name collision with a built-in type.", NULL, 0);
str = "module a {namespace urn:a; prefix a; typedef uint16 {type string;}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"uint16\" of typedef statement - name collision with a built-in type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"uint16\" of typedef statement - name collision with a built-in type.", NULL, 0);
str = "module a {namespace urn:a; prefix a; typedef uint32 {type string;}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"uint32\" of typedef statement - name collision with a built-in type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"uint32\" of typedef statement - name collision with a built-in type.", NULL, 0);
str = "module a {namespace urn:a; prefix a; typedef uint64 {type string;}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"uint64\" of typedef statement - name collision with a built-in type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"uint64\" of typedef statement - name collision with a built-in type.", NULL, 0);
str = "module mytypes {namespace urn:types; prefix t; typedef binary_ {type string;} typedef bits_ {type string;} typedef boolean_ {type string;} "
"typedef decimal64_ {type string;} typedef empty_ {type string;} typedef enumeration_ {type string;} typedef int8_ {type string;} typedef int16_ {type string;}"
@@ -392,34 +388,34 @@ test_collision_typedef(void **state)
/* collision in node's scope */
str = "module a {namespace urn:a; prefix a; container c {typedef y {type int8;} typedef y {type string;}}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"y\" of typedef statement - name collision with sibling type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"y\" of typedef statement - name collision with sibling type.", NULL, 0);
/* collision with parent node */
str = "module a {namespace urn:a; prefix a; container c {container d {typedef y {type int8;}} typedef y {type string;}}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"y\" of typedef statement - name collision with another scoped type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"y\" of typedef statement - name collision with another scoped type.", NULL, 0);
/* collision with module's top-level */
str = "module a {namespace urn:a; prefix a; typedef x {type string;} container c {typedef x {type int8;}}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"x\" of typedef statement - scoped type collide with a top-level type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"x\" of typedef statement - scoped type collide with a top-level type.", NULL, 0);
/* collision of submodule's node with module's top-level */
ly_ctx_set_module_imp_clb(UTEST_LYCTX, test_imp_clb, "submodule b {belongs-to a {prefix a;} container c {typedef x {type string;}}}");
str = "module a {namespace urn:a; prefix a; include b; typedef x {type int8;}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"x\" of typedef statement - scoped type collide with a top-level type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"x\" of typedef statement - scoped type collide with a top-level type.", NULL, 0);
/* collision of module's node with submodule's top-level */
ly_ctx_set_module_imp_clb(UTEST_LYCTX, test_imp_clb, "submodule b {belongs-to a {prefix a;} typedef x {type int8;}}");
str = "module a {namespace urn:a; prefix a; include b; container c {typedef x {type string;}}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"x\" of typedef statement - scoped type collide with a top-level type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"x\" of typedef statement - scoped type collide with a top-level type.", NULL, 0);
/* collision of submodule's node with another submodule's top-level */
str = "module a {yang-version 1.1; namespace urn:a; prefix a; include asub; include bsub;}";
@@ -427,29 +423,29 @@ test_collision_typedef(void **state)
list[1].data = "submodule bsub {belongs-to a {prefix a;} container c {typedef g {type int;}}}";
ly_ctx_set_module_imp_clb(UTEST_LYCTX, module_clb, list);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"g\" of typedef statement - scoped type collide with a top-level type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"g\" of typedef statement - scoped type collide with a top-level type.", NULL, 0);
/* collision of module's top-levels */
str = "module a {namespace urn:a; prefix a; typedef test {type string;} typedef test {type int8;}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"test\" of typedef statement - name collision with another top-level type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"test\" of typedef statement - name collision with another top-level type.", NULL, 0);
/* collision of submodule's top-levels */
submod = "submodule asub {belongs-to a {prefix a;} typedef g {type int;} typedef g {type int;}}";
str = "module a {yang-version 1.1; namespace urn:a; prefix a; include asub;}";
ly_ctx_set_module_imp_clb(UTEST_LYCTX, test_imp_clb, submod);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"g\" of typedef statement - name collision with another top-level type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"g\" of typedef statement - name collision with another top-level type.", NULL, 0);
/* collision of module's top-level with submodule's top-levels */
ly_ctx_set_module_imp_clb(UTEST_LYCTX, test_imp_clb, "submodule b {belongs-to a {prefix a;} typedef x {type string;}}");
str = "module a {namespace urn:a; prefix a; include b; typedef x {type int8;}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"x\" of typedef statement - name collision with another top-level type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"x\" of typedef statement - name collision with another top-level type.", NULL, 0);
/* collision of submodule's top-level with another submodule's top-levels */
str = "module a {yang-version 1.1; namespace urn:a; prefix a; include asub; include bsub;}";
@@ -457,14 +453,14 @@ test_collision_typedef(void **state)
list[1].data = "submodule bsub {belongs-to a {prefix a;} typedef g {type int;}}";
ly_ctx_set_module_imp_clb(UTEST_LYCTX, module_clb, list);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"g\" of typedef statement - name collision with another top-level type.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"g\" of typedef statement - name collision with another top-level type.", NULL, 0);
/* error in type-stmt */
str = "module a {namespace urn:a; prefix a; container c {typedef x {type t{}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Unexpected end-of-input.", "Line number 1.");
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Unexpected end-of-input.", NULL, 1);
/* no collision if the same names are in different scope */
str = "module a {yang-version 1.1; namespace urn:a; prefix a;"
@@ -485,34 +481,34 @@ test_collision_grouping(void **state)
/* collision in node's scope */
str = "module a {namespace urn:a; prefix a; container c {grouping y; grouping y;}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"y\" of grouping statement - name collision with sibling grouping.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"y\" of grouping statement - name collision with sibling grouping.", NULL, 0);
/* collision with parent node */
str = "module a {namespace urn:a; prefix a; container c {container d {grouping y;} grouping y;}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"y\" of grouping statement - name collision with another scoped grouping.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"y\" of grouping statement - name collision with another scoped grouping.", NULL, 0);
/* collision with module's top-level */
str = "module a {namespace urn:a; prefix a; grouping x; container c {grouping x;}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"x\" of grouping statement - scoped grouping collide with a top-level grouping.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"x\" of grouping statement - scoped grouping collide with a top-level grouping.", NULL, 0);
/* collision of submodule's node with module's top-level */
ly_ctx_set_module_imp_clb(UTEST_LYCTX, test_imp_clb, "submodule b {belongs-to a {prefix a;} container c {grouping x;}}");
str = "module a {namespace urn:a; prefix a; include b; grouping x;}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"x\" of grouping statement - scoped grouping collide with a top-level grouping.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"x\" of grouping statement - scoped grouping collide with a top-level grouping.", NULL, 0);
/* collision of module's node with submodule's top-level */
ly_ctx_set_module_imp_clb(UTEST_LYCTX, test_imp_clb, "submodule b {belongs-to a {prefix a;} grouping x;}");
str = "module a {namespace urn:a; prefix a; include b; container c {grouping x;}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"x\" of grouping statement - scoped grouping collide with a top-level grouping.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"x\" of grouping statement - scoped grouping collide with a top-level grouping.", NULL, 0);
/* collision of submodule's node with another submodule's top-level */
str = "module a {yang-version 1.1; namespace urn:a; prefix a; include asub; include bsub;}";
@@ -520,29 +516,29 @@ test_collision_grouping(void **state)
list[1].data = "submodule bsub {belongs-to a {prefix a;} container c {grouping g;}}";
ly_ctx_set_module_imp_clb(UTEST_LYCTX, module_clb, list);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"g\" of grouping statement - scoped grouping collide with a top-level grouping.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"g\" of grouping statement - scoped grouping collide with a top-level grouping.", NULL, 0);
/* collision of module's top-levels */
str = "module a {namespace urn:a; prefix a; grouping test; grouping test;}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"test\" of grouping statement - name collision with another top-level grouping.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"test\" of grouping statement - name collision with another top-level grouping.", NULL, 0);
/* collision of submodule's top-levels */
submod = "submodule asub {belongs-to a {prefix a;} grouping g; grouping g;}";
str = "module a {yang-version 1.1; namespace urn:a; prefix a; include asub;}";
ly_ctx_set_module_imp_clb(UTEST_LYCTX, test_imp_clb, submod);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"g\" of grouping statement - name collision with another top-level grouping.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"g\" of grouping statement - name collision with another top-level grouping.", NULL, 0);
/* collision of module's top-level with submodule's top-levels */
ly_ctx_set_module_imp_clb(UTEST_LYCTX, test_imp_clb, "submodule b {belongs-to a {prefix a;} grouping x;}");
str = "module a {namespace urn:a; prefix a; include b; grouping x;}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"x\" of grouping statement - name collision with another top-level grouping.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"x\" of grouping statement - name collision with another top-level grouping.", NULL, 0);
/* collision of submodule's top-level with another submodule's top-levels */
str = "module a {yang-version 1.1; namespace urn:a; prefix a; include asub; include bsub;}";
@@ -550,27 +546,27 @@ test_collision_grouping(void **state)
list[1].data = "submodule bsub {belongs-to a {prefix a;} grouping g;}";
ly_ctx_set_module_imp_clb(UTEST_LYCTX, module_clb, list);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"g\" of grouping statement - name collision with another top-level grouping.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"g\" of grouping statement - name collision with another top-level grouping.", NULL, 0);
/* collision in nested groupings, top-level */
str = "module a {namespace urn:a; prefix a; grouping g {grouping g;}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"g\" of grouping statement - scoped grouping collide with a top-level grouping.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"g\" of grouping statement - scoped grouping collide with a top-level grouping.", NULL, 0);
/* collision in nested groupings, in node */
str = "module a {namespace urn:a; prefix a; container c {grouping g {grouping g;}}}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"g\" of grouping statement - name collision with another scoped grouping.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"g\" of grouping statement - name collision with another scoped grouping.", NULL, 0);
/* no collision if the same names are in different scope */
str = "module a {yang-version 1.1; namespace urn:a; prefix a;"
"container c {grouping g;} container d {grouping g;}}";
assert_int_equal(LY_SUCCESS, lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Locally scoped grouping \"g\" not used.", NULL);
- CHECK_LOG_CTX("Locally scoped grouping \"g\" not used.", NULL);
+ CHECK_LOG_CTX("Locally scoped grouping \"g\" not used.", NULL, 0);
+ CHECK_LOG_CTX("Locally scoped grouping \"g\" not used.", NULL, 0);
}
static void
@@ -586,24 +582,24 @@ test_collision_identity(void **state)
/* collision of module's top-levels */
str = "module a {yang-version 1.1; namespace urn:a; prefix a; identity g; identity g;}";
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"g\" of identity statement - name collision with another top-level identity.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"g\" of identity statement - name collision with another top-level identity.", NULL, 0);
/* collision of submodule's top-levels */
submod = "submodule asub {belongs-to a {prefix a;} identity g; identity g;}";
str = "module a {yang-version 1.1; namespace urn:a; prefix a; include asub;}";
ly_ctx_set_module_imp_clb(UTEST_LYCTX, test_imp_clb, submod);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"g\" of identity statement - name collision with another top-level identity.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"g\" of identity statement - name collision with another top-level identity.", NULL, 0);
/* collision of module's top-level with submodule's top-levels */
submod = "submodule asub {belongs-to a {prefix a;} identity g;}";
str = "module a {yang-version 1.1; namespace urn:a; prefix a; include asub; identity g;}";
ly_ctx_set_module_imp_clb(UTEST_LYCTX, test_imp_clb, submod);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"g\" of identity statement - name collision with another top-level identity.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"g\" of identity statement - name collision with another top-level identity.", NULL, 0);
/* collision of submodule's top-level with another submodule's top-levels */
str = "module a {yang-version 1.1; namespace urn:a; prefix a; include asub; include bsub;}";
@@ -611,8 +607,8 @@ test_collision_identity(void **state)
list[1].data = "submodule bsub {belongs-to a {prefix a;} identity g;}";
ly_ctx_set_module_imp_clb(UTEST_LYCTX, module_clb, list);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"g\" of identity statement - name collision with another top-level identity.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"g\" of identity statement - name collision with another top-level identity.", NULL, 0);
}
static void
@@ -628,24 +624,24 @@ test_collision_feature(void **state)
/* collision of module's top-levels */
str = "module a {yang-version 1.1; namespace urn:a; prefix a; feature g; feature g;}";
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"g\" of feature statement - name collision with another top-level feature.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"g\" of feature statement - name collision with another top-level feature.", NULL, 0);
/* collision of submodule's top-levels */
submod = "submodule asub {belongs-to a {prefix a;} feature g; feature g;}";
str = "module a {yang-version 1.1; namespace urn:a; prefix a; include asub;}";
ly_ctx_set_module_imp_clb(UTEST_LYCTX, test_imp_clb, submod);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"g\" of feature statement - name collision with another top-level feature.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"g\" of feature statement - name collision with another top-level feature.", NULL, 0);
/* collision of module's top-level with submodule's top-levels */
submod = "submodule asub {belongs-to a {prefix a;} feature g;}";
str = "module a {yang-version 1.1; namespace urn:a; prefix a; include asub; feature g;}";
ly_ctx_set_module_imp_clb(UTEST_LYCTX, test_imp_clb, submod);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"g\" of feature statement - name collision with another top-level feature.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"g\" of feature statement - name collision with another top-level feature.", NULL, 0);
/* collision of submodule's top-level with another submodule's top-levels */
str = "module a {yang-version 1.1; namespace urn:a; prefix a; include asub; include bsub;}";
@@ -653,8 +649,8 @@ test_collision_feature(void **state)
list[1].data = "submodule bsub {belongs-to a {prefix a;} feature g;}";
ly_ctx_set_module_imp_clb(UTEST_LYCTX, module_clb, list);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"g\" of feature statement - name collision with another top-level feature.", NULL);
+ CHECK_LOG_CTX("Parsing module \"a\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"g\" of feature statement - name collision with another top-level feature.", NULL, 0);
}
static void
@@ -681,7 +677,7 @@ test_accessible_tree(void **state)
" }\n"
"}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_SUCCESS);
- CHECK_LOG_CTX(NULL, NULL);
+ CHECK_LOG_CTX(NULL, NULL, 0);
/* config -> state leafref */
str = "module b {\n"
@@ -703,7 +699,7 @@ test_accessible_tree(void **state)
"}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
CHECK_LOG_CTX("Invalid leafref path \"/cont/l\" - target is supposed to represent configuration data"
- " (as the leafref does), but it does not.", "Schema location \"/b:cont2/l2\".");
+ " (as the leafref does), but it does not.", "/b:cont2/l2", 0);
/* config -> state must */
str = "module b {\n"
@@ -724,7 +720,7 @@ test_accessible_tree(void **state)
"}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_SUCCESS);
CHECK_LOG_CTX("Schema node \"cont\" for parent \"\" not found; in expr \"../../cont\" "
- "with context node \"/b:cont2/l2\".", NULL);
+ "with context node \"/b:cont2/l2\".", NULL, 0);
/* state -> config */
str = "module c {\n"
@@ -746,7 +742,7 @@ test_accessible_tree(void **state)
" }\n"
"}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_SUCCESS);
- CHECK_LOG_CTX(NULL, NULL);
+ CHECK_LOG_CTX(NULL, NULL, 0);
/* notif -> state */
str = "module d {\n"
@@ -768,7 +764,7 @@ test_accessible_tree(void **state)
" }\n"
"}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_SUCCESS);
- CHECK_LOG_CTX(NULL, NULL);
+ CHECK_LOG_CTX(NULL, NULL, 0);
/* notif -> notif */
str = "module e {\n"
@@ -787,7 +783,7 @@ test_accessible_tree(void **state)
" }\n"
"}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_SUCCESS);
- CHECK_LOG_CTX(NULL, NULL);
+ CHECK_LOG_CTX(NULL, NULL, 0);
/* rpc input -> state */
str = "module f {\n"
@@ -811,7 +807,7 @@ test_accessible_tree(void **state)
" }\n"
"}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_SUCCESS);
- CHECK_LOG_CTX(NULL, NULL);
+ CHECK_LOG_CTX(NULL, NULL, 0);
/* rpc input -> rpc input */
str = "module g {\n"
@@ -832,7 +828,7 @@ test_accessible_tree(void **state)
" }\n"
"}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_SUCCESS);
- CHECK_LOG_CTX(NULL, NULL);
+ CHECK_LOG_CTX(NULL, NULL, 0);
/* rpc input -> rpc output leafref */
str = "module h {\n"
@@ -854,7 +850,7 @@ test_accessible_tree(void **state)
" }\n"
"}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Not found node \"l\" in path.", "Schema location \"/h:rp/input/l2\".");
+ CHECK_LOG_CTX("Not found node \"l\" in path.", "/h:rp/input/l2", 0);
/* rpc input -> rpc output must */
str = "module h {\n"
@@ -875,7 +871,8 @@ test_accessible_tree(void **state)
" }\n"
"}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_SUCCESS);
- CHECK_LOG_CTX("Schema node \"l\" for parent \"/h:rp\" not found; in expr \"../l\" with context node \"/h:rp/input/l2\".", NULL);
+ CHECK_LOG_CTX("Schema node \"l\" for parent \"/h:rp\" not found; in expr \"../l\" with context node \"/h:rp/input/l2\".",
+ NULL, 0);
/* rpc input -> notif leafref */
str = "module i {\n"
@@ -897,7 +894,7 @@ test_accessible_tree(void **state)
" }\n"
"}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Not found node \"notif\" in path.", "Schema location \"/i:rp/input/l2\".");
+ CHECK_LOG_CTX("Not found node \"notif\" in path.", "/i:rp/input/l2", 0);
/* rpc input -> notif must */
str = "module i {\n"
@@ -919,7 +916,7 @@ test_accessible_tree(void **state)
"}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_SUCCESS);
CHECK_LOG_CTX("Schema node \"notif\" for parent \"\" not found; in expr \"/notif\" "
- "with context node \"/i:rp/input/l2\".", NULL);
+ "with context node \"/i:rp/input/l2\".", NULL, 0);
/* action output -> state */
str = "module j {\n"
@@ -950,7 +947,7 @@ test_accessible_tree(void **state)
" }\n"
"}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_SUCCESS);
- CHECK_LOG_CTX(NULL, NULL);
+ CHECK_LOG_CTX(NULL, NULL, 0);
/* action output -> action input leafref */
str = "module k {\n"
@@ -981,7 +978,7 @@ test_accessible_tree(void **state)
" }\n"
"}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Not found node \"l\" in path.", "Schema location \"/k:cont/ll/act/output/l2\".");
+ CHECK_LOG_CTX("Not found node \"l\" in path.", "/k:cont/ll/act/output/l2", 0);
/* action output -> action input must */
str = "module k {\n"
@@ -1012,7 +1009,7 @@ test_accessible_tree(void **state)
"}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_SUCCESS);
CHECK_LOG_CTX("Schema node \"l\" for parent \"/k:cont/ll/act\" not found; in expr \"/cont/ll/act/l\" "
- "with context node \"/k:cont/ll/act/output/l2\".", NULL);
+ "with context node \"/k:cont/ll/act/output/l2\".", NULL, 0);
}
static void
@@ -1048,15 +1045,16 @@ test_includes(void **state)
ly_ctx_set_module_imp_clb(UTEST_LYCTX, module_clb, list);
mod = ly_ctx_load_module(UTEST_LYCTX, "main_b", NULL, NULL);
assert_null(mod);
- CHECK_LOG_CTX("Loading \"main_b\" module failed.", NULL);
- CHECK_LOG_CTX("Data model \"main_b\" not found in local searchdirs.", NULL);
- CHECK_LOG_CTX("Parsing module \"main_b\" failed.", NULL);
- CHECK_LOG_CTX("Including \"sub_b_one\" submodule into \"main_b\" failed.", NULL);
- CHECK_LOG_CTX("Data model \"sub_b_one\" not found in local searchdirs.", NULL);
- CHECK_LOG_CTX("Parsing submodule \"sub_b_one\" failed.", NULL);
+ CHECK_LOG_CTX("Loading \"main_b\" module failed.", NULL, 0);
+ CHECK_LOG_CTX("Data model \"main_b\" not found in local searchdirs.", NULL, 0);
+ CHECK_LOG_CTX("Parsing module \"main_b\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Including \"sub_b_one\" submodule into \"main_b\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Data model \"sub_b_one\" not found in local searchdirs.", NULL, 0);
+ CHECK_LOG_CTX("Parsing submodule \"sub_b_one\" failed.", NULL, 0);
CHECK_LOG_CTX("YANG 1.1 requires all submodules to be included from main module. But submodule \"sub_b_one\" includes "
- "submodule \"sub_b_two\" which is not included by main module \"main_b\".", NULL);
- CHECK_LOG_CTX("YANG version 1.1 expects all includes in main module, includes in submodules (sub_b_one) are not necessary.", NULL);
+ "submodule \"sub_b_two\" which is not included by main module \"main_b\".", NULL, 0);
+ CHECK_LOG_CTX("YANG version 1.1 expects all includes in main module, includes in submodules (sub_b_one) are not necessary.",
+ NULL, 0);
}
{
@@ -1074,8 +1072,10 @@ test_includes(void **state)
assert_int_equal(2, LY_ARRAY_COUNT(mod->parsed->includes));
assert_false(mod->parsed->includes[1].injected);
/* result is ok, but log includes the warning */
- CHECK_LOG_CTX("YANG version 1.1 expects all includes in main module, includes in submodules (sub_c_two) are not necessary.", NULL);
- CHECK_LOG_CTX("YANG version 1.1 expects all includes in main module, includes in submodules (sub_c_one) are not necessary.", NULL);
+ CHECK_LOG_CTX("YANG version 1.1 expects all includes in main module, includes in submodules (sub_c_two) are not necessary.",
+ NULL, 0);
+ CHECK_LOG_CTX("YANG version 1.1 expects all includes in main module, includes in submodules (sub_c_one) are not necessary.",
+ NULL, 0);
}
}
@@ -1163,7 +1163,7 @@ test_disabled_enum(void **state)
"}}"
"}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Node \"l\" without any (or all disabled) valid values.", "Schema location \"/a:l\".");
+ CHECK_LOG_CTX("Node \"l\" without any (or all disabled) valid values.", "/a:l", 0);
/* disabled default value */
str = "module a {"
@@ -1180,8 +1180,7 @@ test_disabled_enum(void **state)
"}"
"}";
assert_int_equal(lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Invalid default - value does not fit the type (Invalid enumeration value \"e1\".).",
- "Schema location \"/a:l\".");
+ CHECK_LOG_CTX("Invalid default - value does not fit the type (Invalid enumeration value \"e1\".).", "/a:l", 0);
}
static void
@@ -1192,9 +1191,9 @@ test_identity(void **state)
/*
* parsing YANG
*/
- TEST_STMT_DUP(1, 0, "identity id", "description", "a", "b", "1");
- TEST_STMT_DUP(1, 0, "identity id", "reference", "a", "b", "1");
- TEST_STMT_DUP(1, 0, "identity id", "status", "current", "obsolete", "1");
+ TEST_STMT_DUP(1, 0, "identity id", "description", "a", "b", 1);
+ TEST_STMT_DUP(1, 0, "identity id", "reference", "a", "b", 1);
+ TEST_STMT_DUP(1, 0, "identity id", "status", "current", "obsolete", 1);
/* full content */
TEST_SCHEMA_OK(1, 0, "identityone",
@@ -1239,7 +1238,7 @@ test_identity(void **state)
/* invalid substatement */
TEST_SCHEMA_PARSE_ERR(0, 1, "inv", "",
"Invalid sub-elemnt \"if-feature\" of \"identity\" element - "
- "this sub-element is allowed only in modules with version 1.1 or newer.", "Line number 1.");
+ "this sub-element is allowed only in modules with version 1.1 or newer.", NULL, 1);
/*
* compiling
@@ -1270,10 +1269,10 @@ test_identity(void **state)
assert_ptr_equal(mod->identities[1].derived[0], &mod->identities[0]);
ly_ctx_set_module_imp_clb(UTEST_LYCTX, test_imp_clb, "submodule inv_sub {belongs-to inv {prefix inv;} identity i1;}");
- TEST_SCHEMA_ERR(0, 0, "inv", "identity i1 {base i2;}", "Unable to find base (i2) of identity \"i1\".", "Path \"/inv:{identity='i1'}\".");
- TEST_SCHEMA_ERR(0, 0, "inv", "identity i1 {base i1;}", "Identity \"i1\" is derived from itself.", "Path \"/inv:{identity='i1'}\".");
+ TEST_SCHEMA_ERR(0, 0, "inv", "identity i1 {base i2;}", "Unable to find base (i2) of identity \"i1\".", "/inv:{identity='i1'}");
+ TEST_SCHEMA_ERR(0, 0, "inv", "identity i1 {base i1;}", "Identity \"i1\" is derived from itself.", "/inv:{identity='i1'}");
TEST_SCHEMA_ERR(0, 0, "inv", "identity i1 {base i2;}identity i2 {base i3;}identity i3 {base i1;}",
- "Identity \"i1\" is indirectly derived from itself.", "Path \"/inv:{identity='i3'}\".");
+ "Identity \"i1\" is indirectly derived from itself.", "/inv:{identity='i3'}");
/* base in non-implemented module */
ly_ctx_set_module_imp_clb(UTEST_LYCTX, test_imp_clb,
@@ -1283,12 +1282,12 @@ test_identity(void **state)
/* default value from non-implemented module */
TEST_SCHEMA_ERR(0, 0, "ident2", "import base {prefix b;} leaf l {type identityref {base b:i1;} default b:i2;}",
"Invalid default - value does not fit the type (Invalid identityref \"b:i2\" value"
- " - identity found in non-implemented module \"base\".).", "Schema location \"/ident2:l\".");
+ " - identity found in non-implemented module \"base\".).", "/ident2:l");
/* default value in typedef from non-implemented module */
TEST_SCHEMA_ERR(0, 0, "ident2", "import base {prefix b;} typedef t1 {type identityref {base b:i1;} default b:i2;}"
"leaf l {type t1;}", "Invalid default - value does not fit the type (Invalid"
- " identityref \"b:i2\" value - identity found in non-implemented module \"base\".).", "Schema location \"/ident2:l\".");
+ " identityref \"b:i2\" value - identity found in non-implemented module \"base\".).", "/ident2:l");
/*
* printing
@@ -1309,9 +1308,9 @@ test_feature(void **state)
* parsing YANG
*/
- TEST_STMT_DUP(1, 0, "feature f", "description", "a", "b", "1");
- TEST_STMT_DUP(1, 0, "feature f", "reference", "a", "b", "1");
- TEST_STMT_DUP(1, 0, "feature f", "status", "current", "obsolete", "1");
+ TEST_STMT_DUP(1, 0, "feature f", "description", "a", "b", 1);
+ TEST_STMT_DUP(1, 0, "feature f", "reference", "a", "b", 1);
+ TEST_STMT_DUP(1, 0, "feature f", "status", "current", "obsolete", 1);
/* full content */
TEST_SCHEMA_OK(1, 0, "featureone",
@@ -1351,7 +1350,7 @@ test_feature(void **state)
/* invalid substatement */
TEST_SCHEMA_PARSE_ERR(0, 1, "inv", "org",
- "Unexpected sub-element \"organization\" of \"feature\" element.", "Line number 1.");
+ "Unexpected sub-element \"organization\" of \"feature\" element.", NULL, 1);
/*
* compiling
@@ -1374,37 +1373,37 @@ test_feature(void **state)
/* some invalid expressions */
TEST_SCHEMA_PARSE_ERR(1, 0, "inv", "feature f{if-feature f1;}",
- "Invalid value \"f1\" of if-feature - unable to find feature \"f1\".", NULL);
+ "Invalid value \"f1\" of if-feature - unable to find feature \"f1\".", NULL, 0);
TEST_SCHEMA_PARSE_ERR(1, 0, "inv", "feature f1; feature f2{if-feature 'f and';}",
- "Invalid value \"f and\" of if-feature - unexpected end of expression.", NULL);
+ "Invalid value \"f and\" of if-feature - unexpected end of expression.", NULL, 0);
TEST_SCHEMA_PARSE_ERR(1, 0, "inv", "feature f{if-feature 'or';}",
- "Invalid value \"or\" of if-feature - unexpected end of expression.", NULL);
+ "Invalid value \"or\" of if-feature - unexpected end of expression.", NULL, 0);
TEST_SCHEMA_PARSE_ERR(1, 0, "inv", "feature f1; feature f2{if-feature '(f1';}",
- "Invalid value \"(f1\" of if-feature - non-matching opening and closing parentheses.", NULL);
+ "Invalid value \"(f1\" of if-feature - non-matching opening and closing parentheses.", NULL, 0);
TEST_SCHEMA_PARSE_ERR(1, 0, "inv", "feature f1; feature f2{if-feature 'f1)';}",
- "Invalid value \"f1)\" of if-feature - non-matching opening and closing parentheses.", NULL);
+ "Invalid value \"f1)\" of if-feature - non-matching opening and closing parentheses.", NULL, 0);
TEST_SCHEMA_PARSE_ERR(1, 0, "inv", "feature f1; feature f2{if-feature ---;}",
- "Invalid value \"---\" of if-feature - unable to find feature \"---\".", NULL);
+ "Invalid value \"---\" of if-feature - unable to find feature \"---\".", NULL, 0);
TEST_SCHEMA_PARSE_ERR(0, 0, "inv", "feature f1; feature f2{if-feature 'not f1';}",
- "Invalid value \"not f1\" of if-feature - YANG 1.1 expression in YANG 1.0 module.", NULL);
+ "Invalid value \"not f1\" of if-feature - YANG 1.1 expression in YANG 1.0 module.", NULL, 0);
ly_ctx_set_module_imp_clb(UTEST_LYCTX, test_imp_clb, "submodule inv_sub {belongs-to inv {prefix inv;} feature f1;}");
TEST_SCHEMA_PARSE_ERR(0, 0, "inv", "feature f1 {if-feature f2;} feature f2 {if-feature f1;}",
- "Feature \"f1\" is indirectly referenced from itself.", NULL);
+ "Feature \"f1\" is indirectly referenced from itself.", NULL, 0);
TEST_SCHEMA_PARSE_ERR(0, 0, "inv", "feature f1 {if-feature f1;}",
- "Feature \"f1\" is referenced from itself.", NULL);
+ "Feature \"f1\" is referenced from itself.", NULL, 0);
TEST_SCHEMA_PARSE_ERR(1, 0, "inv", "feature f {if-feature ();}",
- "Invalid value \"()\" of if-feature - number of features in expression does not match the required number of operands for the operations.", NULL);
+ "Invalid value \"()\" of if-feature - number of features in expression does not match the required number of operands for the operations.", NULL, 0);
TEST_SCHEMA_PARSE_ERR(1, 0, "inv", "feature f1; feature f {if-feature 'f1(';}",
- "Invalid value \"f1(\" of if-feature - non-matching opening and closing parentheses.", NULL);
+ "Invalid value \"f1(\" of if-feature - non-matching opening and closing parentheses.", NULL, 0);
TEST_SCHEMA_PARSE_ERR(1, 0, "inv", "feature f1; feature f {if-feature 'and f1';}",
- "Invalid value \"and f1\" of if-feature - missing feature/expression before \"and\" operation.", NULL);
+ "Invalid value \"and f1\" of if-feature - missing feature/expression before \"and\" operation.", NULL, 0);
TEST_SCHEMA_PARSE_ERR(1, 0, "inv", "feature f1; feature f {if-feature 'f1 not ';}",
- "Invalid value \"f1 not \" of if-feature - unexpected end of expression.", NULL);
+ "Invalid value \"f1 not \" of if-feature - unexpected end of expression.", NULL, 0);
TEST_SCHEMA_PARSE_ERR(1, 0, "inv", "feature f1; feature f {if-feature 'f1 not not ';}",
- "Invalid value \"f1 not not \" of if-feature - unexpected end of expression.", NULL);
+ "Invalid value \"f1 not not \" of if-feature - unexpected end of expression.", NULL, 0);
TEST_SCHEMA_PARSE_ERR(1, 0, "inv", "feature f1; feature f2; feature f {if-feature 'or f1 f2';}",
- "Invalid value \"or f1 f2\" of if-feature - missing feature/expression before \"or\" operation.", NULL);
+ "Invalid value \"or f1 f2\" of if-feature - missing feature/expression before \"or\" operation.", NULL, 0);
/*
* printing
@@ -1613,8 +1612,8 @@ test_extension_argument_element(void **state)
/* invalid */
mod_test_yang = "module x { namespace \"urn:x\"; prefix x; import a { prefix a; } a:e; }";
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, mod_test_yang, LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Parsing module \"x\" failed.", NULL);
- CHECK_LOG_CTX("Extension instance \"a:e\" missing argument element \"name\".", NULL);
+ CHECK_LOG_CTX("Parsing module \"x\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Extension instance \"a:e\" missing argument element \"name\".", NULL, 0);
mod_test_yin = "\n"
"\n"
"\n";
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, mod_test_yin, LYS_IN_YIN, NULL));
- CHECK_LOG_CTX("Parsing module \"x\" failed.", NULL);
- CHECK_LOG_CTX("Extension instance \"a:e\" missing argument element \"name\".", NULL);
+ CHECK_LOG_CTX("Parsing module \"x\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Extension instance \"a:e\" missing argument element \"name\".", NULL, 0);
mod_test_yin = "\n"
"\n"
"\n";
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, mod_test_yin, LYS_IN_YIN, NULL));
- CHECK_LOG_CTX("Parsing module \"x\" failed.", NULL);
- CHECK_LOG_CTX("Extension instance \"a:e\" missing argument element \"name\".", NULL);
+ CHECK_LOG_CTX("Parsing module \"x\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Extension instance \"a:e\" missing argument element \"name\".", NULL, 0);
mod_test_yin = "\n"
"\n"
"\n";
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, mod_test_yin, LYS_IN_YIN, NULL));
- CHECK_LOG_CTX("Parsing module \"x\" failed.", NULL);
+ CHECK_LOG_CTX("Parsing module \"x\" failed.", NULL, 0);
CHECK_LOG_CTX("Extension instance \"a:e\" element and its argument element \"name\" are expected in the same namespace, but they differ.",
- NULL);
+ NULL, 0);
mod_test_yin = "\n"
"\n"
"\n";
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, mod_test_yin, LYS_IN_YIN, NULL));
- CHECK_LOG_CTX("Parsing module \"x\" failed.", NULL);
+ CHECK_LOG_CTX("Parsing module \"x\" failed.", NULL, 0);
CHECK_LOG_CTX("Extension instance \"a:e\" expects argument element \"name\" as its first XML child, but \"value\" element found.",
- NULL);
+ NULL, 0);
}
diff --git a/tests/utests/schema/test_tree_schema_compile.c b/tests/utests/schema/test_tree_schema_compile.c
index 5ddafaa03..57aa2bec4 100644
--- a/tests/utests/schema/test_tree_schema_compile.c
+++ b/tests/utests/schema/test_tree_schema_compile.c
@@ -83,7 +83,7 @@ test_module(void **state)
ly_in_free(in, 0);
assert_int_equal(0, mod->implemented);
assert_int_equal(LY_EINVAL, lys_set_implemented(mod, feats));
- CHECK_LOG_CTX("Feature \"invalid\" not found in module \"test\".", NULL);
+ CHECK_LOG_CTX("Feature \"invalid\" not found in module \"test\".", NULL, 0);
assert_int_equal(LY_SUCCESS, lys_set_implemented(mod, NULL));
assert_non_null(mod->compiled);
assert_string_equal("test", mod->name);
@@ -107,14 +107,14 @@ test_module(void **state)
assert_int_equal(LY_EINVAL, lys_parse_in(UTEST_LYCTX, in, LYS_IN_YANG, NULL, NULL, &unres.creating, NULL));
lys_unres_glob_erase(&unres);
ly_in_free(in, 0);
- CHECK_LOG_CTX("Input data contains submodule which cannot be parsed directly without its main module.", NULL);
+ CHECK_LOG_CTX("Input data contains submodule which cannot be parsed directly without its main module.", NULL, 0);
/* data definition name collision in top level */
str = "module aa {namespace urn:aa;prefix aa; leaf a {type string;} container a{presence x;}}";
assert_int_equal(LY_SUCCESS, ly_in_new_memory(str, &in));
assert_int_equal(LY_EEXIST, lys_parse(UTEST_LYCTX, in, LYS_IN_YANG, NULL, &mod));
ly_in_free(in, 0);
- CHECK_LOG_CTX("Duplicate identifier \"a\" of data definition/RPC/action/notification statement.", "Path \"/aa:a\".");
+ CHECK_LOG_CTX("Duplicate identifier \"a\" of data definition/RPC/action/notification statement.", "/aa:a", 0);
}
static void
@@ -146,8 +146,7 @@ test_name_collisions(void **state)
" leaf c {type empty;}"
"}";
assert_int_equal(LY_EEXIST, lys_parse_mem(UTEST_LYCTX, yang_data, LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Duplicate identifier \"c\" of data definition/RPC/action/notification statement.", "Path \"/a:c\".");
- UTEST_LOG_CLEAN;
+ CHECK_LOG_CTX("Duplicate identifier \"c\" of data definition/RPC/action/notification statement.", "/a:c", 0);
yang_data = "module a {namespace urn:a;prefix a;"
" container c;"
@@ -155,8 +154,7 @@ test_name_collisions(void **state)
" notification c;"
"}";
assert_int_equal(LY_EEXIST, lys_parse_mem(UTEST_LYCTX, yang_data, LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Duplicate identifier \"c\" of data definition/RPC/action/notification statement.", "Path \"/a:c\".");
- UTEST_LOG_CLEAN;
+ CHECK_LOG_CTX("Duplicate identifier \"c\" of data definition/RPC/action/notification statement.", "/a:c", 0);
yang_data = "module a {namespace urn:a;prefix a;"
" container c;"
@@ -164,8 +162,7 @@ test_name_collisions(void **state)
" rpc c;"
"}";
assert_int_equal(LY_EEXIST, lys_parse_mem(UTEST_LYCTX, yang_data, LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Duplicate identifier \"c\" of data definition/RPC/action/notification statement.", "Path \"/a:c\".");
- UTEST_LOG_CLEAN;
+ CHECK_LOG_CTX("Duplicate identifier \"c\" of data definition/RPC/action/notification statement.", "/a:c", 0);
yang_data = "module a {namespace urn:a;prefix a;"
" container c;"
@@ -178,8 +175,7 @@ test_name_collisions(void **state)
" }"
"}";
assert_int_equal(LY_EEXIST, lys_parse_mem(UTEST_LYCTX, yang_data, LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Duplicate identifier \"c\" of data definition/RPC/action/notification statement.", "Path \"/a:ch/c/c\".");
- UTEST_LOG_CLEAN;
+ CHECK_LOG_CTX("Duplicate identifier \"c\" of data definition/RPC/action/notification statement.", "/a:ch/c/c", 0);
/* nested */
yang_data = "module a {namespace urn:a;prefix a;container c { list l {key \"k\"; leaf k {type string;}"
@@ -187,24 +183,21 @@ test_name_collisions(void **state)
"container a;"
"}}}";
assert_int_equal(LY_EEXIST, lys_parse_mem(UTEST_LYCTX, yang_data, LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Duplicate identifier \"a\" of data definition/RPC/action/notification statement.", "Path \"/a:c/l/a\".");
- UTEST_LOG_CLEAN;
+ CHECK_LOG_CTX("Duplicate identifier \"a\" of data definition/RPC/action/notification statement.", "/a:c/l/a", 0);
yang_data = "module a {yang-version 1.1;namespace urn:a;prefix a;container c { list l {key \"k\"; leaf k {type string;}"
"leaf-list a {type string;}"
"notification a;"
"}}}";
assert_int_equal(LY_EEXIST, lys_parse_mem(UTEST_LYCTX, yang_data, LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Duplicate identifier \"a\" of data definition/RPC/action/notification statement.", "Path \"/a:c/l/a\".");
- UTEST_LOG_CLEAN;
+ CHECK_LOG_CTX("Duplicate identifier \"a\" of data definition/RPC/action/notification statement.", "/a:c/l/a", 0);
yang_data = "module a {yang-version 1.1;namespace urn:a;prefix a;container c { list l {key \"k\"; leaf k {type string;}"
"leaf-list a {type string;}"
"action a;"
"}}}";
assert_int_equal(LY_EEXIST, lys_parse_mem(UTEST_LYCTX, yang_data, LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Duplicate identifier \"a\" of data definition/RPC/action/notification statement.", "Path \"/a:c/l/a\".");
- UTEST_LOG_CLEAN;
+ CHECK_LOG_CTX("Duplicate identifier \"a\" of data definition/RPC/action/notification statement.", "/a:c/l/a", 0);
/* grouping */
}
@@ -314,10 +307,10 @@ test_node_leaflist(void **state)
/* invalid */
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa;leaf-list ll {type empty;}}",
LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Leaf-list of type \"empty\" is allowed only in YANG 1.1 modules.", "Path \"/aa:ll\".");
+ CHECK_LOG_CTX("Leaf-list of type \"empty\" is allowed only in YANG 1.1 modules.", "/aa:ll", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module bb {yang-version 1.1;namespace urn:bb;prefix bb;leaf-list ll {type empty; default x;}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Invalid default - value does not fit the type (Invalid empty value length 1.).", "Schema location \"/bb:ll\".");
+ CHECK_LOG_CTX("Invalid default - value does not fit the type (Invalid empty value length 1.).", "/bb:ll", 0);
assert_int_equal(LY_SUCCESS, lys_parse_mem(UTEST_LYCTX, "module cc {yang-version 1.1;namespace urn:cc;prefix cc;"
"leaf-list ll {config false;type string; default one;default two;default one;}}", LYS_IN_YANG, &mod));
@@ -327,12 +320,12 @@ test_node_leaflist(void **state)
assert_int_equal(3, LY_ARRAY_COUNT(ll->dflts));
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module dd {yang-version 1.1;namespace urn:dd;prefix dd;"
"leaf-list ll {type string; default one;default two;default one;}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Configuration leaf-list has multiple defaults of the same value \"one\".", "Path \"/dd:ll\".");
+ CHECK_LOG_CTX("Configuration leaf-list has multiple defaults of the same value \"one\".", "/dd:ll", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ee {yang-version 1.1; namespace urn:ee;prefix ee;"
"leaf ref {type instance-identifier {require-instance true;} default \"/ee:g\";}}", LYS_IN_YANG, NULL));
CHECK_LOG_CTX("Invalid default - value does not fit the type "
- "(Invalid instance-identifier \"/ee:g\" value - semantic error: Not found node \"g\" in path.).", "Schema location \"/ee:ref\".");
+ "(Invalid instance-identifier \"/ee:g\" value - semantic error: Not found node \"g\" in path.).", "/ee:ref", 0);
}
static void
@@ -422,55 +415,55 @@ test_node_list(void **state)
/* invalid */
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa;list l;}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Missing key in list representing configuration data.", "Path \"/aa:l\".");
+ CHECK_LOG_CTX("Missing key in list representing configuration data.", "/aa:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module bb {yang-version 1.1; namespace urn:bb;prefix bb;"
"list l {key x; leaf x {type string; when 1;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("List's key must not have any \"when\" statement.", "Path \"/bb:l/x\".");
+ CHECK_LOG_CTX("List's key must not have any \"when\" statement.", "/bb:l/x", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module cc {yang-version 1.1;namespace urn:cc;prefix cc;feature f;"
"list l {key x; leaf x {type string; if-feature f;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Key \"x\" is disabled.", "Schema location \"/cc:l/x\".");
+ CHECK_LOG_CTX("Key \"x\" is disabled.", "/cc:l/x", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module dd {namespace urn:dd;prefix dd;"
"list l {key x; leaf x {type string; config false;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Key of a configuration list must not be a state leaf.", "Path \"/dd:l/x\".");
+ CHECK_LOG_CTX("Key of a configuration list must not be a state leaf.", "/dd:l/x", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ee {namespace urn:ee;prefix ee;"
"list l {config false;key x; leaf x {type string; config true;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Configuration node cannot be child of any state data node.", "Path \"/ee:l/x\".");
+ CHECK_LOG_CTX("Configuration node cannot be child of any state data node.", "/ee:l/x", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ff {namespace urn:ff;prefix ff;"
"list l {key x; leaf-list x {type string;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("The list's key \"x\" not found.", "Path \"/ff:l\".");
+ CHECK_LOG_CTX("The list's key \"x\" not found.", "/ff:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module gg {namespace urn:gg;prefix gg;"
"list l {key x; unique y;leaf x {type string;} leaf-list y {type string;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Unique's descendant-schema-nodeid \"y\" refers to leaf-list node instead of a leaf.", "Path \"/gg:l\".");
+ CHECK_LOG_CTX("Unique's descendant-schema-nodeid \"y\" refers to leaf-list node instead of a leaf.", "/gg:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module hh {namespace urn:hh;prefix hh;"
"list l {key x; unique \"x y\";leaf x {type string;} leaf y {config false; type string;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Unique statement \"x y\" refers to leaves with different config type.", "Path \"/hh:l\".");
+ CHECK_LOG_CTX("Unique statement \"x y\" refers to leaves with different config type.", "/hh:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ii {namespace urn:ii;prefix ii;"
"list l {key x; unique a:x;leaf x {type string;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Invalid descendant-schema-nodeid value \"a:x\" - prefix \"a\" not defined in module \"ii\".", "Path \"/ii:l\".");
+ CHECK_LOG_CTX("Invalid descendant-schema-nodeid value \"a:x\" - prefix \"a\" not defined in module \"ii\".", "/ii:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module jj {namespace urn:jj;prefix jj;"
"list l {key x; unique c/x;leaf x {type string;}container c {leaf y {type string;}}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Invalid descendant-schema-nodeid value \"c/x\" - target node not found.", "Path \"/jj:l\".");
+ CHECK_LOG_CTX("Invalid descendant-schema-nodeid value \"c/x\" - target node not found.", "/jj:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module kk {namespace urn:kk;prefix kk;"
"list l {key x; unique c^y;leaf x {type string;}container c {leaf y {type string;}}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Invalid descendant-schema-nodeid value \"c^\" - missing \"/\" as node-identifier separator.", "Path \"/kk:l\".");
+ CHECK_LOG_CTX("Invalid descendant-schema-nodeid value \"c^\" - missing \"/\" as node-identifier separator.", "/kk:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ll {namespace urn:ll;prefix ll;"
"list l {key \"x y x\";leaf x {type string;}leaf y {type string;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Duplicated key identifier \"x\".", "Path \"/ll:l\".");
+ CHECK_LOG_CTX("Duplicated key identifier \"x\".", "/ll:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module mm {namespace urn:mm;prefix mm;"
"list l {key x;leaf x {type empty;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("List key of the \"empty\" type is allowed only in YANG 1.1 modules.", "Path \"/mm:l/x\".");
+ CHECK_LOG_CTX("List key of the \"empty\" type is allowed only in YANG 1.1 modules.", "/mm:l/x", 0);
}
static void
@@ -509,26 +502,26 @@ test_node_choice(void **state)
assert_int_equal(LY_EEXIST, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa;"
"choice ch {case a {leaf x {type string;}}leaf x {type string;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Duplicate identifier \"x\" of data definition/RPC/action/notification statement.", "Path \"/aa:ch/x/x\".");
+ CHECK_LOG_CTX("Duplicate identifier \"x\" of data definition/RPC/action/notification statement.", "/aa:ch/x/x", 0);
assert_int_equal(LY_EEXIST, lys_parse_mem(UTEST_LYCTX, "module aa2 {namespace urn:aa2;prefix aa;"
"choice ch {case a {leaf y {type string;}}case b {leaf y {type string;}}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Duplicate identifier \"y\" of data definition/RPC/action/notification statement.", "Path \"/aa2:ch/b/y\".");
+ CHECK_LOG_CTX("Duplicate identifier \"y\" of data definition/RPC/action/notification statement.", "/aa2:ch/b/y", 0);
assert_int_equal(LY_EEXIST, lys_parse_mem(UTEST_LYCTX, "module bb {namespace urn:bb;prefix bb;"
"choice ch {case a {leaf x {type string;}}leaf a {type string;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Duplicate identifier \"a\" of case statement.", "Path \"/bb:ch/a\".");
+ CHECK_LOG_CTX("Duplicate identifier \"a\" of case statement.", "/bb:ch/a", 0);
assert_int_equal(LY_EEXIST, lys_parse_mem(UTEST_LYCTX, "module bb2 {namespace urn:bb2;prefix bb;"
"choice ch {case b {leaf x {type string;}}case b {leaf y {type string;}}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Duplicate identifier \"b\" of case statement.", "Path \"/bb2:ch/b\".");
+ CHECK_LOG_CTX("Duplicate identifier \"b\" of case statement.", "/bb2:ch/b", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ca {namespace urn:ca;prefix ca;"
"choice ch {default c;case a {leaf x {type string;}}case b {leaf y {type string;}}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Default case \"c\" not found.", "Path \"/ca:ch\".");
+ CHECK_LOG_CTX("Default case \"c\" not found.", "/ca:ch", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module cb {namespace urn:cb;prefix cb; import a {prefix a;}"
"choice ch {default a:a;case a {leaf x {type string;}}case b {leaf y {type string;}}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Default case \"a:a\" not found.", "Path \"/cb:ch\".");
+ CHECK_LOG_CTX("Default case \"a:a\" not found.", "/cb:ch", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module cc {namespace urn:cc;prefix cc;"
"choice ch {default a;case a {leaf x {mandatory true;type string;}}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Mandatory node \"x\" under the default case \"a\".", "Path \"/cc:ch\".");
+ CHECK_LOG_CTX("Mandatory node \"x\" under the default case \"a\".", "/cc:ch", 0);
/* TODO check with mandatory nodes from augment placed into the case */
}
@@ -554,9 +547,9 @@ test_node_anydata(void **state)
/* invalid */
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa;anydata any;}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Parsing module \"aa\" failed.", NULL);
+ CHECK_LOG_CTX("Parsing module \"aa\" failed.", NULL, 0);
CHECK_LOG_CTX("Invalid keyword \"anydata\" as a child of \"module\" - the statement is allowed only in YANG 1.1 modules.",
- "Line number 1.");
+ NULL, 1);
}
static void
@@ -590,32 +583,32 @@ test_action(void **state)
/* invalid */
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa;container top {action x;}}",
LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Parsing module \"aa\" failed.", NULL);
+ CHECK_LOG_CTX("Parsing module \"aa\" failed.", NULL, 0);
CHECK_LOG_CTX("Invalid keyword \"action\" as a child of \"container\" - the statement is allowed only in YANG 1.1 modules.",
- "Line number 1.");
+ NULL, 1);
assert_int_equal(LY_EEXIST, lys_parse_mem(UTEST_LYCTX, "module bb {namespace urn:bb;prefix bb;leaf x{type string;} rpc x;}",
LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Duplicate identifier \"x\" of data definition/RPC/action/notification statement.", "Path \"/bb:x\".");
+ CHECK_LOG_CTX("Duplicate identifier \"x\" of data definition/RPC/action/notification statement.", "/bb:x", 0);
assert_int_equal(LY_EEXIST, lys_parse_mem(UTEST_LYCTX, "module cc {yang-version 1.1; namespace urn:cc;prefix cc;container c {leaf y {type string;} action y;}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Duplicate identifier \"y\" of data definition/RPC/action/notification statement.", "Path \"/cc:c/y\".");
+ CHECK_LOG_CTX("Duplicate identifier \"y\" of data definition/RPC/action/notification statement.", "/cc:c/y", 0);
assert_int_equal(LY_EEXIST, lys_parse_mem(UTEST_LYCTX, "module dd {yang-version 1.1; namespace urn:dd;prefix dd;container c {action z; action z;}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Duplicate identifier \"z\" of data definition/RPC/action/notification statement.", "Path \"/dd:c/z\".");
+ CHECK_LOG_CTX("Duplicate identifier \"z\" of data definition/RPC/action/notification statement.", "/dd:c/z", 0);
ly_ctx_set_module_imp_clb(UTEST_LYCTX, test_imp_clb, "submodule eesub {belongs-to ee {prefix ee;} notification w;}");
assert_int_equal(LY_EEXIST, lys_parse_mem(UTEST_LYCTX, "module ee {yang-version 1.1; namespace urn:ee;prefix ee;include eesub; rpc w;}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Duplicate identifier \"w\" of data definition/RPC/action/notification statement.", "Path \"/ee:w\".");
+ CHECK_LOG_CTX("Duplicate identifier \"w\" of data definition/RPC/action/notification statement.", "/ee:w", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ff {yang-version 1.1; namespace urn:ff;prefix ff; rpc test {input {container a {leaf b {type string;}}}}"
"augment /test/input/a {action invalid {input {leaf x {type string;}}}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Action \"invalid\" is placed inside another RPC/action.", "Path \"/ff:{augment='/test/input/a'}/invalid\".");
+ CHECK_LOG_CTX("Action \"invalid\" is placed inside another RPC/action.", "/ff:{augment='/test/input/a'}/invalid", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module gg {yang-version 1.1; namespace urn:gg;prefix gg; notification test {container a {leaf b {type string;}}}"
"augment /test/a {action invalid {input {leaf x {type string;}}}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Action \"invalid\" is placed inside notification.", "Path \"/gg:{augment='/test/a'}/invalid\".");
+ CHECK_LOG_CTX("Action \"invalid\" is placed inside notification.", "/gg:{augment='/test/a'}/invalid", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module hh {yang-version 1.1; namespace urn:hh;prefix hh; notification test {container a {uses grp;}}"
"grouping grp {action invalid {input {leaf x {type string;}}}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Action \"invalid\" is placed inside notification.", "Path \"/hh:test/a/{uses='grp'}/invalid\".");
+ CHECK_LOG_CTX("Action \"invalid\" is placed inside notification.", "/hh:test/a/{uses='grp'}/invalid", 0);
}
static void
@@ -662,31 +655,31 @@ test_notification(void **state)
/* invalid */
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa;container top {notification x;}}",
LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Parsing module \"aa\" failed.", NULL);
+ CHECK_LOG_CTX("Parsing module \"aa\" failed.", NULL, 0);
CHECK_LOG_CTX("Invalid keyword \"notification\" as a child of \"container\" - the statement is allowed only in YANG 1.1 modules.",
- "Line number 1.");
+ NULL, 1);
assert_int_equal(LY_EEXIST, lys_parse_mem(UTEST_LYCTX, "module bb {namespace urn:bb;prefix bb;leaf x{type string;} notification x;}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Duplicate identifier \"x\" of data definition/RPC/action/notification statement.", "Path \"/bb:x\".");
+ CHECK_LOG_CTX("Duplicate identifier \"x\" of data definition/RPC/action/notification statement.", "/bb:x", 0);
assert_int_equal(LY_EEXIST, lys_parse_mem(UTEST_LYCTX, "module cc {yang-version 1.1; namespace urn:cc;prefix cc;container c {leaf y {type string;} notification y;}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Duplicate identifier \"y\" of data definition/RPC/action/notification statement.", "Path \"/cc:c/y\".");
+ CHECK_LOG_CTX("Duplicate identifier \"y\" of data definition/RPC/action/notification statement.", "/cc:c/y", 0);
assert_int_equal(LY_EEXIST, lys_parse_mem(UTEST_LYCTX, "module dd {yang-version 1.1; namespace urn:dd;prefix dd;container c {notification z; notification z;}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Duplicate identifier \"z\" of data definition/RPC/action/notification statement.", "Path \"/dd:c/z\".");
+ CHECK_LOG_CTX("Duplicate identifier \"z\" of data definition/RPC/action/notification statement.", "/dd:c/z", 0);
ly_ctx_set_module_imp_clb(UTEST_LYCTX, test_imp_clb, "submodule eesub {belongs-to ee {prefix ee;} rpc w;}");
assert_int_equal(LY_EEXIST, lys_parse_mem(UTEST_LYCTX, "module ee {yang-version 1.1; namespace urn:ee;prefix ee;include eesub; notification w;}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Duplicate identifier \"w\" of data definition/RPC/action/notification statement.", "Path \"/ee:w\".");
+ CHECK_LOG_CTX("Duplicate identifier \"w\" of data definition/RPC/action/notification statement.", "/ee:w", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ff {yang-version 1.1; namespace urn:ff;prefix ff; rpc test {input {container a {leaf b {type string;}}}}"
"augment /test/input/a {notification invalid {leaf x {type string;}}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Notification \"invalid\" is placed inside RPC/action.", "Path \"/ff:{augment='/test/input/a'}/invalid\".");
+ CHECK_LOG_CTX("Notification \"invalid\" is placed inside RPC/action.", "/ff:{augment='/test/input/a'}/invalid", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module gg {yang-version 1.1; namespace urn:gg;prefix gg; notification test {container a {leaf b {type string;}}}"
"augment /test/a {notification invalid {leaf x {type string;}}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Notification \"invalid\" is placed inside another notification.", "Path \"/gg:{augment='/test/a'}/invalid\".");
+ CHECK_LOG_CTX("Notification \"invalid\" is placed inside another notification.", "/gg:{augment='/test/a'}/invalid", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module hh {yang-version 1.1; namespace urn:hh;prefix hh; rpc test {input {container a {uses grp;}}}"
"grouping grp {notification invalid {leaf x {type string;}}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Notification \"invalid\" is placed inside RPC/action.", "Path \"/hh:test/input/a/{uses='grp'}/invalid\".");
+ CHECK_LOG_CTX("Notification \"invalid\" is placed inside RPC/action.", "/hh:test/input/a/{uses='grp'}/invalid", 0);
}
/**
@@ -937,54 +930,56 @@ test_type_length(void **state)
/* invalid values */
assert_int_equal(LY_EDENIED, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa;leaf l {type binary {length -10;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Invalid length restriction - value \"-10\" does not fit the type limitations.", "Path \"/aa:l\".");
+ CHECK_LOG_CTX("Invalid length restriction - value \"-10\" does not fit the type limitations.", "/aa:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module bb {namespace urn:bb;prefix bb;leaf l {type binary {length 18446744073709551616;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Invalid length restriction - invalid value \"18446744073709551616\".", "Path \"/bb:l\".");
+ CHECK_LOG_CTX("Invalid length restriction - invalid value \"18446744073709551616\".", "/bb:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module cc {namespace urn:cc;prefix cc;leaf l {type binary {length \"max .. 10\";}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Invalid length restriction - unexpected data after max keyword (.. 10).", "Path \"/cc:l\".");
+ CHECK_LOG_CTX("Invalid length restriction - unexpected data after max keyword (.. 10).", "/cc:l", 0);
assert_int_equal(LY_EEXIST, lys_parse_mem(UTEST_LYCTX, "module dd {namespace urn:dd;prefix dd;leaf l {type binary {length 50..10;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Invalid length restriction - values are not in ascending order (10).", "Path \"/dd:l\".");
+ CHECK_LOG_CTX("Invalid length restriction - values are not in ascending order (10).", "/dd:l", 0);
assert_int_equal(LY_EEXIST, lys_parse_mem(UTEST_LYCTX, "module ee {namespace urn:ee;prefix ee;leaf l {type binary {length \"50 | 10\";}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Invalid length restriction - values are not in ascending order (10).", "Path \"/ee:l\".");
+ CHECK_LOG_CTX("Invalid length restriction - values are not in ascending order (10).", "/ee:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ff {namespace urn:ff;prefix ff;leaf l {type binary {length \"x\";}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Invalid length restriction - unexpected data (x).", "Path \"/ff:l\".");
+ CHECK_LOG_CTX("Invalid length restriction - unexpected data (x).", "/ff:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module gg {namespace urn:gg;prefix gg;leaf l {type binary {length \"50 | min\";}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Invalid length restriction - unexpected data before min keyword (50 | ).", "Path \"/gg:l\".");
+ CHECK_LOG_CTX("Invalid length restriction - unexpected data before min keyword (50 | ).", "/gg:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module hh {namespace urn:hh;prefix hh;leaf l {type binary {length \"| 50\";}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Invalid length restriction - unexpected beginning of the expression (| 50).", "Path \"/hh:l\".");
+ CHECK_LOG_CTX("Invalid length restriction - unexpected beginning of the expression (| 50).", "/hh:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ii {namespace urn:ii;prefix ii;leaf l {type binary {length \"10 ..\";}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Invalid length restriction - unexpected end of the expression after \"..\" (10 ..).", "Path \"/ii:l\".");
+ CHECK_LOG_CTX("Invalid length restriction - unexpected end of the expression after \"..\" (10 ..).", "/ii:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module jj {namespace urn:jj;prefix jj;leaf l {type binary {length \".. 10\";}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Invalid length restriction - unexpected \"..\" without a lower bound.", "Path \"/jj:l\".");
+ CHECK_LOG_CTX("Invalid length restriction - unexpected \"..\" without a lower bound.", "/jj:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module kk {namespace urn:kk;prefix kk;leaf l {type binary {length \"10 |\";}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Invalid length restriction - unexpected end of the expression (10 |).", "Path \"/kk:l\".");
+ CHECK_LOG_CTX("Invalid length restriction - unexpected end of the expression (10 |).", "/kk:l", 0);
assert_int_equal(LY_EEXIST, lys_parse_mem(UTEST_LYCTX, "module kl {namespace urn:kl;prefix kl;leaf l {type binary {length \"10..20 | 15..30\";}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Invalid length restriction - values are not in ascending order (15).", "Path \"/kl:l\".");
+ CHECK_LOG_CTX("Invalid length restriction - values are not in ascending order (15).", "/kl:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ll {namespace urn:ll;prefix ll;typedef mytype {type binary {length 10;}}"
"leaf l {type mytype {length 11;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Invalid length restriction - the derived restriction (11) is not equally or more limiting.", "Path \"/ll:l\".");
+ CHECK_LOG_CTX("Invalid length restriction - the derived restriction (11) is not equally or more limiting.", "/ll:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module mm {namespace urn:mm;prefix mm;typedef mytype {type binary {length 10..100;}}"
"leaf l {type mytype {length 1..11;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Invalid length restriction - the derived restriction (1..11) is not equally or more limiting.", "Path \"/mm:l\".");
+ CHECK_LOG_CTX("Invalid length restriction - the derived restriction (1..11) is not equally or more limiting.", "/mm:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module nn {namespace urn:nn;prefix nn;typedef mytype {type binary {length 10..100;}}"
"leaf l {type mytype {length 20..110;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Invalid length restriction - the derived restriction (20..110) is not equally or more limiting.", "Path \"/nn:l\".");
+ CHECK_LOG_CTX("Invalid length restriction - the derived restriction (20..110) is not equally or more limiting.",
+ "/nn:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module oo {namespace urn:oo;prefix oo;typedef mytype {type binary {length 10..100;}}"
"leaf l {type mytype {length 20..30|110..120;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Invalid length restriction - the derived restriction (20..30|110..120) is not equally or more limiting.", "Path \"/oo:l\".");
+ CHECK_LOG_CTX("Invalid length restriction - the derived restriction (20..30|110..120) is not equally or more limiting.",
+ "/oo:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module pp {namespace urn:pp;prefix pp;typedef mytype {type binary {length 10..11;}}"
"leaf l {type mytype {length 15;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Invalid length restriction - the derived restriction (15) is not equally or more limiting.", "Path \"/pp:l\".");
+ CHECK_LOG_CTX("Invalid length restriction - the derived restriction (15) is not equally or more limiting.", "/pp:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module qq {namespace urn:qq;prefix qq;typedef mytype {type binary {length 10..20|30..40;}}"
"leaf l {type mytype {length 15..35;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Invalid length restriction - the derived restriction (15..35) is not equally or more limiting.", "Path \"/qq:l\".");
+ CHECK_LOG_CTX("Invalid length restriction - the derived restriction (15..35) is not equally or more limiting.", "/qq:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module rr {namespace urn:rr;prefix rr;typedef mytype {type binary {length 10;}}"
"leaf l {type mytype {length 10..35;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Invalid length restriction - the derived restriction (10..35) is not equally or more limiting.", "Path \"/rr:l\".");
+ CHECK_LOG_CTX("Invalid length restriction - the derived restriction (10..35) is not equally or more limiting.", "/rr:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ss {namespace urn:ss;prefix ss;leaf l {type binary {pattern '[0-9]*';}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Invalid type restrictions for binary type.", "Path \"/ss:l\".");
+ CHECK_LOG_CTX("Invalid type restrictions for binary type.", "/ss:l", 0);
}
static void
@@ -1087,63 +1082,63 @@ test_type_enum(void **state)
/* invalid cases */
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa; feature f; leaf l {type enumeration {"
"enum one {if-feature f;}}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Parsing module \"aa\" failed.", NULL);
+ CHECK_LOG_CTX("Parsing module \"aa\" failed.", NULL, 0);
CHECK_LOG_CTX("Invalid keyword \"if-feature\" as a child of \"enum\" - the statement is allowed only in YANG 1.1 modules.",
- "Line number 1.");
+ NULL, 1);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa; leaf l {type enumeration {"
"enum one {value -2147483649;}}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Parsing module \"aa\" failed.", NULL);
- CHECK_LOG_CTX("Invalid value \"-2147483649\" of \"value\".", "Line number 1.");
+ CHECK_LOG_CTX("Parsing module \"aa\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Invalid value \"-2147483649\" of \"value\".", NULL, 1);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa; leaf l {type enumeration {"
"enum one {value 2147483648;}}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Parsing module \"aa\" failed.", NULL);
- CHECK_LOG_CTX("Invalid value \"2147483648\" of \"value\".", "Line number 1.");
+ CHECK_LOG_CTX("Parsing module \"aa\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Invalid value \"2147483648\" of \"value\".", NULL, 1);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa; leaf l {type enumeration {"
"enum one; enum one;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Parsing module \"aa\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"one\" of enum statement.", "Line number 1.");
+ CHECK_LOG_CTX("Parsing module \"aa\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"one\" of enum statement.", NULL, 1);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa; leaf l {type enumeration {"
"enum '';}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Parsing module \"aa\" failed.", NULL);
- CHECK_LOG_CTX("Enum name must not be zero-length.", "Line number 1.");
+ CHECK_LOG_CTX("Parsing module \"aa\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Enum name must not be zero-length.", NULL, 1);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa; leaf l {type enumeration {"
"enum ' x';}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Parsing module \"aa\" failed.", NULL);
- CHECK_LOG_CTX("Enum name must not have any leading or trailing whitespaces (\" x\").", "Line number 1.");
+ CHECK_LOG_CTX("Parsing module \"aa\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Enum name must not have any leading or trailing whitespaces (\" x\").", NULL, 1);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa; leaf l {type enumeration {"
"enum 'x ';}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Parsing module \"aa\" failed.", NULL);
- CHECK_LOG_CTX("Enum name must not have any leading or trailing whitespaces (\"x \").", "Line number 1.");
+ CHECK_LOG_CTX("Parsing module \"aa\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Enum name must not have any leading or trailing whitespaces (\"x \").", NULL, 1);
assert_int_equal(LY_SUCCESS, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa; leaf l {type enumeration {"
"enum 'inva\nlid';}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Control characters in enum name should be avoided (\"inva\nlid\", character number 5).", NULL);
+ CHECK_LOG_CTX("Control characters in enum name should be avoided (\"inva\nlid\", character number 5).", NULL, 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module bb {namespace urn:bb;prefix bb; leaf l {type enumeration;}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Missing enum substatement for enumeration type.", "Path \"/bb:l\".");
+ CHECK_LOG_CTX("Missing enum substatement for enumeration type.", "/bb:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module cc {yang-version 1.1;namespace urn:cc;prefix cc;typedef mytype {type enumeration {enum one;}}"
"leaf l {type mytype {enum two;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid enumeration - derived type adds new item \"two\".", "Path \"/cc:l\".");
+ CHECK_LOG_CTX("Invalid enumeration - derived type adds new item \"two\".", "/cc:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module dd {yang-version 1.1;namespace urn:dd;prefix dd;typedef mytype {type enumeration {enum one;}}"
"leaf l {type mytype {enum one {value 1;}}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid enumeration - value of the item \"one\" has changed from 0 to 1 in the derived type.", "Path \"/dd:l\".");
+ CHECK_LOG_CTX("Invalid enumeration - value of the item \"one\" has changed from 0 to 1 in the derived type.", "/dd:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ee {namespace urn:ee;prefix ee;leaf l {type enumeration {enum x {value 2147483647;}enum y;}}}",
LYS_IN_YANG, &mod));
CHECK_LOG_CTX("Invalid enumeration - it is not possible to auto-assign enum value for \"y\" since the highest value is already 2147483647.",
- "Path \"/ee:l\".");
+ "/ee:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ff {namespace urn:ff;prefix ff;leaf l {type enumeration {enum x {value 1;}enum y {value 1;}}}}",
LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid enumeration - value 1 collide in items \"y\" and \"x\".", "Path \"/ff:l\".");
+ CHECK_LOG_CTX("Invalid enumeration - value 1 collide in items \"y\" and \"x\".", "/ff:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module gg {namespace urn:gg;prefix gg;typedef mytype {type enumeration;}"
"leaf l {type mytype {enum one;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Missing enum substatement for enumeration type mytype.", "Path \"/gg:l\".");
+ CHECK_LOG_CTX("Missing enum substatement for enumeration type mytype.", "/gg:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module hh {namespace urn:hh;prefix hh; typedef mytype {type enumeration {enum one;}}"
"leaf l {type mytype {enum one;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Enumeration type can be subtyped only in YANG 1.1 modules.", "Path \"/hh:l\".");
+ CHECK_LOG_CTX("Enumeration type can be subtyped only in YANG 1.1 modules.", "/hh:l", 0);
}
static void
@@ -1193,43 +1188,44 @@ test_type_dec64(void **state)
/* invalid cases */
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa; leaf l {type decimal64 {fraction-digits 0;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Parsing module \"aa\" failed.", NULL);
- CHECK_LOG_CTX("Invalid value \"0\" of \"fraction-digits\".", "Line number 1.");
+ CHECK_LOG_CTX("Parsing module \"aa\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Invalid value \"0\" of \"fraction-digits\".", NULL, 1);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa; leaf l {type decimal64 {fraction-digits -1;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Parsing module \"aa\" failed.", NULL);
- CHECK_LOG_CTX("Invalid value \"-1\" of \"fraction-digits\".", "Line number 1.");
+ CHECK_LOG_CTX("Parsing module \"aa\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Invalid value \"-1\" of \"fraction-digits\".", NULL, 1);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa; leaf l {type decimal64 {fraction-digits 19;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Parsing module \"aa\" failed.", NULL);
- CHECK_LOG_CTX("Value \"19\" is out of \"fraction-digits\" bounds.", "Line number 1.");
+ CHECK_LOG_CTX("Parsing module \"aa\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Value \"19\" is out of \"fraction-digits\" bounds.", NULL, 1);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa; leaf l {type decimal64;}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Missing fraction-digits substatement for decimal64 type.", "Path \"/aa:l\".");
+ CHECK_LOG_CTX("Missing fraction-digits substatement for decimal64 type.", "/aa:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ab {namespace urn:ab;prefix ab; typedef mytype {type decimal64;}leaf l {type mytype;}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Missing fraction-digits substatement for decimal64 type mytype.", "Path \"/ab:l\".");
+ CHECK_LOG_CTX("Missing fraction-digits substatement for decimal64 type mytype.", "/ab:l", 0);
assert_int_equal(LY_EINVAL, lys_parse_mem(UTEST_LYCTX, "module bb {namespace urn:bb;prefix bb; leaf l {type decimal64 {fraction-digits 2;"
"range '3.142';}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Range boundary \"3.142\" of decimal64 type exceeds defined number (2) of fraction digits.", "Path \"/bb:l\".");
+ CHECK_LOG_CTX("Range boundary \"3.142\" of decimal64 type exceeds defined number (2) of fraction digits.", "/bb:l", 0);
assert_int_equal(LY_EEXIST, lys_parse_mem(UTEST_LYCTX, "module cc {namespace urn:cc;prefix cc; leaf l {type decimal64 {fraction-digits 2;"
"range '4 | 3.14';}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid range restriction - values are not in ascending order (3.14).", "Path \"/cc:l\".");
+ CHECK_LOG_CTX("Invalid range restriction - values are not in ascending order (3.14).", "/cc:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module dd {namespace urn:dd;prefix dd; typedef mytype {type decimal64 {fraction-digits 2;}}"
"leaf l {type mytype {fraction-digits 3;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid fraction-digits substatement for type not directly derived from decimal64 built-in type.", "Path \"/dd:l\".");
+ CHECK_LOG_CTX("Invalid fraction-digits substatement for type not directly derived from decimal64 built-in type.", "/dd:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module de {namespace urn:de;prefix de; typedef mytype {type decimal64 {fraction-digits 2;}}"
"typedef mytype2 {type mytype {fraction-digits 3;}}leaf l {type mytype2;}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid fraction-digits substatement for type \"mytype2\" not directly derived from decimal64 built-in type.", "Path \"/de:l\".");
+ CHECK_LOG_CTX("Invalid fraction-digits substatement for type \"mytype2\" not directly derived from decimal64 built-in type.",
+ "/de:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ee {namespace urn:ee;prefix ee;typedef mytype {type decimal64 {"
"fraction-digits 18;range '-10 .. 0';}}leaf l {type mytype;}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid range restriction - invalid value \"-10000000000000000000\".", "Path \"/ee:l\".");
+ CHECK_LOG_CTX("Invalid range restriction - invalid value \"-10000000000000000000\".", "/ee:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ee {namespace urn:ee;prefix ee;typedef mytype {type decimal64 {"
"fraction-digits 18;range '0 .. 10';}}leaf l {type mytype;}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid range restriction - invalid value \"10000000000000000000\".", "Path \"/ee:l\".");
+ CHECK_LOG_CTX("Invalid range restriction - invalid value \"10000000000000000000\".", "/ee:l", 0);
}
static void
@@ -1258,11 +1254,11 @@ test_type_instanceid(void **state)
/* invalid cases */
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa; leaf l {type instance-identifier {require-instance yes;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Parsing module \"aa\" failed.", NULL);
- CHECK_LOG_CTX("Invalid value \"yes\" of \"require-instance\".", "Line number 1.");
+ CHECK_LOG_CTX("Parsing module \"aa\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Invalid value \"yes\" of \"require-instance\".", NULL, 1);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa; leaf l {type instance-identifier {fraction-digits 1;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid type restrictions for instance-identifier type.", "Path \"/aa:l\".");
+ CHECK_LOG_CTX("Invalid type restrictions for instance-identifier type.", "/aa:l", 0);
}
static ly_bool
@@ -1340,8 +1336,7 @@ test_identity(void **state)
assert_true(contains_derived_identity(UTEST_LYCTX, "a", NULL, "baseid", "id1"));
data = "ids:id1";
CHECK_PARSE_LYD_PARAM(data, LYD_XML, LYD_PARSE_STRICT, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG("Invalid identityref \"ids:id1\" value - identity found in non-implemented module \"a\".",
- "Schema location \"/b:lf\", line number 1.");
+ CHECK_LOG_CTX("Invalid identityref \"ids:id1\" value - identity found in non-implemented module \"a\".", "/b:lf", 1);
assert_non_null(ly_ctx_get_module(UTEST_LYCTX, "a", NULL));
assert_false(contains_derived_identity(UTEST_LYCTX, "a", NULL, "baseid", "id3"));
data = "ids:id3";
@@ -1369,13 +1364,11 @@ test_identity(void **state)
assert_true(contains_derived_identity(UTEST_LYCTX, "a", NULL, "baseid", "id1"));
data = "ids:id1";
CHECK_PARSE_LYD_PARAM(data, LYD_XML, LYD_PARSE_STRICT, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG("Invalid identityref \"ids:id1\" value - identity found in non-implemented module \"a\".",
- "Schema location \"/b:lf\", line number 1.");
+ CHECK_LOG_CTX("Invalid identityref \"ids:id1\" value - identity found in non-implemented module \"a\".", "/b:lf", 1);
assert_true(contains_derived_identity(UTEST_LYCTX, "a", NULL, "baseid", "id3"));
data = "ids:id3";
CHECK_PARSE_LYD_PARAM(data, LYD_XML, LYD_PARSE_STRICT, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG("Invalid identityref \"ids:id3\" value - identity found in non-implemented module \"c\".",
- "Schema location \"/b:lf\", line number 1.");
+ CHECK_LOG_CTX("Invalid identityref \"ids:id3\" value - identity found in non-implemented module \"c\".", "/b:lf", 1);
RESET_CTX(UTEST_LYCTX);
/* Unimplemented module expand base identity located in implemented module. */
@@ -1399,8 +1392,7 @@ test_identity(void **state)
assert_true(contains_derived_identity(UTEST_LYCTX, "b", NULL, "baseid", "id1"));
data = "ids:id1";
CHECK_PARSE_LYD_PARAM(data, LYD_XML, LYD_PARSE_STRICT, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG("Invalid identityref \"ids:id1\" value - identity found in non-implemented module \"a\".",
- "Schema location \"/b:lf\", line number 1.");
+ CHECK_LOG_CTX("Invalid identityref \"ids:id1\" value - identity found in non-implemented module \"a\".", "/b:lf", 1);
RESET_CTX(UTEST_LYCTX);
/* Transitivity of derived identity through unimplemented module. */
@@ -1503,9 +1495,9 @@ test_identity(void **state)
"}";
ly_log_level(LY_LLVRB);
UTEST_ADD_MODULE(str, LYS_IN_YANG, NULL, NULL);
- CHECK_LOG("Implemented module \"a@2015-05-08\" was not and will not "
+ CHECK_LOG_LASTMSG("Implemented module \"a@2015-05-08\" was not and will not "
"be imported if the revision-date is missing in the import "
- "statement. Instead, the revision \"2014-05-08\" is imported.", NULL);
+ "statement. Instead, the revision \"2014-05-08\" is imported.");
ly_log_level(LY_LLWRN);
/* Data is inserted only to implemented revision. */
data = "ids:id1";
@@ -1582,8 +1574,7 @@ test_identity(void **state)
assert_true(contains_derived_identity(UTEST_LYCTX, "a", NULL, "baseid", "id3"));
data = "id3";
CHECK_PARSE_LYD_PARAM(data, LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG_CTX("Invalid identityref \"id3\" value - identity is disabled by if-feature.",
- "Schema location \"/b:lf\", line number 1.");
+ CHECK_LOG_CTX("Invalid identityref \"id3\" value - identity is disabled by if-feature.", "/b:lf", 1);
RESET_CTX(UTEST_LYCTX);
/* The derived identities are enabled and disabled in submodule. */
@@ -1615,8 +1606,7 @@ test_identity(void **state)
assert_true(contains_derived_identity(UTEST_LYCTX, "a", NULL, "baseid", "id3"));
data = "ids:id3";
CHECK_PARSE_LYD_PARAM(data, LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, tree);
- CHECK_LOG_CTX("Invalid identityref \"ids:id3\" value - identity is disabled by if-feature.",
- "Schema location \"/b:lf\", line number 1.");
+ CHECK_LOG_CTX("Invalid identityref \"ids:id3\" value - identity is disabled by if-feature.", "/b:lf", 1);
RESET_CTX(UTEST_LYCTX);
#undef RESET_CTX
@@ -1658,29 +1648,31 @@ test_type_identityref(void **state)
/* invalid cases */
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa; leaf l {type identityref;}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Missing base substatement for identityref type.", "Path \"/aa:l\".");
+ CHECK_LOG_CTX("Missing base substatement for identityref type.", "/aa:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module bb {namespace urn:bb;prefix bb; typedef mytype {type identityref;}"
"leaf l {type mytype;}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Missing base substatement for identityref type mytype.", "Path \"/bb:l\".");
+ CHECK_LOG_CTX("Missing base substatement for identityref type mytype.", "/bb:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module cc {namespace urn:cc;prefix cc; identity i; typedef mytype {type identityref {base i;}}"
"leaf l {type mytype {base i;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid base substatement for the type not directly derived from identityref built-in type.", "Path \"/cc:l\".");
+ CHECK_LOG_CTX("Invalid base substatement for the type not directly derived from identityref built-in type.",
+ "/cc:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module dd {namespace urn:dd;prefix dd; identity i; typedef mytype {type identityref {base i;}}"
"typedef mytype2 {type mytype {base i;}}leaf l {type mytype2;}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid base substatement for the type \"mytype2\" not directly derived from identityref built-in type.", "Path \"/dd:l\".");
+ CHECK_LOG_CTX("Invalid base substatement for the type \"mytype2\" not directly derived from identityref built-in type.",
+ "/dd:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ee {namespace urn:ee;prefix ee; identity i; identity j;"
"leaf l {type identityref {base i;base j;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Multiple bases in identityref type are allowed only in YANG 1.1 modules.", "Path \"/ee:l\".");
+ CHECK_LOG_CTX("Multiple bases in identityref type are allowed only in YANG 1.1 modules.", "/ee:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ff {namespace urn:ff;prefix ff; identity i;leaf l {type identityref {base j;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Unable to find base (j) of identityref.", "Path \"/ff:l\".");
+ CHECK_LOG_CTX("Unable to find base (j) of identityref.", "/ff:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module gg {namespace urn:gg;prefix gg;leaf l {type identityref {base x:j;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid prefix used for base (x:j) of identityref.", "Path \"/gg:l\".");
+ CHECK_LOG_CTX("Invalid prefix used for base (x:j) of identityref.", "/gg:l", 0);
}
static void
@@ -1696,32 +1688,32 @@ test_type_leafref(void **state)
path = "invalid_path";
assert_int_equal(LY_EVALID, ly_path_parse(UTEST_LYCTX, NULL, path, strlen(path), 1, LY_PATH_BEGIN_EITHER,
LY_PATH_PREFIX_OPTIONAL, LY_PATH_PRED_LEAFREF, &expr));
- CHECK_LOG_CTX("Unexpected XPath token \"NameTest\" (\"invalid_path\"), expected \"..\".", NULL);
+ CHECK_LOG_CTX("Unexpected XPath token \"NameTest\" (\"invalid_path\"), expected \"..\".", NULL, 0);
path = "..";
assert_int_equal(LY_EVALID, ly_path_parse(UTEST_LYCTX, NULL, path, strlen(path), 1, LY_PATH_BEGIN_EITHER,
LY_PATH_PREFIX_OPTIONAL, LY_PATH_PRED_LEAFREF, &expr));
- CHECK_LOG_CTX("Unexpected XPath expression end.", NULL);
+ CHECK_LOG_CTX("Unexpected XPath expression end.", NULL, 0);
path = "..[";
assert_int_equal(LY_EVALID, ly_path_parse(UTEST_LYCTX, NULL, path, strlen(path), 1, LY_PATH_BEGIN_EITHER,
LY_PATH_PREFIX_OPTIONAL, LY_PATH_PRED_LEAFREF, &expr));
- CHECK_LOG_CTX("Unexpected XPath token \"[\" (\"[\"), expected \"Operator(Path)\".", NULL);
+ CHECK_LOG_CTX("Unexpected XPath token \"[\" (\"[\"), expected \"Operator(Path)\".", NULL, 0);
path = "../";
assert_int_equal(LY_EVALID, ly_path_parse(UTEST_LYCTX, NULL, path, strlen(path), 1, LY_PATH_BEGIN_EITHER,
LY_PATH_PREFIX_OPTIONAL, LY_PATH_PRED_LEAFREF, &expr));
- CHECK_LOG_CTX("Unexpected XPath expression end.", NULL);
+ CHECK_LOG_CTX("Unexpected XPath expression end.", NULL, 0);
path = "/";
assert_int_equal(LY_EVALID, ly_path_parse(UTEST_LYCTX, NULL, path, strlen(path), 1, LY_PATH_BEGIN_EITHER,
LY_PATH_PREFIX_OPTIONAL, LY_PATH_PRED_LEAFREF, &expr));
- CHECK_LOG_CTX("Unexpected XPath expression end.", NULL);
+ CHECK_LOG_CTX("Unexpected XPath expression end.", NULL, 0);
path = "../../pref:id/xxx[predicate]/invalid!!!";
assert_int_equal(LY_EVALID, ly_path_parse(UTEST_LYCTX, NULL, path, strlen(path), 1, LY_PATH_BEGIN_EITHER,
LY_PATH_PREFIX_OPTIONAL, LY_PATH_PRED_LEAFREF, &expr));
- CHECK_LOG_CTX("Invalid character 0x21 ('!'), perhaps \"invalid\" is supposed to be a function call.", NULL);
+ CHECK_LOG_CTX("Invalid character 0x21 ('!'), perhaps \"invalid\" is supposed to be a function call.", NULL, 0);
path = "/absolute/prefix:path";
assert_int_equal(LY_SUCCESS, ly_path_parse(UTEST_LYCTX, NULL, path, strlen(path), 1, LY_PATH_BEGIN_EITHER,
@@ -1806,8 +1798,8 @@ test_type_leafref(void **state)
"leaf ref1 {type leafref {path /target;}}"
"leaf target {if-feature 'f1'; type boolean;}}";
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Target of leafref \"ref1\" cannot be referenced because it is disabled.", "Schema location \"/e:ref1\".");
- CHECK_LOG_CTX("Not found node \"target\" in path.", "Schema location \"/e:ref1\".");
+ CHECK_LOG_CTX("Target of leafref \"ref1\" cannot be referenced because it is disabled.", "/e:ref1", 0);
+ CHECK_LOG_CTX("Not found node \"target\" in path.", "/e:ref1", 0);
str = "module en {yang-version 1.1;namespace urn:en;prefix en;feature f1;"
"leaf ref1 {if-feature 'f1'; type leafref {path /target;}}"
@@ -1817,7 +1809,7 @@ test_type_leafref(void **state)
str = "module e {yang-version 1.1;namespace urn:e;prefix e;feature f1;"
"leaf ref1 {if-feature 'f1'; type leafref {path /target;}}}";
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, str, LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Not found node \"target\" in path.", "Schema location \"/e:ref1\".");
+ CHECK_LOG_CTX("Not found node \"target\" in path.", "/e:ref1", 0);
ly_ctx_set_options(UTEST_LYCTX, LY_CTX_REF_IMPLEMENTED);
ly_ctx_set_module_imp_clb(UTEST_LYCTX, test_imp_clb, "module cl {namespace urn:cl;prefix cl;feature f1;"
@@ -1827,8 +1819,8 @@ test_type_leafref(void **state)
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module im {namespace urn:im;prefix im;import cl {prefix cl;}"
"leaf ref {must \"/cl:h > 0\"; type uint16;}}", LYS_IN_YANG, &mod));
ly_ctx_unset_options(UTEST_LYCTX, LY_CTX_REF_IMPLEMENTED);
- CHECK_LOG_CTX("Target of leafref \"g\" cannot be referenced because it is disabled.", "Schema location \"/cl:g\".");
- CHECK_LOG_CTX("Not found node \"f\" in path.", "Schema location \"/cl:g\".");
+ CHECK_LOG_CTX("Target of leafref \"g\" cannot be referenced because it is disabled.", "/cl:g", 0);
+ CHECK_LOG_CTX("Not found node \"f\" in path.", "/cl:g", 0);
assert_int_equal(LY_SUCCESS, lys_parse_mem(UTEST_LYCTX, "module f {namespace urn:f;prefix f;"
"list interface{key name;leaf name{type string;}list address {key ip;leaf ip {type string;}}}"
@@ -1914,170 +1906,170 @@ test_type_leafref(void **state)
/* invalid paths */
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa;container a {leaf target2 {type uint8;}}"
"leaf ref1 {type leafref {path ../a/invalid;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Not found node \"invalid\" in path.", "Schema location \"/aa:ref1\".");
+ CHECK_LOG_CTX("Not found node \"invalid\" in path.", "/aa:ref1", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module bb {namespace urn:bb;prefix bb;container a {leaf target2 {type uint8;}}"
"leaf ref1 {type leafref {path ../../toohigh;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Too many parent references in path.", "Schema location \"/bb:ref1\".");
+ CHECK_LOG_CTX("Too many parent references in path.", "/bb:ref1", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module cc {namespace urn:cc;prefix cc;container a {leaf target2 {type uint8;}}"
"leaf ref1 {type leafref {path /a:invalid;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("No module connected with the prefix \"a\" found (prefix format schema stored mapping).", "Schema location \"/cc:ref1\".");
+ CHECK_LOG_CTX("No module connected with the prefix \"a\" found (prefix format schema stored mapping).", "/cc:ref1", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module dd {namespace urn:dd;prefix dd;leaf target1 {type string;}"
"container a {leaf target2 {type uint8;}} leaf ref1 {type leafref {"
"path '/a[target2 = current()/../target1]/target2';}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("List predicate defined for container \"a\" in path.", "Schema location \"/dd:ref1\".");
+ CHECK_LOG_CTX("List predicate defined for container \"a\" in path.", "/dd:ref1", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ee {namespace urn:ee;prefix ee;\n container a {leaf target2 {type uint8;}}\n"
"leaf ref1 {type leafref {path /a!invalid;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Parsing module \"ee\" failed.", NULL);
- CHECK_LOG_CTX("Invalid character 0x21 ('!'), perhaps \"a\" is supposed to be a function call.", "Line number 3.");
+ CHECK_LOG_CTX("Parsing module \"ee\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Invalid character 0x21 ('!'), perhaps \"a\" is supposed to be a function call.", NULL, 3);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ff {namespace urn:ff;prefix ff;container a {leaf target2 {type uint8;}}"
"leaf ref1 {type leafref {path /a;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid leafref path \"/a\" - target node is container instead of leaf or leaf-list.", "Schema location \"/ff:ref1\".");
+ CHECK_LOG_CTX("Invalid leafref path \"/a\" - target node is container instead of leaf or leaf-list.", "/ff:ref1", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module gg {namespace urn:gg;prefix gg;container a {leaf target2 {type uint8;"
"status deprecated;}} leaf ref1 {type leafref {path /a/target2;}}}", LYS_IN_YANG, &mod));
CHECK_LOG_CTX("A current definition \"ref1\" is not allowed to reference deprecated definition \"target2\".",
- "Schema location \"/gg:ref1\".");
+ "/gg:ref1", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module hh {namespace urn:hh;prefix hh;"
"leaf ref1 {type leafref;}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Missing path substatement for leafref type.", "Path \"/hh:ref1\".");
+ CHECK_LOG_CTX("Missing path substatement for leafref type.", "/hh:ref1", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ii {namespace urn:ii;prefix ii;typedef mytype {type leafref;}"
"leaf ref1 {type mytype;}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Missing path substatement for leafref type mytype.", "Path \"/ii:ref1\".");
+ CHECK_LOG_CTX("Missing path substatement for leafref type mytype.", "/ii:ref1", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module kk {namespace urn:kk;prefix kk;"
"leaf ref {type leafref {path /target;}}leaf target {type string;config false;}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid leafref path \"/target\" - target is supposed to represent configuration data (as the leafref does), but it does not.", "Schema location \"/kk:ref\".");
+ CHECK_LOG_CTX("Invalid leafref path \"/target\" - target is supposed to represent configuration data (as the leafref does), but it does not.",
+ "/kk:ref", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ll {namespace urn:ll;prefix ll;"
"leaf ref {type leafref {path /target; require-instance true;}}leaf target {type string;}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Leafref type can be restricted by require-instance statement only in YANG 1.1 modules.", "Path \"/ll:ref\".");
+ CHECK_LOG_CTX("Leafref type can be restricted by require-instance statement only in YANG 1.1 modules.",
+ "/ll:ref", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module mm {namespace urn:mm;prefix mm;typedef mytype {type leafref {path /target;require-instance false;}}"
"leaf ref {type mytype;}leaf target {type string;}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Leafref type \"mytype\" can be restricted by require-instance statement only in YANG 1.1 modules.", "Path \"/mm:ref\".");
+ CHECK_LOG_CTX("Leafref type \"mytype\" can be restricted by require-instance statement only in YANG 1.1 modules.",
+ "/mm:ref", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module nn {namespace urn:nn;prefix nn;\n"
"list interface{key name;leaf name{type string;}leaf ip {type string;}}\n"
"leaf ifname{type leafref{ path \"../interface/name\";}}\n"
"leaf address {type leafref{\n path \"/interface[name is current()/../ifname]/ip\";}}}",
LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Parsing module \"nn\" failed.", NULL);
- CHECK_LOG_CTX("Invalid character 0x69 ('i'), perhaps \"name\" is supposed to be a function call.", "Line number 5.");
+ CHECK_LOG_CTX("Parsing module \"nn\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Invalid character 0x69 ('i'), perhaps \"name\" is supposed to be a function call.", NULL, 5);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module oo {namespace urn:oo;prefix oo;\n"
"list interface{key name;leaf name{type string;}leaf ip {type string;}}\n"
"leaf ifname{type leafref{ path \"../interface/name\";}}\n"
"leaf address {type leafref{\n path \"/interface[name=current()/../ifname/ip\";}}}",
LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Parsing module \"oo\" failed.", NULL);
- CHECK_LOG_CTX("Unexpected XPath expression end.", "Line number 5.");
+ CHECK_LOG_CTX("Parsing module \"oo\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Unexpected XPath expression end.", NULL, 5);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module pp {namespace urn:pp;prefix pp;"
"list interface{key name;leaf name{type string;}leaf ip {type string;}}"
"leaf ifname{type leafref{ path \"../interface/name\";}}"
"leaf address {type leafref{ path \"/interface[x:name=current()/../ifname]/ip\";}}}",
LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("No module connected with the prefix \"x\" found (prefix format schema stored mapping).",
- "Schema location \"/pp:address\".");
+ CHECK_LOG_CTX("No module connected with the prefix \"x\" found (prefix format schema stored mapping).", "/pp:address", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module qq {namespace urn:qq;prefix qq;"
"list interface{key name;leaf name{type string;}leaf ip {type string;}}"
"leaf ifname{type leafref{ path \"../interface/name\";}}"
"leaf address {type leafref{ path \"/interface[id=current()/../ifname]/ip\";}}}",
LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Not found node \"id\" in path.", "Schema location \"/qq:address\".");
+ CHECK_LOG_CTX("Not found node \"id\" in path.", "/qq:address", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module rr {namespace urn:rr;prefix rr;\n"
"list interface{key name;leaf name{type string;}leaf ip {type string;}}\n"
"leaf ifname{type leafref{ path \"../interface/name\";}}leaf test{type string;}\n"
"leaf address {type leafref{ path \"/interface[name=current() / .. / ifname][name=current()/../test]/ip\";}}}",
LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Parsing module \"rr\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate predicate key \"name\" in path.", "Line number 4.");
+ CHECK_LOG_CTX("Parsing module \"rr\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate predicate key \"name\" in path.", NULL, 4);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ss {namespace urn:ss;prefix ss;\n"
"list interface{key name;leaf name{type string;}leaf ip {type string;}}\n"
"leaf ifname{type leafref{ path \"../interface/name\";}}leaf test{type string;}\n"
"leaf address {type leafref{ path \"/interface[name = ../ifname]/ip\";}}}",
LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Parsing module \"ss\" failed.", NULL);
- CHECK_LOG_CTX("Unexpected XPath token \"..\" (\"../ifname]/ip\"), expected \"FunctionName\".", "Line number 4.");
+ CHECK_LOG_CTX("Parsing module \"ss\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Unexpected XPath token \"..\" (\"../ifname]/ip\"), expected \"FunctionName\".", NULL, 4);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module tt {namespace urn:tt;prefix tt;\n"
"list interface{key name;leaf name{type string;}leaf ip {type string;}}\n"
"leaf ifname{type leafref{ path \"../interface/name\";}}leaf test{type string;}\n"
"leaf address {type leafref{ path \"/interface[name = current()../ifname]/ip\";}}}",
LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Parsing module \"tt\" failed.", NULL);
- CHECK_LOG_CTX("Unexpected XPath token \"..\" (\"../ifname]/ip\"), expected \"Operator(Path)\".", "Line number 4.");
+ CHECK_LOG_CTX("Parsing module \"tt\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Unexpected XPath token \"..\" (\"../ifname]/ip\"), expected \"Operator(Path)\".", NULL, 4);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module uu {namespace urn:uu;prefix uu;\n"
"list interface{key name;leaf name{type string;}leaf ip {type string;}}\n"
"leaf ifname{type leafref{ path \"../interface/name\";}}leaf test{type string;}\n"
"leaf address {type leafref{ path \"/interface[name = current()/..ifname]/ip\";}}}",
LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Parsing module \"uu\" failed.", NULL);
- CHECK_LOG_CTX("Invalid character 'i'[31] of expression '/interface[name = current()/..ifname]/ip'.", "Line number 4.");
+ CHECK_LOG_CTX("Parsing module \"uu\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Invalid character 'i'[31] of expression '/interface[name = current()/..ifname]/ip'.", NULL, 4);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module vv {namespace urn:vv;prefix vv;\n"
"list interface{key name;leaf name{type string;}leaf ip {type string;}}\n"
"leaf ifname{type leafref{ path \"../interface/name\";}}leaf test{type string;}\n"
"leaf address {type leafref{ path \"/interface[name = current()/ifname]/ip\";}}}",
LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Parsing module \"vv\" failed.", NULL);
- CHECK_LOG_CTX("Unexpected XPath token \"NameTest\" (\"ifname]/ip\"), expected \"..\".", "Line number 4.");
+ CHECK_LOG_CTX("Parsing module \"vv\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Unexpected XPath token \"NameTest\" (\"ifname]/ip\"), expected \"..\".", NULL, 4);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ww {namespace urn:ww;prefix ww;\n"
"list interface{key name;leaf name{type string;}leaf ip {type string;}}\n"
"leaf ifname{type leafref{ path \"../interface/name\";}}leaf test{type string;}\n"
"leaf address {type leafref{ path \"/interface[name = current()/../]/ip\";}}}",
LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Parsing module \"ww\" failed.", NULL);
- CHECK_LOG_CTX("Unexpected XPath token \"]\" (\"]/ip\"), expected \"NameTest\".", "Line number 4.");
+ CHECK_LOG_CTX("Parsing module \"ww\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Unexpected XPath token \"]\" (\"]/ip\"), expected \"NameTest\".", NULL, 4);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module xx {namespace urn:xx;prefix xx;\n"
"list interface{key name;leaf name{type string;}leaf ip {type string;}}\n"
"leaf ifname{type leafref{ path \"../interface/name\";}}leaf test{type string;}\n"
"leaf address {type leafref{ path \"/interface[name = current()/../#node]/ip\";}}}",
LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Parsing module \"xx\" failed.", NULL);
- CHECK_LOG_CTX("Invalid character '#'[32] of expression '/interface[name = current()/../#node]/ip'.", "Line number 4.");
+ CHECK_LOG_CTX("Parsing module \"xx\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Invalid character '#'[32] of expression '/interface[name = current()/../#node]/ip'.", NULL, 4);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module yy {namespace urn:yy;prefix yy;\n"
"list interface{key name;leaf name{type string;}leaf ip {type string;}}\n"
"leaf ifname{type leafref{ path \"../interface/name\";}}\n"
"leaf address {type leafref{ path \"/interface[name=current()/../x:ifname]/ip\";}}}",
LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("No module connected with the prefix \"x\" found (prefix format schema stored mapping).",
- "Schema location \"/yy:address\".");
+ CHECK_LOG_CTX("No module connected with the prefix \"x\" found (prefix format schema stored mapping).", "/yy:address", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module zz {namespace urn:zz;prefix zz;\n"
"list interface{key name;leaf name{type string;}leaf ip {type string;}}\n"
"leaf ifname{type leafref{ path \"../interface/name\";}}\n"
"leaf address {type leafref{ path \"/interface[name=current()/../xxx]/ip\";}}}",
LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Not found node \"xxx\" in path.", "Schema location \"/zz:address\".");
+ CHECK_LOG_CTX("Not found node \"xxx\" in path.", "/zz:address", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module zza {namespace urn:zza;prefix zza;\n"
"list interface{key name;leaf name{type string;}leaf ip {type string;}}\n"
"leaf ifname{type leafref{ path \"../interface/name\";}}container c;\n"
"leaf address {type leafref{ path \"/interface[name=current()/../c]/ip\";}}}",
LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Leaf expected instead of container \"c\" in leafref predicate in path.", "Schema location \"/zza:address\".");
+ CHECK_LOG_CTX("Leaf expected instead of container \"c\" in leafref predicate in path.", "/zza:address", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module zzb {namespace urn:zzb;prefix zzb;\n"
"list interface{key name;leaf name{type string;}leaf ip {type string;}container c;}\n"
"leaf ifname{type leafref{ path \"../interface/name\";}}\n"
"leaf address {type leafref{ path \"/interface[c=current()/../ifname]/ip\";}}}",
LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Key expected instead of container \"c\" in path.", "Schema location \"/zzb:address\".");
+ CHECK_LOG_CTX("Key expected instead of container \"c\" in path.", "/zzb:address", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module zzc {namespace urn:zzc;prefix zzc;\n"
"leaf source {type leafref {path \"../target\";}default true;}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Not found node \"target\" in path.", "Schema location \"/zzc:source\".");
+ CHECK_LOG_CTX("Not found node \"target\" in path.", "/zzc:source", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module zzd {namespace urn:zzd;prefix zzd;\n"
"leaf source {type leafref {path \"../target\";}default true;}\n"
"leaf target {type uint8;}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid default - value does not fit the type (Invalid type uint8 value \"true\".).",
- "Schema location \"/zzd:source\".");
+ CHECK_LOG_CTX("Invalid default - value does not fit the type (Invalid type uint8 value \"true\".).", "/zzd:source", 0);
/* circular chain */
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aaa {namespace urn:aaa;prefix aaa;\n"
@@ -2085,7 +2077,7 @@ test_type_leafref(void **state)
"leaf ref2 {type leafref {path /ref3;}}\n"
"leaf ref3 {type leafref {path /ref4;}}\n"
"leaf ref4 {type leafref {path /ref1;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid leafref path \"/ref1\" - circular chain of leafrefs detected.", "Schema location \"/aaa:ref4\".");
+ CHECK_LOG_CTX("Invalid leafref path \"/ref1\" - circular chain of leafrefs detected.", "/aaa:ref4", 0);
}
static void
@@ -2094,11 +2086,11 @@ test_type_empty(void **state)
/* invalid */
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa;"
"leaf l {type empty; default x;}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Invalid default - value does not fit the type (Invalid empty value length 1.).", "Schema location \"/aa:l\".");
+ CHECK_LOG_CTX("Invalid default - value does not fit the type (Invalid empty value length 1.).", "/aa:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module bb {namespace urn:bb;prefix bb;typedef mytype {type empty; default x;}"
"leaf l {type mytype;}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Invalid type \"mytype\" - \"empty\" type must not have a default value (x).", "Path \"/bb:l\".");
+ CHECK_LOG_CTX("Invalid type \"mytype\" - \"empty\" type must not have a default value (x).", "/bb:l", 0);
}
static void
@@ -2152,25 +2144,26 @@ test_type_union(void **state)
/* invalid unions */
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa;typedef mytype {type union;}"
"leaf l {type mytype;}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Missing type substatement for union type mytype.", "Path \"/aa:l\".");
+ CHECK_LOG_CTX("Missing type substatement for union type mytype.", "/aa:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module bb {namespace urn:bb;prefix bb;leaf l {type union;}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Missing type substatement for union type.", "Path \"/bb:l\".");
+ CHECK_LOG_CTX("Missing type substatement for union type.", "/bb:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module cc {namespace urn:cc;prefix cc;typedef mytype {type union{type int8; type string;}}"
"leaf l {type mytype {type string;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid type substatement for the type not directly derived from union built-in type.", "Path \"/cc:l\".");
+ CHECK_LOG_CTX("Invalid type substatement for the type not directly derived from union built-in type.", "/cc:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module dd {namespace urn:dd;prefix dd;typedef mytype {type union{type int8; type string;}}"
"typedef mytype2 {type mytype {type string;}}leaf l {type mytype2;}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid type substatement for the type \"mytype2\" not directly derived from union built-in type.", "Path \"/dd:l\".");
+ CHECK_LOG_CTX("Invalid type substatement for the type \"mytype2\" not directly derived from union built-in type.",
+ "/dd:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ee {namespace urn:ee;prefix ee;typedef mytype {type union{type mytype; type string;}}"
"leaf l {type mytype;}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid \"mytype\" type reference - circular chain of types detected.", "Path \"/ee:l\".");
+ CHECK_LOG_CTX("Invalid \"mytype\" type reference - circular chain of types detected.", "/ee:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ef {namespace urn:ef;prefix ef;typedef mytype {type mytype2;}"
"typedef mytype2 {type mytype;} leaf l {type mytype;}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid \"mytype\" type reference - circular chain of types detected.", "Path \"/ef:l\".");
+ CHECK_LOG_CTX("Invalid \"mytype\" type reference - circular chain of types detected.", "/ef:l", 0);
}
static void
@@ -2417,21 +2410,21 @@ test_status(void **state)
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa;"
"container c {status deprecated; leaf l {status current; type string;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Status \"current\" of \"l\" is in conflict with \"deprecated\" status of parent \"c\".", "Path \"/aa:c/l\".");
+ CHECK_LOG_CTX("Status \"current\" of \"l\" is in conflict with \"deprecated\" status of parent \"c\".", "/aa:c/l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module bb {namespace urn:bb;prefix bb;"
"container c {status obsolete; leaf l {status current; type string;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Status \"current\" of \"l\" is in conflict with \"obsolete\" status of parent \"c\".", "Path \"/bb:c/l\".");
+ CHECK_LOG_CTX("Status \"current\" of \"l\" is in conflict with \"obsolete\" status of parent \"c\".", "/bb:c/l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module cc {namespace urn:cc;prefix cc;"
"container c {status obsolete; leaf l {status deprecated; type string;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Status \"deprecated\" of \"l\" is in conflict with \"obsolete\" status of parent \"c\".", "Path \"/cc:c/l\".");
+ CHECK_LOG_CTX("Status \"deprecated\" of \"l\" is in conflict with \"obsolete\" status of parent \"c\".", "/cc:c/l", 0);
/* just a warning */
assert_int_equal(LY_SUCCESS, lys_parse_mem(UTEST_LYCTX, "module cc {namespace urn:dd;prefix d;"
"container c {leaf l {status obsolete; type string;}}"
"container d {leaf m {when \"../../c/l\"; type string;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("When condition \"../../c/l\" may be referencing deprecated node \"l\".", NULL);
+ CHECK_LOG_CTX("When condition \"../../c/l\" may be referencing deprecated node \"l\".", NULL, 0);
}
static void
@@ -2440,24 +2433,23 @@ test_grouping(void **state)
/* result ok, but a warning about not used locally scoped grouping printed */
assert_int_equal(LY_SUCCESS, lys_parse_mem(UTEST_LYCTX, "module a {namespace urn:a;prefix a; grouping grp1 {leaf a1 {type string;}}"
"container a {leaf x {type string;} grouping grp2 {leaf a2 {type string;}}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Locally scoped grouping \"grp2\" not used.", NULL);
- UTEST_LOG_CLEAN;
+ CHECK_LOG_CTX("Locally scoped grouping \"grp2\" not used.", NULL, 0);
/* result ok - when statement or leafref target must be checked only at the place where the grouping is really instantiated */
assert_int_equal(LY_SUCCESS, lys_parse_mem(UTEST_LYCTX, "module b {namespace urn:b;prefix b; grouping grp {"
"leaf ref {type leafref {path \"../name\";}}"
"leaf cond {type string; when \"../name = 'specialone'\";}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX(NULL, NULL);
+ CHECK_LOG_CTX(NULL, NULL, 0);
/* invalid - error in a non-instantiated grouping */
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa;"
"grouping grp {leaf x {type leafref;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Missing path substatement for leafref type.", "Path \"/aa:{grouping='grp'}/x\".");
+ CHECK_LOG_CTX("Missing path substatement for leafref type.", "/aa:{grouping='grp'}/x", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa;"
"container a {grouping grp {leaf x {type leafref;}}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Missing path substatement for leafref type.", "Path \"/aa:a/{grouping='grp'}/x\".");
- CHECK_LOG_CTX("Locally scoped grouping \"grp\" not used.", NULL);
+ CHECK_LOG_CTX("Missing path substatement for leafref type.", "/aa:a/{grouping='grp'}/x", 0);
+ CHECK_LOG_CTX("Locally scoped grouping \"grp\" not used.", NULL, 0);
/* config check */
ly_ctx_set_module_imp_clb(UTEST_LYCTX, test_imp_clb, "module z1 {namespace urn:z1;prefix z1;"
@@ -2536,7 +2528,6 @@ test_uses(void **state)
assert_int_equal(2, leaf->when[0]->refcount);
assert_null(leaf->when[0]->context);
- UTEST_LOG_CLEAN;
assert_int_equal(LY_SUCCESS, lys_parse_mem(UTEST_LYCTX, "module c {namespace urn:c;prefix c;"
"grouping grp {leaf l {type string;}leaf k {type string; status obsolete;}}"
"uses grp {status deprecated;}}", LYS_IN_YANG, &mod));
@@ -2546,7 +2537,7 @@ test_uses(void **state)
assert_int_equal(LYS_LEAF, mod->compiled->data->next->nodetype);
assert_string_equal("k", mod->compiled->data->next->name);
assert_true(LYS_STATUS_OBSLT & mod->compiled->data->next->flags);
- CHECK_LOG(NULL, NULL); /* no warning about inheriting deprecated flag from uses */
+ CHECK_LOG_CTX(NULL, NULL, 0); /* no warning about inheriting deprecated flag from uses */
assert_int_equal(LY_SUCCESS, lys_parse_mem(UTEST_LYCTX, "module d {namespace urn:d;prefix d; grouping grp {container g;}"
"container top {uses grp {augment g {leaf x {type int8;}}}}}", LYS_IN_YANG, &mod));
@@ -2628,53 +2619,56 @@ test_uses(void **state)
/* invalid */
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa;uses missinggrp;}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Grouping \"missinggrp\" referenced by a uses statement not found.", "Path \"/aa:{uses='missinggrp'}\".");
+ CHECK_LOG_CTX("Grouping \"missinggrp\" referenced by a uses statement not found.", "/aa:{uses='missinggrp'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module bb {namespace urn:bb;prefix bb;uses grp;"
"grouping grp {leaf a{type string;}uses grp1;}"
"grouping grp1 {leaf b {type string;}uses grp2;}"
"grouping grp2 {leaf c {type string;}uses grp;}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Grouping \"grp\" references itself through a uses statement.", "Path \"/bb:{uses='grp'}/{uses='grp1'}/{uses='grp2'}/{uses='grp'}\".");
+ CHECK_LOG_CTX("Grouping \"grp\" references itself through a uses statement.",
+ "/bb:{uses='grp'}/{uses='grp1'}/{uses='grp2'}/{uses='grp'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module cc {namespace urn:cc;prefix cc;uses a:missingprefix;}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid prefix used for grouping \"a:missingprefix\" reference.", "Path \"/cc:{uses='a:missingprefix'}\".");
+ CHECK_LOG_CTX("Invalid prefix used for grouping \"a:missingprefix\" reference.", "/cc:{uses='a:missingprefix'}", 0);
assert_int_equal(LY_EEXIST, lys_parse_mem(UTEST_LYCTX, "module dd {namespace urn:dd;prefix dd;grouping grp{leaf a{type string;}}"
"leaf a {type string;}uses grp;}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Duplicate identifier \"a\" of data definition/RPC/action/notification statement.", "Path \"/dd:{uses='grp'}/dd:a\".");
+ CHECK_LOG_CTX("Duplicate identifier \"a\" of data definition/RPC/action/notification statement.",
+ "/dd:{uses='grp'}/dd:a", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ee {namespace urn:ee;prefix ee;grouping grp {leaf l {type string; status deprecated;}}"
"uses grp {status obsolete;}}", LYS_IN_YANG, &mod));
CHECK_LOG_CTX("Inherited schema-only status \"obsolete\" is in conflict with \"deprecated\" status of \"l\".",
- "Path \"/ee:{uses='grp'}/ee:l\".");
+ "/ee:{uses='grp'}/ee:l", 0);
assert_int_equal(LY_EEXIST, lys_parse_mem(UTEST_LYCTX, "module ff {namespace urn:ff;prefix ff;grouping grp {leaf l {type string;}}"
"leaf l {type int8;}uses grp;}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Duplicate identifier \"l\" of data definition/RPC/action/notification statement.", "Path \"/ff:{uses='grp'}/ff:l\".");
+ CHECK_LOG_CTX("Duplicate identifier \"l\" of data definition/RPC/action/notification statement.",
+ "/ff:{uses='grp'}/ff:l", 0);
assert_int_equal(LY_EEXIST, lys_parse_mem(UTEST_LYCTX, "module fg {namespace urn:fg;prefix fg;grouping grp {leaf m {type string;}}"
"uses grp;leaf m {type int8;}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Duplicate identifier \"m\" of data definition/RPC/action/notification statement.", "Path \"/fg:m\".");
+ CHECK_LOG_CTX("Duplicate identifier \"m\" of data definition/RPC/action/notification statement.", "/fg:m", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module gg {namespace urn:gg;prefix gg; grouping grp {container g;}"
"leaf g {type string;}"
"container top {uses grp {augment /g {leaf x {type int8;}}}}}", LYS_IN_YANG, &mod));
CHECK_LOG_CTX("Invalid descendant-schema-nodeid value \"/g\" - name test expected instead of \"/\".",
- "Path \"/gg:top/{uses='grp'}/{augment='/g'}\".");
+ "/gg:top/{uses='grp'}/{augment='/g'}", 0);
assert_int_equal(LY_ENOTFOUND, lys_parse_mem(UTEST_LYCTX, "module hh {yang-version 1.1;namespace urn:hh;prefix hh;"
"grouping grp {notification g { description \"super g\";}}"
"container top {notification h; uses grp {refine h {description \"ultra h\";}}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Refine(s) target node \"h\" in grouping \"grp\" was not found.", "Path \"/hh:top/{uses='grp'}\".");
+ CHECK_LOG_CTX("Refine(s) target node \"h\" in grouping \"grp\" was not found.", "/hh:top/{uses='grp'}", 0);
assert_int_equal(LY_ENOTFOUND, lys_parse_mem(UTEST_LYCTX, "module ii {yang-version 1.1;namespace urn:ii;prefix ii;"
"grouping grp {action g { description \"super g\";}}"
"container top {action i; uses grp {refine i {description \"ultra i\";}}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Refine(s) target node \"i\" in grouping \"grp\" was not found.", "Path \"/ii:top/{uses='grp'}\".");
+ CHECK_LOG_CTX("Refine(s) target node \"i\" in grouping \"grp\" was not found.", "/ii:top/{uses='grp'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module jj {yang-version 1.1;namespace urn:jj;prefix jj;"
"grouping grp {leaf j { when \"1\"; type invalid;}}"
"container top {uses grp;}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Referenced type \"invalid\" not found.", "Path \"/jj:top/{uses='grp'}/j\".");
+ CHECK_LOG_CTX("Referenced type \"invalid\" not found.", "/jj:top/{uses='grp'}/j", 0);
}
static void
@@ -2777,70 +2771,70 @@ test_refine(void **state)
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa;import grp {prefix g;}"
"uses g:grp {refine c {default hello;}}}", LYS_IN_YANG, &mod));
CHECK_LOG_CTX("Invalid refine of container node - it is not possible to replace \"default\" property.",
- "Path \"/aa:{uses='g:grp'}/aa:c/{refine='c'}\".");
+ "/aa:{uses='g:grp'}/aa:c/{refine='c'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module bb {namespace urn:bb;prefix bb;import grp {prefix g;}"
"uses g:grp {refine c/l {default hello; default world;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid refine of leaf with too many (2) default properties.", "Path \"/bb:{uses='g:grp'}/bb:c/l/{refine='c/l'}\".");
+ CHECK_LOG_CTX("Invalid refine of leaf with too many (2) default properties.", "/bb:{uses='g:grp'}/bb:c/l/{refine='c/l'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module cc {namespace urn:cc;prefix cc;import grp {prefix g;}"
"uses g:grp {refine c/ll {default hello; default world;}}}", LYS_IN_YANG, &mod));
CHECK_LOG_CTX("Invalid refine of default in leaf-list - the default statement is allowed only in YANG 1.1 modules.",
- "Path \"/cc:{uses='g:grp'}/cc:c/ll/{refine='c/ll'}\".");
+ "/cc:{uses='g:grp'}/cc:c/ll/{refine='c/ll'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module dd {namespace urn:dd;prefix dd;import grp {prefix g;}"
"uses g:grp {refine c/ll {mandatory true;}}}", LYS_IN_YANG, &mod));
CHECK_LOG_CTX("Invalid refine of leaf-list node - it is not possible to replace \"mandatory\" property.",
- "Path \"/dd:{uses='g:grp'}/dd:c/ll/{refine='c/ll'}\".");
+ "/dd:{uses='g:grp'}/dd:c/ll/{refine='c/ll'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ee {namespace urn:ee;prefix ee;import grp {prefix g;}"
"uses g:grp {refine c/l {mandatory true;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "Path \"/ee:{uses='g:grp'}/ee:c/l\".");
- CHECK_LOG_CTX("Invalid mandatory leaf with a default value.", "Path \"/ee:{uses='g:grp'}/ee:c/l\".");
+ CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "/ee:{uses='g:grp'}/ee:c/l", 0);
+ CHECK_LOG_CTX("Invalid mandatory leaf with a default value.", "/ee:{uses='g:grp'}/ee:c/l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ef {namespace urn:ef;prefix ef;import grp {prefix g;}"
"uses g:grp {refine c/ch {mandatory true;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "Path \"/ef:{uses='g:grp'}/ef:c/ch\".");
- CHECK_LOG_CTX("Invalid mandatory choice with a default case.", "Path \"/ef:{uses='g:grp'}/ef:c/ch\".");
+ CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "/ef:{uses='g:grp'}/ef:c/ch", 0);
+ CHECK_LOG_CTX("Invalid mandatory choice with a default case.", "/ef:{uses='g:grp'}/ef:c/ch", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ff {namespace urn:ff;prefix ff;import grp {prefix g;}"
"uses g:grp {refine c/ch/ca/ca {mandatory true;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Mandatory node \"ca\" under the default case \"ca\".", "Path \"/ff:{uses='g:grp'}/ff:c/ch\".");
+ CHECK_LOG_CTX("Mandatory node \"ca\" under the default case \"ca\".", "/ff:{uses='g:grp'}/ff:c/ch", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module gg {namespace urn:gg;prefix gg;import grp {prefix g;}"
"uses g:grp {refine c/x {default hello;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "Path \"/gg:{uses='g:grp'}/gg:c/x\".");
- CHECK_LOG_CTX("Invalid mandatory leaf with a default value.", "Path \"/gg:{uses='g:grp'}/gg:c/x\".");
+ CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "/gg:{uses='g:grp'}/gg:c/x", 0);
+ CHECK_LOG_CTX("Invalid mandatory leaf with a default value.", "/gg:{uses='g:grp'}/gg:c/x", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module hh {namespace urn:hh;prefix hh;import grp {prefix g;}"
"uses g:grp {refine c/c/l {config true;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "Path \"/hh:{uses='g:grp'}/hh:c/c/l\".");
- CHECK_LOG_CTX("Configuration node cannot be child of any state data node.", "Path \"/hh:{uses='g:grp'}/hh:c/c/l\".");
+ CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "/hh:{uses='g:grp'}/hh:c/c/l", 0);
+ CHECK_LOG_CTX("Configuration node cannot be child of any state data node.", "/hh:{uses='g:grp'}/hh:c/c/l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ii {namespace urn:ii;prefix ii;grouping grp {leaf l {type string; status deprecated;}}"
"uses grp {status obsolete;}}", LYS_IN_YANG, &mod));
CHECK_LOG_CTX("Inherited schema-only status \"obsolete\" is in conflict with \"deprecated\" status of \"l\".",
- "Path \"/ii:{uses='grp'}/ii:l\".");
+ "/ii:{uses='grp'}/ii:l", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module jj {namespace urn:jj;prefix jj;import grp {prefix g;}"
"uses g:grp {refine c/x {presence nonsence;}}}", LYS_IN_YANG, &mod));
CHECK_LOG_CTX("Invalid refine of leaf node - it is not possible to replace \"presence\" property.",
- "Path \"/jj:{uses='g:grp'}/jj:c/x/{refine='c/x'}\".");
+ "/jj:{uses='g:grp'}/jj:c/x/{refine='c/x'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module kk {namespace urn:kk;prefix kk;import grp {prefix g;}"
"uses g:grp {refine c/ch {must 1;}}}", LYS_IN_YANG, &mod));
CHECK_LOG_CTX("Invalid refine of choice node - it is not possible to add \"must\" property.",
- "Path \"/kk:{uses='g:grp'}/kk:c/ch/{refine='c/ch'}\".");
+ "/kk:{uses='g:grp'}/kk:c/ch/{refine='c/ch'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ll {namespace urn:ll;prefix ll;import grp {prefix g;}"
"uses g:grp {refine c/x {min-elements 1;}}}", LYS_IN_YANG, &mod));
CHECK_LOG_CTX("Invalid refine of leaf node - it is not possible to replace \"min-elements\" property.",
- "Path \"/ll:{uses='g:grp'}/ll:c/x/{refine='c/x'}\".");
+ "/ll:{uses='g:grp'}/ll:c/x/{refine='c/x'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module mm {namespace urn:mm;prefix mm;import grp {prefix g;}"
"uses g:grp {refine c/ll {min-elements 1;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "Path \"/mm:{uses='g:grp'}/mm:c/ll\".");
- CHECK_LOG_CTX("The default statement is present on leaf-list with a nonzero min-elements.", "Path \"/mm:{uses='g:grp'}/mm:c/ll\".");
+ CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "/mm:{uses='g:grp'}/mm:c/ll", 0);
+ CHECK_LOG_CTX("The default statement is present on leaf-list with a nonzero min-elements.", "/mm:{uses='g:grp'}/mm:c/ll", 0);
}
static void
@@ -2962,7 +2956,6 @@ test_augment(void **state)
assert_null(cont->notifs->next);
ly_ctx_set_module_imp_clb(UTEST_LYCTX, NULL, NULL);
- UTEST_LOG_CLEAN;
assert_int_equal(LY_SUCCESS, lys_parse_mem(UTEST_LYCTX, "module k {namespace urn:k; prefix k;yang-version 1.1;"
"feature f;"
"container c {if-feature f; leaf a {type string;}}}", LYS_IN_YANG, &mod));
@@ -2971,7 +2964,7 @@ test_augment(void **state)
"augment /k:c {leaf b {type string;}}"
"leaf c {when \"/k:c/l:b\"; type string;}}", LYS_IN_YANG, NULL));
/* no xpath warning expected */
- CHECK_LOG(NULL, NULL);
+ CHECK_LOG_CTX(NULL, NULL, 0);
assert_null(mod->compiled->data);
assert_int_equal(LY_SUCCESS, lys_parse_mem(UTEST_LYCTX, "module m {namespace urn:m;prefix m;yang-version 1.1;"
@@ -2983,41 +2976,42 @@ test_augment(void **state)
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa; container c {leaf a {type string;}}"
"augment /x/ {leaf a {type int8;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid absolute-schema-nodeid value \"/x/\" - unexpected end of expression.", "Path \"/aa:{augment='/x/'}\".");
+ CHECK_LOG_CTX("Invalid absolute-schema-nodeid value \"/x/\" - unexpected end of expression.", "/aa:{augment='/x/'}", 0);
assert_int_equal(LY_ENOTFOUND, lys_parse_mem(UTEST_LYCTX, "module aa {namespace urn:aa;prefix aa; container c {leaf a {type string;}}"
"augment /x {leaf a {type int8;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Augment target node \"/x\" from module \"aa\" was not found.", "Path \"/aa:{augment='/x'}\".");
+ CHECK_LOG_CTX("Augment target node \"/x\" from module \"aa\" was not found.", "/aa:{augment='/x'}", 0);
assert_int_equal(LY_EEXIST, lys_parse_mem(UTEST_LYCTX, "module bb {namespace urn:bb;prefix bb; container c {leaf a {type string;}}"
"augment /c {leaf a {type int8;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Duplicate identifier \"a\" of data definition/RPC/action/notification statement.", "Path \"/bb:{augment='/c'}/a\".");
+ CHECK_LOG_CTX("Duplicate identifier \"a\" of data definition/RPC/action/notification statement.", "/bb:{augment='/c'}/a", 0);
assert_int_equal(LY_ENOTFOUND, lys_parse_mem(UTEST_LYCTX, "module cc {namespace urn:cc;prefix cc; container c {leaf a {type string;}}"
"augment /c/a {leaf a {type int8;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Augment target node \"/c/a\" from module \"cc\" was not found.", "Path \"/cc:{augment='/c/a'}\".");
+ CHECK_LOG_CTX("Augment target node \"/c/a\" from module \"cc\" was not found.", "/cc:{augment='/c/a'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module dd {namespace urn:dd;prefix dd; container c {leaf a {type string;}}"
"augment /c {case b {leaf d {type int8;}}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid augment of container node which is not allowed to contain case node \"b\".", "Path \"/dd:{augment='/c'}\".");
+ CHECK_LOG_CTX("Invalid augment of container node which is not allowed to contain case node \"b\".", "/dd:{augment='/c'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ee {namespace urn:ee;prefix ee; import himp {prefix hi;}"
"augment /hi:top {container c {leaf d {mandatory true; type int8;}}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid augment adding mandatory node \"c\" without making it conditional via when statement.", "Path \"/ee:{augment='/hi:top'}\".");
+ CHECK_LOG_CTX("Invalid augment adding mandatory node \"c\" without making it conditional via when statement.",
+ "/ee:{augment='/hi:top'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ff {namespace urn:ff;prefix ff; container top;"
"augment ../top {leaf x {type int8;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid absolute-schema-nodeid value \"../top\" - \"/\" expected instead of \"..\".", "Path \"/ff:{augment='../top'}\".");
+ CHECK_LOG_CTX("Invalid absolute-schema-nodeid value \"../top\" - \"/\" expected instead of \"..\".", "/ff:{augment='../top'}", 0);
assert_int_equal(LY_ENOTFOUND, lys_parse_mem(UTEST_LYCTX, "module gg {namespace urn:gg;prefix gg; rpc func;"
"augment /func {leaf x {type int8;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Augment target node \"/func\" from module \"gg\" was not found.", "Path \"/gg:{augment='/func'}\".");
+ CHECK_LOG_CTX("Augment target node \"/func\" from module \"gg\" was not found.", "/gg:{augment='/func'}", 0);
assert_int_equal(LY_ENOTFOUND, lys_parse_mem(UTEST_LYCTX, "module hh {namespace urn:hh;prefix hh;import himp {prefix hi;}"
"augment /hi:func/input {leaf x {type string;}}"
"augment /hi:func/output {leaf y {type string;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Augment target node \"/hi:func/input\" from module \"hh\" was not found.", "Path \"/hh:{augment='/hi:func/input'}\".");
- CHECK_LOG_CTX("Augment target node \"/hi:func/output\" from module \"hh\" was not found.", "Path \"/hh:{augment='/hi:func/output'}\".");
+ CHECK_LOG_CTX("Augment target node \"/hi:func/input\" from module \"hh\" was not found.", "/hh:{augment='/hi:func/input'}", 0);
+ CHECK_LOG_CTX("Augment target node \"/hi:func/output\" from module \"hh\" was not found.", "/hh:{augment='/hi:func/output'}", 0);
}
static void
@@ -3473,219 +3467,240 @@ test_deviation(void **state)
assert_int_equal(LY_ENOTFOUND, lys_parse_mem(UTEST_LYCTX, "module aa1 {namespace urn:aa1;prefix aa1;import a {prefix a;}"
"deviation /a:top/a:z {deviate not-supported;}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Deviation(s) target node \"/a:top/a:z\" from module \"aa1\" was not found.", "Path \"/a:{deviation='/a:top/a:z'}\".");
+ CHECK_LOG_CTX("Deviation(s) target node \"/a:top/a:z\" from module \"aa1\" was not found.",
+ "/a:{deviation='/a:top/a:z'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module aa2 {namespace urn:aa2;prefix aa2;import a {prefix a;}"
"deviation /a:top/a:a {deviate not-supported;}"
"deviation /a:top/a:a {deviate add {default error;}}}", LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("Multiple deviations of \"/a:top/a:a\" with one of them being \"not-supported\".", "Path \"/aa2:{deviation='/a:top/a:a'}\".");
+ CHECK_LOG_CTX("Multiple deviations of \"/a:top/a:a\" with one of them being \"not-supported\".",
+ "/aa2:{deviation='/a:top/a:a'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module bb {namespace urn:bb;prefix bb;import a {prefix a;}"
"deviation a:top/a:a {deviate not-supported;}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid absolute-schema-nodeid value \"a:top/a:a\" - \"/\" expected instead of \"a:top\".", "Path \"/bb:{deviation='a:top/a:a'}\".");
+ CHECK_LOG_CTX("Invalid absolute-schema-nodeid value \"a:top/a:a\" - \"/\" expected instead of \"a:top\".",
+ "/bb:{deviation='a:top/a:a'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module cc {namespace urn:cc;prefix cc; container c;"
"deviation /c {deviate add {units meters;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid deviation of container node - it is not possible to add \"units\" property.", "Path \"/cc:{deviation='/c'}\".");
+ CHECK_LOG_CTX("Invalid deviation of container node - it is not possible to add \"units\" property.",
+ "/cc:{deviation='/c'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module cd {namespace urn:cd;prefix cd; leaf c {type string; units centimeters;}"
"deviation /c {deviate add {units meters;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid deviation adding \"units\" property which already exists (with value \"centimeters\").", "Path \"/cd:{deviation='/c'}\".");
+ CHECK_LOG_CTX("Invalid deviation adding \"units\" property which already exists (with value \"centimeters\").",
+ "/cd:{deviation='/c'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module dd1 {namespace urn:dd1;prefix dd1; container c;"
"deviation /c {deviate delete {units meters;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid deviation of container node - it is not possible to delete \"units\" property.", "Path \"/dd1:{deviation='/c'}\".");
+ CHECK_LOG_CTX("Invalid deviation of container node - it is not possible to delete \"units\" property.",
+ "/dd1:{deviation='/c'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module dd2 {namespace urn:dd2;prefix dd2; leaf c {type string;}"
"deviation /c {deviate delete {units meters;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid deviation deleting \"units\" property \"meters\" which is not present.", "Path \"/dd2:{deviation='/c'}\".");
+ CHECK_LOG_CTX("Invalid deviation deleting \"units\" property \"meters\" which is not present.",
+ "/dd2:{deviation='/c'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module dd3 {namespace urn:dd3;prefix dd3; leaf c {type string; units centimeters;}"
"deviation /c {deviate delete {units meters;}}}", LYS_IN_YANG, &mod));
CHECK_LOG_CTX("Invalid deviation deleting \"units\" property \"meters\" which does not match the target's property value \"centimeters\".",
- "Path \"/dd3:{deviation='/c'}\".");
+ "/dd3:{deviation='/c'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ee1 {namespace urn:ee1;prefix ee1; container c;"
"deviation /c {deviate replace {units meters;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid deviation of container node - it is not possible to replace \"units\" property.", "Path \"/ee1:{deviation='/c'}\".");
+ CHECK_LOG_CTX("Invalid deviation of container node - it is not possible to replace \"units\" property.",
+ "/ee1:{deviation='/c'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ee2 {namespace urn:ee2;prefix ee2; leaf c {type string;}"
"deviation /c {deviate replace {units meters;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid deviation replacing \"units\" property \"meters\" which is not present.", "Path \"/ee2:{deviation='/c'}\".");
+ CHECK_LOG_CTX("Invalid deviation replacing \"units\" property \"meters\" which is not present.",
+ "/ee2:{deviation='/c'}", 0);
/* the default is already deleted in /e:a byt module f */
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ff1 {namespace urn:ff1;prefix ff1; import e {prefix e;}"
"deviation /e:a {deviate delete {default x:aa;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid deviation deleting \"default\" property \"x:aa\" which is not present.", "Path \"/ff1:{deviation='/e:a'}\".");
+ CHECK_LOG_CTX("Invalid deviation deleting \"default\" property \"x:aa\" which is not present.",
+ "/ff1:{deviation='/e:a'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ff3 {namespace urn:ff3;prefix ff3; import e {prefix e;}"
"deviation /e:b {deviate delete {default e:b;}}}", LYS_IN_YANG, &mod));
CHECK_LOG_CTX("Invalid deviation deleting \"default\" property \"e:b\" which does not match the target's property value \"x:ba\".",
- "Path \"/ff3:{deviation='/e:b'}\".");
+ "/ff3:{deviation='/e:b'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ff5 {namespace urn:ff5;prefix ff5; anyxml a;"
"deviation /a {deviate delete {default x;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid deviation of anyxml node - it is not possible to delete \"default\" property.", "Path \"/ff5:{deviation='/a'}\".");
+ CHECK_LOG_CTX("Invalid deviation of anyxml node - it is not possible to delete \"default\" property.",
+ "/ff5:{deviation='/a'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ff6 {namespace urn:ff6;prefix ff6; import e {prefix e;}"
"deviation /e:c {deviate delete {default hi;}}}", LYS_IN_YANG, &mod));
CHECK_LOG_CTX("Invalid deviation deleting \"default\" property \"hi\" which does not match the target's property value \"hello\".",
- "Path \"/ff6:{deviation='/e:c'}\".");
+ "/ff6:{deviation='/e:c'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ff7 {namespace urn:ff7;prefix ff7; import e {prefix e;}"
"deviation /e:d {deviate delete {default hi;}}}", LYS_IN_YANG, &mod));
CHECK_LOG_CTX("Invalid deviation deleting \"default\" property \"hi\" which does not match any of the target's property values.",
- "Path \"/ff7:{deviation='/e:d'}\".");
+ "/ff7:{deviation='/e:d'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module gg1 {namespace urn:gg1;prefix gg1; import e {prefix e;}"
"deviation /e:b {deviate add {default e:a;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid deviation adding \"default\" property which already exists (with value \"x:ba\").", "Path \"/gg1:{deviation='/e:b'}\".");
+ CHECK_LOG_CTX("Invalid deviation adding \"default\" property which already exists (with value \"x:ba\").",
+ "/gg1:{deviation='/e:b'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module gg2 {namespace urn:gg2;prefix gg2; import e {prefix e;}"
"deviation /e:a {deviate add {default x:a;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "Path \"/e:a\".");
- CHECK_LOG_CTX("Default case prefix \"x\" not found in imports of \"gg2\".", "Path \"/e:a\".");
+ CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "/e:a", 0);
+ CHECK_LOG_CTX("Default case prefix \"x\" not found in imports of \"gg2\".", "/e:a", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module gg3 {namespace urn:gg3;prefix gg3; import e {prefix e;}"
"deviation /e:a {deviate add {default a;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "Path \"/e:a\".");
- CHECK_LOG_CTX("Default case \"a\" not found.", "Path \"/e:a\".");
+ CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "/e:a", 0);
+ CHECK_LOG_CTX("Default case \"a\" not found.", "/e:a", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module gg4 {namespace urn:gg4;prefix gg4; import e {prefix e;}"
"deviation /e:c {deviate add {default hi;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid deviation adding \"default\" property which already exists (with value \"hello\").", "Path \"/gg4:{deviation='/e:c'}\".");
+ CHECK_LOG_CTX("Invalid deviation adding \"default\" property which already exists (with value \"hello\").",
+ "/gg4:{deviation='/e:c'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module gg4 {namespace urn:gg4;prefix gg4; import e {prefix e;}"
"deviation /e:a {deviate add {default e:ac;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "Path \"/e:a\".");
- CHECK_LOG_CTX("Mandatory node \"ac\" under the default case \"e:ac\".", "Path \"/e:a\".");
+ CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "/e:a", 0);
+ CHECK_LOG_CTX("Mandatory node \"ac\" under the default case \"e:ac\".", "/e:a", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module gg5 {namespace urn:gg5;prefix gg5; leaf x {type string; mandatory true;}"
"deviation /x {deviate add {default error;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "Path \"/gg5:{deviation='/x'}\".");
- CHECK_LOG_CTX("Invalid mandatory leaf with a default value.", "Path \"/gg5:{deviation='/x'}\".");
+ CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "/gg5:{deviation='/x'}", 0);
+ CHECK_LOG_CTX("Invalid mandatory leaf with a default value.", "/gg5:{deviation='/x'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module hh1 {yang-version 1.1; namespace urn:hh1;prefix hh1; import e {prefix e;}"
"deviation /e:d {deviate replace {default hi;}}}", LYS_IN_YANG, &mod));
CHECK_LOG_CTX("Invalid deviation of leaf-list node - it is not possible to replace \"default\" property.",
- "Path \"/hh1:{deviation='/e:d'}\".");
+ "/hh1:{deviation='/e:d'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ii1 {namespace urn:ii1;prefix ii1; import i {prefix i;}"
"deviation /i:l1 {deviate delete {unique x;}}}", LYS_IN_YANG, &mod));
CHECK_LOG_CTX("Invalid deviation deleting \"unique\" property \"x\" which does not match any of the target's property values.",
- "Path \"/ii1:{deviation='/i:l1'}\".");
+ "/ii1:{deviation='/i:l1'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ii2 {namespace urn:ii2;prefix ii2; import i {prefix i;} leaf x { type string;}"
"deviation /i:l2 {deviate delete {unique d;}}}", LYS_IN_YANG, &mod));
CHECK_LOG_CTX("Invalid deviation deleting \"unique\" property \"d\" which does not match any of the target's property values.",
- "Path \"/ii2:{deviation='/i:l2'}\".");
+ "/ii2:{deviation='/i:l2'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ii3 {namespace urn:ii3;prefix ii3; leaf x { type string;}"
"deviation /x {deviate delete {unique d;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid deviation of leaf node - it is not possible to delete \"unique\" property.", "Path \"/ii3:{deviation='/x'}\".");
+ CHECK_LOG_CTX("Invalid deviation of leaf node - it is not possible to delete \"unique\" property.", "/ii3:{deviation='/x'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ii4 {namespace urn:ii4;prefix ii4; leaf x { type string;}"
"deviation /x {deviate add {unique d;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid deviation of leaf node - it is not possible to add \"unique\" property.", "Path \"/ii4:{deviation='/x'}\".");
+ CHECK_LOG_CTX("Invalid deviation of leaf node - it is not possible to add \"unique\" property.", "/ii4:{deviation='/x'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module jj1 {namespace urn:jj1;prefix jj1; choice ch {case a {leaf a{type string;}}}"
"deviation /ch/a {deviate add {config false;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid deviation of case node - it is not possible to add \"config\" property.", "Path \"/jj1:{deviation='/ch/a'}\".");
+ CHECK_LOG_CTX("Invalid deviation of case node - it is not possible to add \"config\" property.", "/jj1:{deviation='/ch/a'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module jj2 {namespace urn:jj2;prefix jj2; container top {config false; leaf x {type string;}}"
"deviation /top/x {deviate add {config true;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "Path \"/jj2:{deviation='/top/x'}\".");
- CHECK_LOG_CTX("Configuration node cannot be child of any state data node.", "Path \"/jj2:{deviation='/top/x'}\".");
+ CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "/jj2:{deviation='/top/x'}", 0);
+ CHECK_LOG_CTX("Configuration node cannot be child of any state data node.", "/jj2:{deviation='/top/x'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module jj4 {namespace urn:jj4;prefix jj4; choice ch {case a {leaf a{type string;}}}"
"deviation /ch/a {deviate replace {config false;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid deviation of case node - it is not possible to replace \"config\" property.", "Path \"/jj4:{deviation='/ch/a'}\".");
+ CHECK_LOG_CTX("Invalid deviation of case node - it is not possible to replace \"config\" property.",
+ "/jj4:{deviation='/ch/a'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module jj5 {namespace urn:jj5;prefix jj5; container top {leaf x {type string; config true;}}"
"deviation /top {deviate add {config false;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "Path \"/jj5:top\".");
- CHECK_LOG_CTX("Configuration node cannot be child of any state data node.", "Path \"/jj5:top/x\".");
+ CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "/jj5:top", 0);
+ CHECK_LOG_CTX("Configuration node cannot be child of any state data node.", "/jj5:top/x", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module jj6 {namespace urn:jj6;prefix jj6; leaf x {config false; type string;}"
"deviation /x {deviate add {config true;}}}", LYS_IN_YANG, &mod));
CHECK_LOG_CTX("Invalid deviation adding \"config\" property which already exists (with value \"config false\").",
- "Path \"/jj6:{deviation='/x'}\".");
+ "/jj6:{deviation='/x'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module kk1 {namespace urn:kk1;prefix kk1; container top {leaf a{type string;}}"
"deviation /top {deviate add {mandatory true;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid deviation of container node - it is not possible to add \"mandatory\" property.", "Path \"/kk1:{deviation='/top'}\".");
+ CHECK_LOG_CTX("Invalid deviation of container node - it is not possible to add \"mandatory\" property.",
+ "/kk1:{deviation='/top'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module kk2 {namespace urn:kk2;prefix kk2; container top {leaf a{type string;}}"
"deviation /top {deviate replace {mandatory true;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid deviation of container node - it is not possible to replace \"mandatory\" property.", "Path \"/kk2:{deviation='/top'}\".");
+ CHECK_LOG_CTX("Invalid deviation of container node - it is not possible to replace \"mandatory\" property.",
+ "/kk2:{deviation='/top'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module kk3 {namespace urn:kk3;prefix kk3; container top {leaf x {type string;}}"
"deviation /top/x {deviate replace {mandatory true;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid deviation replacing \"mandatory\" property \"mandatory true\" which is not present.", "Path \"/kk3:{deviation='/top/x'}\".");
+ CHECK_LOG_CTX("Invalid deviation replacing \"mandatory\" property \"mandatory true\" which is not present.",
+ "/kk3:{deviation='/top/x'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module kk4 {namespace urn:kk4;prefix kk4; leaf x {mandatory true; type string;}"
"deviation /x {deviate add {mandatory false;}}}", LYS_IN_YANG, &mod));
CHECK_LOG_CTX("Invalid deviation adding \"mandatory\" property which already exists (with value \"mandatory true\").",
- "Path \"/kk4:{deviation='/x'}\".");
+ "/kk4:{deviation='/x'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ll1 {namespace urn:ll1;prefix ll1; leaf x {default test; type string;}"
"deviation /x {deviate add {mandatory true;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "Path \"/ll1:{deviation='/x'}\".");
- CHECK_LOG_CTX("Invalid mandatory leaf with a default value.", "Path \"/ll1:{deviation='/x'}\".");
+ CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "/ll1:{deviation='/x'}", 0);
+ CHECK_LOG_CTX("Invalid mandatory leaf with a default value.", "/ll1:{deviation='/x'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ll2 {yang-version 1.1; namespace urn:ll2;prefix ll2; leaf-list x {default test; type string;}"
"deviation /x {deviate add {min-elements 1;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "Path \"/ll2:{deviation='/x'}\".");
- CHECK_LOG_CTX("The default statement is present on leaf-list with a nonzero min-elements.", "Path \"/ll2:{deviation='/x'}\".");
+ CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "/ll2:{deviation='/x'}", 0);
+ CHECK_LOG_CTX("The default statement is present on leaf-list with a nonzero min-elements.", "/ll2:{deviation='/x'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module ll2 {namespace urn:ll2;prefix ll2; choice ch {default a; leaf a {type string;} leaf b {type string;}}"
"deviation /ch {deviate add {mandatory true;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "Path \"/ll2:ch\".");
- CHECK_LOG_CTX("Invalid mandatory choice with a default case.", "Path \"/ll2:ch\".");
+ CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "/ll2:ch", 0);
+ CHECK_LOG_CTX("Invalid mandatory choice with a default case.", "/ll2:ch", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module mm1 {namespace urn:mm1;prefix mm1; leaf-list x {min-elements 10; type string;}"
"deviation /x {deviate add {max-elements 5;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "Path \"/mm1:{deviation='/x'}\".");
- CHECK_LOG_CTX("Leaf-list min-elements 10 is bigger than max-elements 5.", "Path \"/mm1:{deviation='/x'}\".");
+ CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "/mm1:{deviation='/x'}", 0);
+ CHECK_LOG_CTX("Leaf-list min-elements 10 is bigger than max-elements 5.", "/mm1:{deviation='/x'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module mm2 {namespace urn:mm2;prefix mm2; leaf-list x {max-elements 10; type string;}"
"deviation /x {deviate add {min-elements 20;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "Path \"/mm2:{deviation='/x'}\".");
- CHECK_LOG_CTX("Leaf-list min-elements 20 is bigger than max-elements 10.", "Path \"/mm2:{deviation='/x'}\".");
+ CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "/mm2:{deviation='/x'}", 0);
+ CHECK_LOG_CTX("Leaf-list min-elements 20 is bigger than max-elements 10.", "/mm2:{deviation='/x'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module mm3 {namespace urn:mm3;prefix mm3; list x {min-elements 5; max-elements 10; config false;}"
"deviation /x {deviate replace {max-elements 1;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "Path \"/mm3:{deviation='/x'}\".");
- CHECK_LOG_CTX("List min-elements 5 is bigger than max-elements 1.", "Path \"/mm3:{deviation='/x'}\".");
+ CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "/mm3:{deviation='/x'}", 0);
+ CHECK_LOG_CTX("List min-elements 5 is bigger than max-elements 1.", "/mm3:{deviation='/x'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module mm4 {namespace urn:mm4;prefix mm4; list x {min-elements 5; max-elements 10; config false;}"
"deviation /x {deviate replace {min-elements 20;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "Path \"/mm4:{deviation='/x'}\".");
- CHECK_LOG_CTX("List min-elements 20 is bigger than max-elements 10.", "Path \"/mm4:{deviation='/x'}\".");
+ CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "/mm4:{deviation='/x'}", 0);
+ CHECK_LOG_CTX("List min-elements 20 is bigger than max-elements 10.", "/mm4:{deviation='/x'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module mm5 {namespace urn:mm5;prefix mm5; leaf-list x {type string; min-elements 5;}"
"deviation /x {deviate add {min-elements 1;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid deviation adding \"min-elements\" property which already exists (with value \"5\").", "Path \"/mm5:{deviation='/x'}\".");
+ CHECK_LOG_CTX("Invalid deviation adding \"min-elements\" property which already exists (with value \"5\").",
+ "/mm5:{deviation='/x'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module mm6 {namespace urn:mm6;prefix mm6; list x {config false; min-elements 5;}"
"deviation /x {deviate add {min-elements 1;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid deviation adding \"min-elements\" property which already exists (with value \"5\").", "Path \"/mm6:{deviation='/x'}\".");
+ CHECK_LOG_CTX("Invalid deviation adding \"min-elements\" property which already exists (with value \"5\").",
+ "/mm6:{deviation='/x'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module mm7 {namespace urn:mm7;prefix mm7; leaf-list x {type string; max-elements 5;}"
"deviation /x {deviate add {max-elements 1;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid deviation adding \"max-elements\" property which already exists (with value \"5\").", "Path \"/mm7:{deviation='/x'}\".");
+ CHECK_LOG_CTX("Invalid deviation adding \"max-elements\" property which already exists (with value \"5\").",
+ "/mm7:{deviation='/x'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module mm8 {namespace urn:mm8;prefix mm8; list x {config false; max-elements 5;}"
"deviation /x {deviate add {max-elements 1;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid deviation adding \"max-elements\" property which already exists (with value \"5\").", "Path \"/mm8:{deviation='/x'}\".");
+ CHECK_LOG_CTX("Invalid deviation adding \"max-elements\" property which already exists (with value \"5\").",
+ "/mm8:{deviation='/x'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module mm9 {namespace urn:mm9;prefix mm9; leaf-list x {type string;}"
"deviation /x {deviate replace {min-elements 1;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid deviation replacing \"min-elements\" property which is not present.", "Path \"/mm9:{deviation='/x'}\".");
+ CHECK_LOG_CTX("Invalid deviation replacing \"min-elements\" property which is not present.", "/mm9:{deviation='/x'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module mm10 {namespace urn:mm10;prefix mm10; list x {config false;}"
"deviation /x {deviate replace {min-elements 1;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid deviation replacing \"min-elements\" property which is not present.", "Path \"/mm10:{deviation='/x'}\".");
+ CHECK_LOG_CTX("Invalid deviation replacing \"min-elements\" property which is not present.", "/mm10:{deviation='/x'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module mm11 {namespace urn:mm11;prefix mm11; leaf-list x {type string;}"
"deviation /x {deviate replace {max-elements 1;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid deviation replacing \"max-elements\" property which is not present.", "Path \"/mm11:{deviation='/x'}\".");
+ CHECK_LOG_CTX("Invalid deviation replacing \"max-elements\" property which is not present.", "/mm11:{deviation='/x'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module mm12 {namespace urn:mm12;prefix mm12; list x {config false; }"
"deviation /x {deviate replace {max-elements 1;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid deviation replacing \"max-elements\" property which is not present.", "Path \"/mm12:{deviation='/x'}\".");
+ CHECK_LOG_CTX("Invalid deviation replacing \"max-elements\" property which is not present.", "/mm12:{deviation='/x'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module nn1 {namespace urn:nn1;prefix nn1; anyxml x;"
"deviation /x {deviate replace {type string;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Invalid deviation of anyxml node - it is not possible to replace \"type\" property.", "Path \"/nn1:{deviation='/x'}\".");
+ CHECK_LOG_CTX("Invalid deviation of anyxml node - it is not possible to replace \"type\" property.", "/nn1:{deviation='/x'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module nn2 {namespace urn:nn2;prefix nn2; leaf-list x {type string;}"
"deviation /x {deviate replace {type empty;}}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "Path \"/nn2:{deviation='/x'}\".");
- CHECK_LOG_CTX("Leaf-list of type \"empty\" is allowed only in YANG 1.1 modules.", "Path \"/nn2:{deviation='/x'}\".");
+ CHECK_LOG_CTX("Compilation of a deviated and/or refined node failed.", "/nn2:{deviation='/x'}", 0);
+ CHECK_LOG_CTX("Leaf-list of type \"empty\" is allowed only in YANG 1.1 modules.", "/nn2:{deviation='/x'}", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module oo1 {namespace urn:oo1;prefix oo1; leaf x {type uint16; default 300;}"
"deviation /x {deviate replace {type uint8;}}}", LYS_IN_YANG, &mod));
CHECK_LOG_CTX("Invalid default - value does not fit the type "
- "(Value \"300\" is out of type uint8 min/max bounds.).", "Schema location \"/oo1:x\".");
+ "(Value \"300\" is out of type uint8 min/max bounds.).", "/oo1:x", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module oo2 {yang-version 1.1;namespace urn:oo2;prefix oo2; leaf-list x {type uint16; default 10; default 300;}"
"deviation /x {deviate replace {type uint8;}}}", LYS_IN_YANG, &mod));
CHECK_LOG_CTX("Invalid default - value does not fit the type "
- "(Value \"300\" is out of type uint8 min/max bounds.).", "Schema location \"/oo2:x\".");
+ "(Value \"300\" is out of type uint8 min/max bounds.).", "/oo2:x", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module oo3 {namespace urn:oo3;prefix oo3; leaf x {type uint8;}"
"deviation /x {deviate add {default 300;}}}", LYS_IN_YANG, &mod));
CHECK_LOG_CTX("Invalid default - value does not fit the type "
- "(Value \"300\" is out of type uint8 min/max bounds.).", "Schema location \"/oo3:x\".");
+ "(Value \"300\" is out of type uint8 min/max bounds.).", "/oo3:x", 0);
assert_int_equal(LY_SUCCESS, lys_parse_mem(UTEST_LYCTX, "module pp {namespace urn:pp;prefix pp; leaf l { type leafref {path /c/x;}}"
"container c {leaf x {type string;} leaf y {type string;}}}", LYS_IN_YANG, &mod));
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX, "module pp1 {namespace urn:pp1;prefix pp1; import pp {prefix pp;}"
"deviation /pp:c/pp:x {deviate not-supported;}}", LYS_IN_YANG, &mod));
- CHECK_LOG_CTX("Target of leafref \"l\" cannot be referenced because it is disabled.", "Schema location \"/pp:l\".");
- CHECK_LOG_CTX("Not found node \"x\" in path.", "Schema location \"/pp:l\".");
+ CHECK_LOG_CTX("Target of leafref \"l\" cannot be referenced because it is disabled.", "/pp:l", 0);
+ CHECK_LOG_CTX("Not found node \"x\" in path.", "/pp:l", 0);
}
static void
@@ -3717,7 +3732,7 @@ test_when(void **state)
" }\n"
"}",
LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("When condition cyclic dependency on the node \"cont2\".", "Schema location \"/a:cont/lst/val\".");
+ CHECK_LOG_CTX("When condition cyclic dependency on the node \"cont2\".", "/a:cont/lst/val", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX,
"module a {\n"
@@ -3745,7 +3760,7 @@ test_when(void **state)
" }\n"
"}",
LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("When condition cyclic dependency on the node \"cont2\".", "Schema location \"/a:cont/lst/val\".");
+ CHECK_LOG_CTX("When condition cyclic dependency on the node \"cont2\".", "/a:cont/lst/val", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX,
"module a {\n"
@@ -3757,7 +3772,7 @@ test_when(void **state)
" }\n"
"}",
LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("When condition is accessing its own conditional node value.", "Schema location \"/a:val\".");
+ CHECK_LOG_CTX("When condition is accessing its own conditional node value.", "/a:val", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX,
"module a {\n"
@@ -3773,7 +3788,7 @@ test_when(void **state)
" }\n"
"}",
LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("When condition is accessing its own conditional node value.", "Schema location \"/a:val\".");
+ CHECK_LOG_CTX("When condition is accessing its own conditional node value.", "/a:val", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX,
"module a {\n"
@@ -3788,7 +3803,7 @@ test_when(void **state)
" container cont;\n"
"}",
LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("When condition is accessing its own conditional node value.", "Schema location \"/a:cont/val\".");
+ CHECK_LOG_CTX("When condition is accessing its own conditional node value.", "/a:cont/val", 0);
assert_int_equal(LY_EVALID, lys_parse_mem(UTEST_LYCTX,
"module a {\n"
@@ -3805,7 +3820,7 @@ test_when(void **state)
" container cont;\n"
"}",
LYS_IN_YANG, NULL));
- CHECK_LOG_CTX("When condition is accessing its own conditional node children.", "Schema location \"/a:cont/aug-cont\".");
+ CHECK_LOG_CTX("When condition is accessing its own conditional node children.", "/a:cont/aug-cont", 0);
assert_int_equal(LY_SUCCESS, lys_parse_mem(UTEST_LYCTX,
"module b {\n"
@@ -3967,7 +3982,7 @@ test_must(void **state)
"}",
LYS_IN_YANG, NULL));
/* no warnings */
- CHECK_LOG_CTX(NULL, NULL);
+ CHECK_LOG_CTX(NULL, NULL, 0);
/* must referencing disabled leafref in another module */
ly_ctx_set_module_imp_clb(UTEST_LYCTX, test_imp_clb,
@@ -4029,7 +4044,7 @@ test_must(void **state)
ly_ctx_unset_options(UTEST_LYCTX, LY_CTX_REF_IMPLEMENTED);
CHECK_LOG_CTX("Schema node \"number-of-laa-scarriers\" not found; in expr \"number-of-laa-scarriers\" "
- "with context node \"/b:laa-config\".", NULL);
+ "with context node \"/b:laa-config\".", NULL, 0);
}
int
diff --git a/tests/utests/schema/test_yang.c b/tests/utests/schema/test_yang.c
index 6d1c2ae48..caacf3fb3 100644
--- a/tests/utests/schema/test_yang.c
+++ b/tests/utests/schema/test_yang.c
@@ -91,7 +91,7 @@ setup(void **state)
/* initilize and use the global easily available and customizable input handler */
in.line = 1;
YCTX->in = ∈
- LOG_LOCSET(NULL, NULL, NULL, &in);
+ ly_log_location(NULL, NULL, NULL, &in);
fctx.ctx = PARSER_CTX(YCTX);
fctx.mod = pmod->mod;
@@ -103,7 +103,7 @@ static int
teardown(void **state)
{
lys_module_free(&fctx, PARSER_CUR_PMOD(YCTX)->mod, 0);
- LOG_LOCBACK(0, 0, 0, 1);
+ ly_log_location_revert(0, 0, 0, 1);
ly_set_free(YCTX->parsed_mods, NULL);
ly_set_erase(&YCTX->ext_inst, NULL);
@@ -120,7 +120,7 @@ teardown(void **state)
#define TEST_DUP_GENERIC(PREFIX, MEMBER, VALUE1, VALUE2, FUNC, RESULT, LINE, CLEANUP) \
in.current = PREFIX MEMBER" "VALUE1";"MEMBER" "VALUE2";} ..."; \
assert_int_equal(LY_EVALID, FUNC(YCTX, RESULT)); \
- CHECK_LOG_CTX("Duplicate keyword \""MEMBER"\".", "Line number "LINE".");\
+ CHECK_LOG_CTX("Duplicate keyword \""MEMBER"\".", NULL, LINE);\
CLEANUP
static void
test_helpers(void **state)
@@ -175,22 +175,22 @@ test_helpers(void **state)
/* checking identifiers */
assert_int_equal(LY_EVALID, lysp_check_identifierchar((struct lysp_ctx *)YCTX, ':', 0, NULL));
- CHECK_LOG_CTX("Invalid identifier character ':' (0x003a).", "Line number 1.");
+ CHECK_LOG_CTX("Invalid identifier character ':' (0x003a).", NULL, 1);
assert_int_equal(LY_EVALID, lysp_check_identifierchar((struct lysp_ctx *)YCTX, '#', 1, NULL));
- CHECK_LOG_CTX("Invalid identifier first character '#' (0x0023).", "Line number 1.");
+ CHECK_LOG_CTX("Invalid identifier first character '#' (0x0023).", NULL, 1);
assert_int_equal(LY_SUCCESS, lysp_check_identifierchar((struct lysp_ctx *)YCTX, 'a', 1, &prefix));
assert_int_equal(0, prefix);
assert_int_equal(LY_SUCCESS, lysp_check_identifierchar((struct lysp_ctx *)YCTX, ':', 0, &prefix));
assert_int_equal(1, prefix);
assert_int_equal(LY_EVALID, lysp_check_identifierchar((struct lysp_ctx *)YCTX, ':', 0, &prefix));
- CHECK_LOG_CTX("Invalid identifier first character ':' (0x003a).", "Line number 1.");
+ CHECK_LOG_CTX("Invalid identifier first character ':' (0x003a).", NULL, 1);
assert_int_equal(1, prefix);
assert_int_equal(LY_SUCCESS, lysp_check_identifierchar((struct lysp_ctx *)YCTX, 'b', 0, &prefix));
assert_int_equal(2, prefix);
/* second colon is invalid */
assert_int_equal(LY_EVALID, lysp_check_identifierchar((struct lysp_ctx *)YCTX, ':', 0, &prefix));
- CHECK_LOG_CTX("Invalid identifier character ':' (0x003a).", "Line number 1.");
+ CHECK_LOG_CTX("Invalid identifier character ':' (0x003a).", NULL, 1);
}
#define TEST_GET_ARGUMENT_SUCCESS(INPUT_TEXT, CTX, ARG_TYPE, EXPECT_WORD, EXPECT_LEN, EXPECT_CURRENT, EXPECT_LINE)\
@@ -228,7 +228,7 @@ test_comments(void **state)
in.line = 1;
in.current = " this is a not terminated comment x";
assert_int_equal(LY_EVALID, skip_comment(YCTX, 2));
- CHECK_LOG_CTX("Unexpected end-of-input, non-terminated comment.", "Line number 1.");
+ CHECK_LOG_CTX("Unexpected end-of-input, non-terminated comment.", NULL, 1);
assert_true(in.current[0] == '\0');
}
@@ -245,35 +245,35 @@ test_arg(void **state)
in.current = "{";
assert_int_equal(LY_EVALID, get_argument(YCTX, Y_STR_ARG, NULL, &word, &buf, &len));
- CHECK_LOG_CTX("Invalid character sequence \"{\", expected an argument.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid character sequence \"{\", expected an argument.", NULL, 1);
/* invalid escape sequence */
in.current = "\"\\s\"";
assert_int_equal(LY_EVALID, get_argument(YCTX, Y_STR_ARG, NULL, &word, &buf, &len));
- CHECK_LOG_CTX("Double-quoted string unknown special character \'\\s\'.", "Line number 1.");
+ CHECK_LOG_CTX("Double-quoted string unknown special character \'\\s\'.", NULL, 1);
TEST_GET_ARGUMENT_SUCCESS("\'\\s\'", YCTX, Y_STR_ARG, "\\s\'", 2, "", 1);
/* invalid character after the argument */
in.current = "hello\"";
assert_int_equal(LY_EVALID, get_argument(YCTX, Y_STR_ARG, NULL, &word, &buf, &len));
- CHECK_LOG_CTX("Invalid character sequence \"\"\", expected unquoted string character, optsep, semicolon or opening brace.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid character sequence \"\"\", expected unquoted string character, optsep, semicolon or opening brace.", NULL, 1);
in.current = "hello}";
assert_int_equal(LY_EVALID, get_argument(YCTX, Y_STR_ARG, NULL, &word, &buf, &len));
- CHECK_LOG_CTX("Invalid character sequence \"}\", expected unquoted string character, optsep, semicolon or opening brace.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid character sequence \"}\", expected unquoted string character, optsep, semicolon or opening brace.", NULL, 1);
/* invalid identifier-ref-arg-str */
in.current = "pre:pre:value";
assert_int_equal(LY_EVALID, get_argument(YCTX, Y_PREF_IDENTIF_ARG, NULL, &word, &buf, &len));
- CHECK_LOG_CTX("Invalid identifier character ':' (0x003a).", "Line number 1.");
+ CHECK_LOG_CTX("Invalid identifier character ':' (0x003a).", NULL, 1);
in.current = "\"\";"; /* empty identifier is not allowed */
assert_int_equal(LY_EVALID, get_argument(YCTX, Y_IDENTIF_ARG, NULL, &word, &buf, &len));
- CHECK_LOG_CTX("Statement argument is required.", "Line number 1.");
+ CHECK_LOG_CTX("Statement argument is required.", NULL, 1);
in.current = "\"\";"; /* empty reference identifier is not allowed */
assert_int_equal(LY_EVALID, get_argument(YCTX, Y_PREF_IDENTIF_ARG, NULL, &word, &buf, &len));
- CHECK_LOG_CTX("Statement argument is required.", "Line number 1.");
+ CHECK_LOG_CTX("Statement argument is required.", NULL, 1);
/* slash is not an invalid character */
TEST_GET_ARGUMENT_SUCCESS("hello/x\t", YCTX, Y_STR_ARG, "hello/x\t", 7, "\t", 1);
@@ -322,7 +322,7 @@ test_arg(void **state)
in.line = 1;
in.current = "\"hel\" +\t\nlo"; /* unquoted the second part */
assert_int_equal(LY_EVALID, get_argument(YCTX, Y_STR_ARG, NULL, &word, &buf, &len));
- CHECK_LOG_CTX("Both string parts divided by '+' must be quoted.", "Line number 2.");
+ CHECK_LOG_CTX("Both string parts divided by '+' must be quoted.", NULL, 2);
TEST_GET_ARGUMENT_SUCCESS("\'he\'\t\n+ \"llo\"", YCTX, Y_STR_ARG, "hello", 5, "", 2);
free(buf);
@@ -334,7 +334,7 @@ test_arg(void **state)
in.line = 1;
in.current = ";";
assert_int_equal(LY_EVALID, get_argument(YCTX, Y_STR_ARG, NULL, &word, &buf, &len));
- CHECK_LOG_CTX("Invalid character sequence \";\", expected an argument.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid character sequence \";\", expected an argument.", NULL, 1);
}
#define TEST_STMS_SUCCESS(INPUT_TEXT, CTX, ACTION, EXPECT_WORD)\
@@ -373,15 +373,15 @@ test_stmts(void **state)
in.current = "/input { "; /* invalid slash */
assert_int_equal(LY_EVALID, get_keyword(YCTX, &kw, &word, &len));
- CHECK_LOG_CTX("Invalid identifier first character '/'.", "Line number 4.");
+ CHECK_LOG_CTX("Invalid identifier first character '/'.", NULL, 4);
in.current = "not-a-statement-nor-extension { "; /* invalid identifier */
assert_int_equal(LY_EVALID, get_keyword(YCTX, &kw, &word, &len));
- CHECK_LOG_CTX("Invalid character sequence \"not-a-statement-nor-extension\", expected a keyword.", "Line number 4.");
+ CHECK_LOG_CTX("Invalid character sequence \"not-a-statement-nor-extension\", expected a keyword.", NULL, 4);
in.current = "path;"; /* missing sep after the keyword */
assert_int_equal(LY_EVALID, get_keyword(YCTX, &kw, &word, &len));
- CHECK_LOG_CTX("Invalid character sequence \"path;\", expected a keyword followed by a separator.", "Line number 4.");
+ CHECK_LOG_CTX("Invalid character sequence \"path;\", expected a keyword followed by a separator.", NULL, 4);
TEST_STMS_SUCCESS("action ", YCTX, LY_STMT_ACTION, "action");
@@ -478,43 +478,43 @@ test_minmax(void **state)
in.current = " 1invalid; ...";
assert_int_equal(LY_EVALID, parse_minelements(YCTX, &value, &flags, &ext));
- CHECK_LOG_CTX("Invalid value \"1invalid\" of \"min-elements\".", "Line number 1.");
+ CHECK_LOG_CTX("Invalid value \"1invalid\" of \"min-elements\".", NULL, 1);
flags = value = 0;
in.current = " -1; ...";
assert_int_equal(LY_EVALID, parse_minelements(YCTX, &value, &flags, &ext));
- CHECK_LOG_CTX("Invalid value \"-1\" of \"min-elements\".", "Line number 1.");
+ CHECK_LOG_CTX("Invalid value \"-1\" of \"min-elements\".", NULL, 1);
/* implementation limit */
flags = value = 0;
in.current = " 4294967296; ...";
assert_int_equal(LY_EVALID, parse_minelements(YCTX, &value, &flags, &ext));
- CHECK_LOG_CTX("Value \"4294967296\" is out of \"min-elements\" bounds.", "Line number 1.");
+ CHECK_LOG_CTX("Value \"4294967296\" is out of \"min-elements\" bounds.", NULL, 1);
flags = value = 0;
in.current = " 1 {config true;} ...";
assert_int_equal(LY_EVALID, parse_minelements(YCTX, &value, &flags, &ext));
- CHECK_LOG_CTX("Invalid keyword \"config\" as a child of \"min-elements\".", "Line number 1.");
+ CHECK_LOG_CTX("Invalid keyword \"config\" as a child of \"min-elements\".", NULL, 1);
in.current = " 1invalid; ...";
assert_int_equal(LY_EVALID, parse_maxelements(YCTX, &value, &flags, &ext));
- CHECK_LOG_CTX("Invalid value \"1invalid\" of \"max-elements\".", "Line number 1.");
+ CHECK_LOG_CTX("Invalid value \"1invalid\" of \"max-elements\".", NULL, 1);
flags = value = 0;
in.current = " -1; ...";
assert_int_equal(LY_EVALID, parse_maxelements(YCTX, &value, &flags, &ext));
- CHECK_LOG_CTX("Invalid value \"-1\" of \"max-elements\".", "Line number 1.");
+ CHECK_LOG_CTX("Invalid value \"-1\" of \"max-elements\".", NULL, 1);
/* implementation limit */
flags = value = 0;
in.current = " 4294967296; ...";
assert_int_equal(LY_EVALID, parse_maxelements(YCTX, &value, &flags, &ext));
- CHECK_LOG_CTX("Value \"4294967296\" is out of \"max-elements\" bounds.", "Line number 1.");
+ CHECK_LOG_CTX("Value \"4294967296\" is out of \"max-elements\" bounds.", NULL, 1);
flags = value = 0;
in.current = " 1 {config true;} ...";
assert_int_equal(LY_EVALID, parse_maxelements(YCTX, &value, &flags, &ext));
- CHECK_LOG_CTX("Invalid keyword \"config\" as a child of \"max-elements\".", "Line number 1.");
+ CHECK_LOG_CTX("Invalid keyword \"config\" as a child of \"max-elements\".", NULL, 1);
}
static void
@@ -784,13 +784,13 @@ test_module(void **state)
in.current = " name {}";
assert_int_equal(LY_EVALID, parse_module(YCTX, mod));
assert_string_equal("name", mod->mod->name);
- CHECK_LOG_CTX("Missing mandatory keyword \"namespace\" as a child of \"module\".", "Line number 1.");
+ CHECK_LOG_CTX("Missing mandatory keyword \"namespace\" as a child of \"module\".", NULL, 1);
mod = mod_renew(YCTX);
in.current = " name {namespace urn:name;}";
assert_int_equal(LY_EVALID, parse_module(YCTX, mod));
assert_string_equal("urn:name", mod->mod->ns);
- CHECK_LOG_CTX("Missing mandatory keyword \"prefix\" as a child of \"module\".", "Line number 1.");
+ CHECK_LOG_CTX("Missing mandatory keyword \"prefix\" as a child of \"module\".", NULL, 1);
mod = mod_renew(YCTX);
in.current = " name {namespace urn:name;prefix \"n\";}";
@@ -818,17 +818,17 @@ test_module(void **state)
parse_module, mod, LINE, mod = mod_renew(YCTX))
/* duplicated namespace, prefix */
- TEST_DUP("namespace", "y", "z", "1");
- TEST_DUP("prefix", "y", "z", "1");
- TEST_DUP("contact", "a", "b", "1");
- TEST_DUP("description", "a", "b", "1");
- TEST_DUP("organization", "a", "b", "1");
- TEST_DUP("reference", "a", "b", "1");
+ TEST_DUP("namespace", "y", "z", 1);
+ TEST_DUP("prefix", "y", "z", 1);
+ TEST_DUP("contact", "a", "b", 1);
+ TEST_DUP("description", "a", "b", 1);
+ TEST_DUP("organization", "a", "b", 1);
+ TEST_DUP("reference", "a", "b", 1);
/* not allowed in module (submodule-specific) */
in.current = SCHEMA_BEGINNING "belongs-to master {prefix m;}}";
assert_int_equal(LY_EVALID, parse_module(YCTX, mod));
- CHECK_LOG_CTX("Invalid keyword \"belongs-to\" as a child of \"module\".", "Line number 1.");
+ CHECK_LOG_CTX("Invalid keyword \"belongs-to\" as a child of \"module\".", NULL, 1);
mod = mod_renew(YCTX);
/* anydata */
@@ -871,35 +871,35 @@ test_module(void **state)
/* import - prefix collision */
in.current = SCHEMA_BEGINNING "import zzz {prefix x;}}";
assert_int_equal(LY_EVALID, parse_module(YCTX, mod));
- CHECK_LOG_CTX("Prefix \"x\" already used as module prefix.", "Line number 1.");
+ CHECK_LOG_CTX("Prefix \"x\" already used as module prefix.", NULL, 1);
mod = mod_renew(YCTX);
in.current = SCHEMA_BEGINNING "import zzz {prefix y;}import zzz {prefix y;}}";
assert_int_equal(LY_EVALID, parse_module(YCTX, mod));
- CHECK_LOG_CTX("Prefix \"y\" already used to import \"zzz\" module.", "Line number 1.");
+ CHECK_LOG_CTX("Prefix \"y\" already used to import \"zzz\" module.", NULL, 1);
mod = mod_renew(YCTX);
- LOG_LOCBACK(0, 0, 0, 1);
+ ly_log_location_revert(0, 0, 0, 1);
in.current = "module name10 {yang-version 1.1;namespace urn:name10;prefix \"n10\";import zzz {prefix y;}import zzz {prefix z;}}";
assert_int_equal(lys_parse_mem(PARSER_CUR_PMOD(YCTX)->mod->ctx, in.current, LYS_IN_YANG, NULL), LY_SUCCESS);
- CHECK_LOG_CTX("Single revision of the module \"zzz\" imported twice.", NULL);
+ CHECK_LOG_CTX("Single revision of the module \"zzz\" imported twice.", NULL, 0);
/* include */
ly_ctx_set_module_imp_clb(PARSER_CUR_PMOD(YCTX)->mod->ctx, test_imp_clb, "module xxx { namespace urn:xxx; prefix x;}");
in.current = "module" SCHEMA_BEGINNING "include xxx;}";
assert_int_equal(lys_parse_mem(PARSER_CUR_PMOD(YCTX)->mod->ctx, in.current, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"name\" failed.", NULL);
- CHECK_LOG_CTX("Including \"xxx\" submodule into \"name\" failed.", NULL);
- CHECK_LOG_CTX("Data model \"xxx\" not found in local searchdirs.", NULL);
- CHECK_LOG_CTX("Parsing submodule failed.", NULL);
- CHECK_LOG_CTX("Input data contains module in situation when a submodule is expected.", NULL);
+ CHECK_LOG_CTX("Parsing module \"name\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Including \"xxx\" submodule into \"name\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Data model \"xxx\" not found in local searchdirs.", NULL, 0);
+ CHECK_LOG_CTX("Parsing submodule failed.", NULL, 0);
+ CHECK_LOG_CTX("Input data contains module in situation when a submodule is expected.", NULL, 0);
ly_ctx_set_module_imp_clb(PARSER_CUR_PMOD(YCTX)->mod->ctx, test_imp_clb, "submodule xxx {belongs-to wrong-name {prefix w;}}");
in.current = "module" SCHEMA_BEGINNING "include xxx;}";
assert_int_equal(lys_parse_mem(PARSER_CUR_PMOD(YCTX)->mod->ctx, in.current, LYS_IN_YANG, NULL), LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"name\" failed.", NULL);
- CHECK_LOG_CTX("Including \"xxx\" submodule into \"name\" failed.", NULL);
+ CHECK_LOG_CTX("Parsing module \"name\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Including \"xxx\" submodule into \"name\" failed.", NULL, 0);
UTEST_LOG_CTX_CLEAN;
ly_ctx_set_module_imp_clb(PARSER_CUR_PMOD(YCTX)->mod->ctx, test_imp_clb, "submodule xxx {belongs-to name {prefix x;}}");
@@ -935,11 +935,11 @@ test_module(void **state)
/* yang-version */
in.current = SCHEMA_BEGINNING2 "\n\tyang-version 10;}";
assert_int_equal(LY_EVALID, parse_module(YCTX, mod));
- CHECK_LOG_CTX("Invalid value \"10\" of \"yang-version\".", NULL);
+ CHECK_LOG_CTX("Invalid value \"10\" of \"yang-version\".", NULL, 0);
mod = mod_renew(YCTX);
in.current = SCHEMA_BEGINNING2 "yang-version 1;yang-version 1.1;}";
assert_int_equal(LY_EVALID, parse_module(YCTX, mod));
- CHECK_LOG_CTX("Duplicate keyword \"yang-version\".", NULL);
+ CHECK_LOG_CTX("Duplicate keyword \"yang-version\".", NULL, 0);
mod = mod_renew(YCTX);
in.current = SCHEMA_BEGINNING2 "yang-version 1;}";
assert_int_equal(LY_SUCCESS, parse_module(YCTX, mod));
@@ -954,7 +954,7 @@ test_module(void **state)
m = calloc(1, sizeof *m);
m->ctx = PARSER_CUR_PMOD(YCTX)->mod->ctx;
assert_int_equal(LY_EVALID, yang_parse_module(&ctx_p, &in, m));
- CHECK_LOG_CTX("Trailing garbage \"module q {names...\" after module, expected end-of-input.", "Line number 1.");
+ CHECK_LOG_CTX("Trailing garbage \"module q {names...\" after module, expected end-of-input.", NULL, 1);
lysp_yang_ctx_free(ctx_p);
lys_module_free(&fctx, m, 0);
@@ -962,7 +962,7 @@ test_module(void **state)
m = calloc(1, sizeof *m);
m->ctx = PARSER_CUR_PMOD(YCTX)->mod->ctx;
assert_int_equal(LY_EVALID, yang_parse_module(&ctx_p, &in, m));
- CHECK_LOG_CTX("Invalid keyword \"prefix\", expected \"module\" or \"submodule\".", "Line number 1.");
+ CHECK_LOG_CTX("Invalid keyword \"prefix\", expected \"module\" or \"submodule\".", NULL, 1);
lysp_yang_ctx_free(ctx_p);
lys_module_free(&fctx, m, 0);
@@ -970,7 +970,7 @@ test_module(void **state)
m = calloc(1, sizeof *m);
m->ctx = PARSER_CUR_PMOD(YCTX)->mod->ctx;
assert_int_equal(LY_EVALID, yang_parse_module(&ctx_p, &in, m));
- CHECK_LOG_CTX("Invalid keyword \"position\" as a child of \"enum\".", "Line number 1.");
+ CHECK_LOG_CTX("Invalid keyword \"position\" as a child of \"enum\".", NULL, 1);
lysp_yang_ctx_free(ctx_p);
lys_module_free(&fctx, m, 0);
@@ -983,7 +983,7 @@ test_module(void **state)
/* invalid substatement */
in.current = SCHEMA_BEGINNING "must false;}";
assert_int_equal(LY_EVALID, parse_module(YCTX, mod));
- CHECK_LOG_CTX("Invalid keyword \"must\" as a child of \"module\".", NULL);
+ CHECK_LOG_CTX("Invalid keyword \"must\" as a child of \"module\".", NULL, 0);
/* submodule */
submod = submod_renew(YCTX);
@@ -991,7 +991,7 @@ test_module(void **state)
/* missing mandatory substatements */
in.current = " subname {}";
assert_int_equal(LY_EVALID, parse_submodule(YCTX, submod));
- CHECK_LOG_CTX("Missing mandatory keyword \"belongs-to\" as a child of \"submodule\".", NULL);
+ CHECK_LOG_CTX("Missing mandatory keyword \"belongs-to\" as a child of \"submodule\".", NULL, 0);
assert_string_equal("subname", submod->name);
submod = submod_renew(YCTX);
@@ -1007,27 +1007,27 @@ test_module(void **state)
/* duplicated namespace, prefix */
in.current = " subname {belongs-to name {prefix x;}belongs-to module1;belongs-to module2;} ...";
assert_int_equal(LY_EVALID, parse_submodule(YCTX, submod));
- CHECK_LOG_CTX("Duplicate keyword \"belongs-to\".", NULL);
+ CHECK_LOG_CTX("Duplicate keyword \"belongs-to\".", NULL, 0);
submod = submod_renew(YCTX);
/* not allowed in submodule (module-specific) */
in.current = SCHEMA_BEGINNING "namespace \"urn:z\";}";
assert_int_equal(LY_EVALID, parse_submodule(YCTX, submod));
- CHECK_LOG_CTX("Invalid keyword \"namespace\" as a child of \"submodule\".", NULL);
+ CHECK_LOG_CTX("Invalid keyword \"namespace\" as a child of \"submodule\".", NULL, 0);
submod = submod_renew(YCTX);
in.current = SCHEMA_BEGINNING "prefix m;}}";
assert_int_equal(LY_EVALID, parse_submodule(YCTX, submod));
- CHECK_LOG_CTX("Invalid keyword \"prefix\" as a child of \"submodule\".", NULL);
+ CHECK_LOG_CTX("Invalid keyword \"prefix\" as a child of \"submodule\".", NULL, 0);
submod = submod_renew(YCTX);
in.current = "submodule " SCHEMA_BEGINNING "} module q {namespace urn:q;prefixq;}";
assert_int_equal(LY_EVALID, yang_parse_submodule(&ctx_p, PARSER_CUR_PMOD(YCTX)->mod->ctx, (struct lysp_ctx *)YCTX, YCTX->in, &submod));
- CHECK_LOG_CTX("Trailing garbage \"module q {names...\" after submodule, expected end-of-input.", "Line number 1.");
+ CHECK_LOG_CTX("Trailing garbage \"module q {names...\" after submodule, expected end-of-input.", NULL, 1);
lysp_yang_ctx_free(ctx_p);
in.current = "prefix " SCHEMA_BEGINNING "}";
assert_int_equal(LY_EVALID, yang_parse_submodule(&ctx_p, PARSER_CUR_PMOD(YCTX)->mod->ctx, (struct lysp_ctx *)YCTX, YCTX->in, &submod));
- CHECK_LOG_CTX("Invalid keyword \"prefix\", expected \"module\" or \"submodule\".", "Line number 1.");
+ CHECK_LOG_CTX("Invalid keyword \"prefix\", expected \"module\" or \"submodule\".", NULL, 1);
lysp_yang_ctx_free(ctx_p);
submod = submod_renew(YCTX);
@@ -1043,18 +1043,18 @@ test_deviation(void **state)
struct lysp_deviation *d = NULL;
/* invalid cardinality */
- TEST_DUP_GENERIC(" test {deviate not-supported;", "description", "a", "b", parse_deviation, &d, "1", );
- TEST_DUP_GENERIC(" test {deviate not-supported;", "reference", "a", "b", parse_deviation, &d, "1", );
+ TEST_DUP_GENERIC(" test {deviate not-supported;", "description", "a", "b", parse_deviation, &d, 1, );
+ TEST_DUP_GENERIC(" test {deviate not-supported;", "reference", "a", "b", parse_deviation, &d, 1, );
/* missing mandatory substatement */
in.current = " test {description text;}";
assert_int_equal(LY_EVALID, parse_deviation(YCTX, &d));
- CHECK_LOG_CTX("Missing mandatory keyword \"deviate\" as a child of \"deviation\".", "Line number 1.");
+ CHECK_LOG_CTX("Missing mandatory keyword \"deviate\" as a child of \"deviation\".", NULL, 1);
/* invalid substatement */
in.current = " test {deviate not-supported; status obsolete;}";
assert_int_equal(LY_EVALID, parse_deviation(YCTX, &d));
- CHECK_LOG_CTX("Invalid keyword \"status\" as a child of \"deviation\".", "Line number 1.");
+ CHECK_LOG_CTX("Invalid keyword \"status\" as a child of \"deviation\".", NULL, 1);
}
static void
@@ -1063,17 +1063,17 @@ test_deviate(void **state)
struct lysp_deviate *d = NULL;
/* invalid cardinality */
- TEST_DUP_GENERIC("add {", "config", "true", "false", parse_deviate, &d, "1", );
- TEST_DUP_GENERIC("add {", "mandatory", "true", "false", parse_deviate, &d, "1", );
- TEST_DUP_GENERIC("add {", "max-elements", "1", "2", parse_deviate, &d, "1", );
- TEST_DUP_GENERIC("add {", "min-elements", "1", "2", parse_deviate, &d, "1", );
- TEST_DUP_GENERIC("add {", "units", "kilometers", "miles", parse_deviate, &d, "1", );
+ TEST_DUP_GENERIC("add {", "config", "true", "false", parse_deviate, &d, 1, );
+ TEST_DUP_GENERIC("add {", "mandatory", "true", "false", parse_deviate, &d, 1, );
+ TEST_DUP_GENERIC("add {", "max-elements", "1", "2", parse_deviate, &d, 1, );
+ TEST_DUP_GENERIC("add {", "min-elements", "1", "2", parse_deviate, &d, 1, );
+ TEST_DUP_GENERIC("add {", "units", "kilometers", "miles", parse_deviate, &d, 1, );
/* invalid substatements */
#define TEST_NOT_SUP(DEV, STMT, VALUE) \
in.current = " "DEV" {"STMT" "VALUE";}..."; \
assert_int_equal(LY_EVALID, parse_deviate(YCTX, &d)); \
- CHECK_LOG_CTX("Deviate \""DEV"\" does not support keyword \""STMT"\".", "Line number 1.");
+ CHECK_LOG_CTX("Deviate \""DEV"\" does not support keyword \""STMT"\".", NULL, 1);
TEST_NOT_SUP("not-supported", "units", "meters");
TEST_NOT_SUP("not-supported", "must", "1");
@@ -1095,7 +1095,7 @@ test_deviate(void **state)
in.current = " nonsence; ...";
assert_int_equal(LY_EVALID, parse_deviate(YCTX, &d));
- CHECK_LOG_CTX("Invalid value \"nonsence\" of \"deviate\".", "Line number 1.");\
+ CHECK_LOG_CTX("Invalid value \"nonsence\" of \"deviate\".", NULL, 1);\
assert_null(d);
#undef TEST_NOT_SUP
}
@@ -1112,7 +1112,7 @@ test_container(void **state)
#define TEST_DUP(MEMBER, VALUE1, VALUE2) \
in.current = "cont {" MEMBER" "VALUE1";"MEMBER" "VALUE2";} ..."; \
assert_int_equal(LY_EVALID, parse_container(YCTX, NULL, (struct lysp_node**)&c)); \
- CHECK_LOG_CTX("Duplicate keyword \""MEMBER"\".", "Line number 1."); \
+ CHECK_LOG_CTX("Duplicate keyword \""MEMBER"\".", NULL, 1); \
lysp_node_free(&fctx, (struct lysp_node*)c); c = NULL;
TEST_DUP("config", "true", "false");
@@ -1142,18 +1142,18 @@ test_container(void **state)
/* invalid */
in.current = " cont {augment /root;} ...";
assert_int_equal(LY_EVALID, parse_container(YCTX, NULL, (struct lysp_node **)&c));
- CHECK_LOG_CTX("Invalid keyword \"augment\" as a child of \"container\".", "Line number 1.");
+ CHECK_LOG_CTX("Invalid keyword \"augment\" as a child of \"container\".", NULL, 1);
lysp_node_free(&fctx, (struct lysp_node *)c); c = NULL;
in.current = " cont {nonsence true;} ...";
assert_int_equal(LY_EVALID, parse_container(YCTX, NULL, (struct lysp_node **)&c));
- CHECK_LOG_CTX("Invalid character sequence \"nonsence\", expected a keyword.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid character sequence \"nonsence\", expected a keyword.", NULL, 1);
lysp_node_free(&fctx, (struct lysp_node *)c); c = NULL;
PARSER_CUR_PMOD(YCTX)->version = 1; /* simulate YANG 1.0 */
in.current = " cont {action x;} ...";
assert_int_equal(LY_EVALID, parse_container(YCTX, NULL, (struct lysp_node **)&c));
CHECK_LOG_CTX("Invalid keyword \"action\" as a child of \"container\" - "
- "the statement is allowed only in YANG 1.1 modules.", "Line number 1.");
+ "the statement is allowed only in YANG 1.1 modules.", NULL, 1);
lysp_node_free(&fctx, (struct lysp_node *)c); c = NULL;
}
@@ -1166,7 +1166,7 @@ test_leaf(void **state)
#define TEST_DUP(MEMBER, VALUE1, VALUE2) \
in.current = "l {" MEMBER" "VALUE1";"MEMBER" "VALUE2";} ..."; \
assert_int_equal(LY_EVALID, parse_leaf(YCTX, NULL, (struct lysp_node**)&l)); \
- CHECK_LOG_CTX("Duplicate keyword \""MEMBER"\".", "Line number 1."); \
+ CHECK_LOG_CTX("Duplicate keyword \""MEMBER"\".", NULL, 1); \
lysp_node_free(&fctx, (struct lysp_node*)l); l = NULL;
TEST_DUP("config", "true", "false");
@@ -1201,12 +1201,12 @@ test_leaf(void **state)
/* invalid */
in.current = " l {description \"missing type\";} ...";
assert_int_equal(LY_EVALID, parse_leaf(YCTX, NULL, (struct lysp_node **)&l));
- CHECK_LOG_CTX("Missing mandatory keyword \"type\" as a child of \"leaf\".", "Line number 1.");
+ CHECK_LOG_CTX("Missing mandatory keyword \"type\" as a child of \"leaf\".", NULL, 1);
lysp_node_free(&fctx, (struct lysp_node *)l); l = NULL;
in.current = "l { type iid { path qpud wrong {";
assert_int_equal(LY_EVALID, parse_leaf(YCTX, NULL, (struct lysp_node **)&l));
- CHECK_LOG_CTX("Invalid character sequence \"wrong\", expected a keyword.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid character sequence \"wrong\", expected a keyword.", NULL, 1);
lysp_node_free(&fctx, (struct lysp_node *)l); l = NULL;
}
@@ -1221,7 +1221,7 @@ test_leaflist(void **state)
#define TEST_DUP(MEMBER, VALUE1, VALUE2) \
in.current = "ll {" MEMBER" "VALUE1";"MEMBER" "VALUE2";} ..."; \
assert_int_equal(LY_EVALID, parse_leaflist(YCTX, NULL, (struct lysp_node**)&ll)); \
- CHECK_LOG_CTX("Duplicate keyword \""MEMBER"\".", "Line number 1."); \
+ CHECK_LOG_CTX("Duplicate keyword \""MEMBER"\".", NULL, 1); \
lysp_node_free(&fctx, (struct lysp_node*)ll); ll = NULL;
TEST_DUP("config", "true", "false");
@@ -1267,13 +1267,13 @@ test_leaflist(void **state)
/* invalid */
in.current = " ll {description \"missing type\";} ...";
assert_int_equal(LY_EVALID, parse_leaflist(YCTX, NULL, (struct lysp_node **)&ll));
- CHECK_LOG_CTX("Missing mandatory keyword \"type\" as a child of \"leaf-list\".", "Line number 1.");
+ CHECK_LOG_CTX("Missing mandatory keyword \"type\" as a child of \"leaf-list\".", NULL, 1);
lysp_node_free(&fctx, (struct lysp_node *)ll); ll = NULL;
PARSER_CUR_PMOD(YCTX)->version = 1; /* simulate YANG 1.0 - default statement is not allowed */
in.current = " ll {default xx; type string;} ...";
assert_int_equal(LY_EVALID, parse_leaflist(YCTX, NULL, (struct lysp_node **)&ll));
- CHECK_LOG_CTX("Invalid keyword \"default\" as a child of \"leaf-list\" - the statement is allowed only in YANG 1.1 modules.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid keyword \"default\" as a child of \"leaf-list\" - the statement is allowed only in YANG 1.1 modules.", NULL, 1);
lysp_node_free(&fctx, (struct lysp_node *)ll); ll = NULL;
}
@@ -1289,7 +1289,7 @@ test_list(void **state)
#define TEST_DUP(MEMBER, VALUE1, VALUE2) \
in.current = "l {" MEMBER" "VALUE1";"MEMBER" "VALUE2";} ..."; \
assert_int_equal(LY_EVALID, parse_list(YCTX, NULL, (struct lysp_node**)&l)); \
- CHECK_LOG_CTX("Duplicate keyword \""MEMBER"\".", "Line number 1."); \
+ CHECK_LOG_CTX("Duplicate keyword \""MEMBER"\".", NULL, 1); \
lysp_node_free(&fctx, (struct lysp_node*)l); l = NULL;
TEST_DUP("config", "true", "false");
@@ -1326,7 +1326,7 @@ test_list(void **state)
PARSER_CUR_PMOD(YCTX)->version = 1; /* simulate YANG 1.0 */
in.current = "l {action x;} ...";
assert_int_equal(LY_EVALID, parse_list(YCTX, NULL, (struct lysp_node **)&l));
- CHECK_LOG_CTX("Invalid keyword \"action\" as a child of \"list\" - the statement is allowed only in YANG 1.1 modules.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid keyword \"action\" as a child of \"list\" - the statement is allowed only in YANG 1.1 modules.", NULL, 1);
lysp_node_free(&fctx, (struct lysp_node *)l); l = NULL;
}
@@ -1341,7 +1341,7 @@ test_choice(void **state)
#define TEST_DUP(MEMBER, VALUE1, VALUE2) \
in.current = "ch {" MEMBER" "VALUE1";"MEMBER" "VALUE2";} ..."; \
assert_int_equal(LY_EVALID, parse_choice(YCTX, NULL, (struct lysp_node**)&ch)); \
- CHECK_LOG_CTX("Duplicate keyword \""MEMBER"\".", "Line number 1."); \
+ CHECK_LOG_CTX("Duplicate keyword \""MEMBER"\".", NULL, 1); \
lysp_node_free(&fctx, (struct lysp_node*)ch); ch = NULL;
TEST_DUP("config", "true", "false");
@@ -1379,7 +1379,7 @@ test_case(void **state)
#define TEST_DUP(MEMBER, VALUE1, VALUE2) \
in.current = "cs {" MEMBER" "VALUE1";"MEMBER" "VALUE2";} ..."; \
assert_int_equal(LY_EVALID, parse_case(YCTX, NULL, (struct lysp_node**)&cs)); \
- CHECK_LOG_CTX("Duplicate keyword \""MEMBER"\".", "Line number 1."); \
+ CHECK_LOG_CTX("Duplicate keyword \""MEMBER"\".", NULL, 1); \
lysp_node_free(&fctx, (struct lysp_node*)cs); cs = NULL;
TEST_DUP("description", "text1", "text2");
@@ -1398,7 +1398,7 @@ test_case(void **state)
/* invalid content */
in.current = "cs {config true} ...";
assert_int_equal(LY_EVALID, parse_case(YCTX, NULL, (struct lysp_node **)&cs));
- CHECK_LOG_CTX("Invalid keyword \"config\" as a child of \"case\".", "Line number 1.");
+ CHECK_LOG_CTX("Invalid keyword \"config\" as a child of \"case\".", NULL, 1);
lysp_node_free(&fctx, (struct lysp_node *)cs); cs = NULL;
}
@@ -1417,7 +1417,7 @@ test_any(void **state, enum ly_stmt kw)
#define TEST_DUP(MEMBER, VALUE1, VALUE2) \
in.current = "l {" MEMBER" "VALUE1";"MEMBER" "VALUE2";} ..."; \
assert_int_equal(LY_EVALID, parse_any(YCTX, kw, NULL, (struct lysp_node**)&any)); \
- CHECK_LOG_CTX("Duplicate keyword \""MEMBER"\".", "Line number 1."); \
+ CHECK_LOG_CTX("Duplicate keyword \""MEMBER"\".", NULL, 1); \
lysp_node_free(&fctx, (struct lysp_node*)any); any = NULL;
TEST_DUP("config", "true", "false");
@@ -1463,7 +1463,7 @@ test_grouping(void **state)
#define TEST_DUP(MEMBER, VALUE1, VALUE2) \
in.current = "l {" MEMBER" "VALUE1";"MEMBER" "VALUE2";} ..."; \
assert_int_equal(LY_EVALID, parse_grouping(YCTX, NULL, &grp)); \
- CHECK_LOG_CTX("Duplicate keyword \""MEMBER"\".", "Line number 1."); \
+ CHECK_LOG_CTX("Duplicate keyword \""MEMBER"\".", NULL, 1); \
lysp_node_free(&fctx, &grp->node); grp = NULL;
TEST_DUP("description", "text1", "text2");
@@ -1491,13 +1491,13 @@ test_grouping(void **state)
/* invalid content */
in.current = "grp {config true} ...";
assert_int_equal(LY_EVALID, parse_grouping(YCTX, NULL, &grp));
- CHECK_LOG_CTX("Invalid keyword \"config\" as a child of \"grouping\".", "Line number 1.");
+ CHECK_LOG_CTX("Invalid keyword \"config\" as a child of \"grouping\".", NULL, 1);
lysp_node_free(&fctx, &grp->node);
grp = NULL;
in.current = "grp {must 'expr'} ...";
assert_int_equal(LY_EVALID, parse_grouping(YCTX, NULL, &grp));
- CHECK_LOG_CTX("Invalid keyword \"must\" as a child of \"grouping\".", "Line number 1.");
+ CHECK_LOG_CTX("Invalid keyword \"must\" as a child of \"grouping\".", NULL, 1);
lysp_node_free(&fctx, &grp->node);
grp = NULL;
}
@@ -1515,7 +1515,7 @@ test_action(void **state)
#define TEST_DUP(MEMBER, VALUE1, VALUE2) \
in.current = "func {" MEMBER" "VALUE1";"MEMBER" "VALUE2";} ..."; \
assert_int_equal(LY_EVALID, parse_action(YCTX, NULL, &rpcs)); \
- CHECK_LOG_CTX("Duplicate keyword \""MEMBER"\".", "Line number 1."); \
+ CHECK_LOG_CTX("Duplicate keyword \""MEMBER"\".", NULL, 1); \
lysp_node_free(&fctx, (struct lysp_node*)rpcs); rpcs = NULL;
TEST_DUP("description", "text1", "text2");
@@ -1566,7 +1566,7 @@ test_action(void **state)
/* invalid content */
in.current = "func {config true} ...";
assert_int_equal(LY_EVALID, parse_action(YCTX, NULL, &rpcs));
- CHECK_LOG_CTX("Invalid keyword \"config\" as a child of \"rpc\".", "Line number 1.");
+ CHECK_LOG_CTX("Invalid keyword \"config\" as a child of \"rpc\".", NULL, 1);
lysp_node_free(&fctx, (struct lysp_node *)rpcs); rpcs = NULL;
lysp_node_free(&fctx, (struct lysp_node *)c);
@@ -1585,7 +1585,7 @@ test_notification(void **state)
#define TEST_DUP(MEMBER, VALUE1, VALUE2) \
in.current = "func {" MEMBER" "VALUE1";"MEMBER" "VALUE2";} ..."; \
assert_int_equal(LY_EVALID, parse_notif(YCTX, NULL, ¬ifs)); \
- CHECK_LOG_CTX("Duplicate keyword \""MEMBER"\".", "Line number 1."); \
+ CHECK_LOG_CTX("Duplicate keyword \""MEMBER"\".", NULL, 1); \
lysp_node_free(&fctx, (struct lysp_node*)notifs); notifs = NULL;
TEST_DUP("description", "text1", "text2");
@@ -1619,7 +1619,7 @@ test_notification(void **state)
/* invalid content */
in.current = "ntf {config true} ...";
assert_int_equal(LY_EVALID, parse_notif(YCTX, NULL, ¬ifs));
- CHECK_LOG_CTX("Invalid keyword \"config\" as a child of \"notification\".", "Line number 1.");
+ CHECK_LOG_CTX("Invalid keyword \"config\" as a child of \"notification\".", NULL, 1);
lysp_node_free(&fctx, (struct lysp_node *)notifs); notifs = NULL;
lysp_node_free(&fctx, (struct lysp_node *)c);
@@ -1636,7 +1636,7 @@ test_uses(void **state)
#define TEST_DUP(MEMBER, VALUE1, VALUE2) \
in.current = "l {" MEMBER" "VALUE1";"MEMBER" "VALUE2";} ..."; \
assert_int_equal(LY_EVALID, parse_uses(YCTX, NULL, (struct lysp_node**)&u)); \
- CHECK_LOG_CTX("Duplicate keyword \""MEMBER"\".", "Line number 1."); \
+ CHECK_LOG_CTX("Duplicate keyword \""MEMBER"\".", NULL, 1); \
lysp_node_free(&fctx, (struct lysp_node*)u); u = NULL;
TEST_DUP("description", "text1", "text2");
@@ -1665,7 +1665,7 @@ test_augment(void **state)
#define TEST_DUP(MEMBER, VALUE1, VALUE2) \
in.current = "l {" MEMBER" "VALUE1";"MEMBER" "VALUE2";} ..."; \
assert_int_equal(LY_EVALID, parse_augment(YCTX, NULL, &a)); \
- CHECK_LOG_CTX("Duplicate keyword \""MEMBER"\".", "Line number 1."); \
+ CHECK_LOG_CTX("Duplicate keyword \""MEMBER"\".", NULL, 1); \
lysp_node_free(&fctx, (struct lysp_node *)a); a = NULL;
TEST_DUP("description", "text1", "text2");
@@ -1701,12 +1701,12 @@ test_when(void **state)
in.current = "l { description text1;description text2;} ...";
assert_int_equal(LY_EVALID, parse_when(YCTX, &w));
assert_null(w);
- CHECK_LOG_CTX("Duplicate keyword \"description\".", "Line number 1.");
+ CHECK_LOG_CTX("Duplicate keyword \"description\".", NULL, 1);
in.current = "l { reference 1;reference 2;} ...";
assert_int_equal(LY_EVALID, parse_when(YCTX, &w));
assert_null(w);
- CHECK_LOG_CTX("Duplicate keyword \"reference\".", "Line number 1.");
+ CHECK_LOG_CTX("Duplicate keyword \"reference\".", NULL, 1);
}
static void
@@ -1721,7 +1721,7 @@ test_value(void **state)
in.current = "-0;";
memset(&enm, 0, sizeof enm);
assert_int_equal(parse_type_enum_value_pos(YCTX, LY_STMT_POSITION, &enm), LY_EVALID);
- CHECK_LOG_CTX("Invalid value \"-0\" of \"position\".", "Line number 1.");
+ CHECK_LOG_CTX("Invalid value \"-0\" of \"position\".", NULL, 1);
}
int
diff --git a/tests/utests/schema/test_yin.c b/tests/utests/schema/test_yin.c
index a531b6496..d3d2e3d5c 100644
--- a/tests/utests/schema/test_yin.c
+++ b/tests/utests/schema/test_yin.c
@@ -335,7 +335,7 @@ test_yin_parse_content(void **state)
ret = yin_parse_content(YCTX, subelems2, 2, NULL, LY_STMT_STATUS, NULL, &exts);
assert_int_equal(ret, LY_EVALID);
- CHECK_LOG_CTX("Redefinition of \"text\" sub-element in \"status\" element.", "Line number 1.");
+ CHECK_LOG_CTX("Redefinition of \"text\" sub-element in \"status\" element.", NULL, 1);
lydict_remove(UTEST_LYCTX, prefix_value);
lydict_remove(UTEST_LYCTX, value);
RESET_STATE;
@@ -355,7 +355,7 @@ test_yin_parse_content(void **state)
ret = yin_parse_content(YCTX, subelems3, 2, NULL, LY_STMT_STATUS, NULL, &exts);
assert_int_equal(ret, LY_EVALID);
- CHECK_LOG_CTX("Sub-element \"text\" of \"status\" element must be defined as it's first sub-element.", "Line number 1.");
+ CHECK_LOG_CTX("Sub-element \"text\" of \"status\" element must be defined as it's first sub-element.", NULL, 1);
lydict_remove(UTEST_LYCTX, prefix_value);
RESET_STATE;
@@ -369,7 +369,7 @@ test_yin_parse_content(void **state)
ret = yin_parse_content(YCTX, subelems4, 1, NULL, LY_STMT_STATUS, NULL, &exts);
assert_int_equal(ret, LY_EVALID);
- CHECK_LOG_CTX("Missing mandatory sub-element \"prefix\" of \"status\" element.", "Line number 1.");
+ CHECK_LOG_CTX("Missing mandatory sub-element \"prefix\" of \"status\" element.", NULL, 1);
}
static void
@@ -386,7 +386,7 @@ test_validate_value(void **state)
YCTX->xmlctx->value = "#invalid";
YCTX->xmlctx->value_len = 8;
assert_int_equal(yin_validate_value(YCTX, Y_IDENTIF_ARG), LY_EVALID);
- CHECK_LOG_CTX("Invalid identifier first character '#' (0x0023).", "Line number 1.");
+ CHECK_LOG_CTX("Invalid identifier first character '#' (0x0023).", NULL, 1);
YCTX->xmlctx->value = "";
YCTX->xmlctx->value_len = 0;
@@ -395,13 +395,13 @@ test_validate_value(void **state)
YCTX->xmlctx->value = "pre:b";
YCTX->xmlctx->value_len = 5;
assert_int_equal(yin_validate_value(YCTX, Y_IDENTIF_ARG), LY_EVALID);
- CHECK_LOG_CTX("Invalid identifier character ':' (0x003a).", "Line number 1.");
+ CHECK_LOG_CTX("Invalid identifier character ':' (0x003a).", NULL, 1);
assert_int_equal(yin_validate_value(YCTX, Y_PREF_IDENTIF_ARG), LY_SUCCESS);
YCTX->xmlctx->value = "pre:pre:b";
YCTX->xmlctx->value_len = 9;
assert_int_equal(yin_validate_value(YCTX, Y_PREF_IDENTIF_ARG), LY_EVALID);
- CHECK_LOG_CTX("Invalid identifier character ':' (0x003a).", "Line number 1.");
+ CHECK_LOG_CTX("Invalid identifier character ':' (0x003a).", NULL, 1);
}
static void
@@ -1354,7 +1354,7 @@ test_status_elem(void **state)
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &flags, NULL, NULL), LY_EVALID);
CHECK_LOG_CTX("Invalid value \"invalid\" of \"value\" attribute in \"status\" element. "
- "Valid values are \"current\", \"deprecated\" and \"obsolete\".", "Line number 1.");
+ "Valid values are \"current\", \"deprecated\" and \"obsolete\".", NULL, 1);
}
static void
@@ -1366,7 +1366,7 @@ test_yin_element_elem(void **state)
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &flags, NULL, NULL), LY_EVALID);
CHECK_LOG_CTX("Invalid value \"invalid\" of \"value\" attribute in \"yin-element\" element. "
- "Valid values are \"true\" and \"false\".", "Line number 1.");
+ "Valid values are \"true\" and \"false\".", NULL, 1);
}
static void
@@ -1379,7 +1379,7 @@ test_yangversion_elem(void **state)
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &version, NULL, NULL), LY_EVALID);
CHECK_LOG_CTX("Invalid value \"version\" of \"value\" attribute in \"yang-version\" element. "
- "Valid values are \"1\" and \"1.1\".", "Line number 1.");
+ "Valid values are \"1\" and \"1.1\".", NULL, 1);
}
static void
@@ -1411,7 +1411,7 @@ test_belongsto_elem(void **state)
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &submod, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Missing mandatory sub-element \"prefix\" of \"belongs-to\" element.", "Line number 1.");
+ CHECK_LOG_CTX("Missing mandatory sub-element \"prefix\" of \"belongs-to\" element.", NULL, 1);
}
static void
@@ -1428,7 +1428,7 @@ test_config_elem(void **state)
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &flags, NULL, NULL), LY_EVALID);
CHECK_LOG_CTX("Invalid value \"invalid\" of \"value\" attribute in \"config\" element. "
- "Valid values are \"true\" and \"false\".", "Line number 1.");
+ "Valid values are \"true\" and \"false\".", NULL, 1);
}
static void
@@ -1439,7 +1439,7 @@ test_default_elem(void **state)
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &val, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Missing mandatory attribute value of default element.", "Line number 1.");
+ CHECK_LOG_CTX("Missing mandatory attribute value of default element.", NULL, 1);
}
static void
@@ -1450,7 +1450,7 @@ test_err_app_tag_elem(void **state)
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &val, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Missing mandatory attribute value of error-app-tag element.", "Line number 1.");
+ CHECK_LOG_CTX("Missing mandatory attribute value of error-app-tag element.", NULL, 1);
}
static void
@@ -1461,11 +1461,11 @@ test_err_msg_elem(void **state)
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &val, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Missing mandatory sub-element \"value\" of \"error-message\" element.", "Line number 1.");
+ CHECK_LOG_CTX("Missing mandatory sub-element \"value\" of \"error-message\" element.", NULL, 1);
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &val, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Unexpected attribute \"invalid\" of \"error-message\" element.", "Line number 1.");
+ CHECK_LOG_CTX("Unexpected attribute \"invalid\" of \"error-message\" element.", NULL, 1);
}
static void
@@ -1477,23 +1477,23 @@ test_fracdigits_elem(void **state)
/* invalid values */
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &type, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Invalid value \"-1\" of \"value\" attribute in \"fraction-digits\" element.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid value \"-1\" of \"value\" attribute in \"fraction-digits\" element.", NULL, 1);
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &type, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Invalid value \"02\" of \"value\" attribute in \"fraction-digits\" element.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid value \"02\" of \"value\" attribute in \"fraction-digits\" element.", NULL, 1);
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &type, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Invalid value \"1p\" of \"value\" attribute in \"fraction-digits\" element.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid value \"1p\" of \"value\" attribute in \"fraction-digits\" element.", NULL, 1);
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &type, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Invalid value \"19\" of \"value\" attribute in \"fraction-digits\" element.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid value \"19\" of \"value\" attribute in \"fraction-digits\" element.", NULL, 1);
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &type, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Invalid value \"999999999999999999\" of \"value\" attribute in \"fraction-digits\" element.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid value \"999999999999999999\" of \"value\" attribute in \"fraction-digits\" element.", NULL, 1);
}
static void
@@ -1504,7 +1504,7 @@ test_iffeature_elem(void **state)
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &iffeatures, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Missing mandatory attribute name of if-feature element.", "Line number 1.");
+ CHECK_LOG_CTX("Missing mandatory attribute name of if-feature element.", NULL, 1);
LY_ARRAY_FREE(iffeatures);
iffeatures = NULL;
}
@@ -1547,7 +1547,7 @@ test_length_elem(void **state)
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &type, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Missing mandatory attribute value of length element.", "Line number 1.");
+ CHECK_LOG_CTX("Missing mandatory attribute value of length element.", NULL, 1);
lysp_type_free(&fctx, &type);
memset(&type, 0, sizeof(type));
}
@@ -1562,7 +1562,7 @@ test_modifier_elem(void **state)
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &pat, NULL, NULL), LY_EVALID);
CHECK_LOG_CTX("Invalid value \"invert\" of \"value\" attribute in \"modifier\" element. "
- "Only valid value is \"invert-match\".", "Line number 1.");
+ "Only valid value is \"invert-match\".", NULL, 1);
lydict_remove(UTEST_LYCTX, pat);
}
@@ -1574,7 +1574,7 @@ test_namespace_elem(void **state)
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &ns, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Missing mandatory attribute uri of namespace element.", "Line number 1.");
+ CHECK_LOG_CTX("Missing mandatory attribute uri of namespace element.", NULL, 1);
}
static void
@@ -1641,32 +1641,32 @@ test_value_position_elem(void **state)
/* invalid values */
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &en, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Invalid value \"99999999999999999999999\" of \"value\" attribute in \"value\" element.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid value \"99999999999999999999999\" of \"value\" attribute in \"value\" element.", NULL, 1);
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &en, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Invalid value \"1k\" of \"value\" attribute in \"value\" element.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid value \"1k\" of \"value\" attribute in \"value\" element.", NULL, 1);
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &en, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Invalid value \"\" of \"value\" attribute in \"value\" element.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid value \"\" of \"value\" attribute in \"value\" element.", NULL, 1);
/*invalid positions */
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &en, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Invalid value \"-5\" of \"value\" attribute in \"position\" element.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid value \"-5\" of \"value\" attribute in \"position\" element.", NULL, 1);
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &en, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Invalid value \"-0\" of \"value\" attribute in \"position\" element.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid value \"-0\" of \"value\" attribute in \"position\" element.", NULL, 1);
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &en, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Invalid value \"99999999999999999999\" of \"value\" attribute in \"position\" element.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid value \"99999999999999999999\" of \"value\" attribute in \"position\" element.", NULL, 1);
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &en, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Invalid value \"\" of \"value\" attribute in \"position\" element.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid value \"\" of \"value\" attribute in \"position\" element.", NULL, 1);
}
static void
@@ -1738,7 +1738,7 @@ test_reqinstance_elem(void **state)
assert_int_equal(test_element_helper(state, data, &type, NULL, NULL), LY_EVALID);
memset(&type, 0, sizeof(type));
CHECK_LOG_CTX("Invalid value \"invalid\" of \"value\" attribute in \"require-instance\" element. "
- "Valid values are \"true\" and \"false\".", "Line number 1.");
+ "Valid values are \"true\" and \"false\".", NULL, 1);
}
static void
@@ -1753,7 +1753,7 @@ test_revision_date_elem(void **state)
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, rev, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Invalid value \"2000-50-05\" of \"revision-date\".", "Line number 1.");
+ CHECK_LOG_CTX("Invalid value \"2000-50-05\" of \"revision-date\".", NULL, 1);
}
static void
@@ -1877,19 +1877,19 @@ test_max_elems_elem(void **state)
data = "
";
assert_int_equal(test_element_helper(state, data, &list, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Invalid value \"0\" of \"value\" attribute in \"max-elements\" element.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid value \"0\" of \"value\" attribute in \"max-elements\" element.", NULL, 1);
data = "
";
assert_int_equal(test_element_helper(state, data, &list, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Invalid value \"-10\" of \"value\" attribute in \"max-elements\" element.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid value \"-10\" of \"value\" attribute in \"max-elements\" element.", NULL, 1);
data = "
";
assert_int_equal(test_element_helper(state, data, &list, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Invalid value \"k\" of \"value\" attribute in \"max-elements\" element.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid value \"k\" of \"value\" attribute in \"max-elements\" element.", NULL, 1);
data = "
";
assert_int_equal(test_element_helper(state, data, &list, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Invalid value \"u12\" of \"value\" attribute in \"max-elements\" element.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid value \"u12\" of \"value\" attribute in \"max-elements\" element.", NULL, 1);
}
static void
@@ -1900,19 +1900,19 @@ test_min_elems_elem(void **state)
data = " ";
assert_int_equal(test_element_helper(state, data, &llist, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Value \"-5\" of \"value\" attribute in \"min-elements\" element is out of bounds.", "Line number 1.");
+ CHECK_LOG_CTX("Value \"-5\" of \"value\" attribute in \"min-elements\" element is out of bounds.", NULL, 1);
data = " ";
assert_int_equal(test_element_helper(state, data, &llist, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Value \"99999999999999999\" of \"value\" attribute in \"min-elements\" element is out of bounds.", "Line number 1.");
+ CHECK_LOG_CTX("Value \"99999999999999999\" of \"value\" attribute in \"min-elements\" element is out of bounds.", NULL, 1);
data = " ";
assert_int_equal(test_element_helper(state, data, &llist, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Invalid value \"5k\" of \"value\" attribute in \"min-elements\" element.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid value \"5k\" of \"value\" attribute in \"min-elements\" element.", NULL, 1);
data = " ";
assert_int_equal(test_element_helper(state, data, &llist, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Invalid value \"05\" of \"value\" attribute in \"min-elements\" element.", "Line number 1.");
+ CHECK_LOG_CTX("Invalid value \"05\" of \"value\" attribute in \"min-elements\" element.", NULL, 1);
}
static void
@@ -1928,7 +1928,7 @@ test_ordby_elem(void **state)
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &flags, NULL, NULL), LY_EVALID);
CHECK_LOG_CTX("Invalid value \"inv\" of \"value\" attribute in \"ordered-by\" element. "
- "Valid values are \"system\" and \"user\".", "Line number 1.");
+ "Valid values are \"system\" and \"user\".", NULL, 1);
}
static void
@@ -2179,7 +2179,8 @@ test_leaf_list_elem(void **state)
""
ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &node_meta, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Invalid combination of min-elements and max-elements: min value 15 is bigger than the max value 5.", "Line number 4.");
+ CHECK_LOG_CTX("Invalid combination of min-elements and max-elements: min value 15 is bigger than the max value 5.",
+ NULL, 4);
lysp_node_free(&fctx, siblings);
siblings = NULL;
@@ -2191,7 +2192,7 @@ test_leaf_list_elem(void **state)
""
ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &node_meta, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Invalid combination of sub-elemnts \"min-elements\" and \"default\" in \"leaf-list\" element.", "Line number 5.");
+ CHECK_LOG_CTX("Invalid combination of sub-elemnts \"min-elements\" and \"default\" in \"leaf-list\" element.", NULL, 5);
lysp_node_free(&fctx, siblings);
siblings = NULL;
@@ -2200,7 +2201,7 @@ test_leaf_list_elem(void **state)
""
ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &node_meta, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Missing mandatory sub-element \"type\" of \"leaf-list\" element.", "Line number 1.");
+ CHECK_LOG_CTX("Missing mandatory sub-element \"type\" of \"leaf-list\" element.", NULL, 1);
lysp_node_free(&fctx, siblings);
siblings = NULL;
}
@@ -2218,7 +2219,7 @@ test_presence_elem(void **state)
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &val, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Missing mandatory attribute value of presence element.", "Line number 1.");
+ CHECK_LOG_CTX("Missing mandatory attribute value of presence element.", NULL, 1);
}
static void
@@ -2234,7 +2235,7 @@ test_key_elem(void **state)
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &val, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Missing mandatory attribute value of key element.", "Line number 1.");
+ CHECK_LOG_CTX("Missing mandatory attribute value of key element.", NULL, 1);
}
static void
@@ -2825,7 +2826,7 @@ test_inout_elem(void **state)
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &inout_meta, NULL, NULL), LY_EVALID);
lysp_node_free(&fctx, (struct lysp_node *)&inout);
- CHECK_LOG_CTX("Unexpected attribute \"name\" of \"input\" element.", "Line number 1.");
+ CHECK_LOG_CTX("Unexpected attribute \"name\" of \"input\" element.", NULL, 1);
memset(&inout, 0, sizeof inout);
}
@@ -2995,25 +2996,25 @@ test_deviate_elem(void **state)
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &deviates, NULL, NULL), LY_EVALID);
CHECK_LOG_CTX("Invalid value \"\" of \"value\" attribute in \"deviate\" element. "
- "Valid values are \"not-supported\", \"add\", \"replace\" and \"delete\".", "Line number 1.");
+ "Valid values are \"not-supported\", \"add\", \"replace\" and \"delete\".", NULL, 1);
deviates = NULL;
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &deviates, NULL, NULL), LY_EVALID);
CHECK_LOG_CTX("Invalid value \"invalid\" of \"value\" attribute in \"deviate\" element. "
- "Valid values are \"not-supported\", \"add\", \"replace\" and \"delete\".", "Line number 1.");
+ "Valid values are \"not-supported\", \"add\", \"replace\" and \"delete\".", NULL, 1);
deviates = NULL;
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &deviates, NULL, NULL), LY_EVALID);
CHECK_LOG_CTX("Invalid value \"ad\" of \"value\" attribute in \"deviate\" element. "
- "Valid values are \"not-supported\", \"add\", \"replace\" and \"delete\".", "Line number 1.");
+ "Valid values are \"not-supported\", \"add\", \"replace\" and \"delete\".", NULL, 1);
deviates = NULL;
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &deviates, NULL, NULL), LY_EVALID);
CHECK_LOG_CTX("Invalid value \"adds\" of \"value\" attribute in \"deviate\" element. "
- "Valid values are \"not-supported\", \"add\", \"replace\" and \"delete\".", "Line number 1.");
+ "Valid values are \"not-supported\", \"add\", \"replace\" and \"delete\".", NULL, 1);
deviates = NULL;
data = ELEMENT_WRAPPER_START
@@ -3022,7 +3023,7 @@ test_deviate_elem(void **state)
""
ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &deviates, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Deviate of this type doesn't allow \"must\" as it's sub-element.", "Line number 2.");
+ CHECK_LOG_CTX("Deviate of this type doesn't allow \"must\" as it's sub-element.", NULL, 2);
}
static void
@@ -3034,7 +3035,7 @@ test_deviation_elem(void **state)
/* invalid */
data = ELEMENT_WRAPPER_START "" ELEMENT_WRAPPER_END;
assert_int_equal(test_element_helper(state, data, &deviations, NULL, NULL), LY_EVALID);
- CHECK_LOG_CTX("Missing mandatory sub-element \"deviate\" of \"deviation\" element.", "Line number 1.");
+ CHECK_LOG_CTX("Missing mandatory sub-element \"deviate\" of \"deviation\" element.", NULL, 1);
}
static struct lysp_module *
@@ -3166,7 +3167,7 @@ test_module_elem(void **state)
assert_int_equal(ly_in_new_memory(data, &UTEST_IN), LY_SUCCESS);
assert_int_equal(lyxml_ctx_new(UTEST_LYCTX, UTEST_IN, &YCTX->xmlctx), LY_SUCCESS);
assert_int_equal(yin_parse_mod(YCTX, lysp_mod), LY_EVALID);
- CHECK_LOG_CTX("Invalid order of module\'s sub-elements \"namespace\" can\'t appear after \"feature\".", "Line number 3.");
+ CHECK_LOG_CTX("Invalid order of module\'s sub-elements \"namespace\" can\'t appear after \"feature\".", NULL, 3);
}
static struct lysp_submodule *
@@ -3233,7 +3234,7 @@ test_submodule_elem(void **state)
assert_int_equal(yin_parse_submod(YCTX, lysp_submod), LY_SUCCESS);
CHECK_LOG_CTX("YANG version 1.1 expects all includes in main module, includes in submodules (mod) are not necessary.",
- NULL);
+ NULL, 0);
assert_string_equal(lysp_submod->name, "mod");
assert_string_equal(lysp_submod->revs[0].date, "2019-02-02");
assert_string_equal(lysp_submod->prefix, "pref");
@@ -3300,7 +3301,7 @@ test_submodule_elem(void **state)
assert_int_equal(ly_in_new_memory(data, &UTEST_IN), LY_SUCCESS);
assert_int_equal(lyxml_ctx_new(UTEST_LYCTX, UTEST_IN, &YCTX->xmlctx), LY_SUCCESS);
assert_int_equal(yin_parse_submod(YCTX, lysp_submod), LY_EVALID);
- CHECK_LOG_CTX("Invalid order of submodule's sub-elements \"belongs-to\" can't appear after \"reference\".", "Line number 4.");
+ CHECK_LOG_CTX("Invalid order of submodule's sub-elements \"belongs-to\" can't appear after \"reference\".", NULL, 4);
}
static void
@@ -3403,7 +3404,7 @@ test_yin_parse_module(void **state)
"\n";
assert_int_equal(ly_in_new_memory(data, &in), LY_SUCCESS);
assert_int_equal(yin_parse_module(&yin_ctx, in, mod), LY_EINVAL);
- CHECK_LOG_CTX("Input data contains submodule which cannot be parsed directly without its main module.", NULL);
+ CHECK_LOG_CTX("Input data contains submodule which cannot be parsed directly without its main module.", NULL, 0);
lys_module_free(&fctx, mod, 0);
lysp_yin_ctx_free(yin_ctx);
ly_in_free(in, 0);
@@ -3418,7 +3419,7 @@ test_yin_parse_module(void **state)
"";
assert_int_equal(ly_in_new_memory(data, &in), LY_SUCCESS);
assert_int_equal(yin_parse_module(&yin_ctx, in, mod), LY_EVALID);
- CHECK_LOG_CTX("Trailing garbage \"\" after module, expected end-of-input.", "Line number 6.");
+ CHECK_LOG_CTX("Trailing garbage \"\" after module, expected end-of-input.", NULL, 6);
lys_module_free(&fctx, mod, 0);
lysp_yin_ctx_free(yin_ctx);
ly_in_free(in, 0);
@@ -3488,7 +3489,7 @@ test_yin_parse_submodule(void **state)
"";
assert_int_equal(ly_in_new_memory(data, &in), LY_SUCCESS);
assert_int_equal(yin_parse_submodule(&yin_ctx, UTEST_LYCTX, (struct lysp_ctx *)YCTX, in, &submod), LY_EINVAL);
- CHECK_LOG_CTX("Input data contains module when a submodule is expected.", NULL);
+ CHECK_LOG_CTX("Input data contains module when a submodule is expected.", NULL, 0);
lysp_module_free(&fctx, (struct lysp_module *)submod);
lysp_yin_ctx_free(yin_ctx);
ly_in_free(in, 0);
@@ -3510,7 +3511,7 @@ test_yin_parse_submodule(void **state)
"";
assert_int_equal(ly_in_new_memory(data, &in), LY_SUCCESS);
assert_int_equal(yin_parse_submodule(&yin_ctx, UTEST_LYCTX, (struct lysp_ctx *)YCTX, in, &submod), LY_EVALID);
- CHECK_LOG_CTX("Trailing garbage \" autoadd index */
schema = MODULE_CREATE_YANG("TERR_2", "leaf port {type bits {"
" bit first {position -1;} bit second;"
"}}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"TERR_2\" failed.", NULL);
- CHECK_LOG_CTX("Invalid value \"-1\" of \"position\".", "Line number 5.");
+ CHECK_LOG_CTX("Parsing module \"TERR_2\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Invalid value \"-1\" of \"position\".", NULL, 5);
/* different max value => autoadd index */
schema = MODULE_CREATE_YANG("TERR_3", "leaf port {type bits {"
@@ -203,48 +204,48 @@ test_schema_yang(void **state)
"}}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid bits - it is not possible to auto-assign bit position for \"second\" since the highest value is already 4294967295.",
- "Path \"/TERR_3:port\".");
+ "/TERR_3:port", 0);
schema = MODULE_CREATE_YANG("TERR_4", "leaf port {type bits {"
" bit first {position 10;} bit \"\";"
"}}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"TERR_4\" failed.", NULL);
- CHECK_LOG_CTX("Statement argument is required.", "Line number 5.");
+ CHECK_LOG_CTX("Parsing module \"TERR_4\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Statement argument is required.", NULL, 5);
/* wrong character */
schema = MODULE_CREATE_YANG("TERR_5", "leaf port {type bits {"
" bit first {position 10;} bit abcd^;"
"}}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"TERR_5\" failed.", NULL);
- CHECK_LOG_CTX("Invalid identifier character '^' (0x005e).", "Line number 5.");
+ CHECK_LOG_CTX("Parsing module \"TERR_5\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Invalid identifier character '^' (0x005e).", NULL, 5);
schema = MODULE_CREATE_YANG("TERR_6", "leaf port {type bits {"
" bit hi; bit hi;"
"}}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"TERR_6\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"hi\" of bit statement.", "Line number 5.");
+ CHECK_LOG_CTX("Parsing module \"TERR_6\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"hi\" of bit statement.", NULL, 5);
/* wrong character */
schema = MODULE_CREATE_YANG("TERR_7", "leaf port {type bits {"
" bit first {position 10;} bit \"ab&cd\";"
"}}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"TERR_7\" failed.", NULL);
- CHECK_LOG_CTX("Invalid identifier character '&' (0x0026).", "Line number 5.");
+ CHECK_LOG_CTX("Parsing module \"TERR_7\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Invalid identifier character '&' (0x0026).", NULL, 5);
schema = MODULE_CREATE_YANG("TERR_8", "leaf port {type bits {"
" bit first {position 10;} bit \"4abcd\";"
"}}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"TERR_8\" failed.", NULL);
- CHECK_LOG_CTX("Invalid identifier first character '4' (0x0034).", "Line number 5.");
+ CHECK_LOG_CTX("Parsing module \"TERR_8\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Invalid identifier first character '4' (0x0034).", NULL, 5);
schema = MODULE_CREATE_YANG("TERR_9", "leaf port {type bits;}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
- CHECK_LOG_CTX("Missing bit substatement for bits type.", "Path \"/TERR_9:port\".");
+ CHECK_LOG_CTX("Missing bit substatement for bits type.", "/TERR_9:port", 0);
/* new features of YANG 1.1 in YANG 1.0 */
schema = "module TERR_10 {"
@@ -256,9 +257,9 @@ test_schema_yang(void **state)
" }}"
"}";
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"TERR_10\" failed.", NULL);
+ CHECK_LOG_CTX("Parsing module \"TERR_10\" failed.", NULL, 0);
CHECK_LOG_CTX("Invalid keyword \"if-feature\" as a child of \"bit\" - the statement is allowed only in YANG 1.1 modules.",
- "Line number 1.");
+ NULL, 1);
schema = "module TERR_11 {"
" namespace \"urn:tests:TERR_10\";"
@@ -267,7 +268,7 @@ test_schema_yang(void **state)
" leaf l {type mytype {bit one;}}"
"}";
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
- CHECK_LOG_CTX("Bits type can be subtyped only in YANG 1.1 modules.", "Path \"/TERR_11:l\".");
+ CHECK_LOG_CTX("Bits type can be subtyped only in YANG 1.1 modules.", "/TERR_11:l", 0);
/* feature is not present */
schema = MODULE_CREATE_YANG("IF_0", "feature f;"
@@ -415,7 +416,8 @@ test_schema_yin(void **state)
" "
"");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
- CHECK_LOG_CTX("Invalid bits - position of the item \"ten\" has changed from 10 to 11 in the derived type.", "Path \"/TERR_0:port\".");
+ CHECK_LOG_CTX("Invalid bits - position of the item \"ten\" has changed from 10 to 11 in the derived type.",
+ "/TERR_0:port", 0);
/* add new bit */
schema = MODULE_CREATE_YIN("TERR_1",
@@ -431,7 +433,7 @@ test_schema_yin(void **state)
" "
"");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
- CHECK_LOG_CTX("Invalid bits - derived type adds new item \"test\".", "Path \"/TERR_1:port\".");
+ CHECK_LOG_CTX("Invalid bits - derived type adds new item \"test\".", "/TERR_1:port", 0);
/* different max value => autoadd index */
schema = MODULE_CREATE_YIN("TERR_2",
@@ -440,8 +442,8 @@ test_schema_yin(void **state)
" "
"");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"TERR_2\" failed.", NULL);
- CHECK_LOG_CTX("Invalid value \"-1\" of \"value\" attribute in \"position\" element.", "Line number 8.");
+ CHECK_LOG_CTX("Parsing module \"TERR_2\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Invalid value \"-1\" of \"value\" attribute in \"position\" element.", NULL, 8);
/* different max value => autoadd index */
schema = MODULE_CREATE_YIN("TERR_3",
@@ -451,7 +453,7 @@ test_schema_yin(void **state)
"");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid bits - it is not possible to auto-assign bit position for \"second\" since the highest value is already 4294967295.",
- "Path \"/TERR_3:port\".");
+ "/TERR_3:port", 0);
schema = MODULE_CREATE_YIN("TERR_4",
" "
@@ -459,8 +461,8 @@ test_schema_yin(void **state)
" "
"");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"TERR_4\" failed.", NULL);
- CHECK_LOG_CTX("Invalid identifier first character ' ' (0x0020).", "Line number 8.");
+ CHECK_LOG_CTX("Parsing module \"TERR_4\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Invalid identifier first character ' ' (0x0020).", NULL, 8);
schema = MODULE_CREATE_YIN("TERR_5",
" "
@@ -468,8 +470,8 @@ test_schema_yin(void **state)
" "
"");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"TERR_5\" failed.", NULL);
- CHECK_LOG_CTX("Invalid identifier character ' ' (0x0020).", "Line number 8.");
+ CHECK_LOG_CTX("Parsing module \"TERR_5\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Invalid identifier character ' ' (0x0020).", NULL, 8);
schema = MODULE_CREATE_YIN("TERR_6",
" "
@@ -477,8 +479,8 @@ test_schema_yin(void **state)
" "
"");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"TERR_6\" failed.", NULL);
- CHECK_LOG_CTX("Duplicate identifier \"hi\" of bit statement.", "Line number 8.");
+ CHECK_LOG_CTX("Parsing module \"TERR_6\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Duplicate identifier \"hi\" of bit statement.", NULL, 8);
schema = MODULE_CREATE_YIN("TERR_7",
" "
@@ -486,8 +488,8 @@ test_schema_yin(void **state)
" "
"");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"TERR_7\" failed.", NULL);
- CHECK_LOG_CTX("Invalid identifier first character '4' (0x0034).", "Line number 8.");
+ CHECK_LOG_CTX("Parsing module \"TERR_7\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Invalid identifier first character '4' (0x0034).", NULL, 8);
/* TEST EMPTY NAME*/
schema = MODULE_CREATE_YIN("TERR_8",
@@ -496,8 +498,8 @@ test_schema_yin(void **state)
" "
"");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
- CHECK_LOG_CTX("Parsing module \"TERR_8\" failed.", NULL);
- CHECK_LOG_CTX("Empty identifier is not allowed.", "Line number 8.");
+ CHECK_LOG_CTX("Parsing module \"TERR_8\" failed.", NULL, 0);
+ CHECK_LOG_CTX("Empty identifier is not allowed.", NULL, 8);
}
static void
@@ -620,14 +622,11 @@ test_data_xml(void **state)
TEST_SUCCESS_XML("T0", "\n\t", BITS, "");
TEST_ERROR_XML("T0", "twelvea");
- CHECK_LOG_CTX("Invalid bit \"twelvea\".",
- "Schema location \"/T0:port\", line number 1.");
+ CHECK_LOG_CTX("Invalid bit \"twelvea\".", "/T0:port", 1);
TEST_ERROR_XML("T0", "twelve t");
- CHECK_LOG_CTX("Invalid bit \"t\".",
- "Schema location \"/T0:port\", line number 1.");
+ CHECK_LOG_CTX("Invalid bit \"t\".", "/T0:port", 1);
TEST_ERROR_XML("T0", "ELEVEN");
- CHECK_LOG_CTX("Invalid bit \"ELEVEN\".",
- "Schema location \"/T0:port\", line number 1.");
+ CHECK_LOG_CTX("Invalid bit \"ELEVEN\".", "/T0:port", 1);
/* empty value */
data = ""; \
@@ -662,14 +661,11 @@ test_data_json(void **state)
TEST_SUCCESS_JSON("T0", "\\n\\t", BITS, "");
TEST_ERROR_JSON("T0", "twelvea");
- CHECK_LOG_CTX("Invalid character sequence \"twelvea}\", expected a JSON value.",
- "Line number 1.");
+ CHECK_LOG_CTX("Invalid character sequence \"twelvea}\", expected a JSON value.", NULL, 1);
TEST_ERROR_JSON("T0", "twelve t");
- CHECK_LOG_CTX("Invalid character sequence \"twelve t}\", expected a JSON value.",
- "Line number 1.");
+ CHECK_LOG_CTX("Invalid character sequence \"twelve t}\", expected a JSON value.", NULL, 1);
TEST_ERROR_JSON("T0", "ELEVEN");
- CHECK_LOG_CTX("Invalid character sequence \"ELEVEN}\", expected a JSON value.",
- "Line number 1.");
+ CHECK_LOG_CTX("Invalid character sequence \"ELEVEN}\", expected a JSON value.", NULL, 1);
}
static void
diff --git a/tests/utests/types/boolean.c b/tests/utests/types/boolean.c
index 841db2a59..2aba30f35 100644
--- a/tests/utests/types/boolean.c
+++ b/tests/utests/types/boolean.c
@@ -79,12 +79,10 @@ test_data_xml(void **state)
/* invalid value */
TEST_ERROR_XML("defs", "l1", "unsure");
- CHECK_LOG_CTX("Invalid boolean value \"unsure\".",
- "Schema location \"/defs:l1\", line number 1.");
+ CHECK_LOG_CTX("Invalid boolean value \"unsure\".", "/defs:l1", 1);
TEST_ERROR_XML("defs", "l1", " true");
- CHECK_LOG_CTX("Invalid boolean value \" true\".",
- "Schema location \"/defs:l1\", line number 1.");
+ CHECK_LOG_CTX("Invalid boolean value \" true\".", "/defs:l1", 1);
}
static void
diff --git a/tests/utests/types/decimal64.c b/tests/utests/types/decimal64.c
index e0a7cab26..ebfb2b08b 100644
--- a/tests/utests/types/decimal64.c
+++ b/tests/utests/types/decimal64.c
@@ -78,28 +78,22 @@ test_data_xml(void **state)
TEST_SUCCESS_XML("defs", "l2", "9.223372036854775807", DEC64, "9.223372036854775807", INT64_C(9223372036854775807));
TEST_ERROR_XML("defs", "l1", "\n 15 \t\n ");
- CHECK_LOG_CTX("Unsatisfied range - value \"15.0\" is out of the allowed range.",
- "Schema location \"/defs:l1\", line number 3.");
+ CHECK_LOG_CTX("Unsatisfied range - value \"15.0\" is out of the allowed range.", "/defs:l1", 3);
TEST_ERROR_XML("defs", "l1", "\n 0 \t\n ");
- CHECK_LOG_CTX("Unsatisfied range - value \"0.0\" is out of the allowed range.",
- "Schema location \"/defs:l1\", line number 3.");
+ CHECK_LOG_CTX("Unsatisfied range - value \"0.0\" is out of the allowed range.", "/defs:l1", 3);
TEST_ERROR_XML("defs", "l1", "xxx");
- CHECK_LOG_CTX("Invalid 1. character of decimal64 value \"xxx\".",
- "Schema location \"/defs:l1\", line number 1.");
+ CHECK_LOG_CTX("Invalid 1. character of decimal64 value \"xxx\".", "/defs:l1", 1);
TEST_ERROR_XML("defs", "l1", "");
- CHECK_LOG_CTX("Invalid empty decimal64 value.",
- "Schema location \"/defs:l1\", line number 1.");
+ CHECK_LOG_CTX("Invalid empty decimal64 value.", "/defs:l1", 1);
TEST_ERROR_XML("defs", "l1", "8.5 xxx");
- CHECK_LOG_CTX("Invalid 6. character of decimal64 value \"8.5 xxx\".",
- "Schema location \"/defs:l1\", line number 1.");
+ CHECK_LOG_CTX("Invalid 6. character of decimal64 value \"8.5 xxx\".", "/defs:l1", 1);
TEST_ERROR_XML("defs", "l1", "8.55 xxx");
- CHECK_LOG_CTX("Value \"8.55\" of decimal64 type exceeds defined number (1) of fraction digits.",
- "Schema location \"/defs:l1\", line number 1.");
+ CHECK_LOG_CTX("Value \"8.55\" of decimal64 type exceeds defined number (1) of fraction digits.", "/defs:l1", 1);
}
static void
diff --git a/tests/utests/types/empty.c b/tests/utests/types/empty.c
index 0ab971039..39b117954 100644
--- a/tests/utests/types/empty.c
+++ b/tests/utests/types/empty.c
@@ -77,12 +77,10 @@ test_data_xml(void **state)
/* invalid value */
TEST_ERROR_XML("defs", "l1", "x");
- CHECK_LOG_CTX("Invalid empty value length 1.",
- "Schema location \"/defs:l1\", line number 1.");
+ CHECK_LOG_CTX("Invalid empty value length 1.", "/defs:l1", 1);
TEST_ERROR_XML("defs", "l1", " ");
- CHECK_LOG_CTX("Invalid empty value length 1.",
- "Schema location \"/defs:l1\", line number 1.");
+ CHECK_LOG_CTX("Invalid empty value length 1.", "/defs:l1", 1);
}
static void
diff --git a/tests/utests/types/enumeration.c b/tests/utests/types/enumeration.c
index 660479f7a..88c6a6974 100644
--- a/tests/utests/types/enumeration.c
+++ b/tests/utests/types/enumeration.c
@@ -73,22 +73,18 @@ test_data_xml(void **state)
/* disabled feature */
TEST_ERROR_XML("defs", "l1", "yellow");
- CHECK_LOG_CTX("Invalid enumeration value \"yellow\".",
- "Schema location \"/defs:l1\", line number 1.");
+ CHECK_LOG_CTX("Invalid enumeration value \"yellow\".", "/defs:l1", 1);
/* leading/trailing whitespaces */
TEST_ERROR_XML("defs", "l1", " white");
- CHECK_LOG_CTX("Invalid enumeration value \" white\".",
- "Schema location \"/defs:l1\", line number 1.");
+ CHECK_LOG_CTX("Invalid enumeration value \" white\".", "/defs:l1", 1);
TEST_ERROR_XML("defs", "l1", "white\n");
- CHECK_LOG_CTX("Invalid enumeration value \"white\n\".",
- "Schema location \"/defs:l1\", line number 2.");
+ CHECK_LOG_CTX("Invalid enumeration value \"white\n\".", "/defs:l1", 2);
/* invalid value */
TEST_ERROR_XML("defs", "l1", "black");
- CHECK_LOG_CTX("Invalid enumeration value \"black\".",
- "Schema location \"/defs:l1\", line number 1.");
+ CHECK_LOG_CTX("Invalid enumeration value \"black\".", "/defs:l1", 1);
}
static void
diff --git a/tests/utests/types/identityref.c b/tests/utests/types/identityref.c
index 107164d36..16c638ec8 100644
--- a/tests/utests/types/identityref.c
+++ b/tests/utests/types/identityref.c
@@ -96,20 +96,17 @@ test_data_xml(void **state)
/* invalid value */
TEST_ERROR_XML("defs", "", "l1", "fast-ethernet");
- CHECK_LOG_CTX("Invalid identityref \"fast-ethernet\" value - identity not found in module \"defs\".",
- "Schema location \"/defs:l1\", line number 1.");
+ CHECK_LOG_CTX("Invalid identityref \"fast-ethernet\" value - identity not found in module \"defs\".", "/defs:l1", 1);
TEST_ERROR_XML("defs", "xmlns:x=\"urn:tests:defs\"", "l1", "x:slow-ethernet");
- CHECK_LOG_CTX("Invalid identityref \"x:slow-ethernet\" value - identity not found in module \"defs\".",
- "Schema location \"/defs:l1\", line number 1.");
+ CHECK_LOG_CTX("Invalid identityref \"x:slow-ethernet\" value - identity not found in module \"defs\".", "/defs:l1", 1);
TEST_ERROR_XML("defs", "xmlns:x=\"urn:tests:ident-base\"", "l1", "x:ident-base");
CHECK_LOG_CTX("Invalid identityref \"x:ident-base\" value - identity not derived from the base \"ident-base:ident-base\".",
- "Schema location \"/defs:l1\", line number 1.");
+ "/defs:l1", 1);
TEST_ERROR_XML("defs", "xmlns:x=\"urn:tests:unknown\"", "l1", "x:ident-base");
- CHECK_LOG_CTX("Invalid identityref \"x:ident-base\" value - unable to map prefix to YANG schema.",
- "Schema location \"/defs:l1\", line number 1.");
+ CHECK_LOG_CTX("Invalid identityref \"x:ident-base\" value - unable to map prefix to YANG schema.", "/defs:l1", 1);
}
static void
diff --git a/tests/utests/types/instanceid.c b/tests/utests/types/instanceid.c
index 3126f6166..ce5a24e46 100644
--- a/tests/utests/types/instanceid.c
+++ b/tests/utests/types/instanceid.c
@@ -137,35 +137,34 @@ test_data_xml(void **state)
"bx
",
"defs", "xmlns:xdf=\"urn:tests:defs\"", "xdf:l1", "/xdf:list[2]/xdf:value", LY_EVALID);
CHECK_LOG_CTX("Invalid instance-identifier \"/xdf:list[2]/xdf:value\" value - semantic error: "
- "Positional predicate defined for configuration list \"list\" in path.",
- "Schema location \"/defs:l1\", line number 1.");
+ "Positional predicate defined for configuration list \"list\" in path.", "/defs:l1", 1);
TEST_ERROR_XML2("",
"defs", "xmlns:xdf=\"urn:tests:defs\"", "xdf:l1", "/t:cont/t:1l", LY_EVALID);
CHECK_LOG_CTX("Invalid instance-identifier \"/t:cont/t:1l\" value - syntax error: Invalid character 't'[9] of expression '/t:cont/t:1l'.",
- "Schema location \"/defs:l1\", line number 1.");
+ "/defs:l1", 1);
TEST_ERROR_XML2("",
"defs", "xmlns:xdf=\"urn:tests:defs\"", "xdf:l1", "/t:cont:t:1l", LY_EVALID);
CHECK_LOG_CTX("Invalid instance-identifier \"/t:cont:t:1l\" value - syntax error: Invalid character ':'[8] of expression '/t:cont:t:1l'.",
- "Schema location \"/defs:l1\", line number 1.");
+ "/defs:l1", 1);
TEST_ERROR_XML2("",
"defs", "xmlns:xdf=\"urn:tests:defs\"", "xdf:l1", "/xdf:cont/xdf:invalid/xdf:path", LY_EVALID);
CHECK_LOG_CTX("Invalid instance-identifier \"/xdf:cont/xdf:invalid/xdf:path\" value - semantic error: Not found node \"invalid\" in path.",
- "Schema location \"/defs:l1\", line number 1.");
+ "/defs:l1", 1);
/* non-existing instances, instance-identifier is here in JSON format because it is already in internal
* representation without canonical prefixes */
TEST_ERROR_XML2("",
"defs", "xmlns:m=\"urn:tests:mod\"", "l1", "/m:cont/m:l2", LY_ENOTFOUND);
CHECK_LOG_CTX_APPTAG("Invalid instance-identifier \"/mod:cont/l2\" value - required instance not found.",
- "Data location \"/defs:l1\".", "instance-required");
+ "/defs:l1", 0, "instance-required");
TEST_ERROR_XML2("1",
"defs", "xmlns:a=\"urn:tests:defs\"", "l1", "/a:llist[.='2']", LY_ENOTFOUND);
CHECK_LOG_CTX_APPTAG("Invalid instance-identifier \"/defs:llist[.='2']\" value - required instance not found.",
- "Data location \"/defs:l1\".", "instance-required");
+ "/defs:l1", 0, "instance-required");
TEST_ERROR_XML2("aa"
"cb"
@@ -173,7 +172,7 @@ test_data_xml(void **state)
"b",
"defs", "xmlns:a=\"urn:tests:defs\"", "l1", "/a:list2[a:id='a'][a:id2='a']/a:id", LY_ENOTFOUND);
CHECK_LOG_CTX_APPTAG("Invalid instance-identifier \"/defs:list2[id='a'][id2='a']/id\" value - required instance not found.",
- "Data location \"/defs:l1\".", "instance-required");
+ "/defs:l1", 0, "instance-required");
TEST_ERROR_XML2("aa"
"cb"
@@ -181,83 +180,83 @@ test_data_xml(void **state)
"2",
"defs", "xmlns:a=\"urn:tests:defs\"", "l1", "/a:llist[.='3']", LY_ENOTFOUND);
CHECK_LOG_CTX_APPTAG("Invalid instance-identifier \"/defs:llist[.='3']\" value - required instance not found.",
- "Data location \"/defs:l1\".", "instance-required");
+ "/defs:l1", 0, "instance-required");
TEST_ERROR_XML2("",
"defs", "xmlns:a=\"urn:tests:defs\"", "l1", "/a:list-keyless[3]", LY_ENOTFOUND);
CHECK_LOG_CTX_APPTAG("Invalid instance-identifier \"/defs:list-keyless[3]\" value - required instance not found.",
- "Data location \"/defs:l1\".", "instance-required");
+ "/defs:l1", 0, "instance-required");
/* more errors */
TEST_ERROR_XML2("x",
"defs", "xmlns:t=\"urn:tests:defs\"", "t:l1", "/t:llist[1", LY_EVALID);
CHECK_LOG_CTX("Invalid instance-identifier \"/t:llist[1\" value - syntax error: Unexpected XPath expression end.",
- "Schema location \"/defs:l1\", line number 1.");
+ "/defs:l1", 1);
TEST_ERROR_XML2("",
"defs", "xmlns:m=\"urn:tests:mod\"", "l1", "/m:cont[1]", LY_EVALID);
CHECK_LOG_CTX("Invalid instance-identifier \"/m:cont[1]\" value - semantic error: Positional predicate defined for container \"cont\" in path.",
- "Schema location \"/defs:l1\", line number 1.");
+ "/defs:l1", 1);
TEST_ERROR_XML2("",
"defs", "xmlns:m=\"urn:tests:mod\"", "l1", "[1]", LY_EVALID);
CHECK_LOG_CTX("Invalid instance-identifier \"[1]\" value - syntax error: Unexpected XPath token \"[\" (\"[1]\"), expected \"Operator(Path)\".",
- "Schema location \"/defs:l1\", line number 1.");
+ "/defs:l1", 1);
TEST_ERROR_XML2("",
"defs", "xmlns:m=\"urn:tests:mod\"", "l1", "/m:cont/m:l2[l2='1']", LY_EVALID);
CHECK_LOG_CTX("Invalid instance-identifier \"/m:cont/m:l2[l2='1']\" value - syntax error: Prefix missing for \"l2\" in path.",
- "Schema location \"/defs:l1\", line number 1.");
+ "/defs:l1", 1);
TEST_ERROR_XML2("",
"defs", "xmlns:m=\"urn:tests:mod\"", "l1", "/m:cont/m:l2[m:l2='1']", LY_EVALID);
CHECK_LOG_CTX("Invalid instance-identifier \"/m:cont/m:l2[m:l2='1']\" value - semantic error: List predicate defined for leaf \"l2\" in path.",
- "Schema location \"/defs:l1\", line number 1.");
+ "/defs:l1", 1);
TEST_ERROR_XML2("12",
"defs", "xmlns:t=\"urn:tests:defs\"", "t:l1", "/t:llist[4]", LY_EVALID);
CHECK_LOG_CTX("Invalid instance-identifier \"/t:llist[4]\" value - semantic error: Positional predicate defined for configuration leaf-list \"llist\" in path.",
- "Schema location \"/defs:l1\", line number 1.");
+ "/defs:l1", 1);
TEST_ERROR_XML2("",
"defs", "xmlns:xdf=\"urn:tests:defs\"", "xdf:l2", "/t:llist[6]", LY_EVALID);
CHECK_LOG_CTX("Invalid instance-identifier \"/t:llist[6]\" value - semantic error: No module connected with the prefix \"t\" found (prefix format XML prefixes).",
- "Schema location \"/defs:l2\", line number 1.");
+ "/defs:l2", 1);
TEST_ERROR_XML2("1x
",
"defs", "xmlns:xdf=\"urn:tests:defs\"", "xdf:l2", "/xdf:list[xdf:value='x']", LY_EVALID);
CHECK_LOG_CTX("Invalid instance-identifier \"/xdf:list[xdf:value='x']\" value - semantic error: Key expected instead of leaf \"value\" in path.",
- "Schema location \"/defs:l2\", line number 1.");
+ "/defs:l2", 1);
TEST_ERROR_XML2("",
"defs", "xmlns:xdf=\"urn:tests:defs\"", "xdf:l2", "/xdf:list[.='x']", LY_EVALID);
CHECK_LOG_CTX("Invalid instance-identifier \"/xdf:list[.='x']\" value - semantic error: Leaf-list predicate defined for list \"list\" in path.",
- "Schema location \"/defs:l2\", line number 1.");
+ "/defs:l2", 1);
TEST_ERROR_XML2("1",
"defs", "xmlns:t=\"urn:tests:defs\"", "t:l1", "/t:llist[.='x']", LY_EVALID);
CHECK_LOG_CTX("Invalid instance-identifier \"/t:llist[.='x']\" value - semantic error: Invalid type uint32 value \"x\".",
- "Schema location \"/defs:l1\", line number 1.");
+ "/defs:l1", 1);
TEST_ERROR_XML2("",
"defs", "xmlns:xdf=\"urn:tests:defs\"", "xdf:l2", "/t:llist[1][2]", LY_EVALID);
CHECK_LOG_CTX("Invalid instance-identifier \"/t:llist[1][2]\" value - syntax error: Unparsed characters \"[2]\" left at the end of path.",
- "Schema location \"/defs:l2\", line number 1.");
+ "/defs:l2", 1);
TEST_ERROR_XML2("",
"defs", "xmlns:xdf=\"urn:tests:defs\"", "xdf:l2", "/t:llist[.='a'][.='b']", LY_EVALID);
CHECK_LOG_CTX("Invalid instance-identifier \"/t:llist[.='a'][.='b']\" value - syntax error: Unparsed characters \"[.='b']\" left at the end of path.",
- "Schema location \"/defs:l2\", line number 1.");
+ "/defs:l2", 1);
TEST_ERROR_XML2("1x
",
"defs", "xmlns:xdf=\"urn:tests:defs\"", "xdf:l2", "/xdf:list[xdf:id='1'][xdf:id='2']/xdf:value", LY_EVALID);
CHECK_LOG_CTX("Invalid instance-identifier \"/xdf:list[xdf:id='1'][xdf:id='2']/xdf:value\" value - syntax error: Duplicate predicate key \"id\" in path.",
- "Schema location \"/defs:l2\", line number 1.");
+ "/defs:l2", 1);
TEST_ERROR_XML2("",
"defs", "xmlns:xdf=\"urn:tests:defs\"", "xdf:l2", "/xdf:list2[xdf:id='1']/xdf:value", LY_EVALID);
CHECK_LOG_CTX("Invalid instance-identifier \"/xdf:list2[xdf:id='1']/xdf:value\" value - semantic error: Predicate missing for a key of list \"list2\" in path.",
- "Schema location \"/defs:l2\", line number 1.");
+ "/defs:l2", 1);
}
static void
diff --git a/tests/utests/types/instanceid_keys.c b/tests/utests/types/instanceid_keys.c
index 6d527cbcd..34a449f41 100644
--- a/tests/utests/types/instanceid_keys.c
+++ b/tests/utests/types/instanceid_keys.c
@@ -56,14 +56,13 @@ test_data_xml(void **state)
TEST_SUCCESS_XML_NS1("defs", "l1", "px", "urn:tests:defs", "[px:key='val']", STRING, "[defs:key='val']");
TEST_ERROR_XML("defs", "l1", "black");
- CHECK_LOG_CTX("Invalid first character 'b', list key predicates expected.", "Schema location \"/defs:l1\", line number 1.");
+ CHECK_LOG_CTX("Invalid first character 'b', list key predicates expected.", "/defs:l1", 1);
TEST_ERROR_XML("defs", "l1", "[this is not a valid xpath]");
- CHECK_LOG_CTX("Invalid character 0x69 ('i'), perhaps \"this\" is supposed to be a function call.",
- "Schema location \"/defs:l1\", line number 1.");
+ CHECK_LOG_CTX("Invalid character 0x69 ('i'), perhaps \"this\" is supposed to be a function call.", "/defs:l1", 1);
TEST_ERROR_XML("defs", "l1", "[px:key='val']");
- CHECK_LOG_CTX("Failed to resolve prefix \"px\".", "Schema location \"/defs:l1\", line number 1.");
+ CHECK_LOG_CTX("Failed to resolve prefix \"px\".", "/defs:l1", 1);
}
int
diff --git a/tests/utests/types/int16.c b/tests/utests/types/int16.c
index f6796a1e3..96828e033 100644
--- a/tests/utests/types/int16.c
+++ b/tests/utests/types/int16.c
@@ -60,8 +60,7 @@ test_data_xml(void **state)
UTEST_ADD_MODULE(schema, LYS_IN_YANG, NULL, NULL);
TEST_ERROR_XML("defs", "100");
- CHECK_LOG_CTX("Unsatisfied range - value \"100\" is out of the allowed range.",
- "Schema location \"/defs:port\", line number 1.");
+ CHECK_LOG_CTX("Unsatisfied range - value \"100\" is out of the allowed range.", "/defs:port", 1);
}
int
diff --git a/tests/utests/types/int32.c b/tests/utests/types/int32.c
index 9989a67a4..fa2b34107 100644
--- a/tests/utests/types/int32.c
+++ b/tests/utests/types/int32.c
@@ -60,8 +60,7 @@ test_data_xml(void **state)
UTEST_ADD_MODULE(schema, LYS_IN_YANG, NULL, NULL);
TEST_ERROR_XML("defs", "0x01");
- CHECK_LOG_CTX("Invalid type int32 value \"0x01\".",
- "Schema location \"/defs:port\", line number 1.");
+ CHECK_LOG_CTX("Invalid type int32 value \"0x01\".", "/defs:port", 1);
}
int
diff --git a/tests/utests/types/int64.c b/tests/utests/types/int64.c
index 6b5e47eb9..04066739e 100644
--- a/tests/utests/types/int64.c
+++ b/tests/utests/types/int64.c
@@ -60,16 +60,13 @@ test_data_xml(void **state)
UTEST_ADD_MODULE(schema, LYS_IN_YANG, NULL, NULL);
TEST_ERROR_XML("defs", "");
- CHECK_LOG_CTX("Invalid type int64 empty value.",
- "Schema location \"/defs:port\", line number 1.");
+ CHECK_LOG_CTX("Invalid type int64 empty value.", "/defs:port", 1);
TEST_ERROR_XML("defs", " ");
- CHECK_LOG_CTX("Invalid type int64 empty value.",
- "Schema location \"/defs:port\", line number 1.");
+ CHECK_LOG_CTX("Invalid type int64 empty value.", "/defs:port", 1);
TEST_ERROR_XML("defs", "-10 xxx");
- CHECK_LOG_CTX("Invalid type int64 value \"-10 xxx\".",
- "Schema location \"/defs:port\", line number 1.");
+ CHECK_LOG_CTX("Invalid type int64 value \"-10 xxx\".", "/defs:port", 1);
}
int
diff --git a/tests/utests/types/int8.c b/tests/utests/types/int8.c
index 198d1f74e..3a8f2261d 100644
--- a/tests/utests/types/int8.c
+++ b/tests/utests/types/int8.c
@@ -240,22 +240,22 @@ test_schema_yang(void **state)
/* TEST ERROR -60 .. 0 | 0 .. 127 */
schema = MODULE_CREATE_YANG("ERR0", "leaf port {type int8 {range \"-60 .. 0 | 0 .. 127\";}}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EEXIST);
- CHECK_LOG_CTX("Invalid range restriction - values are not in ascending order (0).", "Path \"/ERR0:port\".");
+ CHECK_LOG_CTX("Invalid range restriction - values are not in ascending order (0).", "/ERR0:port", 0);
/* TEST ERROR 0 .. 128 */
schema = MODULE_CREATE_YANG("ERR1", "leaf port {type int8 {range \"0 .. 128\";}}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EDENIED);
- CHECK_LOG_CTX("Invalid range restriction - value \"128\" does not fit the type limitations.", "Path \"/ERR1:port\".");
+ CHECK_LOG_CTX("Invalid range restriction - value \"128\" does not fit the type limitations.", "/ERR1:port", 0);
/* TEST ERROR -129 .. 126 */
schema = MODULE_CREATE_YANG("ERR2", "leaf port {type int8 {range \"-129 .. 0\";}}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EDENIED);
- CHECK_LOG_CTX("Invalid range restriction - value \"-129\" does not fit the type limitations.", "Path \"/ERR2:port\".");
+ CHECK_LOG_CTX("Invalid range restriction - value \"-129\" does not fit the type limitations.", "/ERR2:port", 0);
/* TEST ERROR 0 */
schema = MODULE_CREATE_YANG("ERR3", "leaf port {type int8 {range \"-129\";}}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EDENIED);
- CHECK_LOG_CTX("Invalid range restriction - value \"-129\" does not fit the type limitations.", "Path \"/ERR3:port\".");
+ CHECK_LOG_CTX("Invalid range restriction - value \"-129\" does not fit the type limitations.", "/ERR3:port", 0);
/*
* TEST MODULE SUBTYPE
@@ -374,7 +374,7 @@ test_schema_yang(void **state)
"leaf my_leaf {type my_int_type {range \"min .. max\";}}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid range restriction - the derived restriction (min .. max) is not equally or more limiting.",
- "Path \"/TS_ERR0:my_leaf\".");
+ "/TS_ERR0:my_leaf", 0);
/* TEST SUBTYPE ERROR -80 .. 80 */
schema = MODULE_CREATE_YANG("TS_ERR1",
@@ -382,7 +382,7 @@ test_schema_yang(void **state)
" leaf my_leaf {type my_int_type {range \"-80 .. 80\";}}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid range restriction - the derived restriction (-80 .. 80) is not equally or more limiting.",
- "Path \"/TS_ERR1:my_leaf\".");
+ "/TS_ERR1:my_leaf", 0);
/* TEST SUBTYPE ERROR 0 .. max */
schema = MODULE_CREATE_YANG("TS_ERR2",
@@ -390,7 +390,7 @@ test_schema_yang(void **state)
"leaf my_leaf {type my_int_type {range \"0 .. max\";}}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid range restriction - the derived restriction (0 .. max) is not equally or more limiting.",
- "Path \"/TS_ERR2:my_leaf\".");
+ "/TS_ERR2:my_leaf", 0);
/* TEST SUBTYPE ERROR -2 .. 2 */
schema = MODULE_CREATE_YANG("TS_ERR3",
@@ -398,7 +398,7 @@ test_schema_yang(void **state)
"leaf my_leaf {type my_int_type {range \"-2 .. 2\";}}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid range restriction - the derived restriction (-2 .. 2) is not equally or more limiting.",
- "Path \"/TS_ERR3:my_leaf\".");
+ "/TS_ERR3:my_leaf", 0);
/* TEST SUBTYPE ERROR -2 .. 2 */
schema = MODULE_CREATE_YANG("TS_ERR4",
@@ -406,7 +406,7 @@ test_schema_yang(void **state)
"leaf my_leaf {type my_int_type {range \"-100 .. -90 | 100 .. 128\";}}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EDENIED);
CHECK_LOG_CTX("Invalid range restriction - value \"128\" does not fit the type limitations.",
- "Path \"/TS_ERR4:my_leaf\".");
+ "/TS_ERR4:my_leaf", 0);
/*
* TEST DEFAULT VALUE
@@ -461,7 +461,7 @@ test_schema_yang(void **state)
"}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid default - value does not fit the type (Value \"128\" is out of type int8 min/max bounds.).",
- "Schema location \"/TD_ERR0:port\".");
+ "/TD_ERR0:port", 0);
/* TEST DEFAULT VALUE ERROR */
schema = MODULE_CREATE_YANG("TD_ERR1",
@@ -471,7 +471,7 @@ test_schema_yang(void **state)
"}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid default - value does not fit the type (Unsatisfied range - value \"-1\" is out of the allowed range.).",
- "Schema location \"/TD_ERR1:port\".");
+ "/TD_ERR1:port", 0);
/* TEST DEFAULT VALUE ERROR */
schema = MODULE_CREATE_YANG("TD_ERR2",
@@ -481,7 +481,7 @@ test_schema_yang(void **state)
"}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid default - value does not fit the type (Unsatisfied range - value \"60\" is out of the allowed range.).",
- "Schema location \"/TD_ERR2:port\".");
+ "/TD_ERR2:port", 0);
/* TEST DEFAULT VALUE ERROR */
schema = MODULE_CREATE_YANG("TD_ERR3",
@@ -489,7 +489,7 @@ test_schema_yang(void **state)
"leaf my_leaf {type my_int_type {range \"70 .. 80\";}}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid default - value does not fit the type (Unsatisfied range - value \"127\" is out of the allowed range.).",
- "Schema location \"/TD_ERR3:my_leaf\".");
+ "/TD_ERR3:my_leaf", 0);
/* TEST DEFAULT HEXADECIMAL */
schema = MODULE_CREATE_YANG("DF_HEX0",
@@ -554,7 +554,7 @@ test_schema_yang(void **state)
"}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid default - value does not fit the type (Value \"0xff\" is out of type int8 min/max bounds.).",
- "Schema location \"/DF_HEX2:port\".");
+ "/DF_HEX2:port", 0);
/* TEST DEFAULT HEXADECIMAL ERROR */
schema = MODULE_CREATE_YANG("DF_HEX3",
@@ -564,7 +564,7 @@ test_schema_yang(void **state)
"}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid default - value does not fit the type (Value \"-0x81\" is out of type int8 min/max bounds.).",
- "Schema location \"/DF_HEX3:port\".");
+ "/DF_HEX3:port", 0);
/* TEST DEFAULT HEXADECIMAL ERROR */
schema = MODULE_CREATE_YANG("DF_HEX4",
@@ -574,7 +574,7 @@ test_schema_yang(void **state)
"}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid default - value does not fit the type (Value \"0x80\" is out of type int8 min/max bounds.).",
- "Schema location \"/DF_HEX4:port\".");
+ "/DF_HEX4:port", 0);
/* TEST DEFAULT VALUE OCTAL */
schema = MODULE_CREATE_YANG("DF_OCT0",
@@ -632,7 +632,7 @@ test_schema_yang(void **state)
"}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid default - value does not fit the type (Value \"0377\" is out of type int8 min/max bounds.).",
- "Schema location \"/DF_OCT2:port\".");
+ "/DF_OCT2:port", 0);
/* TEST DEFAULT VALUE OCTAL ERROR*/
schema = MODULE_CREATE_YANG("DF_OCT3",
@@ -642,7 +642,7 @@ test_schema_yang(void **state)
"}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid default - value does not fit the type (Value \"-0201\" is out of type int8 min/max bounds.).",
- "Schema location \"/DF_OCT3:port\".");
+ "/DF_OCT3:port", 0);
/* TEST DEFAULT VALUE OCTAL ERROR*/
schema = MODULE_CREATE_YANG("DF_OCT4",
@@ -652,7 +652,7 @@ test_schema_yang(void **state)
"}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid default - value does not fit the type (Value \"0200\" is out of type int8 min/max bounds.).",
- "Schema location \"/DF_OCT4:port\".");
+ "/DF_OCT4:port", 0);
}
static void
@@ -745,7 +745,7 @@ test_schema_yin(void **state)
" "
"");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EEXIST);
- CHECK_LOG_CTX("Invalid range restriction - values are not in ascending order (0).", "Path \"/TE0:port\".");
+ CHECK_LOG_CTX("Invalid range restriction - values are not in ascending order (0).", "/TE0:port", 0);
/* TEST ERROR 0 .. 128 */
schema = MODULE_CREATE_YIN("TE1",
@@ -753,7 +753,7 @@ test_schema_yin(void **state)
" "
"");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EDENIED);
- CHECK_LOG_CTX("Invalid range restriction - value \"128\" does not fit the type limitations.", "Path \"/TE1:port\".");
+ CHECK_LOG_CTX("Invalid range restriction - value \"128\" does not fit the type limitations.", "/TE1:port", 0);
/* TEST ERROR -129 .. 126 */
schema = MODULE_CREATE_YIN("TE2",
@@ -761,7 +761,7 @@ test_schema_yin(void **state)
" "
"");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EDENIED);
- CHECK_LOG_CTX("Invalid range restriction - value \"-129\" does not fit the type limitations.", "Path \"/TE2:port\".");
+ CHECK_LOG_CTX("Invalid range restriction - value \"-129\" does not fit the type limitations.", "/TE2:port", 0);
/* TEST YIN */
schema = MODULE_CREATE_YIN("TS0",
@@ -817,7 +817,7 @@ test_schema_yin(void **state)
"");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid range restriction - the derived restriction (min .. max) is not equally or more limiting.",
- "Path \"/TS_ERR1:port\".");
+ "/TS_ERR1:port", 0);
/* TEST ERROR */
schema = MODULE_CREATE_YIN("TS_ERR2",
@@ -829,7 +829,7 @@ test_schema_yin(void **state)
"");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid range restriction - the derived restriction (5 .. 11) is not equally or more limiting.",
- "Path \"/TS_ERR2:port\".");
+ "/TS_ERR2:port", 0);
/* TEST DEFAULT VALUE */
schema = MODULE_CREATE_YIN("DF0",
@@ -862,7 +862,7 @@ test_schema_yin(void **state)
"");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid default - value does not fit the type (Value \"128\" is out of type int8 min/max bounds.).",
- "Schema location \"/TD_ERR0:port\".");
+ "/TD_ERR0:port", 0);
/* TEST ERROR TD1 */
schema = MODULE_CREATE_YIN("TD_ERR1",
@@ -872,7 +872,7 @@ test_schema_yin(void **state)
"");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid default - value does not fit the type (Unsatisfied range - value \"13\" is out of the allowed range.).",
- "Schema location \"/TD_ERR1:port\".");
+ "/TD_ERR1:port", 0);
/* TEST ERROR TD1 */
schema = MODULE_CREATE_YIN("TD_ERR3",
@@ -886,7 +886,7 @@ test_schema_yin(void **state)
"");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid default - value does not fit the type (Unsatisfied range - value \"10\" is out of the allowed range.).",
- "Schema location \"/TD_ERR3:my_leaf\".");
+ "/TD_ERR3:my_leaf", 0);
/* TEST DEFAULT VALUE HEXADECIMAL */
schema = MODULE_CREATE_YIN("DF_HEX0",
@@ -928,7 +928,7 @@ test_schema_yin(void **state)
"");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid default - value does not fit the type (Value \"0xff\" is out of type int8 min/max bounds.).",
- "Schema location \"/DF_HEX2:port\".");
+ "/DF_HEX2:port", 0);
/* TEST DEFAULT VALUE HEXADECIMAL ERROR */
schema = MODULE_CREATE_YIN("DF_HEX2",
@@ -938,7 +938,7 @@ test_schema_yin(void **state)
"");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid default - value does not fit the type (Value \"-0x81\" is out of type int8 min/max bounds.).",
- "Schema location \"/DF_HEX2:port\".");
+ "/DF_HEX2:port", 0);
/* TEST DEFAULT VALUE HEXADECIMAL ERROR */
schema = MODULE_CREATE_YIN("DF_HEX4",
@@ -948,7 +948,7 @@ test_schema_yin(void **state)
"");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid default - value does not fit the type (Value \"0x80\" is out of type int8 min/max bounds.).",
- "Schema location \"/DF_HEX4:port\".");
+ "/DF_HEX4:port", 0);
/* TEST DEFAULT VALUE OCTAL */
schema = MODULE_CREATE_YIN("DF_OCT0",
@@ -990,7 +990,7 @@ test_schema_yin(void **state)
"");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid default - value does not fit the type (Value \"-0201\" is out of type int8 min/max bounds.).",
- "Schema location \"/DF_OCT2:port\".");
+ "/DF_OCT2:port", 0);
/* TEST DEFAULT VALUE OCTAL ERROR */
schema = MODULE_CREATE_YIN("DF_OCT3",
@@ -1000,7 +1000,7 @@ test_schema_yin(void **state)
"");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid default - value does not fit the type (Value \"0200\" is out of type int8 min/max bounds.).",
- "Schema location \"/DF_OCT3:port\".");
+ "/DF_OCT3:port", 0);
}
static void
@@ -1117,20 +1117,15 @@ test_data_xml(void **state)
TEST_SUCCESS_XML("defs", "0", INT8, "0", 0);
TEST_SUCCESS_XML("defs", "-0", INT8, "0", 0);
TEST_ERROR_XML("defs", "-1");
- CHECK_LOG_CTX("Unsatisfied range - value \"-1\" is out of the allowed range.",
- "Schema location \"/defs:port\", line number 1.");
+ CHECK_LOG_CTX("Unsatisfied range - value \"-1\" is out of the allowed range.", "/defs:port", 1);
TEST_ERROR_XML("defs", "51");
- CHECK_LOG_CTX("Unsatisfied range - value \"51\" is out of the allowed range.",
- "Schema location \"/defs:port\", line number 1.");
+ CHECK_LOG_CTX("Unsatisfied range - value \"51\" is out of the allowed range.", "/defs:port", 1);
TEST_ERROR_XML("defs", "106");
- CHECK_LOG_CTX("Unsatisfied range - value \"106\" is out of the allowed range.",
- "Schema location \"/defs:port\", line number 1.");
+ CHECK_LOG_CTX("Unsatisfied range - value \"106\" is out of the allowed range.", "/defs:port", 1);
TEST_ERROR_XML("defs", "104");
- CHECK_LOG_CTX("Unsatisfied range - value \"104\" is out of the allowed range.",
- "Schema location \"/defs:port\", line number 1.");
+ CHECK_LOG_CTX("Unsatisfied range - value \"104\" is out of the allowed range.", "/defs:port", 1);
TEST_ERROR_XML("defs", "60");
- CHECK_LOG_CTX("Unsatisfied range - value \"60\" is out of the allowed range.",
- "Schema location \"/defs:port\", line number 1.");
+ CHECK_LOG_CTX("Unsatisfied range - value \"60\" is out of the allowed range.", "/defs:port", 1);
schema = MODULE_CREATE_YANG("T0", "leaf port {type int8; }");
UTEST_ADD_MODULE(schema, LYS_IN_YANG, NULL, NULL);
@@ -1144,17 +1139,13 @@ test_data_xml(void **state)
TEST_SUCCESS_XML("T0", "-015", INT8, "-15", -15);
TEST_SUCCESS_XML("T0", "015", INT8, "15", 15);
TEST_ERROR_XML("T0", "-129");
- CHECK_LOG_CTX("Value \"-129\" is out of type int8 min/max bounds.",
- "Schema location \"/T0:port\", line number 1.");
+ CHECK_LOG_CTX("Value \"-129\" is out of type int8 min/max bounds.", "/T0:port", 1);
TEST_ERROR_XML("T0", "128");
- CHECK_LOG_CTX("Value \"128\" is out of type int8 min/max bounds.",
- "Schema location \"/T0:port\", line number 1.");
+ CHECK_LOG_CTX("Value \"128\" is out of type int8 min/max bounds.", "/T0:port", 1);
TEST_ERROR_XML("T0", "256");
- CHECK_LOG_CTX("Value \"256\" is out of type int8 min/max bounds.",
- "Schema location \"/T0:port\", line number 1.");
+ CHECK_LOG_CTX("Value \"256\" is out of type int8 min/max bounds.", "/T0:port", 1);
TEST_ERROR_XML("T0", "1024");
- CHECK_LOG_CTX("Value \"1024\" is out of type int8 min/max bounds.",
- "Schema location \"/T0:port\", line number 1.");
+ CHECK_LOG_CTX("Value \"1024\" is out of type int8 min/max bounds.", "/T0:port", 1);
/*
* default value
@@ -1195,7 +1186,7 @@ test_data_xml(void **state)
UTEST_ADD_MODULE(schema, LYS_IN_YANG, NULL, NULL);
TEST_ERROR_XML("T2", "120");
- CHECK_LOG_CTX_APPTAG("invalid range of value", "Schema location \"/T2:port\", line number 1.", "range-violation");
+ CHECK_LOG_CTX_APPTAG("invalid range of value", "/T2:port", 1, "range-violation");
}
static void
@@ -1218,20 +1209,15 @@ test_data_json(void **state)
TEST_SUCCESS_JSON("defs", "0", INT8, "0", 0);
TEST_SUCCESS_JSON("defs", "-0", INT8, "0", 0);
TEST_ERROR_JSON("defs", "-1");
- CHECK_LOG_CTX("Unsatisfied range - value \"-1\" is out of the allowed range.",
- "Schema location \"/defs:port\", line number 1.");
+ CHECK_LOG_CTX("Unsatisfied range - value \"-1\" is out of the allowed range.", "/defs:port", 1);
TEST_ERROR_JSON("defs", "51");
- CHECK_LOG_CTX("Unsatisfied range - value \"51\" is out of the allowed range.",
- "Schema location \"/defs:port\", line number 1.");
+ CHECK_LOG_CTX("Unsatisfied range - value \"51\" is out of the allowed range.", "/defs:port", 1);
TEST_ERROR_JSON("defs", "106");
- CHECK_LOG_CTX("Unsatisfied range - value \"106\" is out of the allowed range.",
- "Schema location \"/defs:port\", line number 1.");
+ CHECK_LOG_CTX("Unsatisfied range - value \"106\" is out of the allowed range.", "/defs:port", 1);
TEST_ERROR_JSON("defs", "104");
- CHECK_LOG_CTX("Unsatisfied range - value \"104\" is out of the allowed range.",
- "Schema location \"/defs:port\", line number 1.");
+ CHECK_LOG_CTX("Unsatisfied range - value \"104\" is out of the allowed range.", "/defs:port", 1);
TEST_ERROR_JSON("defs", "60");
- CHECK_LOG_CTX("Unsatisfied range - value \"60\" is out of the allowed range.",
- "Schema location \"/defs:port\", line number 1.");
+ CHECK_LOG_CTX("Unsatisfied range - value \"60\" is out of the allowed range.", "/defs:port", 1);
schema = MODULE_CREATE_YANG("T0", "leaf port {type int8; }");
UTEST_ADD_MODULE(schema, LYS_IN_YANG, NULL, NULL);
@@ -1243,26 +1229,19 @@ test_data_json(void **state)
TEST_SUCCESS_JSON("T0", "127", INT8, "127", 127);
/* leading zeros */
TEST_ERROR_JSON("T0", "015");
- CHECK_LOG_CTX("Invalid character sequence \"15}\", expected a JSON object-end or next item.",
- "Line number 1.");
+ CHECK_LOG_CTX("Invalid character sequence \"15}\", expected a JSON object-end or next item.", NULL, 1);
TEST_ERROR_JSON("T0", "-015");
- CHECK_LOG_CTX("Invalid character sequence \"15}\", expected a JSON object-end or next item.",
- "Line number 1.");
+ CHECK_LOG_CTX("Invalid character sequence \"15}\", expected a JSON object-end or next item.", NULL, 1);
TEST_ERROR_JSON("defs", "+50");
- CHECK_LOG_CTX("Invalid character sequence \"+50}\", expected a JSON value.",
- "Line number 1.");
+ CHECK_LOG_CTX("Invalid character sequence \"+50}\", expected a JSON value.", NULL, 1);
TEST_ERROR_JSON("T0", "-129");
- CHECK_LOG_CTX("Value \"-129\" is out of type int8 min/max bounds.",
- "Schema location \"/T0:port\", line number 1.");
+ CHECK_LOG_CTX("Value \"-129\" is out of type int8 min/max bounds.", "/T0:port", 1);
TEST_ERROR_JSON("T0", "128");
- CHECK_LOG_CTX("Value \"128\" is out of type int8 min/max bounds.",
- "Schema location \"/T0:port\", line number 1.");
+ CHECK_LOG_CTX("Value \"128\" is out of type int8 min/max bounds.", "/T0:port", 1);
TEST_ERROR_JSON("T0", "256");
- CHECK_LOG_CTX("Value \"256\" is out of type int8 min/max bounds.",
- "Schema location \"/T0:port\", line number 1.");
+ CHECK_LOG_CTX("Value \"256\" is out of type int8 min/max bounds.", "/T0:port", 1);
TEST_ERROR_JSON("T0", "1024");
- CHECK_LOG_CTX("Value \"1024\" is out of type int8 min/max bounds.",
- "Schema location \"/T0:port\", line number 1.");
+ CHECK_LOG_CTX("Value \"1024\" is out of type int8 min/max bounds.", "/T0:port", 1);
/*
* default value
@@ -1360,8 +1339,7 @@ test_diff(void **state)
"yang:operation=\"replace\" yang:orig-default=\"false\" yang:orig-value=\"5\">"
"121";
CHECK_PARSE_LYD_PARAM(diff_expected, LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, model_1);
- CHECK_LOG_CTX("Unsatisfied range - value \"121\" is out of the allowed range.",
- "Schema location \"/defs:port\", line number 1.");
+ CHECK_LOG_CTX("Unsatisfied range - value \"121\" is out of the allowed range.", "/defs:port", 1);
/*
* diff from default value
diff --git a/tests/utests/types/leafref.c b/tests/utests/types/leafref.c
index 21e91cd70..5d510b971 100644
--- a/tests/utests/types/leafref.c
+++ b/tests/utests/types/leafref.c
@@ -131,7 +131,7 @@ test_data_xml(void **state)
TEST_ERROR_XML2("x",
"defs", "", "lref", "y", LY_EVALID);
CHECK_LOG_CTX_APPTAG("Invalid leafref value \"y\" - no target instance \"/leaflisttarget\" with the same value.",
- "Data location \"/defs:lref\".", "instance-required");
+ "/defs:lref", 0, "instance-required");
TEST_ERROR_XML2("xab
"
"yxy
"
@@ -139,36 +139,36 @@ test_data_xml(void **state)
"defs", "", "lref2", "b", LY_EVALID);
CHECK_LOG_CTX_APPTAG("Invalid leafref value \"b\" - "
"no target instance \"../list[id = current()/../str-norestr]/targets\" with the same value.",
- "Data location \"/defs:lref2\".", "instance-required");
+ "/defs:lref2", 0, "instance-required");
TEST_ERROR_XML2("xab
"
"yxy
",
"defs", "", "lref2", "b", LY_EVALID);
CHECK_LOG_CTX_APPTAG("Invalid leafref value \"b\" - "
"no target instance \"../list[id = current()/../str-norestr]/targets\" with the same value.",
- "Data location \"/defs:lref2\".", "instance-required");
+ "/defs:lref2", 0, "instance-required");
TEST_ERROR_XML2("y",
"defs", "", "lref2", "b", LY_EVALID);
CHECK_LOG_CTX_APPTAG("Invalid leafref value \"b\" - "
"no target instance \"../list[id = current()/../str-norestr]/targets\" with the same value.",
- "Data location \"/defs:lref2\".", "instance-required");
+ "/defs:lref2", 0, "instance-required");
TEST_ERROR_XML2("y",
"leafrefs", "", "c", "xxa", LY_EVALID);
CHECK_LOG_CTX_APPTAG("Invalid leafref value \"a\" - no target instance \"../../../t:str-norestr\" with the same value.",
- "Data location \"/leafrefs:c/l[id='x'][value='x']/lr1\".", "instance-required");
+ "/leafrefs:c/l[id='x'][value='x']/lr1", 0, "instance-required");
TEST_ERROR_XML2("z",
"leafrefs", "", "c", "yyxxz", LY_EVALID);
CHECK_LOG_CTX_APPTAG("Invalid leafref value \"z\" - no target instance \"../../l[id=current()/../../../t:str-norestr]"
"[value=current()/../../../t:str-norestr]/value\" with the same value.",
- "Data location \"/leafrefs:c/l[id='x'][value='x']/lr2\".", "instance-required");
+ "/leafrefs:c/l[id='x'][value='x']/lr2", 0, "instance-required");
TEST_ERROR_XML2("",
"defs", "", "lref", "%n", LY_EVALID);
CHECK_LOG_CTX_APPTAG("Invalid leafref value \"%n\" - no target instance \"/leaflisttarget\" with the same value.",
- "Data location \"/defs:lref\".", "instance-required");
+ "/defs:lref", 0, "instance-required");
}
static void
@@ -257,7 +257,7 @@ test_xpath_invalid_schema(void **state)
"leaf r1 {type leafref {path \"deref(../l1)/../l2/t2\";}}");
UTEST_INVALID_MODULE(schema1, LYS_IN_YANG, NULL, LY_EVALID)
- CHECK_LOG_CTX("The deref function target node \"l1\" is not leaf nor leaflist", "Schema location \"/xp_test:r1\".");
+ CHECK_LOG_CTX("The deref function target node \"l1\" is not leaf nor leaflist", "/xp_test:r1", 0);
schema2 = MODULE_CREATE_YANG("xp_test",
"list l1 {key t1;"
@@ -270,7 +270,7 @@ test_xpath_invalid_schema(void **state)
"leaf r2 {type leafref {path \"deref(../r1)/../l2/t2\";}}");
UTEST_INVALID_MODULE(schema2, LYS_IN_YANG, NULL, LY_EVALID)
- CHECK_LOG_CTX("The deref function target node \"r1\" is not leafref", "Schema location \"/xp_test:r2\".");
+ CHECK_LOG_CTX("The deref function target node \"r1\" is not leafref", "/xp_test:r2", 0);
}
int
diff --git a/tests/utests/types/string.c b/tests/utests/types/string.c
index ce5ae8dfd..ebe4ec6d6 100644
--- a/tests/utests/types/string.c
+++ b/tests/utests/types/string.c
@@ -200,15 +200,15 @@ test_schema_yang(void **state)
/* ERROR TESTS NEGATIVE VALUE */
schema = MODULE_CREATE_YANG("ERR0", "leaf port {type string {length \"-1 .. 20\";}}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EDENIED);
- CHECK_LOG_CTX("Invalid length restriction - value \"-1\" does not fit the type limitations.", "Path \"/ERR0:port\".");
+ CHECK_LOG_CTX("Invalid length restriction - value \"-1\" does not fit the type limitations.", "/ERR0:port", 0);
schema = MODULE_CREATE_YANG("ERR1", "leaf port {type string {length \"100 .. 18446744073709551616\";}}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
- CHECK_LOG_CTX("Invalid length restriction - invalid value \"18446744073709551616\".", "Path \"/ERR1:port\".");
+ CHECK_LOG_CTX("Invalid length restriction - invalid value \"18446744073709551616\".", "/ERR1:port", 0);
schema = MODULE_CREATE_YANG("ERR2", "leaf port {type string {length \"10 .. 20 | 20 .. 30\";}}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EEXIST);
- CHECK_LOG_CTX("Invalid length restriction - values are not in ascending order (20).", "Path \"/ERR2:port\".");
+ CHECK_LOG_CTX("Invalid length restriction - values are not in ascending order (20).", "/ERR2:port", 0);
schema = MODULE_CREATE_YANG("ERR3",
"typedef my_type {"
@@ -216,7 +216,7 @@ test_schema_yang(void **state)
"}"
"leaf port {type my_type {length \"-1 .. 15\";}}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EDENIED);
- CHECK_LOG_CTX("Invalid length restriction - value \"-1\" does not fit the type limitations.", "Path \"/ERR3:port\".");
+ CHECK_LOG_CTX("Invalid length restriction - value \"-1\" does not fit the type limitations.", "/ERR3:port", 0);
/*
* PATTERN
@@ -286,7 +286,7 @@ test_schema_yang(void **state)
"}}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
CHECK_LOG_CTX("Regular expression \"[a-zA-Z_[a-zA-Z0-9\\-_.*\" is not valid (\"\": missing terminating ] for character class).",
- "Path \"/TPATTERN_ERR_0:port\".");
+ "/TPATTERN_ERR_0:port", 0);
schema = MODULE_CREATE_YANG("TDEFAULT_0",
"typedef my_type {"
@@ -323,14 +323,14 @@ test_schema_yang(void **state)
"}}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
CHECK_LOG_CTX("Regular expression \"\\[a]b\" is not valid (\"]b\": character group doesn't begin with '[').",
- "Path \"/TPATTERN_BC_ERR_1:port\".");
+ "/TPATTERN_BC_ERR_1:port", 0);
schema = MODULE_CREATE_YANG("TPATTERN_BC_ERR_2", "leaf port {type string {"
"pattern \"\\\\[a]b\";" /* pattern "\\[a]b"; */
"}}");
UTEST_INVALID_MODULE(schema, LYS_IN_YANG, NULL, LY_EVALID);
CHECK_LOG_CTX("Regular expression \"\\[a]b\" is not valid (\"]b\": character group doesn't begin with '[').",
- "Path \"/TPATTERN_BC_ERR_2:port\".");
+ "/TPATTERN_BC_ERR_2:port", 0);
/* PATTERN AND LENGTH */
schema = MODULE_CREATE_YANG("TPL_0",
@@ -467,26 +467,26 @@ test_schema_yin(void **state)
schema = MODULE_CREATE_YIN("ERR0", " "
" ");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EDENIED);
- CHECK_LOG_CTX("Invalid length restriction - value \"-1\" does not fit the type limitations.", "Path \"/ERR0:port\".");
+ CHECK_LOG_CTX("Invalid length restriction - value \"-1\" does not fit the type limitations.", "/ERR0:port", 0);
schema = MODULE_CREATE_YIN("ERR1", " "
""
" ");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
- CHECK_LOG_CTX("Invalid length restriction - invalid value \"18446744073709551616\".", "Path \"/ERR1:port\".");
+ CHECK_LOG_CTX("Invalid length restriction - invalid value \"18446744073709551616\".", "/ERR1:port", 0);
schema = MODULE_CREATE_YIN("ERR2", ""
" "
" ");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EEXIST);
- CHECK_LOG_CTX("Invalid length restriction - values are not in ascending order (20).", "Path \"/ERR2:port\".");
+ CHECK_LOG_CTX("Invalid length restriction - values are not in ascending order (20).", "/ERR2:port", 0);
schema = MODULE_CREATE_YIN("ERR3",
" "
" "
" ");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EDENIED);
- CHECK_LOG_CTX("Invalid length restriction - value \"-1\" does not fit the type limitations.", "Path \"/ERR3:port\".");
+ CHECK_LOG_CTX("Invalid length restriction - value \"-1\" does not fit the type limitations.", "/ERR3:port", 0);
/*
* PATTERN
@@ -557,7 +557,7 @@ test_schema_yin(void **state)
" ");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
CHECK_LOG_CTX("Regular expression \"[a-zA-Z_][a-zA-Z0-9\\-_.*\" is not valid (\"\": missing terminating ] for character class).",
- "Path \"/TPATTERN_ERR_0:port\".");
+ "/TPATTERN_ERR_0:port", 0);
/*
* DEFAUT VALUE
@@ -619,7 +619,7 @@ test_schema_yin(void **state)
" ");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid default - value does not fit the type (Unsatisfied length - string \"a1i-j<\" length is not allowed.).",
- "Schema location \"/TDEFAULT_2:port\".");
+ "/TDEFAULT_2:port", 0);
schema = MODULE_CREATE_YIN("TDEFAULT_3",
""
@@ -629,7 +629,7 @@ test_schema_yin(void **state)
" ");
UTEST_INVALID_MODULE(schema, LYS_IN_YIN, NULL, LY_EVALID);
CHECK_LOG_CTX("Invalid default - value does not fit the type (Unsatisfied pattern - \"a1i-j<\" does not conform to \"bcd.*\".).",
- "Schema location \"/TDEFAULT_3:port\".");
+ "/TDEFAULT_3:port", 0);
}
@@ -737,12 +737,11 @@ test_data_xml(void **state)
/* error */
TEST_ERROR_XML("T0", "< df");
- CHECK_LOG_CTX("Child element \"df\" inside a terminal node \"port\" found.",
- "Data location \"/T0:port\", line number 1.");
+ CHECK_LOG_CTX("Child element \"df\" inside a terminal node \"port\" found.", "/T0:port", 1);
TEST_ERROR_XML("T0", "&text;");
- CHECK_LOG_CTX("Entity reference \"&text;"
"121";
CHECK_PARSE_LYD_PARAM(diff_expected, LYD_XML, 0, LYD_VALIDATE_PRESENT, LY_EVALID, model_1);
- CHECK_LOG_CTX("Unsatisfied length - string \"121\" length is not allowed.",
- "Schema location \"/T_DIFF:port\", line number 1.");
+ CHECK_LOG_CTX("Unsatisfied length - string \"121\" length is not allowed.", "/T_DIFF:port", 1);
/* diff from default value */
data_1 = "";
diff --git a/tests/utests/types/uint16.c b/tests/utests/types/uint16.c
index 7cbb01437..2ded9eb59 100644
--- a/tests/utests/types/uint16.c
+++ b/tests/utests/types/uint16.c
@@ -60,8 +60,7 @@ test_data_xml(void **state)
UTEST_ADD_MODULE(schema, LYS_IN_YANG, NULL, NULL);
TEST_ERROR_XML("defs", "\n 1500 \t\n ");
- CHECK_LOG_CTX("Unsatisfied range - value \"1500\" is out of the allowed range.",
- "Schema location \"/defs:port\", line number 3.");
+ CHECK_LOG_CTX("Unsatisfied range - value \"1500\" is out of the allowed range.", "/defs:port", 3);
}
int
diff --git a/tests/utests/types/uint32.c b/tests/utests/types/uint32.c
index e3e637742..89221c404 100644
--- a/tests/utests/types/uint32.c
+++ b/tests/utests/types/uint32.c
@@ -60,8 +60,7 @@ test_data_xml(void **state)
UTEST_ADD_MODULE(schema, LYS_IN_YANG, NULL, NULL);
TEST_ERROR_XML("defs", "-10");
- CHECK_LOG_CTX("Value \"-10\" is out of type uint32 min/max bounds.",
- "Schema location \"/defs:port\", line number 1.");
+ CHECK_LOG_CTX("Value \"-10\" is out of type uint32 min/max bounds.", "/defs:port", 1);
}
int
diff --git a/tests/utests/types/uint64.c b/tests/utests/types/uint64.c
index 401c37c72..71e024e09 100644
--- a/tests/utests/types/uint64.c
+++ b/tests/utests/types/uint64.c
@@ -60,16 +60,13 @@ test_data_xml(void **state)
UTEST_ADD_MODULE(schema, LYS_IN_YANG, NULL, NULL);
TEST_ERROR_XML("defs", "");
- CHECK_LOG_CTX("Invalid type uint64 empty value.",
- "Schema location \"/defs:port\", line number 1.");
+ CHECK_LOG_CTX("Invalid type uint64 empty value.", "/defs:port", 1);
TEST_ERROR_XML("defs", " ");
- CHECK_LOG_CTX("Invalid type uint64 empty value.",
- "Schema location \"/defs:port\", line number 1.");
+ CHECK_LOG_CTX("Invalid type uint64 empty value.", "/defs:port", 1);
TEST_ERROR_XML("defs", "10 xxx");
- CHECK_LOG_CTX("Invalid type uint64 value \"10 xxx\".",
- "Schema location \"/defs:port\", line number 1.");
+ CHECK_LOG_CTX("Invalid type uint64 value \"10 xxx\".", "/defs:port", 1);
}
int
diff --git a/tests/utests/types/uint8.c b/tests/utests/types/uint8.c
index dad4039c1..89b89a7f7 100644
--- a/tests/utests/types/uint8.c
+++ b/tests/utests/types/uint8.c
@@ -62,8 +62,7 @@ test_data_xml(void **state)
TEST_SUCCESS_XML("defs", "\n 150 \t\n ", UINT8, "150", 150);
TEST_ERROR_XML("defs", "\n 15 \t\n ");
- CHECK_LOG_CTX("Unsatisfied range - value \"15\" is out of the allowed range.",
- "Schema location \"/defs:port\", line number 3.");
+ CHECK_LOG_CTX("Unsatisfied range - value \"15\" is out of the allowed range.", "/defs:port", 3);
}
int
diff --git a/tests/utests/types/union.c b/tests/utests/types/union.c
index d23cbf1da..07c386ee1 100644
--- a/tests/utests/types/union.c
+++ b/tests/utests/types/union.c
@@ -110,7 +110,7 @@ test_data_xml(void **state)
" libyang 2 - identityref, version 1: Invalid identityref \"123456789012345678901\" value - identity not found in module \"defs\".\n"
" libyang 2 - instance-identifier, version 1: Invalid instance-identifier \"123456789012345678901\" value - syntax error.\n"
" libyang 2 - string, version 1: Unsatisfied length - string \"123456789012345678901\" length is not allowed.\n",
- "Schema location \"/defs:un1\", line number 1.");
+ "/defs:un1", 1);
}
static void
diff --git a/tests/utests/types/yang_types.c b/tests/utests/types/yang_types.c
index 0f7845517..56778c4c7 100644
--- a/tests/utests/types/yang_types.c
+++ b/tests/utests/types/yang_types.c
@@ -114,13 +114,13 @@ test_data_xml(void **state)
TEST_ERROR_XML("a", "l", "2005-05-31T23:15:15.-08:00", LY_EVALID);
CHECK_LOG_CTX("Unsatisfied pattern - \"2005-05-31T23:15:15.-08:00\" does not conform to "
"\"\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|[\\+\\-]\\d{2}:\\d{2})\".",
- "Schema location \"/a:l\", line number 1.");
+ "/a:l", 1);
TEST_ERROR_XML("a", "l", "2023-16-15T20:13:01+01:00", LY_EINVAL);
- CHECK_LOG_CTX("Invalid date-and-time month \"15\".", "Schema location \"/a:l\", line number 1.");
+ CHECK_LOG_CTX("Invalid date-and-time month \"15\".", "/a:l", 1);
TEST_ERROR_XML("a", "l", "2023-10-15T20:13:01+95:00", LY_EINVAL);
- CHECK_LOG_CTX("Invalid date-and-time timezone hour \"95\".", "Schema location \"/a:l\", line number 1.");
+ CHECK_LOG_CTX("Invalid date-and-time timezone hour \"95\".", "/a:l", 1);
/* hex-string */
TEST_SUCCESS_XML("a", "l21", "DB:BA:12:54:fa", STRING, "db:ba:12:54:fa");
@@ -138,12 +138,11 @@ test_data_xml(void **state)
TEST_SUCCESS_XML("a", "l3", "/l3[. = '4']", STRING, "/l3[.='4']");
TEST_ERROR_XML("a", "l3", "/a:l3[. = '4']", LY_EVALID);
- CHECK_LOG_CTX("Failed to resolve prefix \"a\".", "Schema location \"/a:l3\", line number 1.");
+ CHECK_LOG_CTX("Failed to resolve prefix \"a\".", "/a:l3", 1);
TEST_ERROR_XML("a\" xmlns:yl=\"urn:ietf:params:xml:ns:yang:ietf-yang-library", "l3",
"/yl:yang-library/yl:datastore/yl::name", LY_EVALID);
- CHECK_LOG_CTX("Storing value failed.", "Schema location \"/a:l3\", line number 1.");
- CHECK_LOG_CTX("Invalid character 'y'[31] of expression '/yl:yang-library/yl:datastore/yl::name'.",
- "Schema location \"/a:l3\", line number 1.");
+ CHECK_LOG_CTX("Storing value failed.", "/a:l3", 1);
+ CHECK_LOG_CTX("Invalid character 'y'[31] of expression '/yl:yang-library/yl:datastore/yl::name'.", "/a:l3", 1);
}
static void
diff --git a/tests/utests/utests.h b/tests/utests/utests.h
index 0e0649d4e..6824db4e6 100644
--- a/tests/utests/utests.h
+++ b/tests/utests/utests.h
@@ -93,9 +93,6 @@
struct utest_context {
struct ly_ctx *ctx; /**< libyang context */
- char *err_msg; /**< Directly logged error message */
- char *err_path; /**< Directly logged error path */
-
struct ly_in *in; /**< Input handler */
struct ly_out *out; /**< Outpu handler */
@@ -1216,8 +1213,8 @@ struct utest_context {
LY_ERR __r = lys_parse(_UC->ctx, _UC->in, FORMAT, FEATURES, MOD); \
if (__r != LY_SUCCESS) { \
print_message("[ MSG ] Module parsing failed:\n"); \
- for (struct ly_err_item *e = ly_err_first(_UC->ctx); e; e = e->next) { \
- print_message("[ MSG ] \t%s Path %s\n", e->msg, e->path); \
+ for (const struct ly_err_item *e = ly_err_first(_UC->ctx); e; e = e->next) { \
+ print_message("[ MSG ] \t%s Schema path %s\n", e->msg, e->schema_path); \
} \
fail(); \
} \
@@ -1231,24 +1228,30 @@ struct utest_context {
* @param[in] MSG Expected error message.
*/
#define CHECK_LOG_LASTMSG(MSG) \
- CHECK_STRING(ly_last_errmsg(), MSG)
+ CHECK_STRING(ly_last_logmsg(), MSG)
/**
* @brief Check expected last error in libyang context, which is then cleared. Can be called repeatedly to check
* several errors. If NULL is provided as MSG, no error info record (NULL) is expected.
*
* @param[in] MSG Expected error message.
- * @param[in] PATH Expected error path.
+ * @param[in] PATH Expected error data/schema path.
+ * @param[in] LINE Expected error line.
*/
-#define CHECK_LOG_CTX(MSG, PATH) \
+#define CHECK_LOG_CTX(MSG, PATH, LINE) \
{ \
- struct ly_err_item *_e = ly_err_last(_UC->ctx); \
+ struct ly_err_item *_e = (struct ly_err_item *)ly_err_last(_UC->ctx); \
if (!MSG) { \
assert_null(_e); \
} else { \
assert_non_null(_e); \
CHECK_STRING(_e->msg, MSG); \
- CHECK_STRING(_e->path, PATH); \
+ if (_e->data_path) { \
+ CHECK_STRING(_e->data_path, PATH); \
+ } else { \
+ CHECK_STRING(_e->schema_path, PATH); \
+ } \
+ assert_int_equal(_e->line, LINE); \
} \
ly_err_clean(_UC->ctx, _e); \
}
@@ -1257,18 +1260,24 @@ struct utest_context {
* @brief Check expected error in libyang context including error-app-tag.
*
* @param[in] MSG Expected error message.
- * @param[in] PATH Expected error path.
+ * @param[in] PATH Expected error data/schema path.
+ * @param[in] LINE Expected error line.
* @param[in] APPTAG Expected error-app-tag.
*/
-#define CHECK_LOG_CTX_APPTAG(MSG, PATH, APPTAG) \
+#define CHECK_LOG_CTX_APPTAG(MSG, PATH, LINE, APPTAG) \
{ \
- struct ly_err_item *_e = ly_err_last(_UC->ctx); \
+ struct ly_err_item *_e = (struct ly_err_item *)ly_err_last(_UC->ctx); \
if (!MSG) { \
assert_null(_e); \
} else { \
assert_non_null(_e); \
CHECK_STRING(_e->msg, MSG); \
- CHECK_STRING(_e->path, PATH); \
+ if (_e->data_path) { \
+ CHECK_STRING(_e->data_path, PATH); \
+ } else { \
+ CHECK_STRING(_e->schema_path, PATH); \
+ } \
+ assert_int_equal(_e->line, LINE); \
CHECK_STRING(_e->apptag, APPTAG); \
} \
ly_err_clean(_UC->ctx, _e); \
@@ -1280,26 +1289,6 @@ struct utest_context {
#define UTEST_LOG_CTX_CLEAN \
ly_err_clean(_UC->ctx, NULL)
-/**
- * @brief Clean up the logging callback's storage.
- */
-#define UTEST_LOG_CLEAN \
- free(_UC->err_msg); \
- free(_UC->err_path); \
- _UC->err_msg = NULL; \
- _UC->err_path = NULL;
-
-/**
- * @brief Check expected error directly logged via logging callback.
- * Useful mainly for messages logged by functions without access to libyang context.
- * @param[in] MSG Expected error message.
- * @param[in] PATH Expected error path.
- */
-#define CHECK_LOG(MSG, PATH) \
- CHECK_STRING(_UC->err_msg, MSG); \
- CHECK_STRING(_UC->err_path, PATH); \
- UTEST_LOG_CLEAN
-
#ifdef _UTEST_MAIN_
/*
* Functions inlined into each C source file including this header with _UTEST_MAIN_ defined
@@ -1310,27 +1299,6 @@ struct utest_context {
*/
struct utest_context *current_utest_context;
-/* set to 0 to printing error messages to stderr instead of checking them in code */
-#define ENABLE_LOGGER_CHECKING 1
-
-/**
- * @brief Logging callback for libyang.
- */
-static void
-_utest_logger(LY_LOG_LEVEL level, const char *msg, const char *path)
-{
- (void) level; /* unused */
-
- if (ENABLE_LOGGER_CHECKING == 0) {
- printf("\tERROR:\n\t\tMESSAGE: %s\n\t\tPATH: %s\n\t\tLEVEL: %i\n", msg, path, level);
- } else {
- free(current_utest_context->err_msg);
- current_utest_context->err_msg = msg ? strdup(msg) : NULL;
- free(current_utest_context->err_path);
- current_utest_context->err_path = path ? strdup(path) : NULL;
- }
-}
-
/**
* @brief Generic utest's setup
*/
@@ -1340,8 +1308,7 @@ utest_setup(void **state)
char *cur_tz;
/* setup the logger */
- ly_set_log_clb(_utest_logger, 1);
- ly_log_options(LY_LOLOG | LY_LOSTORE);
+ ly_log_options(/*LY_LOLOG |*/ LY_LOSTORE);
current_utest_context = calloc(1, sizeof *current_utest_context);
assert_non_null(current_utest_context);
@@ -1350,9 +1317,6 @@ utest_setup(void **state)
/* libyang context */
assert_int_equal(LY_SUCCESS, ly_ctx_new(NULL, 0, ¤t_utest_context->ctx));
- /* clean all errors from the setup - usually warnings regarding the plugins directories */
- UTEST_LOG_CLEAN;
-
/* backup timezone, if any */
cur_tz = getenv("TZ");
if (cur_tz) {
@@ -1392,8 +1356,6 @@ utest_teardown(void **state)
/* utest context */
ly_in_free(current_utest_context->in, 0);
- free(current_utest_context->err_msg);
- free(current_utest_context->err_path);
free(current_utest_context->orig_tz);
free(current_utest_context);
current_utest_context = NULL;
diff --git a/tools/lint/main_ni.c b/tools/lint/main_ni.c
index df51257e0..7572248be 100644
--- a/tools/lint/main_ni.c
+++ b/tools/lint/main_ni.c
@@ -223,7 +223,7 @@ help(int shortout)
}
static void
-libyang_verbclb(LY_LOG_LEVEL level, const char *msg, const char *path)
+libyang_verbclb(LY_LOG_LEVEL level, const char *msg, const char *data_path, const char *schema_path, uint64_t line)
{
char *levstr;
@@ -241,8 +241,12 @@ libyang_verbclb(LY_LOG_LEVEL level, const char *msg, const char *path)
levstr = "dbg :";
break;
}
- if (path) {
- fprintf(stderr, "libyang %s %s (%s)\n", levstr, msg, path);
+ if (data_path) {
+ fprintf(stderr, "libyang %s %s (%s)\n", levstr, msg, data_path);
+ } else if (schema_path) {
+ fprintf(stderr, "libyang %s %s (%s)\n", levstr, msg, schema_path);
+ } else if (line) {
+ fprintf(stderr, "libyang %s %s (line %" PRIu64 ")\n", levstr, msg, line);
} else {
fprintf(stderr, "libyang %s %s\n", levstr, msg);
}
@@ -719,7 +723,7 @@ main_ni(int argc, char *argv[])
uint32_t u;
/* set callback for printing libyang messages */
- ly_set_log_clb(libyang_verbclb, 1);
+ ly_set_log_clb(libyang_verbclb);
r = fill_context(argc, argv, &yo, &ctx);
if (r < 0) {
diff --git a/tools/re/main.c b/tools/re/main.c
index 5e3353645..5d1edd573 100644
--- a/tools/re/main.c
+++ b/tools/re/main.c
@@ -73,10 +73,9 @@ version(void)
}
void
-pattern_error(LY_LOG_LEVEL level, const char *msg, const char *path)
+pattern_error(LY_LOG_LEVEL level, const char *msg, const char *UNUSED(data_path), const char *UNUSED(schema_path),
+ uint64_t UNUSED(line))
{
- (void) path; /* unused */
-
if (level == LY_LLERR) {
fprintf(stderr, "yangre error: %s\n", msg);
}
@@ -301,7 +300,7 @@ create_module(struct yr_pattern *patterns, int patterns_count, char **mod)
}
static void
-print_verbose(struct ly_ctx *ctx, struct yr_pattern *patterns, int patterns_count, char *str, LY_ERR match)
+print_verbose(struct yr_pattern *patterns, int patterns_count, char *str, LY_ERR match)
{
int i;
@@ -315,7 +314,7 @@ print_verbose(struct ly_ctx *ctx, struct yr_pattern *patterns, int patterns_coun
} else if (match == LY_EVALID) {
fprintf(stdout, "result : not matching\n");
} else {
- fprintf(stdout, "result : error (%s)\n", ly_errmsg(ctx));
+ fprintf(stdout, "result : error (%s)\n", ly_last_logmsg());
}
}
@@ -425,7 +424,7 @@ main(int argc, char *argv[])
goto cleanup;
}
- ly_set_log_clb(pattern_error, 0);
+ ly_set_log_clb(pattern_error);
if (lys_parse_mem(ctx, modstr, LYS_IN_YANG, &mod) || !mod->compiled || !mod->compiled->data) {
goto cleanup;
}
@@ -434,7 +433,7 @@ main(int argc, char *argv[])
match = lyd_value_validate(ctx, mod->compiled->data, str, strlen(str), NULL, NULL, NULL);
if (verbose) {
- print_verbose(ctx, patterns, patterns_count, str, match);
+ print_verbose(patterns, patterns_count, str, match);
}
if (match == LY_SUCCESS) {
ret = 0;