s4:torture:smb2: fix a comment
[nivanova/samba-autobuild/.git] / source4 / torture / smb2 / smb2.c
1 /* 
2    Unix SMB/CIFS implementation.
3    SMB torture tester
4    Copyright (C) Jelmer Vernooij 2006
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 "libcli/smb2/smb2.h"
22
23 #include "torture/smbtorture.h"
24 #include "torture/smb2/proto.h"
25 #include "../lib/util/dlinklist.h"
26
27 static bool wrap_simple_1smb2_test(struct torture_context *torture_ctx,
28                                    struct torture_tcase *tcase,
29                                    struct torture_test *test)
30 {
31         bool (*fn) (struct torture_context *, struct smb2_tree *);
32         bool ret;
33
34         struct smb2_tree *tree1;
35
36         if (!torture_smb2_connection(torture_ctx, &tree1))
37                 return false;
38
39         fn = test->fn;
40
41         ret = fn(torture_ctx, tree1);
42
43         talloc_free(tree1);
44
45         return ret;
46 }
47
48 struct torture_test *torture_suite_add_1smb2_test(struct torture_suite *suite,
49                                                   const char *name,
50                                                   bool (*run)(struct torture_context *,
51                                                               struct smb2_tree *))
52 {
53         struct torture_test *test; 
54         struct torture_tcase *tcase;
55         
56         tcase = torture_suite_add_tcase(suite, name);
57
58         test = talloc(tcase, struct torture_test);
59
60         test->name = talloc_strdup(test, name);
61         test->description = NULL;
62         test->run = wrap_simple_1smb2_test;
63         test->fn = run;
64         test->dangerous = false;
65
66         DLIST_ADD_END(tcase->tests, test, struct torture_test *);
67
68         return test;
69 }
70
71
72 static bool wrap_simple_2smb2_test(struct torture_context *torture_ctx,
73                                    struct torture_tcase *tcase,
74                                    struct torture_test *test)
75 {
76         bool (*fn) (struct torture_context *, struct smb2_tree *, struct smb2_tree *);
77         bool ret = false;
78
79         struct smb2_tree *tree1;
80         struct smb2_tree *tree2;
81         TALLOC_CTX *mem_ctx = talloc_new(torture_ctx);
82
83         if (!torture_smb2_connection(torture_ctx, &tree1)) {
84                 goto done;
85         }
86
87         talloc_steal(mem_ctx, tree1);
88
89         if (!torture_smb2_connection(torture_ctx, &tree2)) {
90                 goto done;
91         }
92
93         talloc_steal(mem_ctx, tree2);
94
95         fn = test->fn;
96
97         ret = fn(torture_ctx, tree1, tree2);
98
99 done:
100         /* the test may already have closed some of the connections */
101         talloc_free(mem_ctx);
102
103         return ret;
104 }
105
106
107 struct torture_test *torture_suite_add_2smb2_test(struct torture_suite *suite,
108                                                   const char *name,
109                                                   bool (*run)(struct torture_context *,
110                                                               struct smb2_tree *,
111                                                               struct smb2_tree *))
112 {
113         struct torture_test *test;
114         struct torture_tcase *tcase;
115
116         tcase = torture_suite_add_tcase(suite, name);
117
118         test = talloc(tcase, struct torture_test);
119
120         test->name = talloc_strdup(test, name);
121         test->description = NULL;
122         test->run = wrap_simple_2smb2_test;
123         test->fn = run;
124         test->dangerous = false;
125
126         DLIST_ADD_END(tcase->tests, test, struct torture_test *);
127
128         return test;
129 }
130
131 NTSTATUS torture_smb2_init(void)
132 {
133         struct torture_suite *suite = torture_suite_create(talloc_autofree_context(), "smb2");
134         torture_suite_add_simple_test(suite, "connect", torture_smb2_connect);
135         torture_suite_add_simple_test(suite, "scan", torture_smb2_scan);
136         torture_suite_add_simple_test(suite, "scangetinfo", torture_smb2_getinfo_scan);
137         torture_suite_add_simple_test(suite, "scansetinfo", torture_smb2_setinfo_scan);
138         torture_suite_add_simple_test(suite, "scanfind", torture_smb2_find_scan);
139         torture_suite_add_simple_test(suite, "getinfo", torture_smb2_getinfo);
140         torture_suite_add_simple_test(suite, "setinfo", torture_smb2_setinfo);
141         torture_suite_add_suite(suite, torture_smb2_lock_init());
142         torture_suite_add_suite(suite, torture_smb2_read_init());
143         torture_suite_add_suite(suite, torture_smb2_create_init());
144         torture_suite_add_suite(suite, torture_smb2_acls_init());
145         torture_suite_add_suite(suite, torture_smb2_notify_init());
146         torture_suite_add_suite(suite, torture_smb2_durable_open_init());
147         torture_suite_add_suite(suite, torture_smb2_dir_init());
148         torture_suite_add_suite(suite, torture_smb2_lease_init());
149         torture_suite_add_suite(suite, torture_smb2_compound_init());
150         torture_suite_add_suite(suite, torture_smb2_oplocks_init());
151         torture_suite_add_suite(suite, torture_smb2_streams_init());
152         torture_suite_add_suite(suite, torture_smb2_ioctl_init());
153         torture_suite_add_1smb2_test(suite, "bench-oplock", test_smb2_bench_oplock);
154         torture_suite_add_1smb2_test(suite, "hold-oplock", test_smb2_hold_oplock);
155
156         suite->description = talloc_strdup(suite, "SMB2-specific tests");
157
158         torture_register_suite(suite);
159
160         return NT_STATUS_OK;
161 }