r23792: convert Samba4 to GPLv3
[samba.git] / source / torture / ndr / atsvc.c
1 /* 
2    Unix SMB/CIFS implementation.
3    test suite for atsvc ndr operations
4
5    Copyright (C) Jelmer Vernooij 2007
6    
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11    
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16    
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.
19 */
20
21 #include "includes.h"
22 #include "torture/ndr/ndr.h"
23 #include "librpc/gen_ndr/ndr_atsvc.h"
24
25 static const uint8_t jobenum_in_data[] = {
26   0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
27   0x09, 0x00, 0x00, 0x00, 0x57, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x32, 0x00,
28   0x4b, 0x00, 0x44, 0x00, 0x43, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00,
29   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
30   0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
31 };
32
33 static bool jobenum_in_check(struct torture_context *tctx, 
34                                                          struct atsvc_JobEnum *r)
35 {
36         torture_assert(tctx, r->in.servername != NULL, "servername ptr");
37         torture_assert_str_equal(tctx, r->in.servername, "WIN2KDC1", "servername");
38         torture_assert_int_equal(tctx, r->in.ctr->entries_read, 0, "ctr entries read");
39         torture_assert(tctx, r->in.ctr->first_entry == NULL, "ctr entries first_entry");
40         torture_assert_int_equal(tctx, r->in.preferred_max_len, -1, "preferred max len");
41         torture_assert(tctx, r->in.resume_handle != NULL, "resume handle ptr");
42         torture_assert_int_equal(tctx, *r->in.resume_handle, 0, "resume handle");
43         return true;
44 }
45
46 static const uint8_t jobenum_out_data[] = {
47   0x07, 0x00, 0x00, 0x00, 0x28, 0x14, 0x0a, 0x00, 0x07, 0x00, 0x00, 0x00,
48   0x01, 0x00, 0x00, 0x00, 0xc0, 0xe4, 0x0a, 0x05, 0x00, 0x00, 0x00, 0x00,
49   0x02, 0x13, 0x00, 0x00, 0x40, 0x18, 0x0a, 0x00, 0x02, 0x00, 0x00, 0x00,
50   0xc0, 0xe4, 0x0a, 0x05, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00,
51   0x30, 0x18, 0x0a, 0x00, 0x03, 0x00, 0x00, 0x00, 0xc0, 0xe4, 0x0a, 0x05,
52   0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00, 0x20, 0x18, 0x0a, 0x00,
53   0x04, 0x00, 0x00, 0x00, 0xc0, 0xe4, 0x0a, 0x05, 0x00, 0x00, 0x00, 0x00,
54   0x02, 0x13, 0x00, 0x00, 0x10, 0x18, 0x0a, 0x00, 0x05, 0x00, 0x00, 0x00,
55   0xc0, 0xe4, 0x0a, 0x05, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00,
56   0x00, 0x18, 0x0a, 0x00, 0x06, 0x00, 0x00, 0x00, 0xc0, 0xe4, 0x0a, 0x05,
57   0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00, 0xf0, 0x17, 0x0a, 0x00,
58   0x07, 0x00, 0x00, 0x00, 0xc0, 0xe4, 0x0a, 0x05, 0x00, 0x00, 0x00, 0x00,
59   0x02, 0x13, 0x00, 0x00, 0xe0, 0x17, 0x0a, 0x00, 0x08, 0x00, 0x00, 0x00,
60   0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6f, 0x00,
61   0x6f, 0x00, 0x2e, 0x00, 0x65, 0x00, 0x78, 0x00, 0x65, 0x00, 0x00, 0x00,
62   0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
63   0x62, 0x00, 0x61, 0x00, 0x72, 0x00, 0x2e, 0x00, 0x65, 0x00, 0x78, 0x00,
64   0x65, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
65   0x08, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x2e, 0x00,
66   0x65, 0x00, 0x78, 0x00, 0x65, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
67   0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6f, 0x00,
68   0x6f, 0x00, 0x2e, 0x00, 0x65, 0x00, 0x78, 0x00, 0x65, 0x00, 0x00, 0x00,
69   0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
70   0x66, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x2e, 0x00, 0x65, 0x00, 0x78, 0x00,
71   0x65, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
72   0x08, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x2e, 0x00,
73   0x65, 0x00, 0x78, 0x00, 0x65, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
74   0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6f, 0x00,
75   0x6f, 0x00, 0x2e, 0x00, 0x65, 0x00, 0x78, 0x00, 0x65, 0x00, 0x00, 0x00,
76   0x07, 0x00, 0x00, 0x00, 0xac, 0x34, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00,
77   0x00, 0x00, 0x00, 0x00
78 };
79
80 static bool jobenum_out_check(struct torture_context *tctx, 
81                                                          struct atsvc_JobEnum *r)
82 {
83         torture_assert_int_equal(tctx, r->out.ctr->entries_read, 7, "entries read");
84         torture_assert(tctx, r->out.ctr->first_entry != NULL, "first entry");
85         torture_assert_int_equal(tctx, r->out.ctr->first_entry[0].job_id, 1, "job id");
86         torture_assert_int_equal(tctx, r->out.ctr->first_entry[0].job_time, 84600000, "job time");
87         torture_assert_int_equal(tctx, r->out.ctr->first_entry[0].days_of_week, 0x2, "days of week");
88         torture_assert_int_equal(tctx, r->out.ctr->first_entry[0].flags, 0x13, "flags");
89         torture_assert_str_equal(tctx, r->out.ctr->first_entry[0].command, "foo.exe", "command");
90         torture_assert(tctx, r->out.total_entries != NULL, "total entries ptr");
91         torture_assert_int_equal(tctx, *r->out.total_entries, 7, "total entries");
92         torture_assert(tctx, r->out.resume_handle, "resume handle ptr");
93         torture_assert_int_equal(tctx, *r->out.resume_handle, 0, "resume handle");
94         torture_assert_ntstatus_ok(tctx, r->out.result, "return code");
95
96         return true;
97 }
98
99 static const uint8_t jobadd_in_data[] = {
100   0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
101   0x09, 0x00, 0x00, 0x00, 0x57, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x32, 0x00,
102   0x4b, 0x00, 0x44, 0x00, 0x43, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00,
103   0xc0, 0xe4, 0x0a, 0x05, 0x00, 0x00, 0x00, 0x00, 0x02, 0x11, 0x00, 0x00,
104   0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
105   0x08, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x2e, 0x00,
106   0x65, 0x00, 0x78, 0x00, 0x65, 0x00, 0x00, 0x00
107 };
108
109 static bool jobadd_in_check(struct torture_context *tctx, 
110                                                          struct atsvc_JobAdd *r)
111 {
112         torture_assert_str_equal(tctx, r->in.servername, "WIN2KDC1", "servername");
113         torture_assert_int_equal(tctx, r->in.job_info->job_time, 84600000, "time");
114         torture_assert_int_equal(tctx, r->in.job_info->days_of_month, 0, "days of month");
115         torture_assert_int_equal(tctx, r->in.job_info->days_of_week, 0x2, "days of week");
116         torture_assert_int_equal(tctx, r->in.job_info->flags, 17, "flags");
117         torture_assert_str_equal(tctx, r->in.job_info->command, "foo.exe", "command");
118
119         return true;
120 }
121
122 static const uint8_t jobadd_out_data[] = {
123   0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
124 };
125
126 static bool jobadd_out_check(struct torture_context *tctx, 
127                                                          struct atsvc_JobAdd *r)
128 {
129         torture_assert_int_equal(tctx, *r->out.job_id, 14, "job id");
130         torture_assert_ntstatus_ok(tctx, r->out.result, "return code");
131         return true;
132 }
133
134 static const uint8_t jobdel_in_data[] = {
135   0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
136   0x09, 0x00, 0x00, 0x00, 0x57, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x32, 0x00,
137   0x4b, 0x00, 0x44, 0x00, 0x43, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00,
138   0x0e, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00
139 };
140
141 static bool jobdel_in_check(struct torture_context *tctx, 
142                                                          struct atsvc_JobDel *r)
143 {
144         torture_assert_str_equal(tctx, r->in.servername, "WIN2KDC1", "servername");
145         torture_assert_int_equal(tctx, r->in.min_job_id, 14, "min job id");
146         torture_assert_int_equal(tctx, r->in.max_job_id, 14, "max job id");
147         return true;
148 }
149
150 static const uint8_t jobdel_out_data[] = {
151   0xde, 0x0e, 0x00, 0x00
152 };
153
154 static bool jobdel_out_check(struct torture_context *tctx, 
155                                                          struct atsvc_JobDel *r)
156 {
157         /* FIXME: Check for unknown code 0x00000ede */
158         return true;
159 }
160
161 static const uint8_t jobgetinfo_in_data[] = {
162   0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
163   0x09, 0x00, 0x00, 0x00, 0x57, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x32, 0x00,
164   0x4b, 0x00, 0x44, 0x00, 0x43, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00,
165   0x01, 0x00, 0x00, 0x00
166 };
167
168 static bool jobgetinfo_in_check(struct torture_context *tctx, 
169                                                                 struct atsvc_JobGetInfo *r)
170 {
171         torture_assert_str_equal(tctx, r->in.servername, "WIN2KDC1", "servername");
172         torture_assert_int_equal(tctx, r->in.job_id, 1, "job id");
173         return true;
174 }
175
176 static const uint8_t jobgetinfo_out_data[] = {
177   0x88, 0xe2, 0x09, 0x00, 0xc0, 0xe4, 0x0a, 0x05, 0x00, 0x00, 0x00, 0x00,
178   0x02, 0x13, 0x09, 0x00, 0x98, 0xe2, 0x09, 0x00, 0x08, 0x00, 0x00, 0x00,
179   0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x66, 0x00, 0x6f, 0x00,
180   0x6f, 0x00, 0x2e, 0x00, 0x65, 0x00, 0x78, 0x00, 0x65, 0x00, 0x00, 0x00,
181   0x00, 0x00, 0x00, 0x00
182 };
183
184 static bool jobgetinfo_out_check(struct torture_context *tctx, 
185                                                                 struct atsvc_JobGetInfo *r)
186 {
187         torture_assert(tctx, *r->out.job_info != NULL, "job info");
188         torture_assert_int_equal(tctx, (*r->out.job_info)->job_time, 84600000, "time");
189         torture_assert_int_equal(tctx, (*r->out.job_info)->days_of_month, 0, "days of month");
190         torture_assert_int_equal(tctx, (*r->out.job_info)->days_of_week, 0x2, "days of week");
191         torture_assert_int_equal(tctx, (*r->out.job_info)->flags, 0x13, "flags");
192         torture_assert_str_equal(tctx, (*r->out.job_info)->command, "foo.exe", "command");
193         return true;
194 }
195
196 struct torture_suite *ndr_atsvc_suite(TALLOC_CTX *ctx)
197 {
198         struct torture_suite *suite = torture_suite_create(ctx, "atsvc");
199
200         torture_suite_add_ndr_pull_fn_test(suite, atsvc_JobEnum, jobenum_in_data, NDR_IN, jobenum_in_check );
201         torture_suite_add_ndr_pull_fn_test(suite, atsvc_JobEnum, jobenum_out_data, NDR_OUT, jobenum_out_check );
202
203         torture_suite_add_ndr_pull_fn_test(suite, atsvc_JobAdd, jobadd_in_data, NDR_IN, jobadd_in_check );
204         torture_suite_add_ndr_pull_fn_test(suite, atsvc_JobAdd, jobadd_out_data, NDR_OUT, jobadd_out_check );
205
206         torture_suite_add_ndr_pull_fn_test(suite, atsvc_JobDel, jobdel_in_data, NDR_IN, jobdel_in_check );
207         torture_suite_add_ndr_pull_fn_test(suite, atsvc_JobDel, jobdel_out_data, NDR_OUT, jobdel_out_check );
208
209         torture_suite_add_ndr_pull_fn_test(suite, atsvc_JobGetInfo, jobgetinfo_in_data, NDR_IN, jobgetinfo_in_check );
210         torture_suite_add_ndr_pull_fn_test(suite, atsvc_JobGetInfo, jobgetinfo_out_data, NDR_OUT, jobgetinfo_out_check );
211
212         return suite;
213 }
214