2 Unix SMB/CIFS implementation.
3 test suite for atsvc rpc operations
5 Copyright (C) Tim Potter 2003
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.
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.
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/>.
22 #include "librpc/gen_ndr/ndr_atsvc_c.h"
23 #include "torture/rpc/torture_rpc.h"
25 static bool test_JobGetInfo(struct dcerpc_pipe
*p
, struct torture_context
*tctx
, uint32_t job_id
)
27 struct dcerpc_binding_handle
*b
= p
->binding_handle
;
28 struct atsvc_JobGetInfo r
;
29 struct atsvc_JobInfo
*info
= talloc(tctx
, struct atsvc_JobInfo
);
34 r
.in
.servername
= dcerpc_server_name(p
);
36 r
.out
.job_info
= &info
;
38 torture_assert_ntstatus_ok(tctx
, dcerpc_atsvc_JobGetInfo_r(b
, tctx
, &r
),
40 torture_assert_ntstatus_ok(tctx
, r
.out
.result
, "JobGetInfo failed");
45 static bool test_JobDel(struct dcerpc_pipe
*p
, struct torture_context
*tctx
, uint32_t min_job_id
,
48 struct dcerpc_binding_handle
*b
= p
->binding_handle
;
49 struct atsvc_JobDel r
;
51 r
.in
.servername
= dcerpc_server_name(p
);
52 r
.in
.min_job_id
= min_job_id
;
53 r
.in
.max_job_id
= max_job_id
;
55 torture_assert_ntstatus_ok(tctx
, dcerpc_atsvc_JobDel_r(b
, tctx
, &r
),
57 torture_assert_ntstatus_ok(tctx
, r
.out
.result
, "JobDel failed");
62 static bool test_JobEnum(struct torture_context
*tctx
, struct dcerpc_pipe
*p
)
64 struct dcerpc_binding_handle
*b
= p
->binding_handle
;
65 struct atsvc_JobEnum r
;
66 struct atsvc_enum_ctr ctr
;
67 uint32_t resume_handle
= 0, i
, total_entries
= 0;
71 r
.in
.servername
= dcerpc_server_name(p
);
73 ctr
.first_entry
= NULL
;
74 r
.in
.ctr
= r
.out
.ctr
= &ctr
;
75 r
.in
.preferred_max_len
= 0xffffffff;
76 r
.in
.resume_handle
= r
.out
.resume_handle
= &resume_handle
;
77 r
.out
.total_entries
= &total_entries
;
79 torture_assert_ntstatus_ok(tctx
, dcerpc_atsvc_JobEnum_r(b
, tctx
, &r
),
81 torture_assert_ntstatus_ok(tctx
, r
.out
.result
, "JobEnum failed");
83 for (i
= 0; i
< r
.out
.ctr
->entries_read
; i
++) {
84 if (!test_JobGetInfo(p
, tctx
, r
.out
.ctr
->first_entry
[i
].job_id
)) {
92 static bool test_JobAdd(struct torture_context
*tctx
, struct dcerpc_pipe
*p
)
94 struct dcerpc_binding_handle
*b
= p
->binding_handle
;
95 struct atsvc_JobAdd r
;
96 struct atsvc_JobInfo info
;
98 r
.in
.servername
= dcerpc_server_name(p
);
99 info
.job_time
= 0x050ae4c0; /* 11:30pm */
100 info
.days_of_month
= 0; /* n/a */
101 info
.days_of_week
= 0x02; /* Tuesday */
102 info
.flags
= 0x11; /* periodic, non-interactive */
103 info
.command
= "foo.exe";
104 r
.in
.job_info
= &info
;
106 torture_assert_ntstatus_ok(tctx
, dcerpc_atsvc_JobAdd_r(b
, tctx
, &r
),
108 torture_assert_ntstatus_ok(tctx
, r
.out
.result
, "JobAdd failed");
110 /* Run EnumJobs again in case there were no jobs to begin with */
112 if (!test_JobEnum(tctx
, p
)) {
116 if (!test_JobGetInfo(p
, tctx
, *r
.out
.job_id
)) {
120 if (!test_JobDel(p
, tctx
, *r
.out
.job_id
, *r
.out
.job_id
)) {
127 struct torture_suite
*torture_rpc_atsvc(TALLOC_CTX
*mem_ctx
)
129 struct torture_suite
*suite
= torture_suite_create(mem_ctx
, "atsvc");
130 struct torture_rpc_tcase
*tcase
;
132 tcase
= torture_suite_add_rpc_iface_tcase(suite
, "atsvc", &ndr_table_atsvc
);
134 torture_rpc_tcase_add_test(tcase
, "JobEnum", test_JobEnum
);
135 torture_rpc_tcase_add_test(tcase
, "JobAdd", test_JobAdd
);