Merge branch 'v4-0-test' of ssh://git.samba.org/data/git/samba into 4-0-abartlet
[kai/samba.git] / source / 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                                 PI_FOO,
48                                 &ndr_table_foo,
49                                 NDR_BAR,
50                                 &r);
51
52 \tif (!NT_STATUS_IS_OK(status)) {
53 \t\treturn status;
54 \t}
55
56 \tif (DEBUGLEVEL >= 10) {
57 \t\tNDR_PRINT_OUT_DEBUG(bar, &r);
58 \t}
59
60 \tif (NT_STATUS_IS_ERR(status)) {
61 \t\treturn status;
62 \t}
63
64 \t/* Return variables */
65
66 \t/* Return result */
67 \treturn NT_STATUS_OK;
68 }
69
70 ");
71
72 $x = new Parse::Pidl::Samba3::ClientNDR();
73
74 $fn = { NAME => "bar", ELEMENTS => [ ], RETURN_TYPE => "WERROR" };
75 $x->ParseFunction("foo", $fn);
76 is($x->{res}, 
77 "NTSTATUS rpccli_bar(struct rpc_pipe_client *cli,
78                     TALLOC_CTX *mem_ctx,
79                     WERROR *werror)
80 {
81 \tstruct bar r;
82 \tNTSTATUS status;
83
84 \t/* In parameters */
85
86 \tif (DEBUGLEVEL >= 10) {
87 \t\tNDR_PRINT_IN_DEBUG(bar, &r);
88 \t}
89
90         status = cli_do_rpc_ndr(cli,
91                                 mem_ctx,
92                                 PI_FOO,
93                                 &ndr_table_foo,
94                                 NDR_BAR,
95                                 &r);
96
97 \tif (!NT_STATUS_IS_OK(status)) {
98 \t\treturn status;
99 \t}
100
101 \tif (DEBUGLEVEL >= 10) {
102 \t\tNDR_PRINT_OUT_DEBUG(bar, &r);
103 \t}
104
105 \tif (NT_STATUS_IS_ERR(status)) {
106 \t\treturn status;
107 \t}
108
109 \t/* Return variables */
110
111 \t/* Return result */
112 \tif (werror) {
113 \t\t*werror = r.out.result;
114 \t}
115
116 \treturn werror_to_ntstatus(r.out.result);
117 }
118
119 ");
120
121 $x = new Parse::Pidl::Samba3::ClientNDR();
122
123 $fn = { NAME => "bar", ELEMENTS => [ ], RETURN_TYPE => "WERROR" };
124 my $e = { NAME => "foo", ORIGINAL => { FILE => "f", LINE => -1 },
125           LEVELS => [ { TYPE => "ARRAY", SIZE_IS => "mysize" }, { TYPE => "DATA", DATA_TYPE => "int" } ]};
126
127 $x->ParseOutputArgument($fn, $e);
128 is($x->{res}, "memcpy(foo, r.out.foo, mysize * sizeof(*foo));\n");