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;
}
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);