r4520: added a enum test function to the echo pipe
authorAndrew Tridgell <tridge@samba.org>
Tue, 4 Jan 2005 23:27:12 +0000 (23:27 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:08:17 +0000 (13:08 -0500)
source/librpc/idl/echo.idl
source/rpc_server/echo/rpc_echo.c
source/torture/rpc/echo.c

index 46a4d89478c9d6d4de5fd5175287e788d3b0a1e0..f2d89605584167866c9325f26545bb9135f02bde 100644 (file)
@@ -92,4 +92,30 @@ interface rpcecho
        uint32 echo_TestSleep(
                [in] uint32 seconds
                );
+
+       typedef enum {
+               ECHO_ENUM1 = 1,
+               ECHO_ENUM2 = 2
+       } echo_Enum1;
+
+       typedef [v1_enum] enum {
+               ECHO_ENUM1_32 = 1,
+               ECHO_ENUM2_32 = 2
+       } echo_Enum1_32;
+
+       typedef struct {
+               echo_Enum1 e1;
+               echo_Enum1_32 e2;
+       } echo_Enum2;
+
+       typedef union {
+               [case(ECHO_ENUM1)] echo_Enum1 e1;
+               [case(ECHO_ENUM2)] echo_Enum2 e2;
+       } echo_Enum3;
+
+       void echo_TestEnum(
+               [in,out,ref] echo_Enum1 *foo1,
+               [in,out,ref] echo_Enum2 *foo2,
+               [in,out,ref,switch_is(*foo1)] echo_Enum3 *foo3
+               );
 }
index f86ae6debf601d22977a270555380f58401f22f9..543bca1073c19ae69b04a6965638ea9b9f15f861 100644 (file)
@@ -107,6 +107,12 @@ static NTSTATUS echo_TestCall2(struct dcesrv_call_state *dce_call, TALLOC_CTX *m
        return NT_STATUS_OK;
 }
 
+static NTSTATUS echo_TestEnum(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct echo_TestEnum *r)
+{
+       r->out.foo2->e1 = ECHO_ENUM2;
+       return NT_STATUS_OK;
+}
+
 static long echo_TestSleep(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct echo_TestSleep *r)
 {
        sleep(r->in.seconds);
index c141d4be9c0c9a962c3068330c9a382ecdac2ea6..5db438afd0b802a3ad2236a63c77c45da7ac0eaa 100644 (file)
@@ -262,6 +262,41 @@ static BOOL test_sleep(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
 }
 #endif
 
+
+/*
+  test enum handling
+*/
+static BOOL test_enum(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
+{
+       NTSTATUS status;
+       struct echo_TestEnum r;
+       BOOL ret = True;
+       enum echo_Enum1 v = ECHO_ENUM1;
+       struct echo_Enum2 e2;
+       union echo_Enum3 e3;
+
+       r.in.foo1 = &v;
+       r.in.foo2 = &e2;
+       r.in.foo3 = &e3;
+       r.out.foo1 = &v;
+       r.out.foo2 = &e2;
+       r.out.foo3 = &e3;
+
+       e2.e1 = 76;
+       e2.e2 = ECHO_ENUM1_32;
+       e3.e1 = ECHO_ENUM2;
+
+       printf("\nTesting TestEnum\n");
+       status = dcerpc_echo_TestEnum(p, mem_ctx, &r);
+       if (!NT_STATUS_IS_OK(status)) {
+               printf("TestEnum failed - %s\n", nt_errstr(status));
+               ret = False;
+       }
+
+       return ret;
+}
+
+
 BOOL torture_rpc_echo(void)
 {
         NTSTATUS status;
@@ -303,6 +338,10 @@ BOOL torture_rpc_echo(void)
                ret = False;
        }
 
+       if (!test_enum(p, mem_ctx)) {
+               ret = False;
+       }
+
 /*
        if (!test_sleep(p, mem_ctx)) {
                ret = False;