Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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);
}
Exemplo n.º 3
0
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);
}