|
Packit |
8fb591 |
/*
|
|
Packit |
8fb591 |
* @file test_tree_schema.cpp
|
|
Packit |
8fb591 |
* @author: Hrvoje Varga <hrvoje.varga@sartura.hr>
|
|
Packit |
8fb591 |
* @brief unit tests for functions from tree_schema.h header
|
|
Packit |
8fb591 |
*
|
|
Packit |
8fb591 |
* Copyright (C) 2018 Deutsche Telekom AG.
|
|
Packit |
8fb591 |
*
|
|
Packit |
8fb591 |
* Author: Hrvoje Varga <hrvoje.varga@sartura.hr>
|
|
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 "Libyang.hpp"
|
|
Packit |
8fb591 |
#include "Tree_Schema.hpp"
|
|
Packit |
8fb591 |
#include "microtest.h"
|
|
Packit |
8fb591 |
#include "../tests/config.h"
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
const char *lys_module_a = \
|
|
Packit |
8fb591 |
" \
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
xmlns=\"urn:ietf:params:xml:ns:yang:yin:1\" \
|
|
Packit |
8fb591 |
xmlns:a=\"urn:a\"> \
|
|
Packit |
8fb591 |
<namespace uri=\"urn:a\"/> \
|
|
Packit |
8fb591 |
<prefix value=\"a_mod\"/> \
|
|
Packit |
8fb591 |
<include module=\"asub\"/> \
|
|
Packit |
8fb591 |
<include module=\"atop\"/> \
|
|
Packit |
8fb591 |
<revision date=\"2015-01-01\"> \
|
|
Packit |
8fb591 |
<description> \
|
|
Packit |
8fb591 |
<text>version 1</text> \
|
|
Packit |
8fb591 |
</description> \
|
|
Packit |
8fb591 |
<reference> \
|
|
Packit |
8fb591 |
<text>RFC XXXX</text> \
|
|
Packit |
8fb591 |
</reference> \
|
|
Packit |
8fb591 |
</revision> \
|
|
Packit |
8fb591 |
<feature name=\"foo\"/> \
|
|
Packit |
8fb591 |
<grouping name=\"gg\"> \
|
|
Packit |
8fb591 |
<leaf name=\"bar-gggg\"> \
|
|
Packit |
8fb591 |
<type name=\"string\"/> \
|
|
Packit |
8fb591 |
</leaf> \
|
|
Packit |
8fb591 |
</grouping> \
|
|
Packit |
8fb591 |
<container name=\"x\"> \
|
|
Packit |
8fb591 |
<leaf name=\"bar-leaf\"> \
|
|
Packit |
8fb591 |
<if-feature name=\"bar\"/> \
|
|
Packit |
8fb591 |
<type name=\"string\"/> \
|
|
Packit |
8fb591 |
</leaf> \
|
|
Packit |
8fb591 |
<uses name=\"gg\"> \
|
|
Packit |
8fb591 |
<if-feature name=\"bar\"/> \
|
|
Packit |
8fb591 |
</uses> \
|
|
Packit |
8fb591 |
<leaf name=\"baz\"> \
|
|
Packit |
8fb591 |
<if-feature name=\"foo\"/> \
|
|
Packit |
8fb591 |
<type name=\"string\"/> \
|
|
Packit |
8fb591 |
</leaf> \
|
|
Packit |
8fb591 |
<leaf name=\"bubba\"> \
|
|
Packit |
8fb591 |
<type name=\"string\"/> \
|
|
Packit |
8fb591 |
</leaf> \
|
|
Packit |
8fb591 |
</container> \
|
|
Packit |
8fb591 |
<augment target-node=\"/x\"> \
|
|
Packit |
8fb591 |
<if-feature name=\"bar\"/> \
|
|
Packit |
8fb591 |
<container name=\"bar-y\"> \
|
|
Packit |
8fb591 |
<leaf name=\"ll\"> \
|
|
Packit |
8fb591 |
<type name=\"string\"/> \
|
|
Packit |
8fb591 |
</leaf> \
|
|
Packit |
8fb591 |
</container> \
|
|
Packit |
8fb591 |
</augment> \
|
|
Packit |
8fb591 |
<rpc name=\"bar-rpc\"> \
|
|
Packit |
8fb591 |
<if-feature name=\"bar\"/> \
|
|
Packit |
8fb591 |
</rpc> \
|
|
Packit |
8fb591 |
<rpc name=\"foo-rpc\"> \
|
|
Packit |
8fb591 |
<if-feature name=\"foo\"/> \
|
|
Packit |
8fb591 |
</rpc> \
|
|
Packit |
8fb591 |
</module> \
|
|
Packit |
8fb591 |
";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
const char *lys_module_b = \
|
|
Packit |
8fb591 |
"module b {\
|
|
Packit |
8fb591 |
namespace \"urn:b\";\
|
|
Packit |
8fb591 |
prefix b_mod;\
|
|
Packit |
8fb591 |
include bsub;\
|
|
Packit |
8fb591 |
include btop;\
|
|
Packit |
8fb591 |
feature foo;\
|
|
Packit |
8fb591 |
grouping gg {\
|
|
Packit |
8fb591 |
leaf bar-gggg {\
|
|
Packit |
8fb591 |
type string;\
|
|
Packit |
8fb591 |
}\
|
|
Packit |
8fb591 |
}\
|
|
Packit |
8fb591 |
container x {\
|
|
Packit |
8fb591 |
leaf bar-leaf {\
|
|
Packit |
8fb591 |
if-feature \"bar\";\
|
|
Packit |
8fb591 |
type string;\
|
|
Packit |
8fb591 |
}\
|
|
Packit |
8fb591 |
uses gg {\
|
|
Packit |
8fb591 |
if-feature \"bar\";\
|
|
Packit |
8fb591 |
}\
|
|
Packit |
8fb591 |
leaf baz {\
|
|
Packit |
8fb591 |
if-feature \"foo\";\
|
|
Packit |
8fb591 |
type string;\
|
|
Packit |
8fb591 |
}\
|
|
Packit |
8fb591 |
leaf bubba {\
|
|
Packit |
8fb591 |
type string;\
|
|
Packit |
8fb591 |
}\
|
|
Packit |
8fb591 |
}\
|
|
Packit |
8fb591 |
augment \"/x\" {\
|
|
Packit |
8fb591 |
if-feature \"bar\";\
|
|
Packit |
8fb591 |
container bar-y;\
|
|
Packit |
8fb591 |
}\
|
|
Packit |
8fb591 |
rpc bar-rpc {\
|
|
Packit |
8fb591 |
if-feature \"bar\";\
|
|
Packit |
8fb591 |
}\
|
|
Packit |
8fb591 |
rpc foo-rpc {\
|
|
Packit |
8fb591 |
if-feature \"foo\";\
|
|
Packit |
8fb591 |
}\
|
|
Packit |
8fb591 |
}";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
const char *lys_module_a_with_typo = \
|
|
Packit |
8fb591 |
" \
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
xmlns=\"urn:ietf:params:xml:ns:yang:yin:1\" \
|
|
Packit |
8fb591 |
xmlns:a=\"urn:a\"> \
|
|
Packit |
8fb591 |
<namespace uri=\"urn:a\"/> \
|
|
Packit |
8fb591 |
<prefix value=\"a_mod\"/> \
|
|
Packit |
8fb591 |
<include module=\"asub\"/> \
|
|
Packit |
8fb591 |
<include module=\"atop\"/> \
|
|
Packit |
8fb591 |
<feature name=\"foo\"/> \
|
|
Packit |
8fb591 |
<grouping name=\"gg\"> \
|
|
Packit |
8fb591 |
<leaf name=\"bar-gggg\"> \
|
|
Packit |
8fb591 |
<type name=\"string\"/> \
|
|
Packit |
8fb591 |
</leaf> \
|
|
Packit |
8fb591 |
</grouping> \
|
|
Packit |
8fb591 |
<container name=\"x\"> \
|
|
Packit |
8fb591 |
<leaf name=\"bar-leaf\"> \
|
|
Packit |
8fb591 |
<if-feature name=\"bar\"/> \
|
|
Packit |
8fb591 |
<type name=\"string\"/> \
|
|
Packit |
8fb591 |
</leaf> \
|
|
Packit |
8fb591 |
<uses name=\"gg\"> \
|
|
Packit |
8fb591 |
<if-feature name=\"bar\"/> \
|
|
Packit |
8fb591 |
</uses> \
|
|
Packit |
8fb591 |
<leaf name=\"baz\"> \
|
|
Packit |
8fb591 |
<if-feature name=\"foo\"/> \
|
|
Packit |
8fb591 |
<type name=\"string\"/> \
|
|
Packit |
8fb591 |
</leaf> \
|
|
Packit |
8fb591 |
<leaf name=\"bubba\"> \
|
|
Packit |
8fb591 |
<type name=\"string\"/> \
|
|
Packit |
8fb591 |
</leaf> \
|
|
Packit |
8fb591 |
</container> \
|
|
Packit |
8fb591 |
<augment target-node=\"/x\"> \
|
|
Packit |
8fb591 |
<if-feature name=\"bar\"/> \
|
|
Packit |
8fb591 |
<container name=\"bar-y\"> \
|
|
Packit |
8fb591 |
<leaf name=\"ll\"> \
|
|
Packit |
8fb591 |
<type name=\"string\"/> \
|
|
Packit |
8fb591 |
</leaf> \
|
|
Packit |
8fb591 |
</container> \
|
|
Packit |
8fb591 |
</augment> \
|
|
Packit |
8fb591 |
<rpc name=\"bar-rpc\"> \
|
|
Packit |
8fb591 |
<if-feature name=\"bar\"/> \
|
|
Packit |
8fb591 |
</rpc> \
|
|
Packit |
8fb591 |
<rpc name=\"foo-rpc\"> \
|
|
Packit |
8fb591 |
<if-feature name=\"foo\"/> \
|
|
Packit |
8fb591 |
</rpc> \
|
|
Packit |
8fb591 |
</module> \
|
|
Packit |
8fb591 |
";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
const char *result_tree = "\
|
|
Packit |
8fb591 |
module: a\n\
|
|
Packit |
8fb591 |
+--rw top\n\
|
|
Packit |
8fb591 |
| +--rw bar-sub2\n\
|
|
Packit |
8fb591 |
+--rw x\n\
|
|
Packit |
8fb591 |
+--rw bubba? string\n";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
const char *result_yang = "\
|
|
Packit |
8fb591 |
module a {\n\
|
|
Packit |
8fb591 |
namespace \"urn:a\";\n\
|
|
Packit |
8fb591 |
prefix a_mod;\n\
|
|
Packit |
8fb591 |
\n\
|
|
Packit |
8fb591 |
include \"asub\";\n\
|
|
Packit |
8fb591 |
\n\
|
|
Packit |
8fb591 |
include \"atop\";\n\
|
|
Packit |
8fb591 |
\n\
|
|
Packit |
8fb591 |
revision 2015-01-01 {\n\
|
|
Packit |
8fb591 |
description\n\
|
|
Packit |
8fb591 |
\"version 1\";\n\
|
|
Packit |
8fb591 |
reference\n\
|
|
Packit |
8fb591 |
\"RFC XXXX\";\n\
|
|
Packit |
8fb591 |
}\n\
|
|
Packit |
8fb591 |
\n\
|
|
Packit |
8fb591 |
feature foo;\n\
|
|
Packit |
8fb591 |
\n\
|
|
Packit |
8fb591 |
grouping gg {\n\
|
|
Packit |
8fb591 |
leaf bar-gggg {\n\
|
|
Packit |
8fb591 |
type string;\n\
|
|
Packit |
8fb591 |
}\n\
|
|
Packit |
8fb591 |
}\n\
|
|
Packit |
8fb591 |
\n\
|
|
Packit |
8fb591 |
container x {\n\
|
|
Packit |
8fb591 |
leaf bar-leaf {\n\
|
|
Packit |
8fb591 |
if-feature \"bar\";\n\
|
|
Packit |
8fb591 |
type string;\n\
|
|
Packit |
8fb591 |
}\n\n\
|
|
Packit |
8fb591 |
uses gg {\n\
|
|
Packit |
8fb591 |
if-feature \"bar\";\n\
|
|
Packit |
8fb591 |
}\n\n\
|
|
Packit |
8fb591 |
leaf baz {\n\
|
|
Packit |
8fb591 |
if-feature \"foo\";\n\
|
|
Packit |
8fb591 |
type string;\n\
|
|
Packit |
8fb591 |
}\n\n\
|
|
Packit |
8fb591 |
leaf bubba {\n\
|
|
Packit |
8fb591 |
type string;\n\
|
|
Packit |
8fb591 |
}\n\
|
|
Packit |
8fb591 |
}\n\
|
|
Packit |
8fb591 |
\n\
|
|
Packit |
8fb591 |
augment \"/x\" {\n\
|
|
Packit |
8fb591 |
if-feature \"bar\";\n\
|
|
Packit |
8fb591 |
container bar-y {\n\
|
|
Packit |
8fb591 |
leaf ll {\n\
|
|
Packit |
8fb591 |
type string;\n\
|
|
Packit |
8fb591 |
}\n\
|
|
Packit |
8fb591 |
}\n\
|
|
Packit |
8fb591 |
}\n\
|
|
Packit |
8fb591 |
\n\
|
|
Packit |
8fb591 |
rpc bar-rpc {\n\
|
|
Packit |
8fb591 |
if-feature \"bar\";\n\
|
|
Packit |
8fb591 |
}\n\
|
|
Packit |
8fb591 |
\n\
|
|
Packit |
8fb591 |
rpc foo-rpc {\n\
|
|
Packit |
8fb591 |
if-feature \"foo\";\n\
|
|
Packit |
8fb591 |
}\n\
|
|
Packit |
8fb591 |
}\n";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
const char *result_yin = "\
|
|
Packit |
8fb591 |
\n\
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
xmlns=\"urn:ietf:params:xml:ns:yang:yin:1\"\n\
|
|
Packit |
8fb591 |
xmlns:a_mod=\"urn:a\">\n\
|
|
Packit |
8fb591 |
<namespace uri=\"urn:a\"/>\n\
|
|
Packit |
8fb591 |
<prefix value=\"a_mod\"/>\n\
|
|
Packit |
8fb591 |
<include module=\"asub\"/>\n\
|
|
Packit |
8fb591 |
<include module=\"atop\"/>\n\
|
|
Packit |
8fb591 |
<revision date=\"2015-01-01\">\n\
|
|
Packit |
8fb591 |
<description>\n\
|
|
Packit |
8fb591 |
<text>version 1</text>\n\
|
|
Packit |
8fb591 |
</description>\n\
|
|
Packit |
8fb591 |
<reference>\n\
|
|
Packit |
8fb591 |
<text>RFC XXXX</text>\n\
|
|
Packit |
8fb591 |
</reference>\n\
|
|
Packit |
8fb591 |
</revision>\n\
|
|
Packit |
8fb591 |
<feature name=\"foo\"/>\n\
|
|
Packit |
8fb591 |
<grouping name=\"gg\">\n\
|
|
Packit |
8fb591 |
<leaf name=\"bar-gggg\">\n\
|
|
Packit |
8fb591 |
<type name=\"string\"/>\n\
|
|
Packit |
8fb591 |
</leaf>\n\
|
|
Packit |
8fb591 |
</grouping>\n\
|
|
Packit |
8fb591 |
<container name=\"x\">\n\
|
|
Packit |
8fb591 |
<leaf name=\"bar-leaf\">\n\
|
|
Packit |
8fb591 |
<if-feature name=\"bar\"/>\n\
|
|
Packit |
8fb591 |
<type name=\"string\"/>\n\
|
|
Packit |
8fb591 |
</leaf>\n\
|
|
Packit |
8fb591 |
<uses name=\"gg\">\n\
|
|
Packit |
8fb591 |
<if-feature name=\"bar\"/>\n\
|
|
Packit |
8fb591 |
</uses>\n\
|
|
Packit |
8fb591 |
<leaf name=\"baz\">\n\
|
|
Packit |
8fb591 |
<if-feature name=\"foo\"/>\n\
|
|
Packit |
8fb591 |
<type name=\"string\"/>\n\
|
|
Packit |
8fb591 |
</leaf>\n\
|
|
Packit |
8fb591 |
<leaf name=\"bubba\">\n\
|
|
Packit |
8fb591 |
<type name=\"string\"/>\n\
|
|
Packit |
8fb591 |
</leaf>\n\
|
|
Packit |
8fb591 |
</container>\n\
|
|
Packit |
8fb591 |
<augment target-node=\"/x\">\n\
|
|
Packit |
8fb591 |
<if-feature name=\"bar\"/>\n\
|
|
Packit |
8fb591 |
<container name=\"bar-y\">\n\
|
|
Packit |
8fb591 |
<leaf name=\"ll\">\n\
|
|
Packit |
8fb591 |
<type name=\"string\"/>\n\
|
|
Packit |
8fb591 |
</leaf>\n\
|
|
Packit |
8fb591 |
</container>\n\
|
|
Packit |
8fb591 |
</augment>\n\
|
|
Packit |
8fb591 |
<rpc name=\"bar-rpc\">\n\
|
|
Packit |
8fb591 |
<if-feature name=\"bar\"/>\n\
|
|
Packit |
8fb591 |
</rpc>\n\
|
|
Packit |
8fb591 |
<rpc name=\"foo-rpc\">\n\
|
|
Packit |
8fb591 |
<if-feature name=\"foo\"/>\n\
|
|
Packit |
8fb591 |
</rpc>\n\
|
|
Packit |
8fb591 |
</module>\n";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
TEST(test_ly_ctx_parse_module_mem)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
const char *yang_folder = TESTS_DIR "/api/files";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
try {
|
|
Packit |
8fb591 |
auto ctx = std::make_shared<libyang::Context>(yang_folder);
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(ctx);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
auto module = ctx->parse_module_mem(lys_module_a, LYS_IN_YIN);
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(module);
|
|
Packit |
8fb591 |
ASSERT_STREQ("a", module->name());
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
module = ctx->parse_module_mem(lys_module_b, LYS_IN_YANG);
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(module);
|
|
Packit |
8fb591 |
ASSERT_STREQ("b", module->name());
|
|
Packit |
8fb591 |
} catch (const std::exception& e) {
|
|
Packit |
8fb591 |
mt::printFailed(e.what(), stdout);
|
|
Packit |
8fb591 |
throw;
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
TEST(test_ly_ctx_parse_module_mem_invalid)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
const char *yang_folder = TESTS_DIR "/api/files";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
try {
|
|
Packit |
8fb591 |
auto ctx = std::make_shared<libyang::Context>(yang_folder);
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(ctx);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
ctx->parse_module_mem(lys_module_a_with_typo, LYS_IN_YIN);
|
|
Packit |
8fb591 |
throw std::runtime_error("exception not thrown");
|
|
Packit |
8fb591 |
} catch (const std::exception& e) {
|
|
Packit |
8fb591 |
ASSERT_STREQ("Module parsing failed.", e.what());
|
|
Packit |
8fb591 |
return;
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
TEST(test_ly_ctx_parse_module_fd)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
const char *yang_folder = TESTS_DIR "/api/files";
|
|
Packit |
8fb591 |
const char *yin_file = TESTS_DIR "/api/files/a.yin";
|
|
Packit |
8fb591 |
const char *yang_file = TESTS_DIR "/api/files/b.yang";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
try {
|
|
Packit |
8fb591 |
auto ctx = std::make_shared<libyang::Context>(yang_folder);
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(ctx);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
FILE *f = fopen(yin_file, "r");
|
|
Packit |
8fb591 |
auto fd = fileno(f);
|
|
Packit |
8fb591 |
auto module = ctx->parse_module_fd(fd, LYS_IN_YIN);
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(module);
|
|
Packit |
8fb591 |
ASSERT_STREQ("a", module->name());
|
|
Packit |
8fb591 |
fclose(f);
|
|
Packit |
8fb591 |
f = fopen(yang_file, "r");
|
|
Packit |
8fb591 |
fd = fileno(f);
|
|
Packit |
8fb591 |
module = ctx->parse_module_fd(fd, LYS_IN_YANG);
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(module);
|
|
Packit |
8fb591 |
ASSERT_STREQ("b", module->name());
|
|
Packit |
8fb591 |
fclose(f);
|
|
Packit |
8fb591 |
} catch (const std::exception& e) {
|
|
Packit |
8fb591 |
mt::printFailed(e.what(), stdout);
|
|
Packit |
8fb591 |
throw;
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
TEST(test_ly_ctx_parse_module_fd_invalid)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
const char *yang_folder = TESTS_DIR "/api/files";
|
|
Packit |
8fb591 |
const char *yin_file = TESTS_DIR "/api/files/a.yin";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
try {
|
|
Packit |
8fb591 |
auto ctx = std::make_shared<libyang::Context>(yang_folder);
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(ctx);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
FILE *f = fopen(yin_file, "r");
|
|
Packit |
8fb591 |
auto fd = fileno(f);
|
|
Packit |
8fb591 |
auto module = ctx->parse_module_fd(fd, LYS_IN_YANG);
|
|
Packit |
8fb591 |
throw std::runtime_error("exception not thrown");
|
|
Packit |
8fb591 |
} catch( const std::exception& e ) {
|
|
Packit |
8fb591 |
ASSERT_STREQ("Module parsing failed.", e.what());
|
|
Packit |
8fb591 |
return;
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
TEST(test_ly_ctx_parse_module_path)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
const char *yang_folder = TESTS_DIR "/api/files";
|
|
Packit |
8fb591 |
const char *yin_file = TESTS_DIR "/api/files/a.yin";
|
|
Packit |
8fb591 |
const char *yang_file = TESTS_DIR "/api/files/b.yang";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
try {
|
|
Packit |
8fb591 |
auto ctx = std::make_shared<libyang::Context>(yang_folder);
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(ctx);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
auto module = ctx->parse_module_path(yin_file, LYS_IN_YIN);
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(module);
|
|
Packit |
8fb591 |
ASSERT_STREQ("a", module->name());
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
module = ctx->parse_module_path(yang_file, LYS_IN_YANG);
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(module);
|
|
Packit |
8fb591 |
ASSERT_STREQ("b", module->name());
|
|
Packit |
8fb591 |
} catch (const std::exception& e) {
|
|
Packit |
8fb591 |
mt::printFailed(e.what(), stdout);
|
|
Packit |
8fb591 |
throw;
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
TEST(test_ly_ctx_parse_module_path_invalid)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
const char *yang_folder = TESTS_DIR "/api/files";
|
|
Packit |
8fb591 |
const char *yin_file = TESTS_DIR "/api/files/a.yin";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
try {
|
|
Packit |
8fb591 |
auto ctx = std::make_shared<libyang::Context>(yang_folder);
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(ctx);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
auto module = ctx->parse_module_path(yin_file, LYS_IN_YANG);
|
|
Packit |
8fb591 |
throw std::runtime_error("exception not thrown");
|
|
Packit |
8fb591 |
} catch( const std::exception& e ) {
|
|
Packit |
8fb591 |
ASSERT_STREQ("Module parsing failed.", e.what());
|
|
Packit |
8fb591 |
return;
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
TEST(test_ly_module_print_mem_tree)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
const char *yang_folder = TESTS_DIR "/api/files";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
try {
|
|
Packit |
8fb591 |
auto ctx = std::make_shared<libyang::Context>(yang_folder);
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(ctx);
|
|
Packit |
8fb591 |
auto module = ctx->parse_module_mem(lys_module_a, LYS_IN_YIN);
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(module);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
auto result = module->print_mem(LYS_OUT_TREE, 0);
|
|
Packit |
8fb591 |
ASSERT_STREQ(result_tree, result);
|
|
Packit |
8fb591 |
} catch (const std::exception& e) {
|
|
Packit |
8fb591 |
mt::printFailed(e.what(), stdout);
|
|
Packit |
8fb591 |
throw;
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
TEST(test_ly_module_print_mem_yang)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
const char *yang_folder = TESTS_DIR "/api/files";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
try {
|
|
Packit |
8fb591 |
auto ctx = std::make_shared<libyang::Context>(yang_folder);
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(ctx);
|
|
Packit |
8fb591 |
auto module = ctx->parse_module_mem(lys_module_a, LYS_IN_YIN);
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(module);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
auto result = module->print_mem(LYS_OUT_YANG, 0);
|
|
Packit |
8fb591 |
ASSERT_STREQ(result_yang, result);
|
|
Packit |
8fb591 |
} catch (const std::exception& e) {
|
|
Packit |
8fb591 |
mt::printFailed(e.what(), stdout);
|
|
Packit |
8fb591 |
throw;
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
TEST(test_ly_module_print_mem_yin)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
const char *yang_folder = TESTS_DIR "/api/files";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
try {
|
|
Packit |
8fb591 |
auto ctx = std::make_shared<libyang::Context>(yang_folder);
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(ctx);
|
|
Packit |
8fb591 |
auto module = ctx->parse_module_mem(lys_module_a, LYS_IN_YIN);
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(module);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
auto result = module->print_mem(LYS_OUT_YIN, 0);
|
|
Packit |
8fb591 |
ASSERT_STREQ(result_yin, result);
|
|
Packit |
8fb591 |
} catch (const std::exception& e) {
|
|
Packit |
8fb591 |
mt::printFailed(e.what(), stdout);
|
|
Packit |
8fb591 |
throw;
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
TEST(test_ly_schema_node_find_path)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
const char *yang_folder = TESTS_DIR "/api/files";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
try {
|
|
Packit |
8fb591 |
auto ctx = std::make_shared<libyang::Context>(yang_folder);
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(ctx);
|
|
Packit |
8fb591 |
auto module = ctx->parse_module_mem(lys_module_a, LYS_IN_YIN);
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(module);
|
|
Packit |
8fb591 |
auto schema_node = module->data();
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(schema_node);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
auto set = schema_node->find_path("/a:x/*");
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(set);
|
|
Packit |
8fb591 |
ASSERT_EQ(5, set->number());
|
|
Packit |
8fb591 |
set = schema_node->find_path("/a:x//*");
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(set);
|
|
Packit |
8fb591 |
ASSERT_EQ(6, set->number());
|
|
Packit |
8fb591 |
set = schema_node->find_path("/a:x//.");
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(set);
|
|
Packit |
8fb591 |
ASSERT_EQ(7, set->number());
|
|
Packit |
8fb591 |
} catch (const std::exception& e) {
|
|
Packit |
8fb591 |
mt::printFailed(e.what(), stdout);
|
|
Packit |
8fb591 |
throw;
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
TEST(test_ly_schema_node_path)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
const char *yang_folder = TESTS_DIR "/api/files";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
try {
|
|
Packit |
8fb591 |
auto ctx = std::make_shared<libyang::Context>(yang_folder);
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(ctx);
|
|
Packit |
8fb591 |
auto module = ctx->parse_module_mem(lys_module_a, LYS_IN_YIN);
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(module);
|
|
Packit |
8fb591 |
auto schema_node = module->data();
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(schema_node);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
const char *path_template = "/a:x/a:bar-gggg";
|
|
Packit |
8fb591 |
auto set = schema_node->find_path(path_template);
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(set);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
auto schemas = set->schema();
|
|
Packit |
8fb591 |
auto schema = schemas.at(0);
|
|
Packit |
8fb591 |
auto path = schema->path(0);
|
|
Packit |
8fb591 |
ASSERT_STREQ(path_template, path);
|
|
Packit |
8fb591 |
} catch (const std::exception& e) {
|
|
Packit |
8fb591 |
mt::printFailed(e.what(), stdout);
|
|
Packit |
8fb591 |
throw;
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
TEST(test_ly_module_data_instatiables)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
const char *yang_folder = TESTS_DIR "/api/files";
|
|
Packit |
8fb591 |
const char *module_name1 = "b";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
try {
|
|
Packit |
8fb591 |
auto ctx = std::make_shared<libyang::Context>(yang_folder);
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(ctx);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
auto module = ctx->load_module(module_name1);
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(module);
|
|
Packit |
8fb591 |
ASSERT_STREQ(module_name1, module->name());
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
auto list = std::make_shared<std::vector<libyang::S_Schema_Node>>(module->data_instantiables(0));
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(list);
|
|
Packit |
8fb591 |
ASSERT_EQ(1, list->size());
|
|
Packit |
8fb591 |
} catch( const std::exception& e ) {
|
|
Packit |
8fb591 |
mt::printFailed(e.what(), stdout);
|
|
Packit |
8fb591 |
throw;
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
TEST(test_ly_schema_child_instatiables)
|
|
Packit |
8fb591 |
{
|
|
Packit |
8fb591 |
const char *yang_folder = TESTS_DIR "/api/files";
|
|
Packit |
8fb591 |
const char *module_name = "b";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
try {
|
|
Packit |
8fb591 |
auto ctx = std::make_shared<libyang::Context>(yang_folder);
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(ctx);
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
auto module = ctx->load_module(module_name);
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(module);
|
|
Packit |
8fb591 |
ASSERT_STREQ(module_name, module->name());
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
auto list = std::make_shared<std::vector<libyang::S_Schema_Node>>(module->data_instantiables(0));
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(list);
|
|
Packit |
8fb591 |
ASSERT_EQ(1, list->size());
|
|
Packit |
8fb591 |
auto child_list = std::make_shared<std::vector<libyang::S_Schema_Node>>(list->front()->child_instantiables(0));
|
|
Packit |
8fb591 |
ASSERT_NOTNULL(child_list);
|
|
Packit |
8fb591 |
ASSERT_EQ(3, child_list->size());
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
} catch( const std::exception& e ) {
|
|
Packit |
8fb591 |
mt::printFailed(e.what(), stdout);
|
|
Packit |
8fb591 |
throw;
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
}
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
TEST_MAIN();
|