source: branches/samba-3.5.x/source4/torture/ndr/atsvc.c

Last change on this file was 414, checked in by Herwig Bauernfeind, 16 years ago

Samba 3.5.0: Initial import

File size: 9.9 KB
Line 
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
25static 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
33static 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
46static 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
80static 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
99static 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
109static 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
122static const uint8_t jobadd_out_data[] = {
123 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
124};
125
126static 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
134static 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
141static 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
150static const uint8_t jobdel_out_data[] = {
151 0xde, 0x0e, 0x00, 0x00
152};
153
154static 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
161static 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
168static 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
176static 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
184static 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
196struct 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
Note: See TracBrowser for help on using the repository browser.