struct timeval snd[ASYNC_COUNT];
struct timeval rcv[ASYNC_COUNT];
struct timeval diff[ASYNC_COUNT];
- struct tevent_context *ctx;
int total_done = 0;
struct dcerpc_binding_handle *b = p->binding_handle;
+ enum dcerpc_transport_t transport;
+ uint32_t assoc_group_id;
+ struct dcerpc_pipe *p2 = NULL;
+ NTSTATUS status;
if (torture_setting_bool(tctx, "quick", false)) {
torture_skip(tctx, "TestSleep disabled - use \"torture:quick=no\" to enable\n");
}
torture_comment(tctx, "Testing TestSleep - use \"torture:quick=yes\" to disable\n");
+ transport = dcerpc_binding_get_transport(p->binding);
+ assoc_group_id = dcerpc_binding_get_assoc_group_id(p->binding);
+
+ torture_comment(tctx, "connect echo connection 2 with "
+ "DCERPC_CONCURRENT_MULTIPLEX\n");
+ status = torture_rpc_connection_transport(tctx, &p2,
+ &ndr_table_rpcecho,
+ transport,
+ assoc_group_id,
+ DCERPC_CONCURRENT_MULTIPLEX);
+ torture_assert_ntstatus_ok(tctx, status, "opening echo connection 2");
+ b = p2->binding_handle;
+
for (i=0;i<ASYNC_COUNT;i++) {
done1[i] = false;
done2[i] = false;
tevent_req_set_callback(req[i], test_sleep_done, &done1[i]);
}
- ctx = dcerpc_event_context(p);
while (total_done < ASYNC_COUNT) {
- torture_assert(tctx, tevent_loop_once(ctx) == 0,
+ torture_assert(tctx, tevent_loop_once(tctx->ev) == 0,
"Event context loop failed");
for (i=0;i<ASYNC_COUNT;i++) {
if (done2[i] == false && done1[i] == true) {
return true;
}
+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 echo_BytePipe_chunk chunk;
+ struct echo_BytePipe *in_pipe;
+ struct tevent_req *subreq1;
+ struct tevent_req *subreq2;
+ size_t i;
+ uint8_t bytes[0x8000];
+ NTSTATUS status;
+
+ in_pipe = dcerpc_echo_BytePipe_create(tctx);
+
+ ZERO_STRUCT(r);
+ r.in.num_chunks = 1;
+ r.in.chunk_size = sizeof(bytes);
+ r.in.in_pipe = in_pipe;
+
+ ZERO_STRUCT(chunk);
+
+ subreq1 = dcerpc_echo_TestBytePipeIn_r_send(tctx, tctx->ev, b, &r);
+ for (i=0; i <= r.in.num_chunks; i++) {
+ struct timeval tv = timeval_current_ofs(0, 100);
+
+ memset(bytes, i, sizeof(bytes));
+ chunk.count = r.in.chunk_size;
+ chunk.array = bytes;
+
+ if (i == r.in.num_chunks) {
+ 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;
+}
/*
test request timeouts
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);
#endif