Skip to content

Commit 4ef9212

Browse files
authored
Merge pull request #625 from sartura/unit-tests2-python
Python: extend unit tests
2 parents 46f93ba + 59a1468 commit 4ef9212

File tree

3 files changed

+286
-3
lines changed

3 files changed

+286
-3
lines changed

swig/python/tests/test_libyang.py

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,123 @@ def test_ly_set(self):
445445
except Exception as e:
446446
self.fail(e)
447447

448+
def test_ly_ctx_new_ylpath(self):
449+
yang_folder = config.TESTS_DIR + "/api/files"
450+
path = config.TESTS_DIR + "/api/files/ylpath.xml"
451+
452+
try:
453+
ctx = ly.Context(yang_folder, path, ly.LYD_XML, 0)
454+
self.assertIsNotNone(ctx)
455+
list = ctx.get_searchdirs()
456+
self.assertIsNotNone(list)
457+
self.assertEqual(1, len(list))
458+
459+
except Exception as e:
460+
self.fail(e)
461+
462+
def test_ly_ctx_new_ylmem(self):
463+
yang_folder = config.TESTS_DIR + "/api/files"
464+
465+
try:
466+
ctx = ly.Context(yang_folder)
467+
self.assertIsNotNone(ctx)
468+
info = ctx.info()
469+
self.assertIsNotNone(info)
470+
self.assertEqual(ly.LYD_VAL_OK, info.validity())
471+
472+
mem = info.print_mem(ly.LYD_XML, 0)
473+
self.assertIsNotNone(mem)
474+
475+
new_ctx = ly.Context(yang_folder, ly.LYD_XML, mem, 0)
476+
self.assertIsNotNone(new_ctx)
477+
list = ctx.get_searchdirs()
478+
self.assertIsNotNone(list)
479+
self.assertEqual(1, len(list))
480+
481+
except Exception as e:
482+
self.fail(e)
483+
484+
def test_ly_ctx_get_module_iter(self):
485+
yang_folder = config.TESTS_DIR + "/api/files"
486+
module_name = "a"
487+
488+
try:
489+
ctx = ly.Context(yang_folder)
490+
self.assertIsNotNone(ctx)
491+
492+
module = ctx.load_module(module_name)
493+
self.assertIsNotNone(module)
494+
self.assertEqual(module_name, module.name())
495+
itr = ctx.get_module_iter()
496+
self.assertIsNotNone(itr)
497+
self.assertEqual(7, len(itr))
498+
499+
except Exception as e:
500+
self.fail(e)
501+
502+
503+
def test_ly_ctx_get_disabled_module_iter(self):
504+
yang_folder = config.TESTS_DIR + "/api/files"
505+
module_name = "x"
506+
507+
try:
508+
ctx = ly.Context(yang_folder)
509+
self.assertIsNotNone(ctx)
510+
511+
module = ctx.load_module(module_name)
512+
self.assertIsNotNone(module)
513+
self.assertEqual(module_name, module.name())
514+
# FIXME no way to disable module from here
515+
516+
itr = ctx.get_disabled_module_iter()
517+
self.assertIsNotNone(itr)
518+
self.assertEqual(0, len(itr))
519+
520+
except Exception as e:
521+
self.fail(e)
522+
523+
def test_ly_ctx_data_instantiables(self):
524+
yang_folder = config.TESTS_DIR + "/api/files"
525+
module_name = "b"
526+
527+
try:
528+
ctx = ly.Context(yang_folder)
529+
self.assertIsNotNone(ctx)
530+
531+
module = ctx.load_module(module_name)
532+
self.assertIsNotNone(module)
533+
self.assertEqual(module_name, module.name())
534+
535+
instantiables = ctx.data_instantiables(0)
536+
self.assertIsNotNone(instantiables)
537+
self.assertEqual(5, len(instantiables))
538+
539+
except Exception as e:
540+
self.fail(e)
541+
542+
def test_ly_ctx_get_node(self):
543+
yang_folder = config.TESTS_DIR + "/api/files"
544+
module_name = "b"
545+
546+
try:
547+
ctx = ly.Context(yang_folder)
548+
self.assertIsNotNone(ctx)
549+
550+
module = ctx.load_module(module_name)
551+
self.assertIsNotNone(module)
552+
self.assertEqual(module_name, module.name())
553+
554+
instantiables = ctx.data_instantiables(0)
555+
self.assertIsNotNone(instantiables)
556+
self.assertEqual(5, len(instantiables))
557+
558+
schema = instantiables[0];
559+
self.assertIsNotNone(schema)
560+
node = ctx.get_node(schema, "/b:x/b:bubba", 0)
561+
self.assertIsNotNone(node)
562+
563+
except Exception as e:
564+
self.fail(e)
448565

449566
if __name__ == '__main__':
450567
unittest.main()

swig/python/tests/test_tree_data.py

Lines changed: 127 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
<type name=\"string\"/> \
6868
<default value=\"def\"/> \
6969
</leaf> \
70+
<anydata name=\"any-data\"/> \
7071
</container> \
7172
<leaf name=\"y\"><type name=\"string\"/></leaf> \
7273
<anyxml name=\"any\"/> \
@@ -247,8 +248,6 @@ def test_ly_data_node(self):
247248
# Tests
248249
new_node = ly.Data_Node(root, root.schema().module(), "number32", "100")
249250
self.assertIsNotNone(new_node)
250-
dup_node = new_node.dup(0)
251-
self.assertIsNotNone(dup_node)
252251

253252
except Exception as e:
254253
self.fail(e)
@@ -624,5 +623,131 @@ def test_ly_data_node_path(self):
624623
except Exception as e:
625624
self.fail(e)
626625

626+
def test_ly_data_node_leaf(self):
627+
yang_folder = config.TESTS_DIR + "/api/files"
628+
config_file = config.TESTS_DIR + "/api/files/a.xml"
629+
630+
try:
631+
ctx = ly.Context(yang_folder)
632+
self.assertIsNotNone(ctx)
633+
ctx.parse_module_mem(lys_module_a, ly.LYS_IN_YIN)
634+
root = ctx.parse_data_path(config_file, ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
635+
self.assertIsNotNone(root)
636+
637+
new_node = ly.Data_Node(root, root.schema().module(), "number32", "100")
638+
self.assertIsNotNone(new_node)
639+
640+
except Exception as e:
641+
self.fail(e)
642+
643+
def test_ly_data_node_anydata(self):
644+
yang_folder = config.TESTS_DIR + "/api/files"
645+
config_file = config.TESTS_DIR + "/api/files/a.xml"
646+
647+
try:
648+
ctx = ly.Context(yang_folder)
649+
self.assertIsNotNone(ctx)
650+
ctx.parse_module_mem(lys_module_a, ly.LYS_IN_YIN)
651+
root = ctx.parse_data_path(config_file, ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
652+
self.assertIsNotNone(root)
653+
mod = ctx.get_module("a", None, 1)
654+
655+
new_node = ly.Data_Node(root, mod, "any-data", "100", ly.LYD_ANYDATA_CONSTSTRING)
656+
self.assertIsNotNone(new_node)
657+
658+
except Exception as e:
659+
self.fail(e)
660+
661+
def test_ly_data_node_dup(self):
662+
yang_folder = config.TESTS_DIR + "/api/files";
663+
config_file = config.TESTS_DIR + "/api/files/a.xml";
664+
665+
try:
666+
ctx = ly.Context(yang_folder)
667+
self.assertIsNotNone(ctx)
668+
ctx.parse_module_mem(lys_module_a, ly.LYS_IN_YIN)
669+
root = ctx.parse_data_path(config_file, ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
670+
self.assertIsNotNone(root)
671+
672+
new_node = ly.Data_Node(root, root.child().schema().module(), "bar-y")
673+
self.assertIsNotNone(new_node)
674+
dup_node = new_node.dup(0);
675+
self.assertIsNotNone(dup_node)
676+
677+
except Exception as e:
678+
self.fail(e)
679+
680+
681+
def test_ly_data_node_dup_to_ctx(self):
682+
sch = "module x {\
683+
namespace urn:x;\
684+
prefix x;\
685+
leaf x { type string; }}"
686+
data = "<x xmlns=\"urn:x\">hello</x>"
687+
688+
try:
689+
ctx1 = ly.Context(None)
690+
self.assertIsNotNone(ctx1);
691+
ctx1.parse_module_mem(sch, ly.LYS_IN_YANG)
692+
data1 = ctx1.parse_data_mem(data, ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
693+
self.assertIsNotNone(data1)
694+
695+
ctx2 = ly.Context(None)
696+
self.assertIsNotNone(ctx2)
697+
# we expect NULL due to missing schema in the second ctx
698+
dup_node = data1.dup_to_ctx(1, ctx2)
699+
self.assertIsNone(dup_node)
700+
701+
ctx2.parse_module_mem(sch, ly.LYS_IN_YANG)
702+
# now we expect success due to schema being added to the second ctx
703+
dup_node = data1.dup_to_ctx(1, ctx2)
704+
self.assertIsNotNone(dup_node)
705+
706+
except Exception as e:
707+
self.fail(e)
708+
709+
def test_ly_data_node_validate_node(self):
710+
yang_folder = config.TESTS_DIR + "/api/files";
711+
config_file = config.TESTS_DIR + "/api/files/a.xml";
712+
713+
try:
714+
ctx = ly.Context(yang_folder)
715+
self.assertIsNotNone(ctx)
716+
ctx.parse_module_mem(lys_module_a, ly.LYS_IN_YIN)
717+
root = ctx.parse_data_path(config_file, ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
718+
self.assertIsNotNone(root)
719+
720+
rc = root.validate(ly.LYD_OPT_CONFIG, ctx)
721+
self.assertEqual(0, rc)
722+
new_node = ly.Data_Node(root, root.schema().module(), "number32", "1")
723+
self.assertIsNotNone(new_node)
724+
rc = root.validate(ly.LYD_OPT_CONFIG, new_node)
725+
self.assertEqual(0, rc)
726+
727+
except Exception as e:
728+
self.fail(e)
729+
730+
def test_ly_data_node_validate_value(self):
731+
yang_folder = config.TESTS_DIR + "/api/files";
732+
config_file = config.TESTS_DIR + "/api/files/a.xml";
733+
734+
try:
735+
ctx = ly.Context(yang_folder)
736+
self.assertIsNotNone(ctx)
737+
ctx.parse_module_mem(lys_module_a, ly.LYS_IN_YIN)
738+
root = ctx.parse_data_path(config_file, ly.LYD_XML, ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
739+
self.assertIsNotNone(root)
740+
741+
rc = root.validate(ly.LYD_OPT_CONFIG, ctx)
742+
self.assertEqual(0, rc)
743+
new_node = ly.Data_Node(root, root.schema().module(), "number32", "1")
744+
self.assertIsNotNone(new_node)
745+
self.assertEqual(0, new_node.validate_value("1"))
746+
self.assertEqual(0, new_node.validate_value("100"))
747+
self.assertEqual(0, new_node.validate_value("110000000"))
748+
749+
except Exception as e:
750+
self.fail(e)
751+
627752
if __name__ == '__main__':
628753
unittest.main()

swig/python/tests/test_tree_schema.py

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -552,5 +552,46 @@ def test_ly_schema_node_path(self):
552552
except Exception as e:
553553
self.fail(e)
554554

555+
def test_ly_module_data_instatiables(self):
556+
yang_folder = config.TESTS_DIR + "/api/files"
557+
module_name = "b"
558+
559+
try:
560+
ctx = ly.Context(yang_folder)
561+
self.assertIsNotNone(ctx)
562+
563+
module = ctx.load_module(module_name)
564+
self.assertIsNotNone(module)
565+
self.assertEqual(module_name, module.name())
566+
567+
instantiables = module.data_instantiables(0)
568+
self.assertIsNotNone(instantiables)
569+
self.assertEqual(1, len(instantiables))
570+
571+
except Exception as e:
572+
self.fail(e)
573+
574+
def test_ly_schema_child_instatiables(self):
575+
yang_folder = config.TESTS_DIR + "/api/files"
576+
module_name = "b"
577+
578+
try:
579+
ctx = ly.Context(yang_folder)
580+
self.assertIsNotNone(ctx)
581+
582+
module = ctx.load_module(module_name)
583+
self.assertIsNotNone(module)
584+
self.assertEqual(module_name, module.name())
585+
586+
instantiables = module.data_instantiables(0)
587+
self.assertIsNotNone(instantiables)
588+
self.assertEqual(1, len(instantiables))
589+
child_instantiables = instantiables[0].child_instantiables(0)
590+
self.assertIsNotNone(child_instantiables)
591+
self.assertEqual(3, len(child_instantiables))
592+
593+
except Exception as e:
594+
self.fail(e)
595+
555596
if __name__ == '__main__':
556-
unittest.main()
597+
unittest.main()

0 commit comments

Comments
 (0)