Blame swig/cpp/tests/test_tree_schema.cpp

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();