std::vector<std::shared_ptr<ydk::path::DataNode>> ydk::path::RootDataImpl::find(const std::string& path) { populate_new_schemas_from_path(path); std::vector<std::shared_ptr<DataNode>> results; if(m_node == nullptr) { return results; } std::string schema_path{ this->get_path() }; if(schema_path.size()!= 1) { schema_path+="/"; } auto s = get_schema_node().get_statement(); if(s.keyword == "rpc" || s.keyword == "action") { schema_path+="input/"; } schema_path+=path; YLOG_DEBUG("Looking for schema nodes path in root: '{}'", schema_path); const struct lys_node* found_snode = ly_ctx_get_node(m_node->schema->module->ctx, nullptr, schema_path.c_str(), 1); if(found_snode) { struct ly_set* result_set = lyd_find_instance(m_node, found_snode); if( result_set ) { if (result_set->number > 0) { for(size_t i=0; i < result_set->number; i++) { struct lyd_node* node_result = result_set->set.d[i]; results.push_back(get_dn_for_desc_node(node_result)); } } ly_set_free(result_set); } } return results; }
static void test_parse_print_json(void **state) { struct state *st = (*state); struct stat s; const struct lys_node *rpc_schema; int fd; const char *data = TESTS_DIR"/data/files/all-data.json"; const char *rpc = TESTS_DIR"/data/files/all-rpc.json"; const char *rpcreply = TESTS_DIR"/data/files/all-rpcreply.json"; const char *act = TESTS_DIR"/data/files/all-act.json"; const char *actreply = TESTS_DIR"/data/files/all-actreply.json"; const char *notif = TESTS_DIR"/data/files/all-notif.json"; const char *innotif = TESTS_DIR"/data/files/all-innotif.json"; /* data */ fd = open(data, O_RDONLY); fstat(fd, &s); st->str1 = malloc(s.st_size + 1); assert_ptr_not_equal(st->str1, NULL); assert_int_equal(read(fd, st->str1, s.st_size), s.st_size); st->str1[s.st_size] = '\0'; st->dt = lyd_parse_path(st->ctx, data, LYD_JSON, LYD_OPT_CONFIG); assert_ptr_not_equal(st->dt, NULL); lyd_print_mem(&(st->str2), st->dt, LYD_JSON, LYP_FORMAT); assert_string_equal(st->str1, st->str2); close(fd); fd = -1; free(st->str1); st->str1 = NULL; free(st->str2); st->str2 = NULL; lyd_free(st->dt); st->dt = NULL; /* rpc */ fd = open(rpc, O_RDONLY); fstat(fd, &s); st->str1 = malloc(s.st_size + 1); assert_ptr_not_equal(st->str1, NULL); assert_int_equal(read(fd, st->str1, s.st_size), s.st_size); st->str1[s.st_size] = '\0'; st->rpc_act = lyd_parse_path(st->ctx, rpc, LYD_JSON, LYD_OPT_RPC, NULL); assert_ptr_not_equal(st->rpc_act, NULL); lyd_print_mem(&(st->str2), st->rpc_act, LYD_JSON, LYP_FORMAT | LYP_NETCONF); assert_string_equal(st->str1, st->str2); close(fd); fd = -1; free(st->str1); st->str1 = NULL; free(st->str2); st->str2 = NULL; /* rpcreply */ fd = open(rpcreply, O_RDONLY); fstat(fd, &s); st->str1 = malloc(s.st_size + 1); assert_ptr_not_equal(st->str1, NULL); assert_int_equal(read(fd, st->str1, s.st_size), s.st_size); st->str1[s.st_size] = '\0'; rpc_schema = ly_ctx_get_node(st->ctx, NULL, "/all:rpc1"); assert_ptr_not_equal(rpc_schema, NULL); assert_int_equal(rpc_schema->nodetype, LYS_RPC); st->dt = lyd_parse_path(st->ctx, rpcreply, LYD_JSON, LYD_OPT_RPCREPLY, st->rpc_act, NULL); assert_ptr_not_equal(st->dt, NULL); lyd_print_mem(&(st->str2), st->dt, LYD_JSON, LYP_FORMAT | LYP_NETCONF); assert_string_equal(st->str1, st->str2); close(fd); fd = -1; free(st->str1); st->str1 = NULL; free(st->str2); st->str2 = NULL; lyd_free(st->dt); st->dt = NULL; lyd_free(st->rpc_act); st->rpc_act = NULL; /* act */ fd = open(act, O_RDONLY); fstat(fd, &s); st->str1 = malloc(s.st_size + 1); assert_ptr_not_equal(st->str1, NULL); assert_int_equal(read(fd, st->str1, s.st_size), s.st_size); st->str1[s.st_size] = '\0'; st->rpc_act = lyd_parse_path(st->ctx, act, LYD_JSON, LYD_OPT_RPC, NULL); assert_ptr_not_equal(st->rpc_act, NULL); lyd_print_mem(&(st->str2), st->rpc_act, LYD_JSON, LYP_FORMAT | LYP_NETCONF); assert_string_equal(st->str1, st->str2); close(fd); fd = -1; free(st->str1); st->str1 = NULL; free(st->str2); st->str2 = NULL; /* actreply */ fd = open(actreply, O_RDONLY); fstat(fd, &s); st->str1 = malloc(s.st_size + 1); assert_ptr_not_equal(st->str1, NULL); assert_int_equal(read(fd, st->str1, s.st_size), s.st_size); st->str1[s.st_size] = '\0'; rpc_schema = ly_ctx_get_node(st->ctx, NULL, "/all:cont1/list1/act1"); assert_ptr_not_equal(rpc_schema, NULL); assert_int_equal(rpc_schema->nodetype, LYS_ACTION); st->dt = lyd_parse_path(st->ctx, actreply, LYD_JSON, LYD_OPT_RPCREPLY, st->rpc_act, NULL); assert_ptr_not_equal(st->dt, NULL); lyd_print_mem(&(st->str2), st->dt, LYD_JSON, LYP_FORMAT | LYP_NETCONF); assert_string_equal(st->str1, st->str2); close(fd); fd = -1; free(st->str1); st->str1 = NULL; free(st->str2); st->str2 = NULL; lyd_free(st->dt); st->dt = NULL; lyd_free(st->rpc_act); st->rpc_act = NULL; /* notif */ fd = open(notif, O_RDONLY); fstat(fd, &s); st->str1 = malloc(s.st_size + 1); assert_ptr_not_equal(st->str1, NULL); assert_int_equal(read(fd, st->str1, s.st_size), s.st_size); st->str1[s.st_size] = '\0'; st->dt = lyd_parse_path(st->ctx, notif, LYD_JSON, LYD_OPT_NOTIF, NULL); assert_ptr_not_equal(st->dt, NULL); lyd_print_mem(&(st->str2), st->dt, LYD_JSON, LYP_FORMAT); assert_string_equal(st->str1, st->str2); close(fd); fd = -1; free(st->str1); st->str1 = NULL; free(st->str2); st->str2 = NULL; lyd_free(st->dt); st->dt = NULL; /* inline notif */ fd = open(innotif, O_RDONLY); fstat(fd, &s); st->str1 = malloc(s.st_size + 1); assert_ptr_not_equal(st->str1, NULL); assert_int_equal(read(fd, st->str1, s.st_size), s.st_size); st->str1[s.st_size] = '\0'; st->dt = lyd_parse_path(st->ctx, innotif, LYD_JSON, LYD_OPT_NOTIF, NULL); assert_ptr_not_equal(st->dt, NULL); lyd_print_mem(&(st->str2), st->dt, LYD_JSON, LYP_FORMAT); assert_string_equal(st->str1, st->str2); }