import org.cesnet.*; import org.cesnet.Module; import static org.cesnet.LYD_ANYDATA_VALUETYPE.LYD_ANYDATA_CONSTSTRING; import static org.cesnet.LYD_FORMAT.LYD_JSON; import static org.cesnet.LYD_FORMAT.LYD_XML; import static org.cesnet.LYS_INFORMAT.LYS_IN_YIN; import static org.cesnet.yangConstants.*; import java.io.FileDescriptor; import java.io.RandomAccessFile; import java.lang.reflect.Field; import org.junit.Test; import static org.junit.Assert.*; public class TreeDataTest { static { System.loadLibrary("yangJava"); } String lys_module_a = "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + ""; String result_xml = "test"; String result_xml_format = "\n" + " test\n" + "\n"; String result_json = "{\n" + " \"a:x\": {\n" + " \"bubba\": \"test\"\n" + " }\n" + "}\n"; @Test public void test_ly_ctx_parse_data_mem() { String a_data_xml = "\n" + "test\n" + ""; String yang_folder = Constants.TESTS_DIR + "/api/files"; String yin_file = Constants.TESTS_DIR + "/api/files/a.yin"; try { Context ctx = new Context(yang_folder); assertNotNull(ctx); ctx.parse_module_path(yin_file, LYS_IN_YIN); Data_Node root = ctx.parse_data_mem(a_data_xml, LYD_XML, LYD_OPT_NOSIBLINGS | LYD_OPT_STRICT); assertNotNull(root); assertEquals("x", root.schema().name()); } catch (Exception e) { fail(e.getMessage()); } } @Test public void test_ly_ctx_parse_data_fd() { String yang_folder = Constants.TESTS_DIR + "/api/files"; String yin_file = Constants.TESTS_DIR + "/api/files/a.yin"; String config_file = Constants.TESTS_DIR + "/api/files/a.xml"; try { Context ctx = new Context(yang_folder); assertNotNull(ctx); ctx.parse_module_path(yin_file, LYS_IN_YIN); RandomAccessFile f = new RandomAccessFile(config_file, "r"); FileDescriptor fileno = f.getFD(); Field _fileno = FileDescriptor.class.getDeclaredField("fd"); _fileno.setAccessible(true); Integer fd = (Integer) _fileno.get(fileno); Data_Node root = ctx.parse_data_fd(fd, LYD_XML, LYD_OPT_NOSIBLINGS | LYD_OPT_STRICT); assertNotNull(root); assertEquals("x", root.schema().name()); f.close(); } catch (Exception e) { fail(e.getMessage()); } } @Test public void test_ly_ctx_parse_data_path() { String yang_folder = Constants.TESTS_DIR + "/api/files"; String yin_file = Constants.TESTS_DIR + "/api/files/a.yin"; String config_file = Constants.TESTS_DIR + "/api/files/a.xml"; String module_name = "a"; String schema_name = "x"; try { Context ctx = new Context(yang_folder); assertNotNull(ctx); Module module = ctx.parse_module_path(yin_file, LYS_IN_YIN); assertNotNull(module); assertEquals(module_name, module.name()); Data_Node root = ctx.parse_data_path(config_file, LYD_XML, LYD_OPT_CONFIG | LYD_OPT_STRICT); assertNotNull(root); assertEquals(schema_name, root.schema().name()); } catch (Exception e) { fail(e.getMessage()); } } @Test public void test_ly_ctx_parse_data_path_invalid() { String yang_folder = Constants.TESTS_DIR + "/api/files"; try { Context ctx = new Context(yang_folder); assertNotNull(ctx); Data_Node root = ctx.parse_data_path("INVALID_PATH", LYD_XML, LYD_OPT_CONFIG | LYD_OPT_STRICT); throw new Exception("exception not thrown"); } catch (Exception e) { assertTrue(e.getMessage().contains("INVALID_PATH")); } } @Test public void test_ly_data_node() { String yang_folder = Constants.TESTS_DIR + "/api/files"; String config_file = Constants.TESTS_DIR + "/api/files/a.xml"; try { Context ctx = new Context(yang_folder); assertNotNull(ctx); ctx.parse_module_mem(lys_module_a, LYS_IN_YIN); Data_Node root = ctx.parse_data_path(config_file, LYD_XML, LYD_OPT_CONFIG | LYD_OPT_STRICT); assertNotNull(root); Data_Node new_node = new Data_Node(root, root.child().schema().module(), "bar-y"); assertNotNull(new_node); new_node = new Data_Node(root, root.schema().module(), "number32", "100"); assertNotNull(new_node); Data_Node dup_node = new_node.dup(0); assertNotNull(dup_node); } catch (Exception e) { fail(e.getMessage()); } } @Test public void test_ly_data_node_new_path() { String yang_folder = Constants.TESTS_DIR + "/api/files"; String config_file = Constants.TESTS_DIR + "/api/files/a.xml"; try { Context ctx = new Context(yang_folder); assertNotNull(ctx); ctx.parse_module_mem(lys_module_a, LYS_IN_YIN); ctx.parse_data_path(config_file, LYD_XML, LYD_OPT_CONFIG | LYD_OPT_STRICT); Module mod = ctx.get_module("a", null, 1); assertNotNull(mod); Data_Node root = new Data_Node(ctx, "/a:x/bar-gggg", "a", LYD_ANYDATA_CONSTSTRING, 0); assertNotNull(root); assertEquals("x", root.schema().name()); assertEquals("bar-gggg", root.child().schema().name()); Data_Node node = root.new_path(ctx, "def-leaf", "def", LYD_ANYDATA_CONSTSTRING, LYD_PATH_OPT_DFLT); assertNotNull(node); assertEquals("def-leaf", node.schema().name()); assertEquals(1, node.dflt()); node = root.new_path(ctx, "def-leaf", "def", LYD_ANYDATA_CONSTSTRING, 0); assertNotNull(node); assertEquals("def-leaf", node.schema().name()); assertEquals(0, node.dflt()); node = root.new_path(ctx, "bubba", "b", LYD_ANYDATA_CONSTSTRING, 0); assertNotNull(node); assertEquals("bubba", node.schema().name()); node = root.new_path(ctx, "/a:x/number32", "3", LYD_ANYDATA_CONSTSTRING, 0); assertNotNull(node); assertEquals("number32", node.schema().name()); node = root.new_path(ctx, "/a:l[key1='1'][key2='2']/value", null, LYD_ANYDATA_CONSTSTRING, 0); assertNotNull(node); assertEquals("l", node.schema().name()); assertEquals("key1", node.child().schema().name()); assertEquals("key2", node.child().next().schema().name()); assertEquals("value", node.child().next().next().schema().name()); } catch (Exception e) { fail(e.getMessage()); } } @Test public void test_ly_data_node_insert() { String yang_folder = Constants.TESTS_DIR + "/api/files"; String config_file = Constants.TESTS_DIR + "/api/files/a.xml"; try { Context ctx = new Context(yang_folder); assertNotNull(ctx); ctx.parse_module_mem(lys_module_a, LYS_IN_YIN); Data_Node root = ctx.parse_data_path(config_file, LYD_XML, LYD_OPT_CONFIG | LYD_OPT_STRICT); assertNotNull(root); Data_Node new_node = new Data_Node(root, root.schema().module(), "number32", "200"); assertNotNull(new_node); int rc = root.insert(new_node); assertEquals(0, rc); assertEquals("number32", root.child().prev().schema().name()); } catch (Exception e) { fail(e.getMessage()); } } @Test public void test_ly_data_node_insert_sibling() { String yang_folder = Constants.TESTS_DIR + "/api/files"; String config_file = Constants.TESTS_DIR + "/api/files/a.xml"; try { Context ctx = new Context(yang_folder); assertNotNull(ctx); ctx.parse_module_mem(lys_module_a, LYS_IN_YIN); Data_Node root = ctx.parse_data_path(config_file, LYD_XML, LYD_OPT_CONFIG | LYD_OPT_STRICT); assertNotNull(root); Data_Node last = root.prev(); Data_Node new_node = new Data_Node(null, root.schema().module(), "y", "test"); assertNotNull(new_node); int rc = root.insert_sibling(new_node); assertEquals(0, rc); assertNotEquals(last.schema().name(), root.prev().schema().name()); assertEquals("y", root.prev().schema().name()); } catch (Exception e) { fail(e.getMessage()); } } @Test public void test_ly_data_node_insert_before() { String yang_folder = Constants.TESTS_DIR + "/api/files"; String config_file = Constants.TESTS_DIR + "/api/files/a.xml"; try { Context ctx = new Context(yang_folder); assertNotNull(ctx); ctx.parse_module_mem(lys_module_a, LYS_IN_YIN); Data_Node root = ctx.parse_data_path(config_file, LYD_XML, LYD_OPT_CONFIG | LYD_OPT_STRICT); assertNotNull(root); Data_Node last = root.prev(); Data_Node new_node = new Data_Node(null, root.schema().module(), "y", "test"); assertNotNull(new_node); int rc = root.insert_before(new_node); assertEquals(0, rc); assertNotEquals(last.schema().name(), root.prev().schema().name()); assertEquals("y", root.prev().schema().name()); } catch (Exception e) { fail(e.getMessage()); } } @Test public void test_ly_data_node_insert_after() { String yang_folder = Constants.TESTS_DIR + "/api/files"; String config_file = Constants.TESTS_DIR + "/api/files/a.xml"; try { Context ctx = new Context(yang_folder); assertNotNull(ctx); ctx.parse_module_mem(lys_module_a, LYS_IN_YIN); Data_Node root = ctx.parse_data_path(config_file, LYD_XML, LYD_OPT_CONFIG | LYD_OPT_STRICT); assertNotNull(root); Data_Node last = root.next(); Data_Node new_node = new Data_Node(null, root.schema().module(), "y", "test"); assertNotNull(new_node); int rc = root.insert_after(new_node); assertEquals(0, rc); assertNotEquals(last.schema().name(), root.next().schema().name()); assertEquals("y", root.next().schema().name()); } catch (Exception e) { fail(e.getMessage()); } } @Test public void test_ly_data_node_schema_sort() { String yang_folder = Constants.TESTS_DIR + "/api/files"; String config_file = Constants.TESTS_DIR + "/api/files/a.xml"; try { Context ctx = new Context(yang_folder); assertNotNull(ctx); ctx.parse_module_mem(lys_module_a, LYS_IN_YIN); ctx.parse_data_path(config_file, LYD_XML, LYD_OPT_CONFIG | LYD_OPT_STRICT); Module mod = ctx.get_module("a", null, 1); assertNotNull(mod); Data_Node root = new Data_Node(null, mod, "l"); assertNotNull(root); Data_Node node = new Data_Node(root, mod, "key1", "1"); assertNotNull(node); node = new Data_Node(root, mod, "key2", "2"); assertNotNull(node); node = new Data_Node(null, mod, "x"); assertNotNull(node); int rc = root.insert_after(node); assertEquals(0, rc); node = root.next(); Data_Node node2 = new Data_Node(node, mod, "bubba", "a"); assertNotNull(node2); node2 = new Data_Node(node, mod, "bar-gggg", "b"); assertNotNull(node2); node2 = new Data_Node(node, mod, "number64", "64"); assertNotNull(node2); node2 = new Data_Node(node, mod, "number32", "32"); assertNotNull(node2); rc = root.schema_sort(1); assertEquals(0, rc); root = node; assertEquals("x", root.schema().name()); assertEquals("l", root.next().schema().name()); assertEquals("bar-gggg", root.child().schema().name()); assertEquals("bubba", root.child().next().schema().name()); assertEquals("number32", root.child().next().next().schema().name()); assertEquals("number64", root.child().next().next().next().schema().name()); } catch (Exception e) { fail(e.getMessage()); } } @Test public void test_ly_data_node_find_path() { String yang_folder = Constants.TESTS_DIR + "/api/files"; String config_file = Constants.TESTS_DIR + "/api/files/a.xml"; try { Context ctx = new Context(yang_folder); assertNotNull(ctx); ctx.parse_module_mem(lys_module_a, LYS_IN_YIN); Data_Node root = ctx.parse_data_path(config_file, LYD_XML, LYD_OPT_CONFIG | LYD_OPT_STRICT); assertNotNull(root); Data_Node node = root.child(); assertNotNull(node); Set set = node.find_path("/a:x/bubba"); assertNotNull(set); assertEquals(1, set.number()); } catch (Exception e) { fail(e.getMessage()); } } @Test public void test_ly_data_node_find_instance() { String yang_folder = Constants.TESTS_DIR + "/api/files"; String config_file = Constants.TESTS_DIR + "/api/files/a.xml"; try { Context ctx = new Context(yang_folder); assertNotNull(ctx); ctx.parse_module_mem(lys_module_a, LYS_IN_YIN); Data_Node root = ctx.parse_data_path(config_file, LYD_XML, LYD_OPT_CONFIG | LYD_OPT_STRICT); assertNotNull(root); Data_Node node = root.child(); assertNotNull(node); Set set = node.find_instance(node.schema()); assertNotNull(set); assertEquals(1, set.number()); } catch (Exception e) { fail(e.getMessage()); } } @Test public void test_ly_data_node_validate() { String yang_folder = Constants.TESTS_DIR + "/api/files"; String config_file = Constants.TESTS_DIR + "/api/files/a.xml"; try { Context ctx = new Context(yang_folder); assertNotNull(ctx); ctx.parse_module_mem(lys_module_a, LYS_IN_YIN); Data_Node root = ctx.parse_data_path(config_file, LYD_XML, LYD_OPT_CONFIG | LYD_OPT_STRICT); assertNotNull(root); int rc = root.validate(LYD_OPT_CONFIG, ctx); assertEquals(0, rc); Data_Node new_node = new Data_Node(root, root.schema().module(), "number32", "1"); assertNotNull(new_node); rc = root.insert(new_node); assertEquals(0, rc); rc = root.validate(LYD_OPT_CONFIG, ctx); assertEquals(0, rc); } catch (Exception e) { fail(e.getMessage()); } } @Test public void test_ly_data_node_unlink() { String yang_folder = Constants.TESTS_DIR + "/api/files"; String config_file = Constants.TESTS_DIR + "/api/files/a.xml"; try { Context ctx = new Context(yang_folder); assertNotNull(ctx); ctx.parse_module_mem(lys_module_a, LYS_IN_YIN); Data_Node root = ctx.parse_data_path(config_file, LYD_XML, LYD_OPT_CONFIG | LYD_OPT_STRICT); assertNotNull(root); Data_Node node = root.child(); Data_Node new_node = new Data_Node(root, root.schema().module(), "number32", "1"); assertNotNull(new_node); int rc = root.insert(new_node); assertEquals(0, rc); assertEquals("number32", node.prev().schema().name()); rc = node.prev().unlink(); assertEquals(0, rc); assertNotEquals("number32", node.prev().schema().name()); } catch (Exception e) { fail(e.getMessage()); } } @Test public void test_ly_data_node_print_mem_xml() { String yang_folder = Constants.TESTS_DIR + "/api/files"; String config_file = Constants.TESTS_DIR + "/api/files/a.xml"; try { Context ctx = new Context(yang_folder); assertNotNull(ctx); ctx.parse_module_mem(lys_module_a, LYS_IN_YIN); Data_Node root = ctx.parse_data_path(config_file, LYD_XML, LYD_OPT_CONFIG | LYD_OPT_STRICT); assertNotNull(root); String result = root.print_mem(LYD_XML, 0); assertEquals(result_xml, result); } catch (Exception e) { fail(e.getMessage()); } } @Test public void test_ly_data_node_print_mem_xml_format() { String yang_folder = Constants.TESTS_DIR + "/api/files"; String config_file = Constants.TESTS_DIR + "/api/files/a.xml"; try { Context ctx = new Context(yang_folder); assertNotNull(ctx); ctx.parse_module_mem(lys_module_a, LYS_IN_YIN); Data_Node root = ctx.parse_data_path(config_file, LYD_XML, LYD_OPT_CONFIG | LYD_OPT_STRICT); assertNotNull(root); String result = root.print_mem(LYD_XML, LYP_FORMAT); assertEquals(result_xml_format, result); } catch (Exception e) { fail(e.getMessage()); } } @Test public void test_ly_data_node_print_mem_json() { String yang_folder = Constants.TESTS_DIR + "/api/files"; String config_file = Constants.TESTS_DIR + "/api/files/a.xml"; try { Context ctx = new Context(yang_folder); assertNotNull(ctx); ctx.parse_module_mem(lys_module_a, LYS_IN_YIN); Data_Node root = ctx.parse_data_path(config_file, LYD_XML, LYD_OPT_CONFIG | LYD_OPT_STRICT); assertNotNull(root); String result = root.print_mem(LYD_JSON, LYP_FORMAT); assertEquals(result_json, result); } catch (Exception e) { fail(e.getMessage()); } } @Test public void test_ly_data_node_path() { String yang_folder = Constants.TESTS_DIR + "/api/files"; String config_file = Constants.TESTS_DIR + "/api/files/a.xml"; try { Context ctx = new Context(yang_folder); assertNotNull(ctx); ctx.parse_module_mem(lys_module_a, LYS_IN_YIN); Data_Node root = ctx.parse_data_path(config_file, LYD_XML, LYD_OPT_CONFIG | LYD_OPT_STRICT); assertNotNull(root); String path = root.path(); assertNotNull(path); assertEquals("/a:x", path); path = root.child().path(); assertNotNull(path); assertEquals("/a:x/bubba", path); } catch (Exception e) { fail(e.getMessage()); } } public static void main(String[] args) { new TreeDataTest(); } }