test/jsonrpc_server: allocate large structs on heap
Avoid putting the large JSON-RPC server structs on the stack in the unit test code, since it confuses Valgrind. Change-Id: I598530810aa23e802d07cd1bb94de16920f33dac Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
parent
c20aa93181
commit
7e69966975
@ -36,6 +36,7 @@
|
|||||||
#include "jsonrpc_server.c"
|
#include "jsonrpc_server.c"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#define MAX_PARAMS 100
|
#define MAX_PARAMS 100
|
||||||
@ -61,13 +62,13 @@ static size_t g_num_reqs;
|
|||||||
memcpy(g_buf, in, sizeof(in) - 1); \
|
memcpy(g_buf, in, sizeof(in) - 1); \
|
||||||
g_num_reqs = 0; \
|
g_num_reqs = 0; \
|
||||||
g_cur_req = NULL; \
|
g_cur_req = NULL; \
|
||||||
CU_ASSERT(spdk_jsonrpc_parse_request(&conn, g_buf, sizeof(in) - 1) == sizeof(in) - sizeof(trailing))
|
CU_ASSERT(spdk_jsonrpc_parse_request(conn, g_buf, sizeof(in) - 1) == sizeof(in) - sizeof(trailing))
|
||||||
|
|
||||||
#define PARSE_FAIL(in) \
|
#define PARSE_FAIL(in) \
|
||||||
memcpy(g_buf, in, sizeof(in) - 1); \
|
memcpy(g_buf, in, sizeof(in) - 1); \
|
||||||
g_num_reqs = 0; \
|
g_num_reqs = 0; \
|
||||||
g_cur_req = 0; \
|
g_cur_req = 0; \
|
||||||
CU_ASSERT(spdk_jsonrpc_parse_request(&conn, g_buf, sizeof(in) - 1) < 0)
|
CU_ASSERT(spdk_jsonrpc_parse_request(conn, g_buf, sizeof(in) - 1) < 0)
|
||||||
|
|
||||||
|
|
||||||
#define REQ_BEGIN(expected_error) \
|
#define REQ_BEGIN(expected_error) \
|
||||||
@ -203,10 +204,16 @@ spdk_jsonrpc_server_write_cb(void *cb_ctx, const void *data, size_t size)
|
|||||||
static void
|
static void
|
||||||
test_parse_request(void)
|
test_parse_request(void)
|
||||||
{
|
{
|
||||||
struct spdk_jsonrpc_server server = {};
|
struct spdk_jsonrpc_server *server;
|
||||||
struct spdk_jsonrpc_server_conn conn = {};
|
struct spdk_jsonrpc_server_conn *conn;
|
||||||
|
|
||||||
conn.server = &server;
|
server = calloc(1, sizeof(*server));
|
||||||
|
SPDK_CU_ASSERT_FATAL(server != NULL);
|
||||||
|
|
||||||
|
conn = calloc(1, sizeof(*conn));
|
||||||
|
SPDK_CU_ASSERT_FATAL(conn != NULL);
|
||||||
|
|
||||||
|
conn->server = server;
|
||||||
|
|
||||||
/* rpc call with positional parameters */
|
/* rpc call with positional parameters */
|
||||||
PARSE_PASS("{\"jsonrpc\":\"2.0\",\"method\":\"subtract\",\"params\":[42,23],\"id\":1}", "");
|
PARSE_PASS("{\"jsonrpc\":\"2.0\",\"method\":\"subtract\",\"params\":[42,23],\"id\":1}", "");
|
||||||
@ -360,16 +367,25 @@ test_parse_request(void)
|
|||||||
REQ_METHOD("get_data");
|
REQ_METHOD("get_data");
|
||||||
REQ_ID_STRING("9");
|
REQ_ID_STRING("9");
|
||||||
REQ_PARAMS_MISSING();
|
REQ_PARAMS_MISSING();
|
||||||
|
|
||||||
|
free(conn);
|
||||||
|
free(server);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_parse_request_streaming(void)
|
test_parse_request_streaming(void)
|
||||||
{
|
{
|
||||||
struct spdk_jsonrpc_server server = {};
|
struct spdk_jsonrpc_server *server;
|
||||||
struct spdk_jsonrpc_server_conn conn = {};
|
struct spdk_jsonrpc_server_conn *conn;
|
||||||
size_t len, i;
|
size_t len, i;
|
||||||
|
|
||||||
conn.server = &server;
|
server = calloc(1, sizeof(*server));
|
||||||
|
SPDK_CU_ASSERT_FATAL(server != NULL);
|
||||||
|
|
||||||
|
conn = calloc(1, sizeof(*conn));
|
||||||
|
SPDK_CU_ASSERT_FATAL(conn != NULL);
|
||||||
|
|
||||||
|
conn->server = server;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Two valid requests end to end in the same buffer.
|
* Two valid requests end to end in the same buffer.
|
||||||
@ -393,13 +409,16 @@ test_parse_request_streaming(void)
|
|||||||
|
|
||||||
/* Try every partial length up to the full request length */
|
/* Try every partial length up to the full request length */
|
||||||
for (i = 0; i < len; i++) {
|
for (i = 0; i < len; i++) {
|
||||||
int rc = spdk_jsonrpc_parse_request(&conn, g_buf, i);
|
int rc = spdk_jsonrpc_parse_request(conn, g_buf, i);
|
||||||
/* Partial request - no data consumed */
|
/* Partial request - no data consumed */
|
||||||
CU_ASSERT(rc == 0);
|
CU_ASSERT(rc == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Verify that full request can be parsed successfully */
|
/* Verify that full request can be parsed successfully */
|
||||||
CU_ASSERT(spdk_jsonrpc_parse_request(&conn, g_buf, len) == (ssize_t)len);
|
CU_ASSERT(spdk_jsonrpc_parse_request(conn, g_buf, len) == (ssize_t)len);
|
||||||
|
|
||||||
|
free(conn);
|
||||||
|
free(server);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
|
Loading…
Reference in New Issue
Block a user