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