s3: Add a test excercising the share mode cleanup routine
[vlendec/samba-autobuild/.git] / source3 / torture / test_cleanup.c
1 /*
2    Unix SMB/CIFS implementation.
3    Test cleanup behaviour
4    Copyright (C) Volker Lendecke 2011
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #include "includes.h"
21 #include "torture/proto.h"
22 #include "system/filesys.h"
23 #include "libsmb/libsmb.h"
24 #include "libcli/smb/smbXcli_base.h"
25
26 bool run_cleanup1(int dummy)
27 {
28         struct cli_state *cli;
29         const char *fname = "\\cleanup1";
30         uint16_t fnum;
31         NTSTATUS status;
32
33         printf("Starting cleanup1 test\n");
34
35         if (!torture_open_connection(&cli, 0)) {
36                 return false;
37         }
38         status = cli_openx(cli, fname, O_RDWR|O_CREAT, DENY_ALL, &fnum);
39         if (!NT_STATUS_IS_OK(status)) {
40                 printf("open of %s failed (%s)\n", fname, nt_errstr(status));
41                 return false;
42         }
43         status = smbXcli_conn_samba_suicide(cli->conn, 1);
44         if (!NT_STATUS_IS_OK(status)) {
45                 printf("smbXcli_conn_samba_suicide failed: %s\n",
46                        nt_errstr(status));
47                 return false;
48         }
49
50         if (!torture_open_connection(&cli, 1)) {
51                 return false;
52         }
53         status = cli_openx(cli, fname, O_RDWR|O_CREAT, DENY_ALL, &fnum);
54         if (!NT_STATUS_IS_OK(status)) {
55                 printf("2nd open of %s failed (%s)\n", fname,
56                        nt_errstr(status));
57                 return false;
58         }
59         cli_close(cli, fnum);
60
61         status = cli_unlink(cli, fname, 0);
62         if (!NT_STATUS_IS_OK(status)) {
63                 printf("cli_unlink failed: %s\n", nt_errstr(status));
64                 goto done;
65         }
66 done:
67         torture_close_connection(cli);
68         return NT_STATUS_IS_OK(status);
69 }