• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src/router/samba-3.5.8/source4/torture/rpc/
1/*
2   Unix SMB/CIFS implementation.
3   test suite for initshutdown operations
4
5   Copyright (C) Tim Potter 2003
6   Copyright (C) Jelmer Vernooij 2004-2005
7
8   This program is free software; you can redistribute it and/or modify
9   it under the terms of the GNU General Public License as published by
10   the Free Software Foundation; either version 3 of the License, or
11   (at your option) any later version.
12
13   This program is distributed in the hope that it will be useful,
14   but WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16   GNU General Public License for more details.
17
18   You should have received a copy of the GNU General Public License
19   along with this program.  If not, see <http://www.gnu.org/licenses/>.
20*/
21
22#include "includes.h"
23#include "torture/torture.h"
24#include "librpc/gen_ndr/ndr_initshutdown_c.h"
25#include "torture/rpc/rpc.h"
26
27static void init_lsa_StringLarge(struct lsa_StringLarge *name, const char *s)
28{
29	name->string = s;
30}
31
32
33static bool test_Abort(struct torture_context *tctx,
34					   struct dcerpc_pipe *p)
35{
36	struct initshutdown_Abort r;
37	NTSTATUS status;
38	uint16_t server = 0x0;
39
40	r.in.server = &server;
41
42	status = dcerpc_initshutdown_Abort(p, tctx, &r);
43
44	torture_assert_ntstatus_ok(tctx, status,
45							   "initshutdown_Abort failed");
46
47	torture_assert_werr_ok(tctx, r.out.result, "initshutdown_Abort failed");
48
49	return true;
50}
51
52static bool test_Init(struct torture_context *tctx,
53		      struct dcerpc_pipe *p)
54{
55	struct initshutdown_Init r;
56	NTSTATUS status;
57	uint16_t hostname = 0x0;
58
59	r.in.hostname = &hostname;
60	r.in.message = talloc(tctx, struct lsa_StringLarge);
61	init_lsa_StringLarge(r.in.message, "spottyfood");
62	r.in.force_apps = 1;
63	r.in.timeout = 30;
64	r.in.do_reboot = 1;
65
66	status = dcerpc_initshutdown_Init(p, tctx, &r);
67
68	torture_assert_ntstatus_ok(tctx, status, "initshutdown_Init failed");
69	torture_assert_werr_ok(tctx, r.out.result, "initshutdown_Init failed");
70
71	return test_Abort(tctx, p);
72}
73
74static bool test_InitEx(struct torture_context *tctx,
75						struct dcerpc_pipe *p)
76{
77	struct initshutdown_InitEx r;
78	NTSTATUS status;
79	uint16_t hostname = 0x0;
80
81	r.in.hostname = &hostname;
82	r.in.message = talloc(tctx, struct lsa_StringLarge);
83	init_lsa_StringLarge(r.in.message, "spottyfood");
84	r.in.force_apps = 1;
85	r.in.timeout = 30;
86	r.in.do_reboot = 1;
87	r.in.reason = 0;
88
89	status = dcerpc_initshutdown_InitEx(p, tctx, &r);
90
91	torture_assert_ntstatus_ok(tctx, status, "initshutdown_InitEx failed");
92
93	torture_assert_werr_ok(tctx, r.out.result, "initshutdown_InitEx failed");
94
95	return test_Abort(tctx, p);
96}
97
98
99struct torture_suite *torture_rpc_initshutdown(TALLOC_CTX *mem_ctx)
100{
101	struct torture_suite *suite = torture_suite_create(mem_ctx, "INITSHUTDOWN");
102	struct torture_rpc_tcase *tcase;
103	struct torture_test *test;
104
105	tcase = torture_suite_add_rpc_iface_tcase(suite, "initshutdown",
106						  &ndr_table_initshutdown);
107
108	test = torture_rpc_tcase_add_test(tcase, "Init", test_Init);
109	test->dangerous = true;
110	test = torture_rpc_tcase_add_test(tcase, "InitEx", test_InitEx);
111	test->dangerous = true;
112
113	return suite;
114}
115