Merge branch 'master' of ssh://git.samba.org/data/git/samba
[kai/samba.git] / pidl / tests / samba3-cli.pl
1 #!/usr/bin/perl
2 # (C) 2007 Jelmer Vernooij <jelmer@samba.org>
3 # Published under the GNU General Public License
4 use strict;
5 use warnings;
6
7 use Test::More tests => 9;
8 use FindBin qw($RealBin);
9 use lib "$RealBin";
10 use Util;
11 use Parse::Pidl::Util qw(MyDumper);
12 use Parse::Pidl::Samba3::ClientNDR qw(ParseFunction ParseOutputArgument);
13 use Parse::Pidl::Samba4::Header qw(GenerateFunctionInEnv GenerateFunctionOutEnv);
14
15 # Make sure GenerateFunctionInEnv and GenerateFunctionOutEnv work
16 my $fn = { ELEMENTS => [ { DIRECTION => ["in"], NAME => "foo" } ] };
17 is_deeply({ "foo" => "r.in.foo" }, GenerateFunctionInEnv($fn, "r."));
18 is_deeply({ "foo" => "r.in.foo" }, GenerateFunctionOutEnv($fn, "r."));
19
20 $fn = { ELEMENTS => [ { DIRECTION => ["out", "in"], NAME => "foo" } ] };
21 is_deeply({ "foo" => "r.in.foo" }, GenerateFunctionInEnv($fn, "r."));
22 is_deeply({ "foo" => "r.out.foo" }, GenerateFunctionOutEnv($fn, "r."));
23
24 $fn = { ELEMENTS => [ { DIRECTION => ["out"], NAME => "foo" } ] };
25 is_deeply({ }, GenerateFunctionInEnv($fn, "r."));
26 is_deeply({ "foo" => "r.out.foo" }, GenerateFunctionOutEnv($fn, "r."));
27
28 my $x = new Parse::Pidl::Samba3::ClientNDR();
29
30 $fn = { NAME => "bar", ELEMENTS => [ ] };
31 $x->ParseFunction("foo", $fn);
32 is($x->{res}, 
33 "NTSTATUS rpccli_bar(struct rpc_pipe_client *cli,
34                     TALLOC_CTX *mem_ctx)
35 {
36 \tstruct bar r;
37 \tNTSTATUS status;
38
39 \t/* In parameters */
40
41 \tif (DEBUGLEVEL >= 10) {
42 \t\tNDR_PRINT_IN_DEBUG(bar, &r);
43 \t}
44
45         status = cli_do_rpc_ndr(cli,
46                                 mem_ctx,
47                                 &ndr_table_foo,
48                                 NDR_BAR,
49                                 &r);
50
51 \tif (!NT_STATUS_IS_OK(status)) {
52 \t\treturn status;
53 \t}
54
55 \tif (DEBUGLEVEL >= 10) {
56 \t\tNDR_PRINT_OUT_DEBUG(bar, &r);
57 \t}
58
59 \tif (NT_STATUS_IS_ERR(status)) {
60 \t\treturn status;
61 \t}
62
63 \t/* Return variables */
64
65 \t/* Return result */
66 \treturn NT_STATUS_OK;
67 }
68
69 ");
70
71 $x = new Parse::Pidl::Samba3::ClientNDR();
72
73 $fn = { NAME => "bar", ELEMENTS => [ ], RETURN_TYPE => "WERROR" };
74 $x->ParseFunction("foo", $fn);
75 is($x->{res}, 
76 "NTSTATUS rpccli_bar(struct rpc_pipe_client *cli,
77                     TALLOC_CTX *mem_ctx,
78                     WERROR *werror)
79 {
80 \tstruct bar r;
81 \tNTSTATUS status;
82
83 \t/* In parameters */
84
85 \tif (DEBUGLEVEL >= 10) {
86 \t\tNDR_PRINT_IN_DEBUG(bar, &r);
87 \t}
88
89         status = cli_do_rpc_ndr(cli,
90                                 mem_ctx,
91                                 &ndr_table_foo,
92                                 NDR_BAR,
93                                 &r);
94
95 \tif (!NT_STATUS_IS_OK(status)) {
96 \t\treturn status;
97 \t}
98
99 \tif (DEBUGLEVEL >= 10) {
100 \t\tNDR_PRINT_OUT_DEBUG(bar, &r);
101 \t}
102
103 \tif (NT_STATUS_IS_ERR(status)) {
104 \t\treturn status;
105 \t}
106
107 \t/* Return variables */
108
109 \t/* Return result */
110 \tif (werror) {
111 \t\t*werror = r.out.result;
112 \t}
113
114 \treturn werror_to_ntstatus(r.out.result);
115 }
116
117 ");
118
119 $x = new Parse::Pidl::Samba3::ClientNDR();
120
121 $fn = { NAME => "bar", ELEMENTS => [ ], RETURN_TYPE => "WERROR" };
122 my $e = { NAME => "foo", ORIGINAL => { FILE => "f", LINE => -1 },
123           LEVELS => [ { TYPE => "ARRAY", SIZE_IS => "mysize" }, { TYPE => "DATA", DATA_TYPE => "int" } ]};
124
125 $x->ParseOutputArgument($fn, $e);
126 is($x->{res}, "memcpy(foo, r.out.foo, mysize * sizeof(*foo));\n");