source4/torture/rpc/echo.c
authorStefan Metzmacher <metze@samba.org>
Wed, 25 Sep 2013 03:25:39 +0000 (05:25 +0200)
committerStefan Metzmacher <metze@samba.org>
Tue, 4 Jun 2019 11:15:20 +0000 (13:15 +0200)
source4/torture/rpc/echo.c

index 93fd408afcd0a151a7fcf9aea08403cf2880d258..cf820e115c0e60d676e6754bd61960f9146f85c1 100644 (file)
@@ -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