source4/torture/rpc/echo.c
authorStefan Metzmacher <metze@samba.org>
Fri, 20 Sep 2013 17:26:48 +0000 (19:26 +0200)
committerStefan Metzmacher <metze@samba.org>
Tue, 4 Jun 2019 11:15:20 +0000 (13:15 +0200)
source4/torture/rpc/echo.c

index cf820e115c0e60d676e6754bd61960f9146f85c1..739f9e7b96fb6d2c3922562f05166118a3f9ddad 100644 (file)
@@ -388,72 +388,55 @@ 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_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;
+       size_t i;
+       uint8_t bytes[0x4000];
+       NTSTATUS status;
 
        in_pipe = dcerpc_echo_BytePipe_create(tctx);
 
        ZERO_STRUCT(r);
-       r.in.count = 5;
+       r.in.count = 1;
        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);
+
+       subreq1 = dcerpc_echo_TestBytePipeIn_r_send(tctx, tctx->ev, b, &r);
+       for (i=0; i <= r.in.count; i++) {
+               struct timeval tv = timeval_current_ofs(0, 100);
+
+               memset(bytes, i, sizeof(bytes));
+               chunk.count = sizeof(bytes);
+               chunk.array = bytes;
+
+               if (i == r.in.count) {
+                       chunk.count = 0;
+               }
+
+               subreq2 = tevent_wakeup_send(tctx, tctx->ev, tv);
+               tevent_req_poll(subreq2, tctx->ev);
+               tevent_wakeup_recv(subreq2);
+               TALLOC_FREE(subreq2);
+
+               torture_comment(tctx, "chunk[%u] count[%u]\n", (unsigned)i, (unsigned)chunk.count);
+               subreq2 = dcerpc_echo_BytePipe_chunk_push_send(tctx, tctx->ev, in_pipe, &chunk);
+               tevent_req_poll(subreq2, tctx->ev);
+               status = dcerpc_echo_BytePipe_chunk_push_recv(subreq2);
+               TALLOC_FREE(subreq2);
+               torture_assert_ntstatus_ok(tctx, status, __location__);
+       }
+       tevent_req_poll(subreq1, tctx->ev);
        status = dcerpc_echo_TestBytePipeIn_r_recv(subreq1, tctx);
+       TALLOC_FREE(subreq1);
+       torture_assert_ntstatus_ok(tctx, status, __location__);
 
        return true;
 }
@@ -525,16 +508,16 @@ struct torture_suite *torture_rpc_echo(TALLOC_CTX *mem_ctx)
        tcase = torture_suite_add_rpc_iface_tcase(suite, "echo", 
                                                  &ndr_table_rpcecho);
 
-       torture_rpc_tcase_add_test(tcase, "addone", test_addone);
-       torture_rpc_tcase_add_test(tcase, "sinkdata", test_sinkdata);
-       torture_rpc_tcase_add_test(tcase, "echodata", test_echodata);
-       torture_rpc_tcase_add_test(tcase, "sourcedata", test_sourcedata);
-       torture_rpc_tcase_add_test(tcase, "testcall", test_testcall);
-       torture_rpc_tcase_add_test(tcase, "testcall2", test_testcall2);
-       torture_rpc_tcase_add_test(tcase, "enum", test_enum);
-       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, "addone", test_addone);
+       //torture_rpc_tcase_add_test(tcase, "sinkdata", test_sinkdata);
+       //torture_rpc_tcase_add_test(tcase, "echodata", test_echodata);
+       //torture_rpc_tcase_add_test(tcase, "sourcedata", test_sourcedata);
+       //torture_rpc_tcase_add_test(tcase, "testcall", test_testcall);
+       //torture_rpc_tcase_add_test(tcase, "testcall2", test_testcall2);
+       //torture_rpc_tcase_add_test(tcase, "enum", test_enum);
+       //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);