|
Packit |
8fb591 |
/**
|
|
Packit |
8fb591 |
* @file test_metadata.c
|
|
Packit |
8fb591 |
* @author Radek Krejci <rkrejci@cesnet.cz>
|
|
Packit |
8fb591 |
* @brief Cmocka tests for ietf-yang-metadata (annotations extension).
|
|
Packit |
8fb591 |
*
|
|
Packit |
8fb591 |
* Copyright (c) 2017 CESNET, z.s.p.o.
|
|
Packit |
8fb591 |
*
|
|
Packit |
8fb591 |
* This source code is licensed under BSD 3-Clause License (the "License").
|
|
Packit |
8fb591 |
* You may not use this file except in compliance with the License.
|
|
Packit |
8fb591 |
* You may obtain a copy of the License at
|
|
Packit |
8fb591 |
*
|
|
Packit |
8fb591 |
* https://opensource.org/licenses/BSD-3-Clause
|
|
Packit |
8fb591 |
*/
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
#include <stdio.h>
|
|
Packit |
8fb591 |
#include <stdlib.h>
|
|
Packit |
8fb591 |
#include <setjmp.h>
|
|
Packit |
8fb591 |
#include <stdarg.h>
|
|
Packit |
8fb591 |
#include <cmocka.h>
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
#include "tests/config.h"
|
|
Packit |
8fb591 |
#include "libyang.h"
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
struct state {
|
|
Packit |
8fb591 |
struct ly_ctx *ctx;
|
|
Packit |
8fb591 |
struct lyd_node *data;
|
|
Packit |
8fb591 |
char *str;
|
|
Packit |
8fb591 |
};
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
static int
|
|
Packit |
8fb591 |
setup_f(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st;
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
(*state) = st = calloc(1, sizeof *st);
|
|
Packit |
8fb591 |
if (!st) {
|
|
Packit |
8fb591 |
fprintf(stderr, "Memory allocation error");
|
|
Packit |
8fb591 |
return -1;
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* libyang context */
|
|
Packit |
8fb591 |
st->ctx = ly_ctx_new(TESTS_DIR"/schema/yang/ietf/", 0);
|
|
Packit |
8fb591 |
if (!st->ctx) {
|
|
Packit |
8fb591 |
fprintf(stderr, "Failed to create context.\n");
|
|
Packit |
8fb591 |
goto error;
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
return 0;
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
error:
|
|
Packit |
8fb591 |
ly_ctx_destroy(st->ctx, NULL);
|
|
Packit |
8fb591 |
free(st);
|
|
Packit |
8fb591 |
(*state) = NULL;
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
return -1;
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
static int
|
|
Packit |
8fb591 |
teardown_f(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
free(st->str);
|
|
Packit |
8fb591 |
lyd_free_withsiblings(st->data);
|
|
Packit |
8fb591 |
ly_ctx_destroy(st->ctx, NULL);
|
|
Packit |
8fb591 |
free(st);
|
|
Packit |
8fb591 |
(*state) = NULL;
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
return 0;
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/*
|
|
Packit |
8fb591 |
* leafref is not supported for annotations in libyang
|
|
Packit |
8fb591 |
*/
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_leafref_type(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" import ietf-yang-metadata { prefix md; }"
|
|
Packit |
8fb591 |
" md:annotation x { type leafref { path \"/x:a\"; } }"
|
|
Packit |
8fb591 |
" leaf a { type string; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_equal(mod, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EPLUGIN);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/*
|
|
Packit |
8fb591 |
* attribute with no appropriate anotation specification cannot be loaded
|
|
Packit |
8fb591 |
*/
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_unknown_metadata_xml(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" leaf a { type string; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input = "a";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* parse input with strict - error */
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_XML, LYD_OPT_CONFIG | LYD_OPT_STRICT, NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_INATTR);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* parse input without strict - passes, but the attribute is not present */
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_XML, LYD_OPT_CONFIG, NULL);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data->attr, NULL);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_unknown_metadata_json(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" leaf a { type string; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input = "{"
|
|
Packit |
8fb591 |
"\"x:a\": \"a\","
|
|
Packit |
8fb591 |
"\"@x:a\": {"
|
|
Packit |
8fb591 |
"\"x:attribute\": \"not-defined\""
|
|
Packit |
8fb591 |
"}"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* parse input with strict - error */
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_JSON, LYD_OPT_CONFIG | LYD_OPT_STRICT, NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_INMETA);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* parse input without strict - passes, but the attribute is not present */
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_JSON, LYD_OPT_CONFIG, NULL);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data->attr, NULL);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/*
|
|
Packit |
8fb591 |
* correctness of parsing and printing NETCONF's filter's attributes
|
|
Packit |
8fb591 |
*/
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_filter1_xml(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *filter_subtree = "<get xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">"
|
|
Packit |
8fb591 |
"<filter type=\"subtree\">
|
|
Packit |
8fb591 |
"xmlns=\"urn:ietf:params:xml:ns:yang:ietf-yang-library\"><module-set-id/>"
|
|
Packit |
8fb591 |
"</modules-state></filter></get>";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, filter_subtree, LYD_XML, LYD_OPT_RPC, NULL);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->data, NULL);
|
|
Packit |
8fb591 |
lyd_print_mem(&st->str, st->data, LYD_XML, 0);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->str, NULL);
|
|
Packit |
8fb591 |
assert_string_equal(st->str, filter_subtree);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_filter2_xml(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *filter_xpath = "<get xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">"
|
|
Packit |
8fb591 |
"
|
|
Packit |
8fb591 |
"xmlns:yanglib=\"urn:ietf:params:xml:ns:yang:ietf-yang-library\" "
|
|
Packit |
8fb591 |
"select=\"/yanglib:modules-state/yanglib:module-set-id\"/></get>";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal((mod = lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG)), NULL);
|
|
Packit |
8fb591 |
assert_int_equal(lys_features_enable(mod, "xpath"), 0);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, filter_xpath, LYD_XML, LYD_OPT_RPC, NULL);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->data, NULL);
|
|
Packit |
8fb591 |
lyd_print_mem(&st->str, st->data, LYD_XML, 0);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->str, NULL);
|
|
Packit |
8fb591 |
assert_string_equal(st->str, filter_xpath);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/*
|
|
Packit |
8fb591 |
* correctness of parsing and printing NETCONF's filter attributes
|
|
Packit |
8fb591 |
* - incorrect namespace
|
|
Packit |
8fb591 |
*/
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_filter3_xml(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *input =
|
|
Packit |
8fb591 |
"<get-config xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.1\">"
|
|
Packit |
8fb591 |
"<source>"
|
|
Packit |
8fb591 |
"<running/>"
|
|
Packit |
8fb591 |
"</source>"
|
|
Packit |
8fb591 |
"<filter nc:type=\"subtree\">"
|
|
Packit |
8fb591 |
"<some>filter</some>"
|
|
Packit |
8fb591 |
"</filter>"
|
|
Packit |
8fb591 |
"</get-config>";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_XML, LYD_OPT_RPC | LYD_OPT_STRICT, NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_INATTR);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_XML, LYD_OPT_RPC, NULL);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data->child->next->attr, NULL);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/*
|
|
Packit |
8fb591 |
* correctness of parsing and printing NETCONF's filter attributes
|
|
Packit |
8fb591 |
* - incorrect value
|
|
Packit |
8fb591 |
*/
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_filter4_xml(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *input =
|
|
Packit |
8fb591 |
"<get-config xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">"
|
|
Packit |
8fb591 |
"<source>"
|
|
Packit |
8fb591 |
"<running/>"
|
|
Packit |
8fb591 |
"</source>"
|
|
Packit |
8fb591 |
"<filter type=\"subtrees\">"
|
|
Packit |
8fb591 |
"<some>filter</some>"
|
|
Packit |
8fb591 |
"</filter>"
|
|
Packit |
8fb591 |
"</get-config>";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_XML, LYD_OPT_RPC, NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_INMETA);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/*
|
|
Packit |
8fb591 |
* correctness of parsing and printing NETCONF's filter attributes
|
|
Packit |
8fb591 |
* - xpath feature off
|
|
Packit |
8fb591 |
*/
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_filter5_xml(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *input =
|
|
Packit |
8fb591 |
"<get-config xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">"
|
|
Packit |
8fb591 |
"<source>"
|
|
Packit |
8fb591 |
"<running/>"
|
|
Packit |
8fb591 |
"</source>"
|
|
Packit |
8fb591 |
"<filter type=\"xpath\">"
|
|
Packit |
8fb591 |
"<some>filter</some>"
|
|
Packit |
8fb591 |
"</filter>"
|
|
Packit |
8fb591 |
"</get-config>";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_XML, LYD_OPT_RPC, NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_INMETA);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/*
|
|
Packit |
8fb591 |
* correctness of parsing and printing NETCONF's filter attributes
|
|
Packit |
8fb591 |
* - mix of filter types
|
|
Packit |
8fb591 |
*/
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_filter6_xml(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *input =
|
|
Packit |
8fb591 |
"<get-config xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">"
|
|
Packit |
8fb591 |
"<source>"
|
|
Packit |
8fb591 |
"<running/>"
|
|
Packit |
8fb591 |
"</source>"
|
|
Packit |
8fb591 |
"<filter type=\"subtree\" type=\"xpath\" select=\"/*[local-name() = 'modules-state']/*\">"
|
|
Packit |
8fb591 |
"</filter>"
|
|
Packit |
8fb591 |
"</get-config>";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal((mod = lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG)), NULL);
|
|
Packit |
8fb591 |
assert_int_equal(lys_features_enable(mod, "xpath"), 0);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_XML, LYD_OPT_RPC, NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_TOOMANY);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/*
|
|
Packit |
8fb591 |
* correctness of parsing and printing NETCONF's filter attributes
|
|
Packit |
8fb591 |
* - xpath filter without select
|
|
Packit |
8fb591 |
*/
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_filter7_xml(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *input =
|
|
Packit |
8fb591 |
"<get-config xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">"
|
|
Packit |
8fb591 |
"<source>"
|
|
Packit |
8fb591 |
"<running/>"
|
|
Packit |
8fb591 |
"</source>"
|
|
Packit |
8fb591 |
"<filter type=\"xpath\">"
|
|
Packit |
8fb591 |
"</filter>"
|
|
Packit |
8fb591 |
"</get-config>";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal((mod = lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG)), NULL);
|
|
Packit |
8fb591 |
assert_int_equal(lys_features_enable(mod, "xpath"), 0);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_XML, LYD_OPT_RPC, NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_MISSATTR);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/*
|
|
Packit |
8fb591 |
* correctness of parsing and printing NETCONF's edit-config's attributes
|
|
Packit |
8fb591 |
* - invalid operation's value
|
|
Packit |
8fb591 |
*/
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig1_xml(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" leaf a { type string; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input = "
|
|
Packit |
8fb591 |
"nc:operation=\"not-defined\">a";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* operation attribute is valid, but its value is invalid so the parsing fails no matter if strict is used */
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_XML, LYD_OPT_EDIT , NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_INMETA);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig1_json(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" leaf a { type string; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input = "{"
|
|
Packit |
8fb591 |
"\"x:a\":\"a\","
|
|
Packit |
8fb591 |
"\"@x:a\":{"
|
|
Packit |
8fb591 |
"\"ietf-netconf:operation\":\"not-defined\""
|
|
Packit |
8fb591 |
"}"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* operation attribute is valid, but its value is invalid so the parsing fails no matter if strict is used */
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_JSON, LYD_OPT_EDIT , NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_INMETA);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/*
|
|
Packit |
8fb591 |
* correctness of parsing and printing NETCONF's edit-config's attributes
|
|
Packit |
8fb591 |
* - too many operation attributes
|
|
Packit |
8fb591 |
*/
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig2_xml(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" leaf a { type string; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input = "
|
|
Packit |
8fb591 |
"nc:operation=\"merge\" nc:operation=\"replace\" nc:operation=\"create\" "
|
|
Packit |
8fb591 |
"nc:operation=\"delete\" nc:operation=\"remove\">a";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_XML, LYD_OPT_EDIT, NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_TOOMANY);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig2_json(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" leaf a { type string; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input = "{"
|
|
Packit |
8fb591 |
"\"x:a\":\"a\","
|
|
Packit |
8fb591 |
"\"@x:a\":{"
|
|
Packit |
8fb591 |
"\"ietf-netconf:operation\":\"merge\","
|
|
Packit |
8fb591 |
"\"ietf-netconf:operation\":\"replace\","
|
|
Packit |
8fb591 |
"\"ietf-netconf:operation\":\"create\","
|
|
Packit |
8fb591 |
"\"ietf-netconf:operation\":\"delete\","
|
|
Packit |
8fb591 |
"\"ietf-netconf:operation\":\"remove\""
|
|
Packit |
8fb591 |
"}"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_JSON, LYD_OPT_EDIT, NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_TOOMANY);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/*
|
|
Packit |
8fb591 |
* correctness of parsing and printing NETCONF's edit-config's attributes
|
|
Packit |
8fb591 |
* - correct use
|
|
Packit |
8fb591 |
*/
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig3_xml(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" leaf a { type string; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input = "
|
|
Packit |
8fb591 |
"nc:operation=\"create\">a";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_XML, LYD_OPT_EDIT, NULL);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->data, NULL);
|
|
Packit |
8fb591 |
lyd_print_mem(&st->str, st->data, LYD_XML, 0);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->str, NULL);
|
|
Packit |
8fb591 |
assert_string_equal(st->str, input);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig3_json(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" leaf a { type string; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input = "{"
|
|
Packit |
8fb591 |
"\"x:a\":\"a\","
|
|
Packit |
8fb591 |
"\"@x:a\":{"
|
|
Packit |
8fb591 |
"\"ietf-netconf:operation\":\"create\""
|
|
Packit |
8fb591 |
"}"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_JSON, LYD_OPT_EDIT, NULL);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->data, NULL);
|
|
Packit |
8fb591 |
lyd_print_mem(&st->str, st->data, LYD_JSON, 0);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->str, NULL);
|
|
Packit |
8fb591 |
assert_string_equal(st->str, input);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/*
|
|
Packit |
8fb591 |
* correctness of parsing and printing NETCONF's edit-config's attributes
|
|
Packit |
8fb591 |
* - insert, value attr in system-ordered list
|
|
Packit |
8fb591 |
*/
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig4_xml(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" leaf-list a { type string; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input =
|
|
Packit |
8fb591 |
"a";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_XML, LYD_OPT_EDIT , NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_INATTR);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig4_json(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" leaf-list a { type string; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input = "{"
|
|
Packit |
8fb591 |
"\"x:a\":[\"a\"],"
|
|
Packit |
8fb591 |
"\"@x:a\":[{"
|
|
Packit |
8fb591 |
"\"yang:insert\":\"before\","
|
|
Packit |
8fb591 |
"\"yang:value\":\"b\""
|
|
Packit |
8fb591 |
"}]"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_JSON, LYD_OPT_EDIT , NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_INATTR);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/*
|
|
Packit |
8fb591 |
* correctness of parsing and printing NETCONF's edit-config's attributes
|
|
Packit |
8fb591 |
* - insert attr in operation delete
|
|
Packit |
8fb591 |
*/
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig5_xml(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" leaf-list a { type string; ordered-by user; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input =
|
|
Packit |
8fb591 |
"
|
|
Packit |
8fb591 |
"nc:operation=\"delete\" yang:insert=\"first\">a";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_XML, LYD_OPT_EDIT , NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_INATTR);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig5_json(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" leaf-list a { type string; ordered-by user; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input = "{"
|
|
Packit |
8fb591 |
"\"x:a\":[\"a\"],"
|
|
Packit |
8fb591 |
"\"@x:a\":[{"
|
|
Packit |
8fb591 |
"\"ietf-netconf:operation\":\"delete\","
|
|
Packit |
8fb591 |
"\"yang:insert\":\"first\""
|
|
Packit |
8fb591 |
"}]"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_JSON, LYD_OPT_EDIT , NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_INATTR);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/*
|
|
Packit |
8fb591 |
* correctness of parsing and printing NETCONF's edit-config's attributes
|
|
Packit |
8fb591 |
* - several insert attr
|
|
Packit |
8fb591 |
*/
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig6_xml(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" leaf-list a { type string; ordered-by user; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input =
|
|
Packit |
8fb591 |
"
|
|
Packit |
8fb591 |
"nc:operation=\"create\" yang:insert=\"first\" yang:insert=\"last\">a";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_XML, LYD_OPT_EDIT , NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_TOOMANY);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig6_json(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" leaf-list a { type string; ordered-by user; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input = "{"
|
|
Packit |
8fb591 |
"\"x:a\":[\"a\"],"
|
|
Packit |
8fb591 |
"\"@x:a\":[{"
|
|
Packit |
8fb591 |
"\"ietf-netconf:operation\":\"create\","
|
|
Packit |
8fb591 |
"\"yang:insert\":\"first\","
|
|
Packit |
8fb591 |
"\"yang:insert\":\"last\""
|
|
Packit |
8fb591 |
"}]"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_JSON, LYD_OPT_EDIT , NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_TOOMANY);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/*
|
|
Packit |
8fb591 |
* correctness of parsing and printing NETCONF's edit-config's attributes
|
|
Packit |
8fb591 |
* - several value attr
|
|
Packit |
8fb591 |
*/
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig7_xml(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" leaf-list a { type string; ordered-by user; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input =
|
|
Packit |
8fb591 |
"
|
|
Packit |
8fb591 |
"nc:operation=\"create\" yang:insert=\"before\" yang:value=\"b\" yang:value=\"d\">a";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_XML, LYD_OPT_EDIT, NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_TOOMANY);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig7_json(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" leaf-list a { type string; ordered-by user; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input = "{"
|
|
Packit |
8fb591 |
"\"x:a\":[\"a\"],"
|
|
Packit |
8fb591 |
"\"@x:a\":[{"
|
|
Packit |
8fb591 |
"\"ietf-netconf:operation\":\"create\","
|
|
Packit |
8fb591 |
"\"yang:insert\":\"before\","
|
|
Packit |
8fb591 |
"\"yang:value\":\"b\","
|
|
Packit |
8fb591 |
"\"yang:value\":\"d\""
|
|
Packit |
8fb591 |
"}]"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_JSON, LYD_OPT_EDIT, NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_TOOMANY);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/*
|
|
Packit |
8fb591 |
* correctness of parsing and printing NETCONF's edit-config's attributes
|
|
Packit |
8fb591 |
* - correct use
|
|
Packit |
8fb591 |
*/
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig8_xml(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" leaf-list a { type string; ordered-by user; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input =
|
|
Packit |
8fb591 |
"
|
|
Packit |
8fb591 |
"nc:operation=\"create\" yang:insert=\"first\">a";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_XML, LYD_OPT_EDIT, NULL);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->data, NULL);
|
|
Packit |
8fb591 |
lyd_print_mem(&st->str, st->data, LYD_XML, 0);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->str, NULL);
|
|
Packit |
8fb591 |
assert_string_equal(st->str, input);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig8_json(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" leaf-list a { type string; ordered-by user; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input = "{"
|
|
Packit |
8fb591 |
"\"x:a\":[\"a\"],"
|
|
Packit |
8fb591 |
"\"@x:a\":[{"
|
|
Packit |
8fb591 |
"\"ietf-netconf:operation\":\"create\","
|
|
Packit |
8fb591 |
"\"yang:insert\":\"first\""
|
|
Packit |
8fb591 |
"}]"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_JSON, LYD_OPT_EDIT, NULL);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->data, NULL);
|
|
Packit |
8fb591 |
lyd_print_mem(&st->str, st->data, LYD_JSON, 0);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->str, NULL);
|
|
Packit |
8fb591 |
assert_string_equal(st->str, input);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/*
|
|
Packit |
8fb591 |
* correctness of parsing and printing NETCONF's edit-config's attributes
|
|
Packit |
8fb591 |
* - correct use
|
|
Packit |
8fb591 |
*/
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig9_xml(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" leaf-list a { type string; ordered-by user; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input =
|
|
Packit |
8fb591 |
"
|
|
Packit |
8fb591 |
"nc:operation=\"replace\" yang:insert=\"before\" yang:value=\"b\">a";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_XML, LYD_OPT_EDIT, NULL);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->data, NULL);
|
|
Packit |
8fb591 |
lyd_print_mem(&st->str, st->data, LYD_XML, 0);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->str, NULL);
|
|
Packit |
8fb591 |
assert_string_equal(st->str, input);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig9_json(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" leaf-list a { type string; ordered-by user; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input = "{"
|
|
Packit |
8fb591 |
"\"x:a\":[\"a\"],"
|
|
Packit |
8fb591 |
"\"@x:a\":[{"
|
|
Packit |
8fb591 |
"\"ietf-netconf:operation\":\"replace\","
|
|
Packit |
8fb591 |
"\"yang:insert\":\"before\","
|
|
Packit |
8fb591 |
"\"yang:value\":\"b\""
|
|
Packit |
8fb591 |
"}]"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_JSON, LYD_OPT_EDIT, NULL);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->data, NULL);
|
|
Packit |
8fb591 |
lyd_print_mem(&st->str, st->data, LYD_JSON, 0);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->str, NULL);
|
|
Packit |
8fb591 |
assert_string_equal(st->str, input);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/*
|
|
Packit |
8fb591 |
* correctness of parsing and printing NETCONF's edit-config's attributes
|
|
Packit |
8fb591 |
* - insert in system ordered list
|
|
Packit |
8fb591 |
*/
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig10_xml(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" list a { key \"k\"; leaf k { type string; } ordered-by system; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input =
|
|
Packit |
8fb591 |
"
|
|
Packit |
8fb591 |
"nc:operation=\"create\" yang:insert=\"before\" yang:key=\"[...]\"><k>a</k>";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_XML, LYD_OPT_EDIT, NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_INATTR);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig10_json(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" list a { key \"k\"; leaf k { type string; } ordered-by system; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input = "{"
|
|
Packit |
8fb591 |
"\"x:a\":[{"
|
|
Packit |
8fb591 |
"\"@\":{"
|
|
Packit |
8fb591 |
"\"ietf-netconf:operation\":\"create\","
|
|
Packit |
8fb591 |
"\"yang:insert\":\"before\","
|
|
Packit |
8fb591 |
"\"yang:key\":\"[...]\""
|
|
Packit |
8fb591 |
"},"
|
|
Packit |
8fb591 |
"\"k\":\"a\""
|
|
Packit |
8fb591 |
"}]"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_JSON, LYD_OPT_EDIT, NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_INATTR);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/*
|
|
Packit |
8fb591 |
* correctness of parsing and printing NETCONF's edit-config's attributes
|
|
Packit |
8fb591 |
* - insert attr in operation delete
|
|
Packit |
8fb591 |
*/
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig11_xml(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" list a { key \"k\"; leaf k { type string; } ordered-by user; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input =
|
|
Packit |
8fb591 |
"
|
|
Packit |
8fb591 |
"nc:operation=\"delete\" yang:insert=\"first\"><k>a</k>";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_XML, LYD_OPT_EDIT , NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_INATTR);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig11_json(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" list a { key \"k\"; leaf k { type string; } ordered-by user; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input = "{"
|
|
Packit |
8fb591 |
"\"x:a\":[{"
|
|
Packit |
8fb591 |
"\"@\":{"
|
|
Packit |
8fb591 |
"\"ietf-netconf:operation\":\"delete\","
|
|
Packit |
8fb591 |
"\"yang:insert\":\"first\""
|
|
Packit |
8fb591 |
"},"
|
|
Packit |
8fb591 |
"\"k\":\"a\""
|
|
Packit |
8fb591 |
"}]"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_JSON, LYD_OPT_EDIT , NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_INATTR);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/*
|
|
Packit |
8fb591 |
* correctness of parsing and printing NETCONF's edit-config's attributes
|
|
Packit |
8fb591 |
* - several insert attr
|
|
Packit |
8fb591 |
*/
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig12_xml(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" list a { key \"k\"; leaf k { type string; } ordered-by user; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input =
|
|
Packit |
8fb591 |
"
|
|
Packit |
8fb591 |
"nc:operation=\"create\" yang:insert=\"before\" yang:insert=\"last\"><k>a</k>";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_XML, LYD_OPT_EDIT , NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_TOOMANY);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig12_json(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" list a { key \"k\"; leaf k { type string; } ordered-by user; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input = "{"
|
|
Packit |
8fb591 |
"\"x:a\":[{"
|
|
Packit |
8fb591 |
"\"@\":{"
|
|
Packit |
8fb591 |
"\"ietf-netconf:operation\":\"create\","
|
|
Packit |
8fb591 |
"\"yang:insert\":\"before\","
|
|
Packit |
8fb591 |
"\"yang:insert\":\"last\""
|
|
Packit |
8fb591 |
"},"
|
|
Packit |
8fb591 |
"\"k\":\"a\""
|
|
Packit |
8fb591 |
"}]"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_JSON, LYD_OPT_EDIT , NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_TOOMANY);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/*
|
|
Packit |
8fb591 |
* correctness of parsing and printing NETCONF's edit-config's attributes
|
|
Packit |
8fb591 |
* - several key attr
|
|
Packit |
8fb591 |
*/
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig13_xml(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" list a { key \"k\"; leaf k { type string; } ordered-by user; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input =
|
|
Packit |
8fb591 |
"
|
|
Packit |
8fb591 |
"nc:operation=\"create\" yang:insert=\"before\" yang:key=\"[...]\" yang:key=\"[...]\"><k>a</k>";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_XML, LYD_OPT_EDIT, NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_TOOMANY);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig13_json(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" list a { key \"k\"; leaf k { type string; } ordered-by user; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input = "{"
|
|
Packit |
8fb591 |
"\"x:a\":[{"
|
|
Packit |
8fb591 |
"\"@\":{"
|
|
Packit |
8fb591 |
"\"ietf-netconf:operation\":\"create\","
|
|
Packit |
8fb591 |
"\"yang:insert\":\"before\","
|
|
Packit |
8fb591 |
"\"yang:key\":\"[...]\","
|
|
Packit |
8fb591 |
"\"yang:key\":\"[...]\""
|
|
Packit |
8fb591 |
"},"
|
|
Packit |
8fb591 |
"\"k\":\"a\""
|
|
Packit |
8fb591 |
"}]"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_JSON, LYD_OPT_EDIT, NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_TOOMANY);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/*
|
|
Packit |
8fb591 |
* correctness of parsing and printing NETCONF's edit-config's attributes
|
|
Packit |
8fb591 |
* - correct use
|
|
Packit |
8fb591 |
*/
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig14_xml(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" list a { key \"k\"; leaf k { type string; } ordered-by user; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input =
|
|
Packit |
8fb591 |
"
|
|
Packit |
8fb591 |
"nc:operation=\"create\" yang:insert=\"first\"><k>a</k>";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_XML, LYD_OPT_EDIT, NULL);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->data, NULL);
|
|
Packit |
8fb591 |
lyd_print_mem(&st->str, st->data, LYD_XML, 0);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->str, NULL);
|
|
Packit |
8fb591 |
assert_string_equal(st->str, input);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig14_json(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" list a { key \"k\"; leaf k { type string; } ordered-by user; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input = "{"
|
|
Packit |
8fb591 |
"\"x:a\":[{"
|
|
Packit |
8fb591 |
"\"@\":{"
|
|
Packit |
8fb591 |
"\"ietf-netconf:operation\":\"create\","
|
|
Packit |
8fb591 |
"\"yang:insert\":\"first\""
|
|
Packit |
8fb591 |
"},"
|
|
Packit |
8fb591 |
"\"k\":\"a\""
|
|
Packit |
8fb591 |
"}]"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_JSON, LYD_OPT_EDIT, NULL);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->data, NULL);
|
|
Packit |
8fb591 |
lyd_print_mem(&st->str, st->data, LYD_JSON, 0);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->str, NULL);
|
|
Packit |
8fb591 |
assert_string_equal(st->str, input);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/*
|
|
Packit |
8fb591 |
* correctness of parsing and printing NETCONF's edit-config's attributes
|
|
Packit |
8fb591 |
* - correct use
|
|
Packit |
8fb591 |
*/
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig15_xml(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" list a { key \"k\"; leaf k { type string; } ordered-by user; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input =
|
|
Packit |
8fb591 |
"
|
|
Packit |
8fb591 |
"nc:operation=\"replace\" yang:insert=\"before\" yang:key=\"[...]\"><k>a</k>";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_XML, LYD_OPT_EDIT, NULL);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->data, NULL);
|
|
Packit |
8fb591 |
lyd_print_mem(&st->str, st->data, LYD_XML, 0);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->str, NULL);
|
|
Packit |
8fb591 |
assert_string_equal(st->str, input);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig15_json(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" list a { key \"k\"; leaf k { type string; } ordered-by user; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input = "{"
|
|
Packit |
8fb591 |
"\"x:a\":[{"
|
|
Packit |
8fb591 |
"\"@\":{"
|
|
Packit |
8fb591 |
"\"ietf-netconf:operation\":\"replace\","
|
|
Packit |
8fb591 |
"\"yang:insert\":\"before\","
|
|
Packit |
8fb591 |
"\"yang:key\":\"[...]\""
|
|
Packit |
8fb591 |
"},"
|
|
Packit |
8fb591 |
"\"k\":\"a\""
|
|
Packit |
8fb591 |
"}]"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_JSON, LYD_OPT_EDIT, NULL);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->data, NULL);
|
|
Packit |
8fb591 |
lyd_print_mem(&st->str, st->data, LYD_JSON, 0);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->str, NULL);
|
|
Packit |
8fb591 |
assert_string_equal(st->str, input);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/*
|
|
Packit |
8fb591 |
* correctness of parsing and printing NETCONF's edit-config's attributes
|
|
Packit |
8fb591 |
* - value in list
|
|
Packit |
8fb591 |
*/
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig16_xml(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" list a { key \"k\"; leaf k { type string; } ordered-by user; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input =
|
|
Packit |
8fb591 |
"
|
|
Packit |
8fb591 |
"nc:operation=\"create\" yang:insert=\"before\" yang:value=\"d\"><k>a</k>";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_XML, LYD_OPT_EDIT, NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_INATTR);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig16_json(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" list a { key \"k\"; leaf k { type string; } ordered-by user; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input = "{"
|
|
Packit |
8fb591 |
"\"x:a\":[{"
|
|
Packit |
8fb591 |
"\"@\":{"
|
|
Packit |
8fb591 |
"\"ietf-netconf:operation\":\"create\","
|
|
Packit |
8fb591 |
"\"yang:insert\":\"before\","
|
|
Packit |
8fb591 |
"\"yang:value\":\"d\""
|
|
Packit |
8fb591 |
"},"
|
|
Packit |
8fb591 |
"\"k\":\"a\""
|
|
Packit |
8fb591 |
"}]"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_JSON, LYD_OPT_EDIT, NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_INATTR);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/*
|
|
Packit |
8fb591 |
* correctness of parsing and printing NETCONF's edit-config's attributes
|
|
Packit |
8fb591 |
* - key in leaf-list
|
|
Packit |
8fb591 |
*/
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig17_xml(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" leaf-list a { type string; ordered-by user; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input =
|
|
Packit |
8fb591 |
"
|
|
Packit |
8fb591 |
"nc:operation=\"create\" yang:insert=\"before\" yang:key=\"[...]\">a";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_XML, LYD_OPT_EDIT, NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_INATTR);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig17_json(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" leaf-list a { type string; ordered-by user; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input = "{"
|
|
Packit |
8fb591 |
"\"x:a\":[\"a\"],"
|
|
Packit |
8fb591 |
"\"@x:a\":[{"
|
|
Packit |
8fb591 |
"\"ietf-netconf:operation\":\"create\","
|
|
Packit |
8fb591 |
"\"yang:insert\":\"before\","
|
|
Packit |
8fb591 |
"\"yang:key\":\"[...]\""
|
|
Packit |
8fb591 |
"}]"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_JSON, LYD_OPT_EDIT, NULL);
|
|
Packit |
8fb591 |
assert_ptr_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_int_equal(ly_errno, LY_EVALID);
|
|
Packit |
8fb591 |
assert_int_equal(ly_vecode(st->ctx), LYVE_INATTR);
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/*
|
|
Packit |
8fb591 |
* correctness of parsing and printing NETCONF's edit-config's attributes
|
|
Packit |
8fb591 |
* - operation delete with an empty XML tag
|
|
Packit |
8fb591 |
*/
|
|
Packit |
8fb591 |
static void
|
|
Packit |
8fb591 |
test_nc_editconfig18_xml(void **state)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
struct state *st = (*state);
|
|
Packit |
8fb591 |
const char *yang = "module x {"
|
|
Packit |
8fb591 |
" namespace urn:x;"
|
|
Packit |
8fb591 |
" prefix x;"
|
|
Packit |
8fb591 |
" leaf a { type string; }"
|
|
Packit |
8fb591 |
"}";
|
|
Packit |
8fb591 |
const struct lys_module *mod;
|
|
Packit |
8fb591 |
const char *input =
|
|
Packit |
8fb591 |
"
|
|
Packit |
8fb591 |
"nc:operation=\"delete\">";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load ietf-netconf schema */
|
|
Packit |
8fb591 |
assert_ptr_not_equal(lys_parse_path(st->ctx, TESTS_DIR"/schema/yang/ietf/ietf-netconf.yang", LYS_IN_YANG), NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
/* load schema */
|
|
Packit |
8fb591 |
mod = lys_parse_mem(st->ctx, yang, LYS_IN_YANG);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(mod, NULL);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
st->data = lyd_parse_mem(st->ctx, input, LYD_XML, LYD_OPT_EDIT , NULL);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->data, NULL);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->data->attr, NULL);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->data->attr->name, NULL);
|
|
Packit |
8fb591 |
assert_ptr_not_equal(st->data->attr->value_str, NULL);
|
|
Packit |
8fb591 |
assert_string_equal(st->data->attr->name, "operation");
|
|
Packit |
8fb591 |
assert_string_equal(st->data->attr->value_str, "delete");
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
int main(void)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
const struct CMUnitTest tests[] = {
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_leafref_type, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_unknown_metadata_xml, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_unknown_metadata_json, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_filter1_xml, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_filter2_xml, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_filter3_xml, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_filter4_xml, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_filter5_xml, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_filter6_xml, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_filter7_xml, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig1_xml, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig1_json, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig2_xml, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig2_json, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig3_xml, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig3_json, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig4_xml, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig4_json, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig5_xml, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig5_json, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig6_xml, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig6_json, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig7_xml, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig7_json, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig8_xml, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig8_json, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig9_xml, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig9_json, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig10_xml, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig10_json, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig11_xml, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig11_json, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig12_xml, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig12_json, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig13_xml, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig13_json, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig14_xml, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig14_json, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig15_xml, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig15_json, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig16_xml, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig16_json, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig17_xml, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig17_json, setup_f, teardown_f),
|
|
Packit |
8fb591 |
cmocka_unit_test_setup_teardown(test_nc_editconfig18_xml, setup_f, teardown_f),
|
|
Packit |
8fb591 |
};
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
return cmocka_run_group_tests(tests, NULL, NULL);
|
|
Packit |
8fb591 |
}
|