r7656: added testing of rpc request timeouts and destruction
authorAndrew Tridgell <tridge@samba.org>
Thu, 16 Jun 2005 23:28:24 +0000 (23:28 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:18:18 +0000 (13:18 -0500)
source/torture/rpc/echo.c

index ad09e00294954f58f7f27085d75bb1f3e55fd29f..94400247a62a3b221b910507b0fae96683da2346 100644 (file)
@@ -383,6 +383,67 @@ static BOOL test_doublepointer(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
        return ret;
 }
 
+
+/*
+  test request timeouts
+*/
+static BOOL test_timeout(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
+{
+       NTSTATUS status;
+       struct rpc_request *req;
+       struct echo_TestSleep r;
+       int timeout_saved = p->request_timeout;
+
+       if (!lp_parm_bool(-1, "torture", "echo_TestSleep", True)) {
+               printf("timeout testing disabled - use \"torture:echo_TestSleep=yes\" to enable\n");
+               return True;
+       }
+
+       printf("testing request timeouts\n");
+       r.in.seconds = 2;
+       p->request_timeout = 1;
+
+       req = dcerpc_echo_TestSleep_send(p, mem_ctx, &r);
+       if (!req) {
+               printf("Failed to send async sleep request\n");
+               goto failed;
+       }
+
+       status  = dcerpc_ndr_request_recv(req);
+       if (!NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT)) {
+               printf("request should have timed out - %s\n", nt_errstr(status));
+               goto failed;
+       }
+
+       printf("testing request destruction\n");
+       req = dcerpc_echo_TestSleep_send(p, mem_ctx, &r);
+       if (!req) {
+               printf("Failed to send async sleep request\n");
+               goto failed;
+       }
+       talloc_free(req);
+
+       req = dcerpc_echo_TestSleep_send(p, mem_ctx, &r);
+       if (!req) {
+               printf("Failed to send async sleep request\n");
+               goto failed;
+       }
+       status  = dcerpc_ndr_request_recv(req);
+       if (!NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT)) {
+               printf("request should have timed out - %s\n", nt_errstr(status));
+               goto failed;
+       }
+       
+
+       p->request_timeout = timeout_saved;
+       return True;
+
+failed:
+       p->request_timeout = timeout_saved;
+       return False;
+}
+
+
 BOOL torture_rpc_echo(void)
 {
        NTSTATUS status;
@@ -411,6 +472,7 @@ BOOL torture_rpc_echo(void)
        ret &= test_surrounding(p, mem_ctx);
        ret &= test_doublepointer(p, mem_ctx);
        ret &= test_sleep(p, mem_ctx);
+       ret &= test_timeout(p, mem_ctx);
 
        printf("\n");