From 7e6996697576bdc3edeee7e64681909eae68b212 Mon Sep 17 00:00:00 2001 From: Daniel Verkamp Date: Mon, 3 Oct 2016 11:27:19 -0700 Subject: [PATCH] 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 --- test/lib/jsonrpc/server/jsonrpc_server_ut.c | 39 +++++++++++++++------ 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/test/lib/jsonrpc/server/jsonrpc_server_ut.c b/test/lib/jsonrpc/server/jsonrpc_server_ut.c index 5a4060005..937db1bd4 100644 --- a/test/lib/jsonrpc/server/jsonrpc_server_ut.c +++ b/test/lib/jsonrpc/server/jsonrpc_server_ut.c @@ -36,6 +36,7 @@ #include "jsonrpc_server.c" #include +#include #include #define MAX_PARAMS 100 @@ -61,13 +62,13 @@ static size_t g_num_reqs; memcpy(g_buf, in, sizeof(in) - 1); \ g_num_reqs = 0; \ 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) \ memcpy(g_buf, in, sizeof(in) - 1); \ g_num_reqs = 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) \ @@ -203,10 +204,16 @@ spdk_jsonrpc_server_write_cb(void *cb_ctx, const void *data, size_t size) static void test_parse_request(void) { - struct spdk_jsonrpc_server server = {}; - struct spdk_jsonrpc_server_conn conn = {}; + struct spdk_jsonrpc_server *server; + 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 */ 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_ID_STRING("9"); REQ_PARAMS_MISSING(); + + free(conn); + free(server); } static void test_parse_request_streaming(void) { - struct spdk_jsonrpc_server server = {}; - struct spdk_jsonrpc_server_conn conn = {}; + struct spdk_jsonrpc_server *server; + struct spdk_jsonrpc_server_conn *conn; 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. @@ -393,13 +409,16 @@ test_parse_request_streaming(void) /* Try every partial length up to the full request length */ 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 */ CU_ASSERT(rc == 0); } /* 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)