@@ -596,7 +596,7 @@ static void
596596test_data_leafref_nodes (void * * state )
597597{
598598 struct lyd_node * tree , * iter ;
599- struct lyd_node_term * target_node = NULL , * leafref_node ;
599+ struct lyd_node_term * target_node = NULL , * leafref_node , * leafref_node2 ;
600600 const struct lyd_leafref_links_rec * rec ;
601601 const char * schema , * data , * value ;
602602
@@ -622,6 +622,14 @@ test_data_leafref_nodes(void **state)
622622 " path \"../ll\";"
623623 " }"
624624 " }"
625+ " leaf ref3 {"
626+ " type union {"
627+ " type leafref {"
628+ " path \"../ll\";"
629+ " }"
630+ " type string;"
631+ " }"
632+ " }"
625633 "}" ;
626634
627635 UTEST_ADD_MODULE (schema , LYS_IN_YANG , NULL , NULL );
@@ -630,11 +638,12 @@ test_data_leafref_nodes(void **state)
630638 "{"
631639 " \"test-data-hash:ll\": [\"qwe\", \"asd\"],"
632640 " \"test-data-hash:c1\": { \"ref1\": \"qwe\"},"
633- " \"test-data-hash:ref2\": \"asd\""
641+ " \"test-data-hash:ref2\": \"asd\","
642+ " \"test-data-hash:ref3\": \"asd\""
634643 "}" ;
635644
636645 /* The run must not crash due to the assert that checks the hash. */
637- CHECK_PARSE_LYD_PARAM (data , LYD_JSON , 0 , LYD_VALIDATE_PRESENT , LY_SUCCESS , tree );
646+ CHECK_PARSE_LYD_PARAM (data , LYD_JSON , LYD_PARSE_STRICT , LYD_VALIDATE_PRESENT , LY_SUCCESS , tree );
638647 LY_LIST_FOR (tree , iter ) {
639648 if (strcmp (iter -> schema -> name , "ll" ) == 0 ) {
640649 value = lyd_get_value (iter );
@@ -645,46 +654,73 @@ test_data_leafref_nodes(void **state)
645654 if (strcmp (iter -> schema -> name , "ref2" ) == 0 ) {
646655 leafref_node = (struct lyd_node_term * )iter ;
647656 }
657+ if (strcmp (iter -> schema -> name , "ref3" ) == 0 ) {
658+ leafref_node2 = (struct lyd_node_term * )iter ;
659+ }
648660 }
649661
650662 /* verify state after leafref plugin validation */
651663 assert_int_equal (LY_SUCCESS , lyd_leafref_get_links (target_node , & rec ));
652- assert_int_equal (1 , LY_ARRAY_COUNT (rec -> leafref_nodes ));
653- assert_ptr_equal (rec -> leafref_nodes [0 ], leafref_node );
664+ assert_int_equal (2 , LY_ARRAY_COUNT (rec -> leafref_nodes ));
665+ assert_ptr_equal (rec -> leafref_nodes [1 ], leafref_node );
666+ assert_ptr_equal (rec -> leafref_nodes [0 ], leafref_node2 );
654667 assert_int_equal (LY_SUCCESS , lyd_leafref_get_links (leafref_node , & rec ));
655668 assert_int_equal (1 , LY_ARRAY_COUNT (rec -> target_nodes ));
656669 assert_ptr_equal (rec -> target_nodes [0 ], target_node );
670+ assert_int_equal (LY_SUCCESS , lyd_leafref_get_links (leafref_node2 , & rec ));
671+ assert_int_equal (1 , LY_ARRAY_COUNT (rec -> target_nodes ));
672+ assert_ptr_equal (rec -> target_nodes [0 ], target_node );
657673 /* value modification of target */
658674 assert_int_equal (LY_SUCCESS , lyd_change_term ((struct lyd_node * )target_node , "ASD" ));
659675 assert_int_equal (LY_ENOTFOUND , lyd_leafref_get_links (target_node , & rec ));
660676 assert_int_equal (LY_ENOTFOUND , lyd_leafref_get_links (leafref_node , & rec ));
677+ assert_int_equal (LY_ENOTFOUND , lyd_leafref_get_links (leafref_node2 , & rec ));
661678 /* change back to original value */
662679 assert_int_equal (LY_SUCCESS , lyd_change_term ((struct lyd_node * )target_node , "asd" ));
663680 assert_int_equal (LY_ENOTFOUND , lyd_leafref_get_links (target_node , & rec ));
664681 assert_int_equal (LY_ENOTFOUND , lyd_leafref_get_links (leafref_node , & rec ));
682+ assert_int_equal (LY_ENOTFOUND , lyd_leafref_get_links (leafref_node2 , & rec ));
665683 /* linking the whole tree again */
666684 assert_int_equal (LY_SUCCESS , lyd_leafref_link_node_tree (tree ));
667685 assert_int_equal (LY_SUCCESS , lyd_leafref_get_links (target_node , & rec ));
668- assert_int_equal (1 , LY_ARRAY_COUNT (rec -> leafref_nodes ));
686+ assert_int_equal (2 , LY_ARRAY_COUNT (rec -> leafref_nodes ));
669687 assert_ptr_equal (rec -> leafref_nodes [0 ], leafref_node );
688+ assert_ptr_equal (rec -> leafref_nodes [1 ], leafref_node2 );
670689 assert_int_equal (LY_SUCCESS , lyd_leafref_get_links (leafref_node , & rec ));
671690 assert_int_equal (1 , LY_ARRAY_COUNT (rec -> target_nodes ));
672691 assert_ptr_equal (rec -> target_nodes [0 ], target_node );
692+ assert_int_equal (LY_SUCCESS , lyd_leafref_get_links (leafref_node2 , & rec ));
693+ assert_int_equal (1 , LY_ARRAY_COUNT (rec -> target_nodes ));
694+ assert_ptr_equal (rec -> target_nodes [0 ], target_node );
673695 /* value modification of leafref */
674696 assert_int_equal (LY_SUCCESS , lyd_change_term ((struct lyd_node * )leafref_node , "qwe" ));
675- assert_int_equal (LY_ENOTFOUND , lyd_leafref_get_links (target_node , & rec ));
676697 assert_int_equal (LY_ENOTFOUND , lyd_leafref_get_links (leafref_node , & rec ));
698+ assert_int_equal (LY_SUCCESS , lyd_leafref_get_links (target_node , & rec ));
699+ assert_int_equal (1 , LY_ARRAY_COUNT (rec -> leafref_nodes ));
700+ assert_ptr_equal (rec -> leafref_nodes [0 ], leafref_node2 );
701+ assert_int_equal (LY_SUCCESS , lyd_leafref_get_links (leafref_node2 , & rec ));
702+ assert_int_equal (1 , LY_ARRAY_COUNT (rec -> target_nodes ));
703+ assert_ptr_equal (rec -> target_nodes [0 ], target_node );
677704 assert_int_equal (LY_SUCCESS , lyd_change_term ((struct lyd_node * )leafref_node , "asd" ));
678- assert_int_equal (LY_ENOTFOUND , lyd_leafref_get_links (target_node , & rec ));
679705 assert_int_equal (LY_ENOTFOUND , lyd_leafref_get_links (leafref_node , & rec ));
706+ assert_int_equal (LY_SUCCESS , lyd_leafref_get_links (target_node , & rec ));
707+ assert_int_equal (1 , LY_ARRAY_COUNT (rec -> leafref_nodes ));
708+ assert_ptr_equal (rec -> leafref_nodes [0 ], leafref_node2 );
709+ assert_int_equal (LY_SUCCESS , lyd_leafref_get_links (leafref_node2 , & rec ));
710+ assert_int_equal (1 , LY_ARRAY_COUNT (rec -> target_nodes ));
711+ assert_ptr_equal (rec -> target_nodes [0 ], target_node );
680712 /* linking the whole tree again */
681713 assert_int_equal (LY_SUCCESS , lyd_leafref_link_node_tree (tree ));
682714 assert_int_equal (LY_SUCCESS , lyd_leafref_get_links (target_node , & rec ));
683- assert_int_equal (1 , LY_ARRAY_COUNT (rec -> leafref_nodes ));
684- assert_ptr_equal (rec -> leafref_nodes [0 ], leafref_node );
715+ assert_int_equal (2 , LY_ARRAY_COUNT (rec -> leafref_nodes ));
716+ assert_ptr_equal (rec -> leafref_nodes [1 ], leafref_node );
717+ assert_ptr_equal (rec -> leafref_nodes [0 ], leafref_node2 );
685718 assert_int_equal (LY_SUCCESS , lyd_leafref_get_links (leafref_node , & rec ));
686719 assert_int_equal (1 , LY_ARRAY_COUNT (rec -> target_nodes ));
687720 assert_ptr_equal (rec -> target_nodes [0 ], target_node );
721+ assert_int_equal (LY_SUCCESS , lyd_leafref_get_links (leafref_node2 , & rec ));
722+ assert_int_equal (1 , LY_ARRAY_COUNT (rec -> target_nodes ));
723+ assert_ptr_equal (rec -> target_nodes [0 ], target_node );
688724 /* freeing whole tree */
689725 lyd_free_all (tree );
690726}
0 commit comments