|
Packit |
8fb591 |
#!/usr/bin/env python
|
|
Packit |
8fb591 |
from __future__ import print_function
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
__author__ = "Matija Amidzic <matija.amidzic@sartura.hr>"
|
|
Packit |
8fb591 |
__copyright__ = "Copyright 2018, Deutsche Telekom AG"
|
|
Packit |
8fb591 |
__license__ = "BSD 3-Clause"
|
|
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 |
import yang as ly
|
|
Packit |
8fb591 |
import unittest
|
|
Packit |
8fb591 |
import sys
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
import config
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
lys_module_a = \
|
|
Packit |
8fb591 |
" \
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
xmlns=\"urn:ietf:params:xml:ns:yang:yin:1\" \
|
|
Packit |
8fb591 |
xmlns:md=\"urn:ietf:params:xml:ns:yang:ietf-yang-metadata\"\
|
|
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 |
<import module=\"ietf-yang-metadata\"> \
|
|
Packit |
8fb591 |
<prefix value=\"md\"/> \
|
|
Packit |
8fb591 |
</import> \
|
|
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 |
<md:annotation name=\"test\"> \
|
|
Packit |
8fb591 |
<type name=\"string\"/> \
|
|
Packit |
8fb591 |
</md:annotation> \
|
|
Packit |
8fb591 |
<container name=\"x\"> \
|
|
Packit |
8fb591 |
<leaf name=\"bar-leaf\"> \
|
|
Packit |
8fb591 |
<type name=\"string\"/> \
|
|
Packit |
8fb591 |
</leaf> \
|
|
Packit |
8fb591 |
<uses name=\"gg\"> \
|
|
Packit |
8fb591 |
</uses> \
|
|
Packit |
8fb591 |
<leaf name=\"baz\"> \
|
|
Packit |
8fb591 |
<type name=\"string\"/> \
|
|
Packit |
8fb591 |
</leaf> \
|
|
Packit |
8fb591 |
<leaf name=\"bubba\"> \
|
|
Packit |
8fb591 |
<type name=\"string\"/> \
|
|
Packit |
8fb591 |
</leaf> \
|
|
Packit |
8fb591 |
<leaf name=\"number32\"> \
|
|
Packit |
8fb591 |
<type name=\"int32\"/> \
|
|
Packit |
8fb591 |
</leaf> \
|
|
Packit |
8fb591 |
<leaf name=\"number64\"> \
|
|
Packit |
8fb591 |
<type name=\"int64\"/> \
|
|
Packit |
8fb591 |
</leaf> \
|
|
Packit |
8fb591 |
<leaf name=\"def-leaf\"> \
|
|
Packit |
8fb591 |
<type name=\"string\"/> \
|
|
Packit |
8fb591 |
<default value=\"def\"/> \
|
|
Packit |
8fb591 |
</leaf> \
|
|
Packit |
8fb591 |
<anydata name=\"any-data\"/> \
|
|
Packit |
8fb591 |
</container> \
|
|
Packit |
8fb591 |
<leaf name=\"y\"><type name=\"string\"/></leaf> \
|
|
Packit |
8fb591 |
<anyxml name=\"any\"/> \
|
|
Packit |
8fb591 |
<augment target-node=\"/x\"> \
|
|
Packit |
8fb591 |
<container name=\"bar-y\"/> \
|
|
Packit |
8fb591 |
</augment> \
|
|
Packit |
8fb591 |
<rpc name=\"bar-rpc\"> \
|
|
Packit |
8fb591 |
</rpc> \
|
|
Packit |
8fb591 |
<rpc name=\"foo-rpc\"> \
|
|
Packit |
8fb591 |
</rpc> \
|
|
Packit |
8fb591 |
<rpc name=\"rpc1\"> \
|
|
Packit |
8fb591 |
<input> \
|
|
Packit |
8fb591 |
<leaf name=\"input-leaf1\"> \
|
|
Packit |
8fb591 |
<type name=\"string\"/> \
|
|
Packit |
8fb591 |
</leaf> \
|
|
Packit |
8fb591 |
<container name=\"x\"> \
|
|
Packit |
8fb591 |
<leaf name=\"input-leaf2\"> \
|
|
Packit |
8fb591 |
<type name=\"string\"/> \
|
|
Packit |
8fb591 |
</leaf> \
|
|
Packit |
8fb591 |
</container> \
|
|
Packit |
8fb591 |
</input> \
|
|
Packit |
8fb591 |
<output> \
|
|
Packit |
8fb591 |
<leaf name=\"output-leaf1\"> \
|
|
Packit |
8fb591 |
<type name=\"string\"/> \
|
|
Packit |
8fb591 |
</leaf> \
|
|
Packit |
8fb591 |
<leaf name=\"output-leaf2\"> \
|
|
Packit |
8fb591 |
<type name=\"string\"/> \
|
|
Packit |
8fb591 |
</leaf> \
|
|
Packit |
8fb591 |
<container name=\"rpc-container\"> \
|
|
Packit |
8fb591 |
<leaf name=\"output-leaf3\"> \
|
|
Packit |
8fb591 |
<type name=\"string\"/> \
|
|
Packit |
8fb591 |
</leaf> \
|
|
Packit |
8fb591 |
</container> \
|
|
Packit |
8fb591 |
</output> \
|
|
Packit |
8fb591 |
</rpc> \
|
|
Packit |
8fb591 |
<list name=\"l\"> \
|
|
Packit |
8fb591 |
<key value=\"key1 key2\"/> \
|
|
Packit |
8fb591 |
<leaf name=\"key1\"> \
|
|
Packit |
8fb591 |
<type name=\"uint8\"/> \
|
|
Packit |
8fb591 |
</leaf> \
|
|
Packit |
8fb591 |
<leaf name=\"key2\"> \
|
|
Packit |
8fb591 |
<type name=\"uint8\"/> \
|
|
Packit |
8fb591 |
</leaf> \
|
|
Packit |
8fb591 |
<leaf name=\"value\"> \
|
|
Packit |
8fb591 |
<type name=\"string\"/> \
|
|
Packit |
8fb591 |
</leaf> \
|
|
Packit |
8fb591 |
</list> \
|
|
Packit |
8fb591 |
</module> \
|
|
Packit |
8fb591 |
"
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
a_data_xml = "\
|
|
Packit |
8fb591 |
<x xmlns=\"urn:a\">\n\
|
|
Packit |
8fb591 |
<bubba>test</bubba>\n\
|
|
Packit |
8fb591 |
</x>\n"
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
result_xml = "<x xmlns=\"urn:a\"><bubba>test</bubba></x>"
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
result_xml_format ="\
|
|
Packit |
8fb591 |
<x xmlns=\"urn:a\">\n\
|
|
Packit |
8fb591 |
<bubba>test</bubba>\n\
|
|
Packit |
8fb591 |
</x>\n\
|
|
Packit |
8fb591 |
"
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
result_json = "\
|
|
Packit |
8fb591 |
{\n\
|
|
Packit |
8fb591 |
\"a:x\": {\n\
|
|
Packit |
8fb591 |
\"bubba\": \"test\"\n\
|
|
Packit |
8fb591 |
}\n\
|
|
Packit |
8fb591 |
}\n\
|
|
Packit |
8fb591 |
"
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
class UnexpectedError(Exception):
|
|
Packit |
8fb591 |
"""Exception raised for errors that are not expected.
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
Attributes:
|
|
Packit |
8fb591 |
message -- explanation of the error
|
|
Packit |
8fb591 |
"""
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
def __init__(self, message):
|
|
Packit |
8fb591 |
self.message = message
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
class TestUM(unittest.TestCase):
|
|
Packit |
8fb591 |
def test_ly_ctx_parse_data_mem(self):
|
|
Packit |
8fb591 |
yang_folder = config.TESTS_DIR + "/api/files"
|
|
Packit |
8fb591 |
yin_file = config.TESTS_DIR + "/api/files/a.yin"
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
try:
|
|
Packit |
8fb591 |
# Setup
|
|
Packit |
8fb591 |
ctx = ly.Context(yang_folder)
|
|
Packit |
8fb591 |
self.assertIsNotNone(ctx)
|
|
Packit |
8fb591 |
ctx.parse_module_path(yin_file, ly.LYS_IN_YIN)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
# Tests
|
|
Packit |
8fb591 |
root = ctx.parse_data_mem(a_data_xml, ly.LYD_XML, ly.LYD_OPT_NOSIBLINGS | ly.LYD_OPT_STRICT)
|
|
Packit |
8fb591 |
self.assertIsNotNone(root)
|
|
Packit |
8fb591 |
self.assertEqual("x", root.schema().name())
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
except Exception as e:
|
|
Packit |
8fb591 |
self.fail(e)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
def test_ly_ctx_parse_data_fd(self):
|
|
Packit |
8fb591 |
yang_folder = config.TESTS_DIR + "/api/files"
|
|
Packit |
8fb591 |
yin_file = config.TESTS_DIR + "/api/files/a.yin"
|
|
Packit |
8fb591 |
config_file = config.TESTS_DIR + "/api/files/a.xml"
|
|
Packit |
8fb591 |
try:
|
|
Packit |
8fb591 |
# Setup
|
|
Packit |
8fb591 |
ctx = ly.Context(yang_folder)
|
|
Packit |
8fb591 |
self.assertIsNotNone(ctx)
|
|
Packit |
8fb591 |
ctx.parse_module_path(yin_file, ly.LYS_IN_YIN)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
# Tests
|
|
Packit |
8fb591 |
f = open(config_file, 'r')
|
|
Packit |
8fb591 |
fd = f.fileno()
|
|
Packit |
8fb591 |
root = ctx.parse_data_fd(fd, ly.LYD_XML, ly.LYD_OPT_NOSIBLINGS | ly.LYD_OPT_STRICT)
|
|
Packit |
8fb591 |
self.assertIsNotNone(root)
|
|
Packit |
8fb591 |
self.assertEqual("x", root.schema().name())
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
except Exception as e:
|
|
Packit |
8fb591 |
self.fail(e)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
finally:
|
|
Packit |
8fb591 |
f.close()
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
def test_ly_ctx_parse_data_path(self):
|
|
Packit |
8fb591 |
yang_folder = config.TESTS_DIR + "/api/files"
|
|
Packit |
8fb591 |
yin_file = config.TESTS_DIR + "/api/files/a.yin"
|
|
Packit |
8fb591 |
config_file = config.TESTS_DIR + "/api/files/a.xml"
|
|
Packit |
8fb591 |
module_name = "a"
|
|
Packit |
8fb591 |
schema_name = "x"
|
|
Packit |
8fb591 |
try:
|
|
Packit |
8fb591 |
# Setup
|
|
Packit |
8fb591 |
ctx = ly.Context(yang_folder)
|
|
Packit |
8fb591 |
self.assertIsNotNone(ctx)
|
|
Packit |
8fb591 |
module = ctx.parse_module_path(yin_file, ly.LYS_IN_YIN)
|
|
Packit |
8fb591 |
self.assertIsNotNone(module)
|
|
Packit |
8fb591 |
self.assertEqual(module_name, module.name(), "Module names don't match")
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
# Tests
|
|
Packit |
8fb591 |
root = ctx.parse_data_path(config_file, ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
|
|
Packit |
8fb591 |
self.assertIsNotNone(root)
|
|
Packit |
8fb591 |
self.assertEqual(schema_name, root.schema().name())
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
except Exception as e:
|
|
Packit |
8fb591 |
self.fail(e)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
def test_ly_ctx_parse_data_path_invalid(self):
|
|
Packit |
8fb591 |
yang_folder = config.TESTS_DIR + "/api/files"
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
try:
|
|
Packit |
8fb591 |
# Setup
|
|
Packit |
8fb591 |
ctx = ly.Context(yang_folder)
|
|
Packit |
8fb591 |
self.assertIsNotNone(ctx)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
# Tests
|
|
Packit |
8fb591 |
root = ctx.parse_data_path("INVALID_PATH", ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
|
|
Packit |
8fb591 |
raise UnexpectedError("exception not thrown")
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
except UnexpectedError as e:
|
|
Packit |
8fb591 |
self.fail(e)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
except RuntimeError as e:
|
|
Packit |
8fb591 |
return
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
except Exception as e:
|
|
Packit |
8fb591 |
self.fail(e)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
def test_ly_data_node(self):
|
|
Packit |
8fb591 |
yang_folder = config.TESTS_DIR + "/api/files"
|
|
Packit |
8fb591 |
config_file = config.TESTS_DIR + "/api/files/a.xml"
|
|
Packit |
8fb591 |
try:
|
|
Packit |
8fb591 |
# Setup
|
|
Packit |
8fb591 |
ctx = ly.Context(yang_folder)
|
|
Packit |
8fb591 |
self.assertIsNotNone(ctx)
|
|
Packit |
8fb591 |
ctx.parse_module_mem(lys_module_a, ly.LYS_IN_YIN)
|
|
Packit |
8fb591 |
root = ctx.parse_data_path(config_file, ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
|
|
Packit |
8fb591 |
self.assertIsNotNone(root)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
# Tests
|
|
Packit |
8fb591 |
new_node = ly.Data_Node(root, root.schema().module(), "number32", "100")
|
|
Packit |
8fb591 |
self.assertIsNotNone(new_node)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
except Exception as e:
|
|
Packit |
8fb591 |
self.fail(e)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
def test_ly_data_node_new_path(self):
|
|
Packit |
8fb591 |
yang_folder = config.TESTS_DIR + "/api/files"
|
|
Packit |
8fb591 |
config_file = config.TESTS_DIR + "/api/files/a.xml"
|
|
Packit |
8fb591 |
try:
|
|
Packit |
8fb591 |
# Setup
|
|
Packit |
8fb591 |
ctx = ly.Context(yang_folder)
|
|
Packit |
8fb591 |
self.assertIsNotNone(ctx)
|
|
Packit |
8fb591 |
ctx.parse_module_mem(lys_module_a, ly.LYS_IN_YIN)
|
|
Packit |
8fb591 |
ctx.parse_data_path(config_file, ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
|
|
Packit |
8fb591 |
mod = ctx.get_module("a", None, 1)
|
|
Packit |
8fb591 |
self.assertIsNotNone(mod)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
# Tests
|
|
Packit |
8fb591 |
root = ly.Data_Node(ctx, "/a:x/bar-gggg", "a", 0, 0)
|
|
Packit |
8fb591 |
self.assertIsNotNone(root)
|
|
Packit |
8fb591 |
self.assertEqual("x", root.schema().name())
|
|
Packit |
8fb591 |
self.assertEqual("bar-gggg", root.child().schema().name())
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
node = root.new_path(ctx, "def-leaf", "def", 0, ly.LYD_PATH_OPT_DFLT)
|
|
Packit |
8fb591 |
self.assertIsNotNone(node)
|
|
Packit |
8fb591 |
self.assertEqual("def-leaf", node.schema().name())
|
|
Packit |
8fb591 |
self.assertEqual(1, node.dflt())
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
node = root.new_path(ctx, "def-leaf", "def", 0, 0)
|
|
Packit |
8fb591 |
self.assertIsNotNone(node)
|
|
Packit |
8fb591 |
self.assertEqual("def-leaf", node.schema().name())
|
|
Packit |
8fb591 |
self.assertEqual(0, node.dflt())
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
node = root.new_path(ctx, "bubba", "b", 0, 0)
|
|
Packit |
8fb591 |
self.assertIsNotNone(node)
|
|
Packit |
8fb591 |
self.assertEqual("bubba", node.schema().name())
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
node = root.new_path(ctx, "/a:x/number32", "3", 0, 0)
|
|
Packit |
8fb591 |
self.assertIsNotNone(node)
|
|
Packit |
8fb591 |
self.assertEqual("number32", node.schema().name())
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
node = root.new_path(ctx, "/a:l[key1='1'][key2='2']/value", None, 0, 0)
|
|
Packit |
8fb591 |
self.assertIsNotNone(node)
|
|
Packit |
8fb591 |
self.assertEqual("l", node.schema().name())
|
|
Packit |
8fb591 |
self.assertEqual("key1", node.child().schema().name())
|
|
Packit |
8fb591 |
self.assertEqual("key2", node.child().next().schema().name())
|
|
Packit |
8fb591 |
self.assertEqual("value", node.child().next().next().schema().name())
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
except Exception as e:
|
|
Packit |
8fb591 |
self.fail(e)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
def test_ly_data_node_insert(self):
|
|
Packit |
8fb591 |
yang_folder = config.TESTS_DIR + "/api/files"
|
|
Packit |
8fb591 |
config_file = config.TESTS_DIR + "/api/files/a.xml"
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
try:
|
|
Packit |
8fb591 |
# Setup
|
|
Packit |
8fb591 |
ctx = ly.Context(yang_folder)
|
|
Packit |
8fb591 |
self.assertIsNotNone(ctx)
|
|
Packit |
8fb591 |
ctx.parse_module_mem(lys_module_a, ly.LYS_IN_YIN)
|
|
Packit |
8fb591 |
root = ctx.parse_data_path(config_file, ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
|
|
Packit |
8fb591 |
self.assertIsNotNone(root)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
# Tests
|
|
Packit |
8fb591 |
new_node = ly.Data_Node(root, root.schema().module(), "number32", "200")
|
|
Packit |
8fb591 |
self.assertIsNotNone(new_node)
|
|
Packit |
8fb591 |
rc = root.insert(new_node)
|
|
Packit |
8fb591 |
self.assertEqual(0, rc)
|
|
Packit |
8fb591 |
self.assertEqual("number32", root.child().prev().schema().name())
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
except Exception as e:
|
|
Packit |
8fb591 |
self.fail(e)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
def test_ly_data_node_insert_sibling(self):
|
|
Packit |
8fb591 |
yang_folder = config.TESTS_DIR + "/api/files"
|
|
Packit |
8fb591 |
config_file = config.TESTS_DIR + "/api/files/a.xml"
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
try:
|
|
Packit |
8fb591 |
# Setup
|
|
Packit |
8fb591 |
ctx = ly.Context(yang_folder)
|
|
Packit |
8fb591 |
self.assertIsNotNone(ctx)
|
|
Packit |
8fb591 |
ctx.parse_module_mem(lys_module_a, ly.LYS_IN_YIN)
|
|
Packit |
8fb591 |
root = ctx.parse_data_path(config_file, ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
|
|
Packit |
8fb591 |
self.assertIsNotNone(root)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
# Tests
|
|
Packit |
8fb591 |
last = root.prev()
|
|
Packit |
8fb591 |
new_node = ly.Data_Node(None, root.schema().module(), "y", "test")
|
|
Packit |
8fb591 |
self.assertIsNotNone(new_node)
|
|
Packit |
8fb591 |
rc = root.insert_sibling(new_node)
|
|
Packit |
8fb591 |
self.assertEqual(0, rc)
|
|
Packit |
8fb591 |
self.assertNotEqual(last.schema().name(), root.prev().schema().name())
|
|
Packit |
8fb591 |
self.assertEqual("y", root.prev().schema().name())
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
except Exception as e:
|
|
Packit |
8fb591 |
self.fail(e)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
def test_ly_data_node_insert_before(self):
|
|
Packit |
8fb591 |
yang_folder = config.TESTS_DIR + "/api/files"
|
|
Packit |
8fb591 |
config_file = config.TESTS_DIR + "/api/files/a.xml"
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
try:
|
|
Packit |
8fb591 |
# Setup
|
|
Packit |
8fb591 |
ctx = ly.Context(yang_folder)
|
|
Packit |
8fb591 |
self.assertIsNotNone(ctx)
|
|
Packit |
8fb591 |
ctx.parse_module_mem(lys_module_a, ly.LYS_IN_YIN)
|
|
Packit |
8fb591 |
root = ctx.parse_data_path(config_file, ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
|
|
Packit |
8fb591 |
self.assertIsNotNone(root)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
# Tests
|
|
Packit |
8fb591 |
last = root.prev()
|
|
Packit |
8fb591 |
new_node = ly.Data_Node(None, root.schema().module(), "y", "test")
|
|
Packit |
8fb591 |
self.assertIsNotNone(new_node)
|
|
Packit |
8fb591 |
rc = root.insert_before(new_node)
|
|
Packit |
8fb591 |
self.assertEqual(0, rc)
|
|
Packit |
8fb591 |
self.assertNotEqual(last.schema().name(), root.prev().schema().name())
|
|
Packit |
8fb591 |
self.assertEqual("y", root.prev().schema().name())
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
except Exception as e:
|
|
Packit |
8fb591 |
self.fail(e)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
def test_ly_data_node_insert_after(self):
|
|
Packit |
8fb591 |
yang_folder = config.TESTS_DIR + "/api/files"
|
|
Packit |
8fb591 |
config_file = config.TESTS_DIR + "/api/files/a.xml"
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
try:
|
|
Packit |
8fb591 |
# Setup
|
|
Packit |
8fb591 |
ctx = ly.Context(yang_folder)
|
|
Packit |
8fb591 |
self.assertIsNotNone(ctx)
|
|
Packit |
8fb591 |
ctx.parse_module_mem(lys_module_a, ly.LYS_IN_YIN)
|
|
Packit |
8fb591 |
root = ctx.parse_data_path(config_file, ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
|
|
Packit |
8fb591 |
self.assertIsNotNone(root)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
# Tests
|
|
Packit |
8fb591 |
last = root.next()
|
|
Packit |
8fb591 |
new_node = ly.Data_Node(None, root.schema().module(), "y", "test")
|
|
Packit |
8fb591 |
self.assertIsNotNone(new_node)
|
|
Packit |
8fb591 |
rc = root.insert_after(new_node)
|
|
Packit |
8fb591 |
self.assertEqual(0, rc)
|
|
Packit |
8fb591 |
self.assertNotEqual(last.schema().name(), root.next().schema().name())
|
|
Packit |
8fb591 |
self.assertEqual("y", root.next().schema().name())
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
except Exception as e:
|
|
Packit |
8fb591 |
self.fail(e)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
def test_ly_data_node_schema_sort(self):
|
|
Packit |
8fb591 |
yang_folder = config.TESTS_DIR + "/api/files"
|
|
Packit |
8fb591 |
config_file = config.TESTS_DIR + "/api/files/a.xml"
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
try:
|
|
Packit |
8fb591 |
# Setup
|
|
Packit |
8fb591 |
ctx = ly.Context(yang_folder)
|
|
Packit |
8fb591 |
self.assertIsNotNone(ctx)
|
|
Packit |
8fb591 |
ctx.parse_module_mem(lys_module_a, ly.LYS_IN_YIN)
|
|
Packit |
8fb591 |
ctx.parse_data_path(config_file, ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
|
|
Packit |
8fb591 |
mod = ctx.get_module("a", None, 1)
|
|
Packit |
8fb591 |
self.assertIsNotNone(mod)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
# Tests
|
|
Packit |
8fb591 |
root = ly.Data_Node(None, mod, "l")
|
|
Packit |
8fb591 |
self.assertIsNotNone(root)
|
|
Packit |
8fb591 |
node = ly.Data_Node(root, mod, "key1", "1")
|
|
Packit |
8fb591 |
self.assertIsNotNone(node)
|
|
Packit |
8fb591 |
node = ly.Data_Node(root, mod, "key2", "2")
|
|
Packit |
8fb591 |
self.assertIsNotNone(node)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
node = ly.Data_Node(None, mod, "x")
|
|
Packit |
8fb591 |
self.assertIsNotNone(node)
|
|
Packit |
8fb591 |
rc = root.insert_after(node)
|
|
Packit |
8fb591 |
self.assertEqual(0, rc)
|
|
Packit |
8fb591 |
node = root.next()
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
node2 = ly.Data_Node(node, mod, "bubba", "a")
|
|
Packit |
8fb591 |
self.assertIsNotNone(node2)
|
|
Packit |
8fb591 |
node2 = ly.Data_Node(node, mod, "bar-gggg", "b")
|
|
Packit |
8fb591 |
self.assertIsNotNone(node2)
|
|
Packit |
8fb591 |
node2 = ly.Data_Node(node, mod, "number64", "64")
|
|
Packit |
8fb591 |
self.assertIsNotNone(node2)
|
|
Packit |
8fb591 |
node2 = ly.Data_Node(node, mod, "number32", "32")
|
|
Packit |
8fb591 |
self.assertIsNotNone(node2)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
rc = root.schema_sort(1)
|
|
Packit |
8fb591 |
self.assertEqual(0, rc)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
root = node
|
|
Packit |
8fb591 |
self.assertEqual("x", root.schema().name())
|
|
Packit |
8fb591 |
self.assertEqual("l", root.next().schema().name())
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
self.assertEqual("bar-gggg", root.child().schema().name())
|
|
Packit |
8fb591 |
self.assertEqual("bubba", root.child().next().schema().name())
|
|
Packit |
8fb591 |
self.assertEqual("number32", root.child().next().next().schema().name())
|
|
Packit |
8fb591 |
self.assertEqual("number64", root.child().next().next().next().schema().name())
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
except Exception as e:
|
|
Packit |
8fb591 |
self.fail(e)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
def test_ly_data_node_find_path(self):
|
|
Packit |
8fb591 |
yang_folder = config.TESTS_DIR + "/api/files"
|
|
Packit |
8fb591 |
config_file = config.TESTS_DIR + "/api/files/a.xml"
|
|
Packit |
8fb591 |
try:
|
|
Packit |
8fb591 |
# Setup
|
|
Packit |
8fb591 |
ctx = ly.Context(yang_folder)
|
|
Packit |
8fb591 |
self.assertIsNotNone(ctx)
|
|
Packit |
8fb591 |
ctx.parse_module_mem(lys_module_a, ly.LYS_IN_YIN)
|
|
Packit |
8fb591 |
root = ctx.parse_data_path(config_file, ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
|
|
Packit |
8fb591 |
self.assertIsNotNone(root)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
# Tests
|
|
Packit |
8fb591 |
node = root.child()
|
|
Packit |
8fb591 |
self.assertIsNotNone(node)
|
|
Packit |
8fb591 |
set = node.find_path("/a:x/bubba")
|
|
Packit |
8fb591 |
self.assertIsNotNone(set)
|
|
Packit |
8fb591 |
self.assertEqual(1, set.number())
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
except Exception as e:
|
|
Packit |
8fb591 |
self.fail(e)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
def test_ly_data_node_find_instance(self):
|
|
Packit |
8fb591 |
yang_folder = config.TESTS_DIR + "/api/files"
|
|
Packit |
8fb591 |
config_file = config.TESTS_DIR + "/api/files/a.xml"
|
|
Packit |
8fb591 |
try:
|
|
Packit |
8fb591 |
# Setup
|
|
Packit |
8fb591 |
ctx = ly.Context(yang_folder)
|
|
Packit |
8fb591 |
self.assertIsNotNone(ctx)
|
|
Packit |
8fb591 |
ctx.parse_module_mem(lys_module_a, ly.LYS_IN_YIN)
|
|
Packit |
8fb591 |
root = ctx.parse_data_path(config_file, ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
|
|
Packit |
8fb591 |
self.assertIsNotNone(root)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
# Tests
|
|
Packit |
8fb591 |
node = root.child()
|
|
Packit |
8fb591 |
self.assertIsNotNone(node)
|
|
Packit |
8fb591 |
set = node.find_instance(node.schema())
|
|
Packit |
8fb591 |
self.assertIsNotNone(set)
|
|
Packit |
8fb591 |
self.assertEqual(1, set.number())
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
except Exception as e:
|
|
Packit |
8fb591 |
self.fail(e)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
def test_ly_data_node_validate(self):
|
|
Packit |
8fb591 |
yang_folder = config.TESTS_DIR + "/api/files"
|
|
Packit |
8fb591 |
config_file = config.TESTS_DIR + "/api/files/a.xml"
|
|
Packit |
8fb591 |
try:
|
|
Packit |
8fb591 |
# Setup
|
|
Packit |
8fb591 |
ctx = ly.Context(yang_folder)
|
|
Packit |
8fb591 |
self.assertIsNotNone(ctx)
|
|
Packit |
8fb591 |
ctx.parse_module_mem(lys_module_a, ly.LYS_IN_YIN)
|
|
Packit |
8fb591 |
root = ctx.parse_data_path(config_file, ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
|
|
Packit |
8fb591 |
self.assertIsNotNone(root)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
# Tests
|
|
Packit |
8fb591 |
rc = root.validate(ly.LYD_OPT_CONFIG, ctx)
|
|
Packit |
8fb591 |
self.assertEqual(0, rc)
|
|
Packit |
8fb591 |
new = ly.Data_Node(root, root.schema().module(), "number32", "1")
|
|
Packit |
8fb591 |
self.assertIsNotNone(new)
|
|
Packit |
8fb591 |
rc = root.insert(new)
|
|
Packit |
8fb591 |
self.assertEqual(0, rc)
|
|
Packit |
8fb591 |
rc = root.validate(ly.LYD_OPT_CONFIG, ctx)
|
|
Packit |
8fb591 |
self.assertEqual(0, rc)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
except Exception as e:
|
|
Packit |
8fb591 |
self.fail(e)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
def test_ly_data_node_unlink(self):
|
|
Packit |
8fb591 |
yang_folder = config.TESTS_DIR + "/api/files"
|
|
Packit |
8fb591 |
config_file = config.TESTS_DIR + "/api/files/a.xml"
|
|
Packit |
8fb591 |
try:
|
|
Packit |
8fb591 |
# Setup
|
|
Packit |
8fb591 |
ctx = ly.Context(yang_folder)
|
|
Packit |
8fb591 |
self.assertIsNotNone(ctx)
|
|
Packit |
8fb591 |
ctx.parse_module_mem(lys_module_a, ly.LYS_IN_YIN)
|
|
Packit |
8fb591 |
root = ctx.parse_data_path(config_file, ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
|
|
Packit |
8fb591 |
self.assertIsNotNone(root)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
# Tests
|
|
Packit |
8fb591 |
node = root.child()
|
|
Packit |
8fb591 |
new = ly.Data_Node(root, node.schema().module(), "number32", "1")
|
|
Packit |
8fb591 |
self.assertIsNotNone(new)
|
|
Packit |
8fb591 |
rc = root.insert(new)
|
|
Packit |
8fb591 |
self.assertEqual(0, rc)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
schema = node.prev().schema()
|
|
Packit |
8fb591 |
if (ly.LYS_LEAF == schema.nodetype() or ly.LYS_LEAFLIST == schema.nodetype()):
|
|
Packit |
8fb591 |
casted = node.prev().subtype()
|
|
Packit |
8fb591 |
self.assertEqual("1", casted.value_str())
|
|
Packit |
8fb591 |
else:
|
|
Packit |
8fb591 |
self.fail()
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
rc = node.prev().unlink()
|
|
Packit |
8fb591 |
self.assertEqual(0, rc)
|
|
Packit |
8fb591 |
schema = node.prev().schema()
|
|
Packit |
8fb591 |
if (ly.LYS_LEAF == schema.nodetype() or ly.LYS_LEAFLIST == schema.nodetype()):
|
|
Packit |
8fb591 |
self.fail()
|
|
Packit |
8fb591 |
else:
|
|
Packit |
8fb591 |
return
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
except Exception as e:
|
|
Packit |
8fb591 |
self.fail(e)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
def test_ly_data_node_print_mem_xml(self):
|
|
Packit |
8fb591 |
yang_folder = config.TESTS_DIR + "/api/files"
|
|
Packit |
8fb591 |
config_file = config.TESTS_DIR + "/api/files/a.xml"
|
|
Packit |
8fb591 |
try:
|
|
Packit |
8fb591 |
# Setup
|
|
Packit |
8fb591 |
ctx = ly.Context(yang_folder)
|
|
Packit |
8fb591 |
self.assertIsNotNone(ctx)
|
|
Packit |
8fb591 |
ctx.parse_module_mem(lys_module_a, ly.LYS_IN_YIN)
|
|
Packit |
8fb591 |
root = ctx.parse_data_path(config_file, ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
|
|
Packit |
8fb591 |
self.assertIsNotNone(root)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
# Tests
|
|
Packit |
8fb591 |
result = root.print_mem(ly.LYD_XML, 0)
|
|
Packit |
8fb591 |
self.assertEqual(result_xml, result)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
except Exception as e:
|
|
Packit |
8fb591 |
self.fail(e)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
def test_ly_data_node_print_mem_xml_format(self):
|
|
Packit |
8fb591 |
yang_folder = config.TESTS_DIR + "/api/files"
|
|
Packit |
8fb591 |
config_file = config.TESTS_DIR + "/api/files/a.xml"
|
|
Packit |
8fb591 |
try:
|
|
Packit |
8fb591 |
# Setup
|
|
Packit |
8fb591 |
ctx = ly.Context(yang_folder)
|
|
Packit |
8fb591 |
self.assertIsNotNone(ctx)
|
|
Packit |
8fb591 |
ctx.parse_module_mem(lys_module_a, ly.LYS_IN_YIN)
|
|
Packit |
8fb591 |
root = ctx.parse_data_path(config_file, ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
|
|
Packit |
8fb591 |
self.assertIsNotNone(root)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
# Tests
|
|
Packit |
8fb591 |
result = root.print_mem(ly.LYD_XML, ly.LYP_FORMAT)
|
|
Packit |
8fb591 |
self.assertEqual(result_xml_format, result)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
except Exception as e:
|
|
Packit |
8fb591 |
self.fail(e)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
def test_ly_data_node_print_mem_json(self):
|
|
Packit |
8fb591 |
yang_folder = config.TESTS_DIR + "/api/files"
|
|
Packit |
8fb591 |
config_file = config.TESTS_DIR + "/api/files/a.xml"
|
|
Packit |
8fb591 |
try:
|
|
Packit |
8fb591 |
# Setup
|
|
Packit |
8fb591 |
ctx = ly.Context(yang_folder)
|
|
Packit |
8fb591 |
self.assertIsNotNone(ctx)
|
|
Packit |
8fb591 |
ctx.parse_module_mem(lys_module_a, ly.LYS_IN_YIN)
|
|
Packit |
8fb591 |
root = ctx.parse_data_path(config_file, ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
|
|
Packit |
8fb591 |
self.assertIsNotNone(root)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
# Tests
|
|
Packit |
8fb591 |
result = root.print_mem(ly.LYD_JSON, ly.LYP_FORMAT)
|
|
Packit |
8fb591 |
self.assertEqual(result_json, result)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
except Exception as e:
|
|
Packit |
8fb591 |
self.fail(e)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
def test_ly_data_node_path(self):
|
|
Packit |
8fb591 |
yang_folder = config.TESTS_DIR + "/api/files"
|
|
Packit |
8fb591 |
config_file = config.TESTS_DIR + "/api/files/a.xml"
|
|
Packit |
8fb591 |
try:
|
|
Packit |
8fb591 |
# Setup
|
|
Packit |
8fb591 |
ctx = ly.Context(yang_folder)
|
|
Packit |
8fb591 |
self.assertIsNotNone(ctx)
|
|
Packit |
8fb591 |
ctx.parse_module_mem(lys_module_a, ly.LYS_IN_YIN)
|
|
Packit |
8fb591 |
root = ctx.parse_data_path(config_file, ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
|
|
Packit |
8fb591 |
self.assertIsNotNone(root)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
# Tests
|
|
Packit |
8fb591 |
str = root.path()
|
|
Packit |
8fb591 |
self.assertIsNotNone(str)
|
|
Packit |
8fb591 |
self.assertEqual("/a:x", str)
|
|
Packit |
8fb591 |
str = root.child().path()
|
|
Packit |
8fb591 |
self.assertIsNotNone(str)
|
|
Packit |
8fb591 |
self.assertEqual("/a:x/bubba", str)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
except Exception as e:
|
|
Packit |
8fb591 |
self.fail(e)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
def test_ly_data_node_leaf(self):
|
|
Packit |
8fb591 |
yang_folder = config.TESTS_DIR + "/api/files"
|
|
Packit |
8fb591 |
config_file = config.TESTS_DIR + "/api/files/a.xml"
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
try:
|
|
Packit |
8fb591 |
ctx = ly.Context(yang_folder)
|
|
Packit |
8fb591 |
self.assertIsNotNone(ctx)
|
|
Packit |
8fb591 |
ctx.parse_module_mem(lys_module_a, ly.LYS_IN_YIN)
|
|
Packit |
8fb591 |
root = ctx.parse_data_path(config_file, ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
|
|
Packit |
8fb591 |
self.assertIsNotNone(root)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
new_node = ly.Data_Node(root, root.schema().module(), "number32", "100")
|
|
Packit |
8fb591 |
self.assertIsNotNone(new_node)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
except Exception as e:
|
|
Packit |
8fb591 |
self.fail(e)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
def test_ly_data_node_anydata(self):
|
|
Packit |
8fb591 |
yang_folder = config.TESTS_DIR + "/api/files"
|
|
Packit |
8fb591 |
config_file = config.TESTS_DIR + "/api/files/a.xml"
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
try:
|
|
Packit |
8fb591 |
ctx = ly.Context(yang_folder)
|
|
Packit |
8fb591 |
self.assertIsNotNone(ctx)
|
|
Packit |
8fb591 |
ctx.parse_module_mem(lys_module_a, ly.LYS_IN_YIN)
|
|
Packit |
8fb591 |
root = ctx.parse_data_path(config_file, ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
|
|
Packit |
8fb591 |
self.assertIsNotNone(root)
|
|
Packit |
8fb591 |
mod = ctx.get_module("a", None, 1)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
new_node = ly.Data_Node(root, mod, "any-data", "100", ly.LYD_ANYDATA_CONSTSTRING)
|
|
Packit |
8fb591 |
self.assertIsNotNone(new_node)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
except Exception as e:
|
|
Packit |
8fb591 |
self.fail(e)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
def test_ly_data_node_dup(self):
|
|
Packit |
8fb591 |
yang_folder = config.TESTS_DIR + "/api/files";
|
|
Packit |
8fb591 |
config_file = config.TESTS_DIR + "/api/files/a.xml";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
try:
|
|
Packit |
8fb591 |
ctx = ly.Context(yang_folder)
|
|
Packit |
8fb591 |
self.assertIsNotNone(ctx)
|
|
Packit |
8fb591 |
ctx.parse_module_mem(lys_module_a, ly.LYS_IN_YIN)
|
|
Packit |
8fb591 |
root = ctx.parse_data_path(config_file, ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
|
|
Packit |
8fb591 |
self.assertIsNotNone(root)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
new_node = ly.Data_Node(root, root.child().schema().module(), "bar-y")
|
|
Packit |
8fb591 |
self.assertIsNotNone(new_node)
|
|
Packit |
8fb591 |
dup_node = new_node.dup(0);
|
|
Packit |
8fb591 |
self.assertIsNotNone(dup_node)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
except Exception as e:
|
|
Packit |
8fb591 |
self.fail(e)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
def test_ly_data_node_dup_to_ctx(self):
|
|
Packit |
8fb591 |
sch = "module x {\
|
|
Packit |
8fb591 |
namespace urn:x;\
|
|
Packit |
8fb591 |
prefix x;\
|
|
Packit |
8fb591 |
leaf x { type string; }}"
|
|
Packit |
8fb591 |
data = "<x xmlns=\"urn:x\">hello</x>"
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
try:
|
|
Packit |
8fb591 |
ctx1 = ly.Context(None)
|
|
Packit |
8fb591 |
self.assertIsNotNone(ctx1);
|
|
Packit |
8fb591 |
ctx1.parse_module_mem(sch, ly.LYS_IN_YANG)
|
|
Packit |
8fb591 |
data1 = ctx1.parse_data_mem(data, ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
|
|
Packit |
8fb591 |
self.assertIsNotNone(data1)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
ctx2 = ly.Context(None)
|
|
Packit |
8fb591 |
self.assertIsNotNone(ctx2)
|
|
Packit |
8fb591 |
# we expect NULL due to missing schema in the second ctx
|
|
Packit |
8fb591 |
dup_node = data1.dup_to_ctx(1, ctx2)
|
|
Packit |
8fb591 |
self.assertIsNone(dup_node)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
ctx2.parse_module_mem(sch, ly.LYS_IN_YANG)
|
|
Packit |
8fb591 |
# now we expect success due to schema being added to the second ctx
|
|
Packit |
8fb591 |
dup_node = data1.dup_to_ctx(1, ctx2)
|
|
Packit |
8fb591 |
self.assertIsNotNone(dup_node)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
except Exception as e:
|
|
Packit |
8fb591 |
self.fail(e)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
def test_ly_data_node_validate_node(self):
|
|
Packit |
8fb591 |
yang_folder = config.TESTS_DIR + "/api/files";
|
|
Packit |
8fb591 |
config_file = config.TESTS_DIR + "/api/files/a.xml";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
try:
|
|
Packit |
8fb591 |
ctx = ly.Context(yang_folder)
|
|
Packit |
8fb591 |
self.assertIsNotNone(ctx)
|
|
Packit |
8fb591 |
ctx.parse_module_mem(lys_module_a, ly.LYS_IN_YIN)
|
|
Packit |
8fb591 |
root = ctx.parse_data_path(config_file, ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
|
|
Packit |
8fb591 |
self.assertIsNotNone(root)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
rc = root.validate(ly.LYD_OPT_CONFIG, ctx)
|
|
Packit |
8fb591 |
self.assertEqual(0, rc)
|
|
Packit |
8fb591 |
new_node = ly.Data_Node(root, root.schema().module(), "number32", "1")
|
|
Packit |
8fb591 |
self.assertIsNotNone(new_node)
|
|
Packit |
8fb591 |
rc = root.validate(ly.LYD_OPT_CONFIG, new_node)
|
|
Packit |
8fb591 |
self.assertEqual(0, rc)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
except Exception as e:
|
|
Packit |
8fb591 |
self.fail(e)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
def test_ly_data_node_validate_value(self):
|
|
Packit |
8fb591 |
yang_folder = config.TESTS_DIR + "/api/files";
|
|
Packit |
8fb591 |
config_file = config.TESTS_DIR + "/api/files/a.xml";
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
try:
|
|
Packit |
8fb591 |
ctx = ly.Context(yang_folder)
|
|
Packit |
8fb591 |
self.assertIsNotNone(ctx)
|
|
Packit |
8fb591 |
ctx.parse_module_mem(lys_module_a, ly.LYS_IN_YIN)
|
|
Packit |
8fb591 |
root = ctx.parse_data_path(config_file, ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
|
|
Packit |
8fb591 |
self.assertIsNotNone(root)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
rc = root.validate(ly.LYD_OPT_CONFIG, ctx)
|
|
Packit |
8fb591 |
self.assertEqual(0, rc)
|
|
Packit |
8fb591 |
new_node = ly.Data_Node(root, root.schema().module(), "number32", "1")
|
|
Packit |
8fb591 |
self.assertIsNotNone(new_node)
|
|
Packit |
8fb591 |
self.assertEqual(0, new_node.validate_value("1"))
|
|
Packit |
8fb591 |
self.assertEqual(0, new_node.validate_value("100"))
|
|
Packit |
8fb591 |
self.assertEqual(0, new_node.validate_value("110000000"))
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
except Exception as e:
|
|
Packit |
8fb591 |
self.fail(e)
|
|
Packit |
8fb591 |
|
|
Packit |
8fb591 |
if __name__ == '__main__':
|
|
Packit |
8fb591 |
unittest.main()
|