static void test_nc_rpc_get(void **state) { (void)state; struct nc_rpc *rpc = NULL; /* create get rpc with NC_PARAMTYPE_CONST */ rpc = nc_rpc_get("filter", NC_WD_ALL, NC_PARAMTYPE_CONST); assert_non_null(rpc); check_get_rpc(rpc, "filter", NC_WD_ALL); nc_rpc_free(rpc); /* create get rpc with NC_PARAMTYPE_FREE */ char *str = strdup("string"); rpc = nc_rpc_get(str, NC_WD_EXPLICIT, NC_PARAMTYPE_FREE); assert_non_null(rpc); check_get_rpc(rpc, str, NC_WD_EXPLICIT); nc_rpc_free(rpc); /* create get rpc with NC_PARAMTYPE_DUP_AND_FREE */ rpc = nc_rpc_get("filter-string", NC_WD_UNKNOWN, NC_PARAMTYPE_DUP_AND_FREE); assert_non_null(rpc); check_get_rpc(rpc, "filter-string", NC_WD_UNKNOWN); nc_rpc_free(rpc); }
static PyObject *get_common(ncSessionObject *self, const char *filter, int wdmode, int datastore) { char *data = NULL; struct nc_filter *st_filter = NULL; nc_rpc *rpc = NULL; PyObject *result = NULL; /* create filter if specified */ if (filter) { if ((st_filter = nc_filter_new(NC_FILTER_SUBTREE, filter)) == NULL) { return (NULL); } } /* check datastore */ switch(datastore) { case NC_DATASTORE_STARTUP: if (!nc_cpblts_enabled(self->session, NETCONF_CAP_STARTUP)) { PyErr_SetString(libnetconfError, ":startup capability not supported."); return (NULL); } break; case NC_DATASTORE_CANDIDATE: if (!nc_cpblts_enabled(self->session, NETCONF_CAP_CANDIDATE)) { PyErr_SetString(libnetconfError, ":candidate capability not supported."); return (NULL); } break; } /* create RPC */ if (datastore == NC_DATASTORE_ERROR) { rpc = nc_rpc_get(st_filter); } else { rpc = nc_rpc_getconfig(datastore, st_filter); } nc_filter_free(st_filter); if (!rpc) { return(NULL); } /* set with defaults settings */ if (wdmode) { if (nc_rpc_capability_attr(rpc, NC_CAP_ATTR_WITHDEFAULTS_MODE, wdmode) != EXIT_SUCCESS) { nc_rpc_free(rpc); return (NULL); } } /* send request ... */ if (op_send_recv(self, rpc, &data) == EXIT_SUCCESS && data != NULL) { /* ... and prepare the result */ result = PyUnicode_FromString(data); free(data); } return (result); }
static void test_send_recv_ok(void) { int ret; uint64_t msgid; NC_MSG_TYPE msgtype; struct nc_rpc *rpc; struct nc_reply *reply; struct nc_pollsession *ps; /* client RPC */ rpc = nc_rpc_get(NULL, 0, 0); assert_non_null(rpc); msgtype = nc_send_rpc(client_session, rpc, 0, &msgid); assert_int_equal(msgtype, NC_MSG_RPC); /* server RPC, send reply */ ps = nc_ps_new(); assert_non_null(ps); nc_ps_add_session(ps, server_session); ret = nc_ps_poll(ps, 0); assert_int_equal(ret, 1); /* server finished */ nc_ps_free(ps); /* client reply */ msgtype = nc_recv_reply(client_session, rpc, msgid, 0, &reply); assert_int_equal(msgtype, NC_MSG_REPLY); nc_rpc_free(rpc); assert_int_equal(reply->type, NC_RPL_OK); nc_reply_free(reply); }