From 4d8108124a6459cd223aded73f392e37a162252f Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Wed, 25 Sep 2013 05:25:39 +0200 Subject: [PATCH] source4/torture/rpc/echo.c --- source4/torture/rpc/echo.c | 70 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/source4/torture/rpc/echo.c b/source4/torture/rpc/echo.c index 93fd408afcd0..cf820e115c0e 100644 --- a/source4/torture/rpc/echo.c +++ b/source4/torture/rpc/echo.c @@ -388,6 +388,75 @@ static bool test_doublepointer(struct torture_context *tctx, return true; } +/* echo_BytePipe */ +struct echo_BytePipe; +struct echo_BytePipe *dcerpc_echo_BytePipe_create(TALLOC_CTX *mem_ctx); +struct tevent_req *dcerpc_echo_BytePipe_chunk_push_send(TALLOC_CTX *mem_ctx, + struct tevent_context *ev, + struct echo_BytePipe *p, + const struct echo_BytePipe_chunk *chunk); +NTSTATUS dcerpc_echo_BytePipe_chunk_push_recv(struct tevent_req *req); +struct tevent_req *dcerpc_echo_BytePipe_chunk_pull_send(TALLOC_CTX *mem_ctx, + struct tevent_context *ev, + struct echo_BytePipe *p); +NTSTATUS dcerpc_echo_BytePipe_chunk_pull_recv(struct tevent_req *req, + TALLOC_CTX *mem_ctx, + struct echo_BytePipe_chunk **chunk); +struct tevent_req *dcerpc_echo_TestBytePipeIn_r_send(TALLOC_CTX *mem_ctx, + struct tevent_context *ev, + struct dcerpc_binding_handle *h, + struct echo_TestBytePipeIn *r); +NTSTATUS dcerpc_echo_TestBytePipeIn_r_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx); +/* + * The following function is skipped because + * it uses pipes: + * + * dcerpc_echo_TestBytePipeIn_r() + */ + +struct tevent_req *dcerpc_echo_TestBytePipeIn_send(TALLOC_CTX *mem_ctx, + struct tevent_context *ev, + struct dcerpc_binding_handle *h, + uint32_t _count /* [in] */, + struct echo_BytePipe *_in_pipe /* [in] [ref] */); +NTSTATUS dcerpc_echo_TestBytePipeIn_recv(struct tevent_req *req, + TALLOC_CTX *mem_ctx, + uint32_t *result); +/* + * The following function is skipped because + * it uses pipes: + * + * dcerpc_echo_TestBytePipeIn() + */ + +static bool test_bytepipein(struct torture_context *tctx, + struct dcerpc_pipe *p) +{ + struct dcerpc_binding_handle *b = p->binding_handle; + struct echo_TestBytePipeIn r; + struct frstrans_BytePipe_chunk chunk; + struct echo_BytePipe_chunk chunk; + struct echo_BytePipe *in_pipe; + struct tevent_req *subreq1; + struct tevent_req *subreq2; + + in_pipe = dcerpc_echo_BytePipe_create(tctx); + + ZERO_STRUCT(r); + r.in.count = 5; + r.in.in_pipe = in_pipe; + + subreq1 = dcerpc_echo_TestBytePipeIn_r_send(tctx, tctx->ev, b, r); + + ZERO_STRUCT(chunk); + subreq2 = dcerpc_echo_BytePipe_chunk_push_send(tctx, tctx->ev, in_pipe, &chunk); + tevent_req_poll(subreq2); + status = dcerpc_echo_BytePipe_chunk_push_recv(subreq2); + tevent_req_poll(subreq1); + status = dcerpc_echo_TestBytePipeIn_r_recv(subreq1, tctx); + + return true; +} /* test request timeouts @@ -466,6 +535,7 @@ struct torture_suite *torture_rpc_echo(TALLOC_CTX *mem_ctx) torture_rpc_tcase_add_test(tcase, "surrounding", test_surrounding); torture_rpc_tcase_add_test(tcase, "doublepointer", test_doublepointer); torture_rpc_tcase_add_test(tcase, "sleep", test_sleep); + torture_rpc_tcase_add_test(tcase, "bytepipein", test_bytepipein); #if 0 /* this test needs fixing to work over ncacn_np */ torture_rpc_tcase_add_test(tcase, "timeout", test_timeout); #endif -- 2.34.1